You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
2.4 KiB
104 lines
2.4 KiB
--- rpm-4.11.3/scripts/perl.req.old 2019-01-02 13:14:10.258068525 +0100 |
|
+++ rpm-4.11.3/scripts/perl.req 2019-02-28 11:00:57.200220227 +0100 |
|
@@ -42,18 +42,29 @@ |
|
$HAVE_VERSION = 0; |
|
eval { require version; $HAVE_VERSION = 1; }; |
|
|
|
+use File::Basename; |
|
+my $dir = dirname($0); |
|
+$HAVE_PROV = 0; |
|
+if ( -e "$dir/perl.prov" ) { |
|
+ $HAVE_PROV = 1; |
|
+ $prov_script = "$dir/perl.prov"; |
|
+} |
|
|
|
if ("@ARGV") { |
|
- foreach (@ARGV) { |
|
- process_file($_); |
|
+ foreach my $file (@ARGV) { |
|
+ process_file($file); |
|
+ process_file_provides($file); |
|
+ compute_global_requires(); |
|
} |
|
} else { |
|
|
|
# notice we are passed a list of filenames NOT as common in unix the |
|
# contents of the file. |
|
|
|
- foreach (<>) { |
|
- process_file($_); |
|
+ foreach my $file (<>) { |
|
+ process_file($file); |
|
+ process_file_provides($file); |
|
+ compute_global_requires(); |
|
} |
|
} |
|
|
|
@@ -61,8 +72,9 @@ |
|
foreach $perlver (sort keys %perlreq) { |
|
print "perl >= $perlver\n"; |
|
} |
|
-foreach $module (sort keys %require) { |
|
- if (length($require{$module}) == 0) { |
|
+ |
|
+foreach my $module (sort keys %global_require) { |
|
+ if (length($global_require{$module}) == 0) { |
|
print "perl($module)\n"; |
|
} else { |
|
|
|
@@ -70,13 +82,35 @@ |
|
# operators. Also I will need to change the processing of the |
|
# $RPM_* variable when I upgrade. |
|
|
|
- print "perl($module) >= $require{$module}\n"; |
|
+ print "perl($module) >= $global_require{$module}\n"; |
|
} |
|
} |
|
|
|
exit 0; |
|
|
|
- |
|
+sub compute_global_requires { |
|
+ |
|
+# restrict require to all non provided by the file |
|
+ foreach my $moduler (sort keys %require) { |
|
+ if (exists $provide{$moduler} && length($require{$moduler}) == 0) { |
|
+ $require = delete $require{$moduler}; |
|
+ } |
|
+ } |
|
+# store requires to global_requires |
|
+ foreach my $module (sort keys %require) { |
|
+ my $oldver = $global_require{$module}; |
|
+ my $newver = $require{$module}; |
|
+ if ($oldver) { |
|
+ $global_require{$module} = $newver |
|
+ if ($HAVE_VERSION && $newver && version->new($oldver) < $newver); |
|
+ } else { |
|
+ $global_require{$module} = $newver; |
|
+ } |
|
+ } |
|
+# remove all local requires and provides |
|
+ undef %require; |
|
+ undef %provide; |
|
+} |
|
|
|
sub add_require { |
|
my ($module, $newver) = @_; |
|
@@ -328,3 +362,17 @@ |
|
|
|
return; |
|
} |
|
+ |
|
+sub process_file_provides { |
|
+ |
|
+ my ($file) = @_; |
|
+ chomp $file; |
|
+ |
|
+ return if (! $HAVE_PROV); |
|
+ |
|
+ my @result = readpipe( "$prov_script $file" ); |
|
+ foreach my $prov (@result) { |
|
+ $provide{$1} = undef if $prov =~ /perl\(([_:a-zA-Z0-9]+)\)/; |
|
+ } |
|
+ |
|
+}
|
|
|