--- 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]+)\)/;
+ }
+
+}