X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2FCPANPLUS%2FDist%2FGentoo.pm;h=fdf0b2fc198703fd4939cad10ca3d744f8fecf78;hb=398d2dd71bb4a8a7ca7cb7e792876cb792529f3a;hp=3d2e243b2a20de8a9e163ffce29dbd668774a6af;hpb=490a3ebfbbcc96fa3635b9a83408f26d9bedd4f8;p=perl%2Fmodules%2FCPANPLUS-Dist-Gentoo.git diff --git a/lib/CPANPLUS/Dist/Gentoo.pm b/lib/CPANPLUS/Dist/Gentoo.pm index 3d2e243..fdf0b2f 100644 --- a/lib/CPANPLUS/Dist/Gentoo.pm +++ b/lib/CPANPLUS/Dist/Gentoo.pm @@ -8,6 +8,7 @@ use List::Util qw; use File::Copy (); use File::Path (); use File::Spec; +use POSIX (); use IPC::Cmd (); use Parse::CPAN::Meta (); @@ -26,15 +27,15 @@ CPANPLUS::Dist::Gentoo - CPANPLUS backend generating Gentoo ebuilds. =head1 VERSION -Version 0.10 +Version 0.12 =cut -our $VERSION = '0.10'; +our $VERSION = '0.12'; =head1 SYNOPSIS - # Using default values from your F + # Using default values from your make.conf cpan2dist --format=CPANPLUS::Dist::Gentoo --buildprereq Some::Module # Specifying your own options @@ -47,12 +48,13 @@ our $VERSION = '0.10'; --dist-opts footer="# End" \ Any::Module You::Like -=head1 DESCRPITON +=head1 DESCRIPTION -This module is a CPANPLUS backend that recursively generates Gentoo ebuilds for a given package in the specified overlay (defaults to F), updates the manifest, and even emerges it (together with its dependencies) if the user requires it. +This module is a CPANPLUS backend that recursively generates Gentoo ebuilds for a given package in the default overlay, updates the manifest, and even emerges it (together with its dependencies) if the user requires it. The generated ebuilds are placed into the C category. They favour depending on a C, on C, C or C (in that order) rather than C. +Existing ebuilds will be searched into the main C portage tree and then into the overlays listed in C. =head1 OPTIONS @@ -75,9 +77,9 @@ Defaults to C. C -A string formatted as a space-delimited sequence of paths, that lists the different overlays in which existent ebuilds will be looked for. +The path of the overlay in which the generated ebuilds will be written. -Defaults to the value of C as returned by C (usually F). +Defaults to the first overlay listed in C (as returned by C) or F if this variable is empty. =item * @@ -86,7 +88,7 @@ C The directory where C expects to find the source tarballs. You need write permissions on this directory. -Defaults to the value of C as returned by C (usually F). +Defaults to the value of C (as returned by C) or F if this variable is empty. =item * @@ -94,7 +96,7 @@ C The valid C for the generated ebuilds. -Defaults to the value of C as returned by C. +Defaults to the value of C (as returned by C) or C<'x86'> if this variable is empty. =item * @@ -121,6 +123,7 @@ L itself takes other options, most notably : =item * C<--buildprereq> generates an ebuild for every dependency, even for those that are already up-to-date. +Setting this option is recommended. =item * @@ -128,6 +131,10 @@ C<--force> forcefully regenerates ebuilds even if they already exist. =item * +C<--install> installs the ebuilds after generating them. + +=item * + C<--skiptest> skips tests while building, which speeds up the building process. =item * @@ -169,13 +176,13 @@ If you still have C C<5.8.x>, you can upgrade it by running the following Then, fetch the L tarball : $ cd /tmp - $ wget http://search.cpan.org/CPAN/authors/id/V/VP/VPIT/CPANPLUS-Dist-Gentoo-0.10.tar.gz + $ wget http://search.cpan.org/CPAN/authors/id/V/VP/VPIT/CPANPLUS-Dist-Gentoo-0.12.tar.gz Log in as root and unpack it in e.g. your home directory : # cd - # tar xzf /tmp/CPANPLUS-Dist-Gentoo-0.10.tar.gz - # cd CPANPLUS-Dist-Gentoo-0.10 + # tar xzf /tmp/CPANPLUS-Dist-Gentoo-0.12.tar.gz + # cd CPANPLUS-Dist-Gentoo-0.12 Bootstrap L using the bundled shell script C : @@ -218,6 +225,15 @@ my $format_available; sub format_available { return $format_available if defined $format_available; + unless (IPC::Cmd->can_capture_buffer) { + my $msg = 'IPC::Cmd must be able to capture buffers.'; + unless (do { local $@; eval { require IPC::Run; 1 } }) { + $msg .= ' Try installing IPC::Run (dev-perl/IPC-Run on Gentoo).'; + } + __PACKAGE__->_abort($msg); + return $format_available = 0; + } + for my $prog (qw) { unless (IPC::Cmd::can_run($prog)) { __PACKAGE__->_abort("$prog is required to write ebuilds"); @@ -225,7 +241,7 @@ sub format_available { } } - if (IPC::Cmd->can_capture_buffer) { + { my $buffers; my ($success, $errmsg) = IPC::Cmd::run( command => [ qw ], @@ -254,6 +270,20 @@ sub format_available { $default_keywords = [ 'x86' ] unless defined $default_keywords; $default_distdir = '/usr/portage/distfiles' unless defined $default_distdir; + my $timestamp = CPANPLUS::Dist::Gentoo::Maps::get_portage_timestamp( + $main_portdir + ); + if (defined $timestamp) { + __PACKAGE__->_notify("Portage tree $main_portdir dates back from UNIX timestamp $timestamp"); + } else { + __PACKAGE__->_notify("Unable to get timestamp for portage tree $main_portdir, using gmtime instead"); + $timestamp = POSIX::mktime(gmtime); + } + if ($timestamp < CPANPLUS::Dist::Gentoo::Maps::TIMESTAMP) { + __PACKAGE__->_abort("Portage tree too old (please run emerge --sync and retry)"); + return $format_available = 0; + } + return $format_available = 1; } @@ -346,7 +376,12 @@ sub prepare { $stat->footer($footer); my $overlay = delete $opts{overlay}; - $overlay = (defined $overlay) ? Cwd::abs_path($overlay) : '/usr/local/portage'; + if (defined $overlay) { + $overlay = Cwd::abs_path($overlay); + } else { + $overlay = $overlays->[0]; + $overlay = '/usr/local/portage' unless defined $overlay; + } $stat->overlay($overlay); my $distdir = delete $opts{distdir}; @@ -842,7 +877,7 @@ Gentoo (L). L, L (core modules since 5.9.5), L (since 5.10.1). -L, L (since perl 5), L (5.001), L (5.002), L (5.00405), L (5.007003). +L, L (since perl 5), L (5.001), L (5.002), L (5.00405), L (5.7.3). =head1 SEE ALSO @@ -875,7 +910,7 @@ Kent Fredric, for testing and suggesting improvements. =head1 COPYRIGHT & LICENSE -Copyright 2008,2009,2010 Vincent Pit, all rights reserved. +Copyright 2008,2009,2010,2011,2012 Vincent Pit, all rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.