diff options
Diffstat (limited to 'pkgs/build-support/vm/rpm/rpm-closure.pl')
-rw-r--r-- | pkgs/build-support/vm/rpm/rpm-closure.pl | 62 |
1 files changed, 34 insertions, 28 deletions
diff --git a/pkgs/build-support/vm/rpm/rpm-closure.pl b/pkgs/build-support/vm/rpm/rpm-closure.pl index 94da0a20adc..8f7669d6fef 100644 --- a/pkgs/build-support/vm/rpm/rpm-closure.pl +++ b/pkgs/build-support/vm/rpm/rpm-closure.pl @@ -28,20 +28,20 @@ sub rpmvercmp { my $v2 = $vercmps2[$i]; if($v1 =~ /^[0-9]*$/ && $v2 =~ /^[0-9]*$/) { - if ( int($v1) > int($v2) ) { - return 1; - } - elsif ( int($v1) < int($v2) ) { - return -1; - } - } else { - if ( $v1 gt $v2 ) { - return 1; - } - elsif ( $v1 lt $v2 ) { - return -1; - } - } + if ( int($v1) > int($v2) ) { + return 1; + } + elsif ( int($v1) < int($v2) ) { + return -1; + } + } else { + if ( $v1 gt $v2 ) { + return 1; + } + elsif ( $v1 lt $v2 ) { + return -1; + } + } } if($l1 == $l2) { return 0; @@ -90,19 +90,25 @@ for (my $i = 0; $i < scalar(@packagesFiles); $i++) { } my %provides; -foreach my $pkgName (keys %pkgs) { - print STDERR "looking at $pkgName\n"; +PKG: foreach my $pkgName (keys %pkgs) { + #print STDERR "looking at $pkgName\n"; my $pkg = $pkgs{$pkgName}; - - #print STDERR keys %{$pkg->{format}}, "\n"; - #print STDERR $pkg->{format}->{'rpm:provides'}, "\n"; - + # Skip packages that conflict with a required package. + my $conflicts = $pkg->{format}->{'rpm:conflicts'}->{'rpm:entry'} // []; + foreach my $conflict (@{$conflicts}) { + next if $conflict->{flags} // "" eq "LT" || $conflict->{flags} // "" eq "LE"; + #print STDERR " $pkgName conflicts with $conflict->{name}\n"; + if (grep { $_ eq $conflict->{name} } @toplevelPkgs) { + print STDERR "skipping package $pkgName because it conflicts with a required package\n"; + next PKG; + } + } + my $provides = $pkg->{format}->{'rpm:provides'}->{'rpm:entry'} or die; foreach my $req (@{$provides}) { - #print "$req->{name}\n"; - #print STDERR " provides $req\n"; - #die "multiple provides for $req" if defined $provides{$req}; + #print STDERR " $pkgName provides $req->{name}\n"; + #die "multiple provides for $req->{name}" if defined $provides{$req->{name}}; $provides{$req->{name}} = $pkgName; } @@ -123,9 +129,9 @@ sub closePackage { return if defined $donePkgs{$pkgName}; $donePkgs{$pkgName} = 1; - + print STDERR ">>> $pkgName\n"; - + my $pkg = $pkgs{$pkgName} or die "package $pkgName doesn't exist"; my $requires = $pkg->{format}->{'rpm:requires'}->{'rpm:entry'} || []; @@ -133,14 +139,14 @@ sub closePackage { my @deps = (); foreach my $req (@{$requires}) { next if $req->{name} =~ /^rpmlib\(/; - print STDERR " needs $req->{name}\n"; + #print STDERR " needs $req->{name}\n"; my $provider = $provides{$req->{name}}; if (!defined $provider) { print STDERR " WARNING: no provider for $req->{name}\n"; next; } - print STDERR " satisfied by $provider\n"; - push @deps, $provider; + #print STDERR " satisfied by $provider\n"; + push @deps, $provider; } closePackage($_) foreach @deps; |