diff options
author | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2008-04-11 11:52:40 +0000 |
---|---|---|
committer | Eelco Dolstra <eelco.dolstra@logicblox.com> | 2008-04-11 11:52:40 +0000 |
commit | 75222355dbfd52dc81947f359cbbdb29cf3374a1 (patch) | |
tree | 3f7480638ea69cfbf56eff4470b2915aa6e3cb7f /pkgs/build-support/vm/rpm | |
parent | 1cf96f65bf187196c5f90b1138e8fbc2d3a19f3d (diff) | |
download | nixpkgs-75222355dbfd52dc81947f359cbbdb29cf3374a1.tar nixpkgs-75222355dbfd52dc81947f359cbbdb29cf3374a1.tar.gz nixpkgs-75222355dbfd52dc81947f359cbbdb29cf3374a1.tar.bz2 nixpkgs-75222355dbfd52dc81947f359cbbdb29cf3374a1.tar.lz nixpkgs-75222355dbfd52dc81947f359cbbdb29cf3374a1.tar.xz nixpkgs-75222355dbfd52dc81947f359cbbdb29cf3374a1.tar.zst nixpkgs-75222355dbfd52dc81947f359cbbdb29cf3374a1.zip |
* Image generation for openSUSE 10.3.
svn path=/nixpkgs/trunk/; revision=11570
Diffstat (limited to 'pkgs/build-support/vm/rpm')
-rw-r--r-- | pkgs/build-support/vm/rpm/rpm-closure.pl | 61 |
1 files changed, 42 insertions, 19 deletions
diff --git a/pkgs/build-support/vm/rpm/rpm-closure.pl b/pkgs/build-support/vm/rpm/rpm-closure.pl index 2878e90a1f2..a29745d9283 100644 --- a/pkgs/build-support/vm/rpm/rpm-closure.pl +++ b/pkgs/build-support/vm/rpm/rpm-closure.pl @@ -5,25 +5,48 @@ my $packagesFile = shift @ARGV; my $urlPrefix = shift @ARGV; my @toplevelPkgs = @ARGV; -my $xml = XMLin($packagesFile, ForceArray => ['package', 'rpm:entry', 'file'], KeyAttr => ['name']) or die; -my $pkgs = $xml->{'package'}; +my @archs = split ' ', ($ENV{'archs'} or ""); + +print STDERR "parsing packages...\n"; + +my $xml = XMLin($packagesFile, ForceArray => ['package', 'rpm:entry', 'file'], KeyAttr => []) or die; print STDERR "file contains $xml->{packages} packages\n"; +my %pkgs; +foreach my $pkg (@{$xml->{'package'}}) { + if (scalar @archs > 0) { + my $arch = $pkg->{arch}; + my $found = 0; + foreach my $a (@archs) { $found = 1 if $arch eq $a; } + next if !$found; + } + if (defined $pkgs{$pkg->{name}}) { + print STDERR "WARNING: duplicate occurrence of package $pkg->{name}\n"; + next; + } + $pkgs{$pkg->{name}} = $pkg; +} + + my %provides; -foreach my $pkgName (keys %{$pkgs}) { +foreach my $pkgName (keys %pkgs) { print STDERR "looking at $pkgName\n"; - my $pkg = $pkgs->{$pkgName}; - print STDERR keys %{$pkg->{format}->{'rpm:provides'}}, "\n"; - if (defined $pkg->{format}->{'rpm:provides'}) { - my $provides = $pkg->{format}->{'rpm:provides'}->{'rpm:entry'}; - foreach my $req (keys %{$provides}) { - #print STDERR " provides $req\n"; - #die "multiple provides for $req" if defined $provides{$req}; - $provides{$req} = $pkgName; - } + my $pkg = $pkgs{$pkgName}; + + #print STDERR keys %{$pkg->{format}}, "\n"; + + #print STDERR $pkg->{format}->{'rpm:provides'}, "\n"; + + 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}; + $provides{$req->{name}} = $pkgName; } + if (defined $pkg->{format}->{file}) { foreach my $file (@{$pkg->{format}->{file}}) { #print STDERR " provides file $file\n"; @@ -44,17 +67,17 @@ sub closePackage { print STDERR ">>> $pkgName\n"; - my $pkg = $pkgs->{$pkgName} or die "package $pkgName doesn't exist"; + my $pkg = $pkgs{$pkgName} or die "package $pkgName doesn't exist"; my $requires = $pkg->{format}->{'rpm:requires'}->{'rpm:entry'} or die; my @deps = (); - foreach my $req (keys %{$requires}) { - next if $req =~ /^rpmlib\(/; - print STDERR " needs $req\n"; - my $provider = $provides{$req}; + foreach my $req (@{$requires}) { + next if $req->{name} =~ /^rpmlib\(/; + print STDERR " needs $req->{name}\n"; + my $provider = $provides{$req->{name}}; if (!defined $provider) { - print STDERR " WARNING: no provider for $req\n"; + print STDERR " WARNING: no provider for $req->{name}\n"; next; } print STDERR " satisfied by $provider\n"; @@ -79,7 +102,7 @@ print "{fetchurl}:\n\n"; print "[\n\n"; foreach my $pkgName (@needed) { - my $pkg = $pkgs->{$pkgName}; + my $pkg = $pkgs{$pkgName}; die if $pkg->{checksum}->{type} ne "sha"; print " (fetchurl {\n"; print " url = $urlPrefix/$pkg->{location}->{href};\n"; |