From fa47d347a4b159a677f773997640b3defe20c125 Mon Sep 17 00:00:00 2001 From: Eelco Dolstra Date: Thu, 12 Feb 2015 17:41:58 +0100 Subject: [PATCH] Fix conflict between fedora-release and generic-release http://hydra.nixos.org/build/19594340 --- pkgs/build-support/vm/rpm/rpm-closure.pl | 24 +++++++++++++++--------- 1 file 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; }