X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2FCPANPLUS%2FDist%2FGentoo.pm;h=3b37451d4bff10f5a1ab3eb40ed22cfa6453ef45;hb=99578d57a0086c534f0808f3bfc30849fb0511f4;hp=9da4ca102ad4b854eda5172d677545a3910eb780;hpb=1f13b9fecfb0fc4e23b5f94ebdbc983217515b49;p=perl%2Fmodules%2FCPANPLUS-Dist-Gentoo.git diff --git a/lib/CPANPLUS/Dist/Gentoo.pm b/lib/CPANPLUS/Dist/Gentoo.pm index 9da4ca1..3b37451 100644 --- a/lib/CPANPLUS/Dist/Gentoo.pm +++ b/lib/CPANPLUS/Dist/Gentoo.pm @@ -65,19 +65,26 @@ sub format_available { sub init { my ($self) = @_; my $stat = $self->status; + my $conf = $self->parent->parent->configure_object; + $stat->mk_accessors(qw/name version dist desc uri src license deps - eb_name eb_version eb_dir eb_file distdir fetched_arch - keywords do_manifest/); + eb_name eb_version eb_dir eb_file fetched_arch + overlay distdir keywords do_manifest + verbose/); + + $stat->verbose($conf->get_conf('verbose')); return 1; } my %gentooism = ( - 'Digest' => 'digest-base', - 'Locale-Maketext' => 'locale-maketext', - 'Net-Ping' => 'net-ping', - 'PathTools' => 'File-Spec', - 'PodParser' => 'Pod-Parser', + 'Digest' => 'digest-base', + 'Locale-Maketext' => 'locale-maketext', + 'Net-Ping' => 'net-ping', + 'PathTools' => 'File-Spec', + 'PodParser' => 'Pod-Parser', + 'Set-Scalar' => 'set-scalar', + 'Tie-EncryptedHash' => 'tie-encryptedhash', ); sub prepare { @@ -101,6 +108,7 @@ sub prepare { my $overlay = catdir(delete($opts{'overlay'}) || '/usr/local/portage', CATEGORY); + $stat->overlay($overlay); $stat->distdir(delete($opts{'distdir'}) || '/usr/portage/distfiles'); if ($stat->do_manifest && !-w $stat->distdir) { @@ -145,8 +153,10 @@ sub prepare { $stat->license([ qw/Artistic GPL-2/ ]); my $prereqs = $mod->status->prereqs; + $prereqs = { map { ($gentooism{$_} || $_) => $prereqs->{$_} } keys %$prereqs }; my @depends; for my $prereq (sort keys %$prereqs) { + next if $prereq =~ /^perl(?:-|\z)/; my $obj = $int->module_tree($prereq); unless ($obj) { error 'Wrong module object -- aborting'; @@ -234,8 +244,7 @@ sub create { } msg 'Adding Manifest entry for ' . $stat->dist; - unless (scalar run command => [ 'ebuild', $file, 'manifest' ], verbose => 0) { - error 'ebuild manifest failed -- aborting'; + unless ($self->_run([ 'ebuild', $file, 'manifest' ], 0)) { 1 while unlink $file; return 0; } @@ -253,12 +262,7 @@ sub install { my @cmd = ('emerge', '=' . $stat->eb_name . '-' . $stat->eb_version); unshift @cmd, $sudo if $sudo; - unless (run command => \@cmd, verbose => 1) { - error 'emerge failed -- aborting'; - return 0; - } - - return 1; + return $self->_run(\@cmd, 1); } sub uninstall { @@ -270,12 +274,29 @@ sub uninstall { my @cmd = ('emerge', '-C', '=' . $stat->eb_name . '-' . $stat->eb_version); unshift @cmd, $sudo if $sudo; - unless (run command => \@cmd, verbose => 1) { - error 'emerge -C failed -- aborting'; - return 0; + return $self->_run(\@cmd, 1); +} + +sub _run { + my ($self, $cmd, $verbose) = @_; + my $stat = $self->status; + + my ($success, $errmsg, $output) = do { + local $ENV{PORTDIR_OVERLAY} = $stat->overlay; + local $ENV{PORTAGE_RO_DISTDIRS} = $stat->distdir; + run command => $cmd, verbose => $verbose; + }; + + unless ($success) { + error "$errmsg -- aborting"; + if (not $verbose and defined $output and $self->status->verbose) { + my $msg = join '', @$output; + 1 while chomp $msg; + error $msg; + } } - return 1; + return $success; } =head1 DEPENDENCIES @@ -296,6 +317,8 @@ L, L, L. Vincent Pit, C<< >>, L. +You can contact me by mail or on C (vincent). + =head1 BUGS Please report any bugs or feature requests to C, or through the web interface at L. I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.