]> git.vpit.fr Git - perl/modules/CPANPLUS-Dist-Gentoo.git/blobdiff - lib/CPANPLUS/Dist/Gentoo.pm
Generate ebuild for the current dist before recursing
[perl/modules/CPANPLUS-Dist-Gentoo.git] / lib / CPANPLUS / Dist / Gentoo.pm
index e71c0410e1c3873c71348e06fad5daceffabbc03..67428ed265a4e71135a40bf0948bb82eb01e302e 100644 (file)
@@ -21,11 +21,11 @@ CPANPLUS::Dist::Gentoo - CPANPLUS backend generating Gentoo ebuilds.
 
 =head1 VERSION
 
-Version 0.04
+Version 0.05
 
 =cut
 
-our $VERSION = '0.04';
+our $VERSION = '0.05';
 
 =head1 SYNOPSIS
 
@@ -61,6 +61,8 @@ my $default_keywords;
 my $default_distdir;
 my $main_portdir;
 
+my %forced;
+
 sub _unquote {
  my $s = shift;
  $s =~ s/^["']*//;
@@ -68,11 +70,15 @@ sub _unquote {
  return $s;
 }
 
+my $format_available;
+
 sub format_available {
+ return $format_available if defined $format_available;
+
  for my $prog (qw/emerge ebuild/) {
   unless (can_run($prog)) {
    error "$prog is required to write ebuilds -- aborting";
-   return 0;
+   return $format_available = 0;
   }
  }
 
@@ -102,7 +108,7 @@ sub format_available {
  $default_keywords = [ 'x86' ] unless defined $default_keywords;
  $default_distdir  = '/usr/portage/distfiles' unless defined $default_distdir;
 
- return 1;
+ return $format_available = 1;
 }
 
 sub init {
@@ -294,9 +300,10 @@ sub prepare {
 
  if (-e $file) {
   my $skip = 1;
-  if ($stat->force) {
+  if ($stat->force and not $forced{$file}) {
    if (-w $file) {
     1 while unlink $file;
+    $forced{$file} = 1;
     $skip = 0;
    } else {
     error "Can't force rewriting of $file -- skipping";
@@ -376,14 +383,6 @@ sub create {
   return 1;
  }
 
- $stat->created(0);
- $stat->dist(undef);
-
- $self->SUPER::create(@_);
-
- $stat->created(0);
- $stat->dist(undef);
-
  my $dir = $stat->eb_dir;
  unless (-d $dir) {
   eval { mkpath $dir };
@@ -393,6 +392,8 @@ sub create {
   }
  }
 
+ my %seen;
+
  my $d = $stat->header;
  $d   .= "# Generated by CPANPLUS::Dist::Gentoo version $VERSION\n\n";
  $d   .= 'MODULE_AUTHOR="' . $stat->author . "\"\ninherit perl-module\n\n";
@@ -404,8 +405,8 @@ sub create {
  $d   .= 'LICENSE="|| ( ' . join(' ', sort @{$stat->license}) . " )\"\n";
  $d   .= 'KEYWORDS="' . join(' ', sort @{$stat->keywords}) . "\"\n";
  $d   .= 'DEPEND="' . join("\n",
-  'dev-lang/perl',
-  map $self->_cpan2portage(@$_), @{$stat->deps}
+  sort grep !$seen{$_}++, 'dev-lang/perl',
+                          map $self->_cpan2portage(@$_), @{$stat->deps}
  ) . "\"\n";
  $d   .= "SRC_TEST=\"do\"\n";
  $d   .= $stat->footer;
@@ -418,6 +419,14 @@ sub create {
  print $eb $d;
  close $eb;
 
+ $stat->created(0);
+ $stat->dist(undef);
+
+ $self->SUPER::create(@_);
+
+ $stat->created(0);
+ $stat->dist(undef);
+
  if ($stat->do_manifest) {
   unless (copy $stat->fetched_arch, $stat->distdir) {
    error "Couldn\'t copy the distribution file to distdir ($!) -- aborting";