summary refs log tree commit diff
path: root/pkgs/build-support/vm
diff options
context:
space:
mode:
authorEelco Dolstra <eelco.dolstra@logicblox.com>2015-02-12 17:41:58 +0100
committerEelco Dolstra <eelco.dolstra@logicblox.com>2015-02-12 17:55:29 +0100
commitfa47d347a4b159a677f773997640b3defe20c125 (patch)
tree2722e8bbad435c02b3763bd7cc976e23d1e1f97c /pkgs/build-support/vm
parentff37dc6fb68746d3ca9c1271e158c119989011db (diff)
downloadnixlib-fa47d347a4b159a677f773997640b3defe20c125.tar
nixlib-fa47d347a4b159a677f773997640b3defe20c125.tar.gz
nixlib-fa47d347a4b159a677f773997640b3defe20c125.tar.bz2
nixlib-fa47d347a4b159a677f773997640b3defe20c125.tar.lz
nixlib-fa47d347a4b159a677f773997640b3defe20c125.tar.xz
nixlib-fa47d347a4b159a677f773997640b3defe20c125.tar.zst
nixlib-fa47d347a4b159a677f773997640b3defe20c125.zip
Fix conflict between fedora-release and generic-release
http://hydra.nixos.org/build/19594340
Diffstat (limited to 'pkgs/build-support/vm')
-rw-r--r--pkgs/build-support/vm/rpm/rpm-closure.pl24
1 files changed, 15 insertions, 9 deletions
diff --git a/pkgs/build-support/vm/rpm/rpm-closure.pl b/pkgs/build-support/vm/rpm/rpm-closure.pl
index 841f272270ad..8f7669d6fef8 100644
--- a/pkgs/build-support/vm/rpm/rpm-closure.pl
+++ b/pkgs/build-support/vm/rpm/rpm-closure.pl
@@ -90,19 +90,25 @@ for (my $i = 0; $i < scalar(@packagesFiles); $i++) {
 }
 
 my %provides;
-foreach my $pkgName (keys %pkgs) {
+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;
     }
 
@@ -133,13 +139,13 @@ 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";
+        #print STDERR "    satisfied by $provider\n";
         push @deps, $provider;
     }