+ my $file = $stat->ebuild_file;
+ open my $eb, '>', $file or return $FAIL->("open($file): $!");
+ print $eb $self->ebuild_source;
+ close $eb;
+
+ $stat->created(0);
+ $stat->dist(undef);
+
+ $self->SUPER::create(@_);
+
+ if ($stat->do_manifest and not $self->update_manifest) {
+ 1 while unlink $file;
+ return $FAIL->();
+ }
+
+ return $OK->();
+}
+
+=head2 C<update_manifest>
+
+Updates the F<Manifest> file for the ebuild associated to the current dist object.
+
+=cut
+
+sub update_manifest {
+ my $self = shift;
+ my $stat = $self->status;
+
+ my $file = $stat->ebuild_file;
+ unless ($file and -e $file) {
+ return $self->_abort('The ebuild file is invalid or does not exist');
+ }
+
+ unless (File::Copy::copy($stat->fetched_arch => $stat->distdir)) {
+ return $self->_abort("Couldn\'t copy the distribution file to distdir ($!)");
+ }
+
+ $self->_notify('Adding Manifest entry for', $stat->distribution);
+
+ return $self->_run([ 'ebuild', $stat->ebuild_file, 'manifest' ], 0);
+}
+
+=head2 C<ebuild_source>
+
+Returns the source of the ebuild for the current dist object.
+
+=cut
+
+sub ebuild_source {
+ my $self = shift;
+ my $stat = $self->status;
+
+ # 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 @deps = do {
+ my %seen;
+ sort grep !$seen{$_}++, 'dev-lang/perl',
+ map $self->_cpan2portage(@$_), @{$stat->deps}
+ };