X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2FCPANPLUS%2FDist%2FGentoo.pm;h=a1fe7b6ce5b1425cb6eb01c835be9b258c51bcd7;hb=8059d98e61fddbdcfed701f6f63e4f309d6826f8;hp=0003b36992ae0dff913006b9419cf720fdae86cb;hpb=77110d525f6b966b8f87c11669f177127e6930d9;p=perl%2Fmodules%2FCPANPLUS-Dist-Gentoo.git diff --git a/lib/CPANPLUS/Dist/Gentoo.pm b/lib/CPANPLUS/Dist/Gentoo.pm index 0003b36..a1fe7b6 100644 --- a/lib/CPANPLUS/Dist/Gentoo.pm +++ b/lib/CPANPLUS/Dist/Gentoo.pm @@ -195,7 +195,7 @@ sub init { $stat->mk_accessors(qw/name version author distribution desc uri src license meta min_perl - fetched_arch requires + fetched_arch requires configure_requires ebuild_name ebuild_version ebuild_dir ebuild_file portdir_overlay overlay distdir keywords do_manifest header footer @@ -207,6 +207,25 @@ sub init { return 1; } +my $filter_prereqs = sub { + my ($int, $prereqs) = @_; + + my @requires; + for my $prereq (sort keys %$prereqs) { + next if $prereq =~ /^perl(?:-|\z)/; + + my $obj = $int->module_tree($prereq); + next unless $obj; # Not in the module tree (e.g. Config) + next if $obj->package_is_perl_core; + + my $version = $prereqs->{$prereq} || undef; + + push @requires, [ $obj->package_name, $version ]; + } + + return \@requires; +}; + sub prepare { my $self = shift; my $mod = $self->parent; @@ -289,7 +308,7 @@ sub prepare { $stat->distribution($name . '-' . $version); - $stat->ebuild_version(CPANPLUS::Dist::Gentoo::Maps::version_c2g($version)); + $stat->ebuild_version(CPANPLUS::Dist::Gentoo::Maps::version_c2g($name, $version)); $stat->ebuild_name(CPANPLUS::Dist::Gentoo::Maps::name_c2g($name)); @@ -333,7 +352,10 @@ sub prepare { return $FAIL->() unless $stat->prepared; my $desc = $mod->description; - ($desc = $name) =~ s/-+/::/g unless $desc; + $desc = $mod->comment unless $desc; + $desc = "$name Perl distribution (provides " . $mod->module . ')' + unless $desc; + $desc = substr($desc, 0, 77) . '...' if length $desc > 80; $stat->desc($desc); $stat->uri('http://search.cpan.org/dist/' . $name); @@ -343,29 +365,13 @@ sub prepare { $stat->license($self->intuit_license); - my $prereqs = $mod->status->requires; - my @requires; - for my $prereq (sort keys %$prereqs) { - next if $prereq =~ /^perl(?:-|\z)/; - my $obj = $int->module_tree($prereq); - next unless $obj; # Not in the module tree (e.g. Config) - next if $obj->package_is_perl_core; - { - my $version; - if ($prereqs->{$prereq}) { - if ($obj->installed_version && $obj->installed_version < $obj->version) { - $version = $obj->installed_version; - } else { - $version = $obj->package_version; - } - } - push @requires, [ $obj->package_name, $version ]; - } - } - $stat->requires(\@requires); + my $mstat = $mod->status; + $stat->configure_requires($int->$filter_prereqs($mstat->configure_requires)); + $stat->requires($int->$filter_prereqs($mstat->requires)); + my $meta = $self->meta; $stat->min_perl(CPANPLUS::Dist::Gentoo::Maps::perl_version_c2g( - eval { $self->meta->{requires}->{perl} } + $meta->{requires}->{perl}, )); return $OK->(); @@ -391,6 +397,7 @@ sub meta { my $meta_file = File::Spec->catdir($extract_dir, $name); next unless -e $meta_file; + local $@; my $meta = eval { Parse::CPAN::Meta::LoadFile($meta_file) }; if (defined $meta) { $stat->meta($meta); @@ -426,7 +433,8 @@ sub intuit_license { return \@licenses if @licenses; } - my $license = $self->meta->{license}; + my $meta = $self->meta; + my $license = $meta->{license}; if (defined $license) { my @licenses = CPANPLUS::Dist::Gentoo::Maps::license_c2g($license); return \@licenses if @licenses; @@ -553,26 +561,37 @@ sub ebuild_source { # We must resolve the deps now and not inside prepare because _cpan2portage # has to see the ebuilds already generated for the dependencies of the current # dist. - my @requires; - for (@{$stat->requires}) { - my $atom = $self->_cpan2portage(@$_); - unless (defined $atom) { - $self->_abort( - "Couldn't find an appropriate ebuild for $_->[0] in the portage tree" - ); - return; - } - push @requires, $atom; - } - my $min_perl = $stat->min_perl; - my $perl = CPANPLUS::Dist::Gentoo::Atom->new( + my (@configure_requires, @requires); + + my @phases = ( + [ configure_requires => \@configure_requires ], + [ requires => \@requires ], + ); + + push @requires, CPANPLUS::Dist::Gentoo::Atom->new( category => 'dev-lang', name => 'perl', - (defined $min_perl ? (version => $min_perl, range => '>=') : ()), + version => $stat->min_perl, ); - @requires = CPANPLUS::Dist::Gentoo::Atom->fold($perl, @requires); + for (@phases) { + my ($phase, $list) = @$_; + + for (@{ $stat->$phase }) { + my $atom = $self->_cpan2portage(@$_); + unless (defined $atom) { + $self->_abort( + "Couldn't find an appropriate ebuild for $_->[0] in the portage tree" + ); + return; + } + + push @$list, $atom; + } + + @$list = CPANPLUS::Dist::Gentoo::Atom->fold(@$list); + } my $d = $stat->header; $d .= "# Generated by CPANPLUS::Dist::Gentoo version $VERSION\n\n"; @@ -585,7 +604,7 @@ sub ebuild_source { $d .= 'LICENSE="|| ( ' . join(' ', sort @{$stat->license}) . " )\"\n"; $d .= 'KEYWORDS="' . join(' ', sort @{$stat->keywords}) . "\"\n"; $d .= 'RDEPEND="' . join("\n", sort @requires) . "\"\n"; - $d .= "DEPEND=\"\${RDEPEND}\"\n"; + $d .= 'DEPEND="' . join("\n", '${RDEPEND}', sort @configure_requires) . "\"\n"; $d .= "SRC_TEST=\"do\"\n"; $d .= $stat->footer; @@ -593,10 +612,10 @@ sub ebuild_source { } sub _cpan2portage { - my ($self, $name, $version) = @_; + my ($self, $dist_name, $dist_version) = @_; - $name = CPANPLUS::Dist::Gentoo::Maps::name_c2g($name); - $version = CPANPLUS::Dist::Gentoo::Maps::version_c2g($version); + my $name = CPANPLUS::Dist::Gentoo::Maps::name_c2g($dist_name); + my $version = CPANPLUS::Dist::Gentoo::Maps::version_c2g($dist_name, $dist_version); my @portdirs = ($main_portdir, @{$self->status->portdir_overlay}); @@ -619,7 +638,7 @@ sub _cpan2portage { return CPANPLUS::Dist::Gentoo::Atom->new( category => $last->category, name => $last->name, - (defined $version ? (version => $version, range => '>=') : ()), + version => $version, ebuild => $last->ebuild, ); }