From b8f47a77f5dca3fcd4acbb822dd4824b582341bf Mon Sep 17 00:00:00 2001 From: =?utf8?q?Ville=20Skytt=C3=A4?= Date: Thu, 25 Feb 2010 19:51:25 +0200 Subject: [PATCH] Emit highest versions of perl module deps, not first versioned ones found. 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 | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/scripts/perl.req b/scripts/perl.req index 0d543b7..ab21b08 100755 --- a/scripts/perl.req +++ b/scripts/perl.req @@ -39,6 +39,10 @@ # 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); } } -- 2.7.4