* Image generation for openSUSE 10.3.
svn path=/nixpkgs/trunk/; revision=11570
This commit is contained in:
@@ -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 %provides;
|
||||
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 %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) {
|
||||
print STDERR "looking at $pkgName\n";
|
||||
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";
|
||||
|
||||
Reference in New Issue
Block a user