+}
+
+sub ebuild_source {
+ my $self = shift;
+ my $stat = $self->status;
+
+ {
+ my $name = $stat->name;
+ my %recursive_kids = map { $_ => 1 }
+ grep $dep_tree_contains->($_, $name),
+ @{ $dependencies{$name} };
+ if (%recursive_kids) {
+ my (@requires, @recursive_requires);
+ for (@{ $stat->requires }) {
+ if ($recursive_kids{$_->[0]}) {
+ push @recursive_requires, $_;
+ } else {
+ push @requires, $_;
+ }
+ }
+ $stat->requires(\@requires);
+ $stat->recursive_requires(\@recursive_requires);
+ }
+ }
+
+ # 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 (@configure_requires, @requires, @recursive_requires);
+
+ my @phases = (
+ [ configure_requires => \@configure_requires ],
+ [ requires => \@requires ],
+ [ recursive_requires => \@recursive_requires ],
+ );
+
+ push @requires, CPANPLUS::Dist::Gentoo::Atom->new(
+ category => 'dev-lang',
+ name => 'perl',
+ version => $stat->min_perl,
+ );
+
+ 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);
+ }