Emit highest versions of perl module deps, not first versioned ones found.
authorVille Skyttä <ville.skytta@iki.fi>
Thu, 25 Feb 2010 17:51:25 +0000 (19:51 +0200)
committerPanu Matilainen <pmatilai@redhat.com>
Mon, 1 Mar 2010 09:52:50 +0000 (11:52 +0200)
Requires the "version" module installed (perl >= 5.9 or separately), falls
back to the previous "output first versioned one found" behavior if it is
not available.

scripts/perl.req

index 0d543b7..ab21b08 100755 (executable)
 
 # by Ken Estes Mail.com kestes@staff.mail.com
 
+$HAVE_VERSION = 0;
+eval { require version; $HAVE_VERSION = 1; };
+
+
 if ("@ARGV") {
   foreach (@ARGV) {
     process_file($_);
@@ -74,6 +78,18 @@ exit 0;
 
 
 
+sub add_require {
+  my ($module, $newver) = @_;
+  my $oldver = $require{$module};
+  if ($oldver) {
+    $require{$module} = $newver
+      if ($HAVE_VERSION && $newver && version->new($oldver) < $newver);
+  }
+  else {
+    $require{$module} = $newver;
+  }
+}
+
 sub process_file {
 
   my ($file) = @_;
@@ -247,18 +263,18 @@ sub process_file {
 
       # use base qw(Foo) dependencies
       if ($statement eq "use" && $module eq "base") {
-        $require{$module} ||= undef;
+        add_require($module, undef);
         if ($version =~ /^qw\s*[(\/]\s*([^)\/]+?)\s*[)\/]/) {
-          $require{$_} ||= undef for split(' ', $1);
+          add_require($_, undef) for split(' ', $1);
         }
         elsif ($version =~ /(["'])([^"']+)\1/) {
-          $require{$2} ||= undef;
+          add_require($2, undef);
         }
         next;
       }
       $version = undef unless $version =~ /^$modver_re$/o;
 
-      $require{$module} ||= $version;
+      add_require($module, $version);
     }
 
   }