Tizen 2.1 base tizen_2.1 tizen_2.2 2.1b_release 2.2.1_release 2.2_release accepted/tizen_2.1/20130423.151724 submit/tizen_2.1/20130423.102502 submit/tizen_2.2/20130710.074901
authorJinkun Jang <jinkun.jang@samsung.com>
Tue, 12 Mar 2013 06:07:39 +0000 (15:07 +0900)
committerJinkun Jang <jinkun.jang@samsung.com>
Tue, 12 Mar 2013 06:07:39 +0000 (15:07 +0900)
90 files changed:
Build.pm [new file with mode: 0644]
Build/Deb.pm [new file with mode: 0644]
Build/Kiwi.pm [new file with mode: 0644]
Build/Rpm.pm [new file with mode: 0644]
Build/Susetags.pm [new file with mode: 0644]
Build/Zypp.pm [new file with mode: 0644]
Makefile [new file with mode: 0644]
README [new file with mode: 0644]
baselibs_global-deb.conf [new file with mode: 0644]
baselibs_global.conf [new file with mode: 0644]
build [new file with mode: 0755]
build.1 [new file with mode: 0644]
build_kiwi.sh [new file with mode: 0644]
changelog2spec [new file with mode: 0755]
common_functions [new file with mode: 0755]
computeblocklists [new file with mode: 0755]
configs/debian.conf [new file with mode: 0644]
configs/sl10.0.conf [new file with mode: 0644]
configs/sl10.1.conf [new file with mode: 0644]
configs/sl10.2.conf [new file with mode: 0644]
configs/sl10.3.conf [new file with mode: 0644]
configs/sl11.0.conf [new file with mode: 0644]
configs/sl11.1.conf [new file with mode: 0644]
configs/sl11.2.conf [new file with mode: 0644]
configs/sl11.3.conf [new file with mode: 0644]
configs/sl8.1.conf [new file with mode: 0644]
configs/sl8.2.conf [new file with mode: 0644]
configs/sl9.0.conf [new file with mode: 0644]
configs/sl9.1.conf [new file with mode: 0644]
configs/sl9.2.conf [new file with mode: 0644]
configs/sl9.3.conf [new file with mode: 0644]
configs/sles10.conf [new file with mode: 0644]
configs/sles11.conf [new symlink]
configs/sles8.conf [new file with mode: 0644]
configs/sles9.conf [new file with mode: 0644]
configs/ul1.conf [new file with mode: 0644]
createrepomddeps [new file with mode: 0755]
createrpmdeps [new file with mode: 0755]
createyastdeps [new file with mode: 0755]
debtransform [new file with mode: 0755]
debtransformbz2 [new file with mode: 0755]
debtransformzip [new file with mode: 0755]
download [new file with mode: 0755]
expanddeps [new file with mode: 0755]
extractbuild [new file with mode: 0755]
getbinaryid [new file with mode: 0755]
getchangetarget [new file with mode: 0755]
getmacros [new file with mode: 0755]
getoptflags [new file with mode: 0755]
init_buildsystem [new file with mode: 0755]
initscript_qemu_vm [new file with mode: 0755]
killchroot [new file with mode: 0755]
lxc.conf [new file with mode: 0644]
mkbaselibs [new file with mode: 0755]
mkdrpms [new file with mode: 0755]
order [new file with mode: 0755]
packaging/Makefile [new file with mode: 0644]
packaging/build.changes [new file with mode: 0644]
packaging/build.dsc [new file with mode: 0644]
packaging/build.manifest [new file with mode: 0644]
packaging/build.spec [new file with mode: 0644]
packaging/debian.changelog [new file with mode: 0644]
packaging/debian.tar.gz [new file with mode: 0644]
packaging/tizen-1.0.conf [new file with mode: 0644]
signdummy [new file with mode: 0755]
spec2changelog [new file with mode: 0755]
spec_add_patch [new file with mode: 0755]
spectool [new file with mode: 0755]
substitutedeps [new file with mode: 0755]
t/dist [new file with mode: 0755]
test/Fedora_11.conf [new file with mode: 0644]
test/Fedora_12.conf [new file with mode: 0644]
test/baselibs.conf [new file with mode: 0644]
test/common [new file with mode: 0644]
test/config [new file with mode: 0644]
test/libdummy1.spec [new file with mode: 0644]
test/testbuild.11.0-i386 [new file with mode: 0755]
test/testbuild.11.0-x86_64 [new file with mode: 0755]
test/testbuild.11.1-i386 [new file with mode: 0755]
test/testbuild.11.2-i386 [new file with mode: 0755]
test/testbuild.8.1-i386 [new file with mode: 0755]
test/testbuild.Fedora11-i386 [new file with mode: 0755]
test/testbuild.Fedora11-x86_64 [new file with mode: 0755]
test/testbuild.Fedora12-i386 [new file with mode: 0755]
test/testbuild.Fedora12-x86_64 [new file with mode: 0755]
test/testbuild.sles10-i386 [new file with mode: 0755]
test/testbuild.sles10-x86_64 [new file with mode: 0755]
test/testbuild.sles9-i386 [new file with mode: 0755]
unrpm [new file with mode: 0755]
vc [new file with mode: 0755]

diff --git a/Build.pm b/Build.pm
new file mode 100644 (file)
index 0000000..3cfa5e5
--- /dev/null
+++ b/Build.pm
@@ -0,0 +1,867 @@
+package Build;
+
+use strict;
+use Digest::MD5;
+use Build::Rpm;
+use Data::Dumper;
+
+our $expand_dbg;
+
+our $do_rpm;
+our $do_deb;
+our $do_kiwi;
+
+sub import {
+  for (@_) {
+    $do_rpm = 1 if $_ eq ':rpm';
+    $do_deb = 1 if $_ eq ':deb';
+    $do_kiwi = 1 if $_ eq ':kiwi';
+  }
+  $do_rpm = $do_deb = $do_kiwi = 1 if !$do_rpm && !$do_deb && !$do_kiwi;
+  if ($do_deb) {
+    require Build::Deb;
+  }
+  if ($do_kiwi) {
+    require Build::Kiwi;
+  }
+}
+
+my $std_macros = q{
+%define nil
+%define ix86 i386 i486 i586 i686 athlon
+%define arm armv4l armv4b armv5l armv5b armv5el armv5eb armv5tel armv5teb armv6el armv6eb armv7el armv7eb
+%define arml armv4l armv5l armv5tel armv5el armv6el armv7el
+%define armb armv4b armv5b armv5teb armv5eb armv6eb armv7eb
+%define sparc sparc sparcv8 sparcv9 sparcv9v sparc64 sparc64v
+};
+my $extra_macros = '';
+
+sub unify {
+  my %h = map {$_ => 1} @_;
+  return grep(delete($h{$_}), @_);
+}
+
+sub define($)
+{
+  my $def = shift;
+  $extra_macros .= '%define '.$def."\n";
+}
+
+sub init_helper_hashes {
+  my ($config) = @_;
+
+  $config->{'preferh'} = { map {$_ => 1} @{$config->{'prefer'}} };
+
+  my %ignore;
+  for (@{$config->{'ignore'}}) {
+    if (!/:/) {
+      $ignore{$_} = 1;
+      next;
+    }
+    my @s = split(/[,:]/, $_);
+    my $s = shift @s;
+    $ignore{"$s:$_"} = 1 for @s;
+  }
+  $config->{'ignoreh'} = \%ignore;
+
+  my %conflicts;
+  for (@{$config->{'conflict'}}) {
+    my @s = split(/[,:]/, $_);
+    my $s = shift @s;
+    push @{$conflicts{$s}}, @s;
+    push @{$conflicts{$_}}, $s for @s;
+  }
+  for (keys %conflicts) {
+    $conflicts{$_} = [ unify(@{$conflicts{$_}}) ]
+  }
+  $config->{'conflicth'} = \%conflicts;
+}
+
+# 'canonicalize' dist string as found in rpm dist tags
+sub dist_canon($$) {
+  my ($rpmdist, $arch) = @_;
+  $rpmdist = lc($rpmdist);
+  $rpmdist =~ s/-/_/g;
+  $rpmdist =~ s/opensuse/suse linux/;
+  my $rpmdista;
+  if ($rpmdist =~ /\(/) {
+    $rpmdista = $rpmdist;
+    $rpmdista =~ s/.*\(//;
+    $rpmdista =~ s/\).*//;
+  } else {
+    $rpmdista = $arch;
+  }
+  $rpmdista =~ s/i[456]86/i386/;
+  $rpmdist = '' unless $rpmdista =~ /^(i386|x86_64|ia64|ppc|ppc64|s390|s390x)$/;
+  my $dist = 'default';
+  if ($rpmdist =~ /unitedlinux 1\.0.*/) {
+    $dist = "ul1-$rpmdista";
+  } elsif ($rpmdist =~ /suse sles_(\d+)/) {
+    $dist = "sles$1-$rpmdista";
+  } elsif ($rpmdist =~ /suse linux enterprise (\d+)/) {
+    $dist = "sles$1-$rpmdista";
+  } elsif ($rpmdist =~ /suse linux (\d+)\.(\d+)\.[4-9]\d/) {
+    # alpha version
+    $dist = "$1.".($2 + 1)."-$rpmdista";
+  } elsif ($rpmdist =~ /suse linux (\d+\.\d+)/) {
+    $dist = "$1-$rpmdista";
+  }
+  return $dist;
+}
+
+sub read_config_dist {
+  my ($dist, $archpath, $configdir) = @_;
+
+  my $arch = $archpath;
+  $arch = 'noarch' unless defined $arch;
+  $arch =~ s/:.*//;
+  $arch = 'noarch' if $arch eq '';
+  die("Please specify a distribution!\n") unless defined $dist;
+  if ($dist !~ /\//) {
+    my $saved = $dist;
+    $configdir = '.' unless defined $configdir;
+    $dist =~ s/-.*//;
+    $dist = "sl$dist" if $dist =~ /^\d/;
+    $dist = "$configdir/$dist.conf";
+    if (! -e $dist) {
+      $dist =~ s/-.*//;
+      $dist = "sl$dist" if $dist =~ /^\d/;
+      $dist = "$configdir/$dist.conf";
+    }
+    if (! -e $dist) {
+      warn "$saved.conf not found, using default.conf\n" unless $saved eq 'default';
+      $dist = "$configdir/default.conf";
+    }
+  }
+  die("$dist: $!\n") unless -e $dist;
+  my $cf = read_config($arch, $dist);
+  die("$dist: parse error\n") unless $cf;
+  return $cf;
+}
+
+sub read_config {
+  my ($arch, $cfile) = @_;
+  my @macros = split("\n", $std_macros.$extra_macros);
+  push @macros, "%define _target_cpu $arch";
+  push @macros, "%define _target_os linux";
+  my $config = {'macros' => \@macros, 'arch' => $arch};
+  my @config;
+  if (ref($cfile)) {
+    @config = @$cfile;
+  } elsif (defined($cfile)) {
+    local *CONF;
+    return undef unless open(CONF, '<', $cfile);
+    @config = <CONF>;
+    close CONF;
+    chomp @config;
+  }
+  # create verbatim macro blobs
+  my @newconfig;
+  while (@config) {
+    push @newconfig, shift @config;
+    next unless $newconfig[-1] =~ /^\s*macros:\s*$/si;
+    $newconfig[-1] = "macros:\n";
+    while (@config) {
+      my $l = shift @config;
+      last if $l =~ /^\s*:macros\s*$/si;
+      $newconfig[-1] .= "$l\n";
+    }
+  }
+  my @spec;
+  $config->{'save_expanded'} = 1;
+  Build::Rpm::parse($config, \@newconfig, \@spec);
+  delete $config->{'save_expanded'};
+  $config->{'preinstall'} = [];
+  $config->{'vminstall'} = [];
+  $config->{'cbpreinstall'} = [];
+  $config->{'cbinstall'} = [];
+  $config->{'runscripts'} = [];
+  $config->{'required'} = [];
+  $config->{'support'} = [];
+  $config->{'keep'} = [];
+  $config->{'prefer'} = [];
+  $config->{'ignore'} = [];
+  $config->{'conflict'} = [];
+  $config->{'substitute'} = {};
+  $config->{'substitute_vers'} = {};
+  $config->{'optflags'} = {};
+  $config->{'order'} = {};
+  $config->{'exportfilter'} = {};
+  $config->{'publishfilter'} = [];
+  $config->{'rawmacros'} = '';
+  $config->{'release'} = '<CI_CNT>.<B_CNT>';
+  $config->{'repotype'} = [];
+  $config->{'patterntype'} = [];
+  $config->{'fileprovides'} = {};
+  for my $l (@spec) {
+    $l = $l->[1] if ref $l;
+    next unless defined $l;
+    my @l = split(' ', $l);
+    next unless @l;
+    my $ll = shift @l;
+    my $l0 = lc($ll);
+    if ($l0 eq 'macros:') {
+      $l =~ s/.*?\n//s;
+      if ($l =~ /^!\n/s) {
+       $config->{'rawmacros'} = substr($l, 2);
+      } else {
+       $config->{'rawmacros'} .= $l;
+      }
+      next;
+    }
+    if ($l0 eq 'preinstall:' || $l0 eq 'vminstall:' || $l0 eq 'cbpreinstall:' || $l0 eq 'cbinstall:' || $l0 eq 'required:' || $l0 eq 'support:' || $l0 eq 'keep:' || $l0 eq 'prefer:' || $l0 eq 'ignore:' || $l0 eq 'conflict:' || $l0 eq 'runscripts:') {
+      my $t = substr($l0, 0, -1);
+      for my $l (@l) {
+       if ($l eq '!*') {
+         $config->{$t} = [];
+       } elsif ($l =~ /^!/) {
+         $config->{$t} = [ grep {"!$_" ne $l} @{$config->{$t}} ];
+       } else {
+         push @{$config->{$t}}, $l;
+       }
+      }
+    } elsif ($l0 eq 'substitute:') {
+      next unless @l;
+      $ll = shift @l;
+      if ($ll eq '!*') {
+       $config->{'substitute'} = {};
+      } elsif ($ll =~ /^!(.*)$/) {
+       delete $config->{'substitute'}->{$1};
+      } else {
+       $config->{'substitute'}->{$ll} = [ @l ];
+      }
+    } elsif ($l0 eq 'fileprovides:') {
+      next unless @l;
+      $ll = shift @l;
+      if ($ll eq '!*') {
+       $config->{'fileprovides'} = {};
+      } elsif ($ll =~ /^!(.*)$/) {
+       delete $config->{'fileprovides'}->{$1};
+      } else {
+       $config->{'fileprovides'}->{$ll} = [ @l ];
+      }
+    } elsif ($l0 eq 'exportfilter:') {
+      next unless @l;
+      $ll = shift @l;
+      $config->{'exportfilter'}->{$ll} = [ @l ];
+    } elsif ($l0 eq 'publishfilter:') {
+      $config->{'publishfilter'} = [ @l ];
+    } elsif ($l0 eq 'optflags:') {
+      next unless @l;
+      $ll = shift @l;
+      $config->{'optflags'}->{$ll} = join(' ', @l);
+    } elsif ($l0 eq 'order:') {
+      for my $l (@l) {
+       if ($l eq '!*') {
+         $config->{'order'} = {};
+       } elsif ($l =~ /^!(.*)$/) {
+         delete $config->{'order'}->{$1};
+       } else {
+         $config->{'order'}->{$l} = 1;
+       }
+      }
+    } elsif ($l0 eq 'repotype:') { #type of generated repository data
+      $config->{'repotype'} = [ @l ];
+    } elsif ($l0 eq 'type:') { #kind of packaging system (spec, dsc or kiwi)
+      $config->{'type'} = $l[0];
+    } elsif ($l0 eq 'patterntype:') { #kind of generated patterns in repository
+      $config->{'patterntype'} = [ @l ];
+    } elsif ($l0 eq 'release:') {
+      $config->{'release'} = $l[0];
+    } elsif ($l0 eq 'releaseprg:') {
+      $config->{'releaseprg'} = $l[0];
+    } elsif ($l0 eq 'changetarget:' || $l0 eq 'target:') {
+      $config->{'target'} = join(' ', @l);
+    } elsif ($l0 !~ /^[#%]/) {
+      warn("unknown keyword in config: $l0\n");
+    }
+  }
+  for my $l (qw{preinstall vminstall cbpreinstall cbinstall required support keep runscripts repotype patterntype}) {
+    $config->{$l} = [ unify(@{$config->{$l}}) ];
+  }
+  for my $l (keys %{$config->{'substitute'}}) {
+    $config->{'substitute_vers'}->{$l} = [ map {/^(.*?)(=)?$/g} unify(@{$config->{'substitute'}->{$l}}) ];
+    $config->{'substitute'}->{$l} = [ unify(@{$config->{'substitute'}->{$l}}) ];
+    s/=$// for @{$config->{'substitute'}->{$l}};
+  }
+  init_helper_hashes($config);
+  if ( ! $config->{'type'}) {
+    # Fallback to old guessing method if no type (spec, dsc or kiwi) is defined
+    if (grep {$_ eq 'rpm'} @{$config->{'preinstall'} || []}) {
+      $config->{'type'} = 'spec';
+    } elsif (grep {$_ eq 'debianutils'} @{$config->{'preinstall'} || []}) {
+      $config->{'type'} = 'dsc';
+    } else {
+      $config->{'type'} = 'UNDEFINED';
+    }
+  }
+  # add rawmacros to our macro list
+  if ($config->{'rawmacros'} ne '') {
+    for my $rm (split("\n", $config->{'rawmacros'})) {
+      if (@macros && $macros[-1] =~ /\\$/) {
+       if ($rm =~ /\\$/) {
+         push @macros, '...\\';
+       } else {
+         push @macros, '...';
+       }
+      } elsif ($rm !~ /^%/) {
+       push @macros, $rm;
+      } else {
+       push @macros, "%define ".substr($rm, 1);
+      }
+    }
+  }
+  return $config;
+}
+
+sub do_subst {
+  my ($config, @deps) = @_;
+  my @res;
+  my %done;
+  my $subst = $config->{'substitute'};
+  while (@deps) {
+    my $d = shift @deps;
+    next if $done{$d};
+    my $ds = $d;
+    $ds =~ s/\s*[<=>].*$//s;
+    if ($subst->{$ds}) {
+      unshift @deps, @{$subst->{$ds}};
+      push @res, $d if grep {$_ eq $ds} @{$subst->{$ds}};
+    } else {
+      push @res, $d;
+    }
+    $done{$d} = 1;
+  }
+  return @res;
+}
+
+sub do_subst_vers {
+  my ($config, @deps) = @_;
+  my @res;
+  my %done;
+  my $subst = $config->{'substitute_vers'};
+  while (@deps) {
+    my ($d, $dv) = splice(@deps, 0, 2);
+    next if $done{$d};
+    if ($subst->{$d}) {
+      unshift @deps, map {defined($_) && $_ eq '=' ? $dv : $_} @{$subst->{$d}};
+      push @res, $d, $dv if grep {defined($_) && $_ eq $d} @{$subst->{$d}};
+    } else {
+      push @res, $d, $dv;
+    }
+    $done{$d} = 1;
+  }
+  return @res;
+}
+
+sub get_build {
+  my ($config, $subpacks, @deps) = @_;
+  my @ndeps = grep {/^-/} @deps;
+  my %keep = map {$_ => 1} (@deps, @{$config->{'keep'} || []}, @{$config->{'preinstall'}});
+  for (@{$subpacks || []}) {
+    push @ndeps, "-$_" unless $keep{$_};
+  }
+  my %ndeps = map {$_ => 1} @ndeps;
+  @deps = grep {!$ndeps{$_}} @deps;
+  push @deps, @{$config->{'preinstall'}};
+  push @deps, @{$config->{'required'}};
+  push @deps, @{$config->{'support'}};
+  @deps = grep {!$ndeps{"-$_"}} @deps;
+  @deps = do_subst($config, @deps);
+  @deps = grep {!$ndeps{"-$_"}} @deps;
+  @deps = expand($config, @deps, @ndeps);
+  return @deps;
+}
+
+sub get_deps {
+  my ($config, $subpacks, @deps) = @_;
+  my @ndeps = grep {/^-/} @deps;
+  my %keep = map {$_ => 1} (@deps, @{$config->{'keep'} || []}, @{$config->{'preinstall'}});
+  for (@{$subpacks || []}) {
+    push @ndeps, "-$_" unless $keep{$_};
+  }
+  my %ndeps = map {$_ => 1} @ndeps;
+  @deps = grep {!$ndeps{$_}} @deps;
+  push @deps, @{$config->{'required'}};
+  @deps = grep {!$ndeps{"-$_"}} @deps;
+  @deps = do_subst($config, @deps);
+  @deps = grep {!$ndeps{"-$_"}} @deps;
+  my %bdeps = map {$_ => 1} (@{$config->{'preinstall'}}, @{$config->{'support'}});
+  delete $bdeps{$_} for @deps;
+  @deps = expand($config, @deps, @ndeps);
+  if (@deps && $deps[0]) {
+    my $r = shift @deps;
+    @deps = grep {!$bdeps{$_}} @deps;
+    unshift @deps, $r;
+  }
+  return @deps;
+}
+
+sub get_preinstalls {
+  my ($config) = @_;
+  return @{$config->{'preinstall'}};
+}
+
+sub get_vminstalls {
+  my ($config) = @_;
+  return @{$config->{'vminstall'}};
+}
+
+sub get_cbpreinstalls {
+  my ($config) = @_;
+  return @{$config->{'cbpreinstall'}};
+}
+
+sub get_cbinstalls {
+  my ($config) = @_;
+  return @{$config->{'cbinstall'}};
+}
+
+sub get_runscripts {
+  my ($config) = @_;
+  return @{$config->{'runscripts'}};
+}
+
+###########################################################################
+
+sub readdeps {
+  my ($config, $pkginfo, @depfiles) = @_;
+
+  my %requires = ();
+  local *F;
+  my %provides;
+  my $dofileprovides = %{$config->{'fileprovides'}};
+  for my $depfile (@depfiles) {
+    if (ref($depfile) eq 'HASH') {
+      for my $rr (keys %$depfile) {
+       $provides{$rr} = $depfile->{$rr}->{'provides'};
+       $requires{$rr} = $depfile->{$rr}->{'requires'};
+      }
+      next;
+    }
+    # XXX: we don't support different architectures per file
+    open(F, "<$depfile") || die("$depfile: $!\n");
+    while(<F>) {
+      my @s = split(' ', $_);
+      my $s = shift @s;
+      my @ss;
+      while (@s) {
+       if (!$dofileprovides && $s[0] =~ /^\//) {
+         shift @s;
+         next;
+       }
+       if ($s[0] =~ /^rpmlib\(/) {
+           splice(@s, 0, 3);
+           next;
+       }
+       push @ss, shift @s;
+       while (@s) {
+         if ($s[0] =~ /^[\(<=>|]/) {
+           $ss[-1] .= " $s[0] $s[1]";
+           $ss[-1] =~ s/ \((.*)\)/ $1/;
+           $ss[-1] =~ s/(<|>){2}/$1/;
+           splice(@s, 0, 2);
+         } else {
+           last;
+         }
+       }
+      }
+      my %ss;
+      @ss = grep {!$ss{$_}++} @ss;
+      if ($s =~ /^(P|R):(.*)\.(.*)-\d+\/\d+\/\d+:$/) {
+       my $pkgid = $2;
+       my $arch = $3;
+       if ($1 eq "R") {
+         $requires{$pkgid} = \@ss;
+         $pkginfo->{$pkgid}->{'requires'} = \@ss if $pkginfo;
+         next;
+       }
+       # handle provides
+       $provides{$pkgid} = \@ss;
+       if ($pkginfo) {
+         # extract ver and rel from self provides
+         my ($v, $r) = map { /\Q$pkgid\E = ([^-]+)(?:-(.+))?$/ } @ss;
+         die("$pkgid: no self provides\n") unless $v;
+         $pkginfo->{$pkgid}->{'name'} = $pkgid;
+         $pkginfo->{$pkgid}->{'version'} = $v;
+         $pkginfo->{$pkgid}->{'release'} = $r if defined($r);
+         $pkginfo->{$pkgid}->{'arch'} = $arch;
+         $pkginfo->{$pkgid}->{'provides'} = \@ss;
+       }
+      }
+    }
+    close F;
+  }
+  $config->{'providesh'} = \%provides;
+  $config->{'requiresh'} = \%requires;
+  makewhatprovidesh($config);
+}
+
+sub makewhatprovidesh {
+  my ($config) = @_;
+
+  my %whatprovides;
+  my $provides = $config->{'providesh'};
+
+  for my $p (keys %$provides) {
+    my @pp = @{$provides->{$p}};
+    s/[ <=>].*// for @pp;
+    push @{$whatprovides{$_}}, $p for unify(@pp);
+  }
+  for my $p (keys %{$config->{'fileprovides'}}) {
+    my @pp = map {@{$whatprovides{$_} || []}} @{$config->{'fileprovides'}->{$p}};
+    @{$whatprovides{$p}} = unify(@{$whatprovides{$p} || []}, @pp) if @pp;
+  }
+  $config->{'whatprovidesh'} = \%whatprovides;
+}
+
+sub setdeps {
+  my ($config, $provides, $whatprovides, $requires) = @_;
+  $config->{'providesh'} = $provides;
+  $config->{'whatprovidesh'} = $whatprovides;
+  $config->{'requiresh'} = $requires;
+}
+
+sub forgetdeps {
+  my ($config) = @_;
+  delete $config->{'providesh'};
+  delete $config->{'whatprovidesh'};
+  delete $config->{'requiresh'};
+}
+
+my %addproviders_fm = (
+  '>'  => 1,
+  '='  => 2,
+  '>=' => 3,
+  '<'  => 4,
+  '<=' => 6,
+);
+
+sub addproviders {
+  my ($config, $r) = @_;
+
+  my @p;
+  my $whatprovides = $config->{'whatprovidesh'};
+  $whatprovides->{$r} = \@p;
+  if ($r =~ /\|/) {
+    for my $or (split(/\s*\|\s*/, $r)) {
+      push @p, @{$whatprovides->{$or} || addproviders($config, $or)};
+    }
+    @p = unify(@p) if @p > 1;
+    return \@p;
+  }
+  return \@p if $r !~ /^(.*?)\s*([<=>]{1,2})\s*(.*?)$/;
+  my $rn = $1;
+  my $rv = $3;
+  my $rf = $addproviders_fm{$2};
+  return \@p unless $rf;
+  my $provides = $config->{'providesh'};
+  my @rp = @{$whatprovides->{$rn} || []};
+  for my $rp (@rp) {
+    for my $pp (@{$provides->{$rp} || []}) {
+      if ($pp eq $rn) {
+       # debian: unversioned provides do not match
+       # kiwi: supports only rpm, so we need to hand it like it
+       next if $config->{'type'} eq 'dsc';
+       push @p, $rp;
+       last;
+      }
+      next unless $pp =~ /^\Q$rn\E\s*([<=>]{1,2})\s*(.*?)$/;
+      my $pv = $2;
+      my $pf = $addproviders_fm{$1};
+      next unless $pf;
+      if ($pf & $rf & 5) {
+       push @p, $rp;
+       last;
+      }
+      if ($pv eq $rv) {
+       next unless $pf & $rf & 2;
+       push @p, $rp;
+       last;
+      }
+      my $rr = $rf == 2 ? $pf : ($rf ^ 5);
+      $rr &= 5 unless $pf & 2;
+      # verscmp for spec and kiwi types
+      my $vv;
+      if ($config->{'type'} eq 'dsc') {
+       $vv = Build::Deb::verscmp($pv, $rv, 1);
+      } else {
+       $vv = Build::Rpm::verscmp($pv, $rv, 1);
+      }
+      if ($rr & (1 << ($vv + 1))) {
+       push @p, $rp;
+       last;
+      }
+    }
+  }
+  @p = unify(@p) if @p > 1;
+  return \@p;
+}
+
+sub expand {
+  my ($config, @p) = @_;
+
+  my $conflicts = $config->{'conflicth'};
+  my $prefer = $config->{'preferh'};
+  my $ignore = $config->{'ignoreh'};
+
+  my $whatprovides = $config->{'whatprovidesh'};
+  my $requires = $config->{'requiresh'};
+
+  my %xignore = map {substr($_, 1) => 1} grep {/^-/} @p;
+  @p = grep {!/^-/} @p;
+
+  my %p;               # expanded packages
+  my %aconflicts;      # packages we are conflicting with
+
+  # add direct dependency packages. this is different from below,
+  # because we add packages even if to dep is already provided and
+  # we break ambiguities if the name is an exact match.
+  for my $p (splice @p) {
+    my @q = @{$whatprovides->{$p} || addproviders($config, $p)};
+    if (@q > 1) {
+      my $pn = $p;
+      $pn =~ s/ .*//;
+      @q = grep {$_ eq $pn} @q;
+    }
+    if (@q != 1) {
+      push @p, $p;
+      next;
+    }
+    print "added $q[0] because of $p (direct dep)\n" if $expand_dbg;
+    push @p, $q[0];
+    $p{$q[0]} = 1;
+    $aconflicts{$_} = 1 for @{$conflicts->{$q[0]} || []};
+  }
+
+  my @pamb = ();
+  my $doamb = 0;
+  while (@p) {
+    my @error = ();
+    my @rerror = ();
+    for my $p (splice @p) {
+      for my $r (@{$requires->{$p} || [$p]}) {
+       my $ri = (split(/[ <=>]/, $r, 2))[0];
+       next if $ignore->{"$p:$ri"} || $xignore{"$p:$ri"};
+       next if $ignore->{$ri} || $xignore{$ri};
+       my @q = @{$whatprovides->{$r} || addproviders($config, $r)};
+       next if grep {$p{$_}} @q;
+       next if grep {$xignore{$_}} @q;
+       next if grep {$ignore->{"$p:$_"} || $xignore{"$p:$_"}} @q;
+       @q = grep {!$aconflicts{$_}} @q;
+       if (!@q) {
+         if ($r eq $p) {
+           push @rerror, "nothing provides $r";
+         } else {
+           next if $r =~ /^\//;
+           push @rerror, "nothing provides $r needed by $p";
+         }
+         next;
+       }
+       if (@q > 1 && !$doamb) {
+         push @pamb, $p unless @pamb && $pamb[-1] eq $p;
+         print "undecided about $p:$r: @q\n" if $expand_dbg;
+         next;
+       }
+       if (@q > 1) {
+         my @pq = grep {!$prefer->{"-$_"} && !$prefer->{"-$p:$_"}} @q;
+         @q = @pq if @pq;
+         @pq = grep {$prefer->{$_} || $prefer->{"$p:$_"}} @q;
+         if (@pq > 1) {
+           my %pq = map {$_ => 1} @pq;
+           @q = (grep {$pq{$_}} @{$config->{'prefer'}})[0];
+         } elsif (@pq == 1) {
+           @q = @pq;
+         }
+       }
+       if (@q > 1 && $r =~ /\|/) {
+           # choice op, implicit prefer of first match...
+           my %pq = map {$_ => 1} @q;
+           for my $rr (split(/\s*\|\s*/, $r)) {
+               next unless $whatprovides->{$rr};
+               my @pq = grep {$pq{$_}} @{$whatprovides->{$rr}};
+               next unless @pq;
+               @q = @pq;
+               last;
+           }
+       }
+       if (@q > 1) {
+         if ($r ne $p) {
+           push @error, "have choice for $r needed by $p: @q";
+         } else {
+           push @error, "have choice for $r: @q";
+         }
+         push @pamb, $p unless @pamb && $pamb[-1] eq $p;
+         next;
+       }
+       push @p, $q[0];
+       print "added $q[0] because of $p:$r\n" if $expand_dbg;
+       $p{$q[0]} = 1;
+       $aconflicts{$_} = 1 for @{$conflicts->{$q[0]} || []};
+       @error = ();
+       $doamb = 0;
+      }
+    }
+    return undef, @rerror if @rerror;
+    next if @p;                # still work to do
+
+    # only ambig stuff left
+    if (@pamb && !$doamb) {
+      @p = @pamb;
+      @pamb = ();
+      $doamb = 1;
+      print "now doing undecided dependencies\n" if $expand_dbg;
+      next;
+    }
+    return undef, @error if @error;
+  }
+  return 1, (sort keys %p);
+}
+
+sub order {
+  my ($config, @p) = @_;
+
+  my $requires = $config->{'requiresh'};
+  my $whatprovides = $config->{'whatprovidesh'};
+  my %deps;
+  my %rdeps;
+  my %needed;
+  my %p = map {$_ => 1} @p;
+  for my $p (@p) {
+    my @r;
+    for my $r (@{$requires->{$p} || []}) {
+      my @q = @{$whatprovides->{$r} || addproviders($config, $r)};
+      push @r, grep {$_ ne $p && $p{$_}} @q;
+    }
+    if (%{$config->{'order'} || {}}) {
+      push @r, grep {$_ ne $p && $config->{'order'}->{"$_:$p"}} @p;
+    }
+    @r = unify(@r);
+    $deps{$p} = \@r;
+    $needed{$p} = @r;
+    push @{$rdeps{$_}}, $p for @r;
+  }
+  @p = sort {$needed{$a} <=> $needed{$b} || $a cmp $b} @p;
+  my @good;
+  my @res;
+  # the big sort loop
+  while (@p) {
+    @good = grep {$needed{$_} == 0} @p;
+    if (@good) {
+      @p = grep {$needed{$_}} @p;
+      push @res, @good;
+      for my $p (@good) {
+       $needed{$_}-- for @{$rdeps{$p}};
+      }
+      next;
+    }
+    # uh oh, cycle alert. find and remove all cycles.
+    my %notdone = map {$_ => 1} @p;
+    $notdone{$_} = 0 for @res;  # already did those
+    my @todo = @p;
+    while (@todo) {
+      my $v = shift @todo;
+      if (ref($v)) {
+       $notdone{$$v} = 0;      # finished this one
+       next;
+      }
+      my $s = $notdone{$v};
+      next unless $s;
+      my @e = grep {$notdone{$_}} @{$deps{$v}};
+      if (!@e) {
+       $notdone{$v} = 0;       # all deps done, mark as finished
+       next;
+      }
+      if ($s == 1) {
+       $notdone{$v} = 2;       # now under investigation
+       unshift @todo, @e, \$v;
+       next;
+      }
+      # reached visited package, found a cycle!
+      my @cyc = ();
+      my $cycv = $v;
+      # go back till $v is reached again
+      while(1) {
+       die unless @todo;
+       $v = shift @todo;
+       next unless ref($v);
+       $v = $$v;
+       $notdone{$v} = 1 if $notdone{$v} == 2;
+       unshift @cyc, $v;
+       last if $v eq $cycv;
+      }
+      unshift @todo, $cycv;
+      print STDERR "cycle: ".join(' -> ', @cyc)."\n";
+      my $breakv;
+      my @breakv = (@cyc, $cyc[0]);
+      while (@breakv > 1) {
+       last if $config->{'order'}->{"$breakv[0]:$breakv[1]"};
+       shift @breakv;
+      }
+      if (@breakv > 1) {
+       $breakv = $breakv[0];
+      } else {
+       $breakv = (sort {$needed{$a} <=> $needed{$b} || $a cmp $b} @cyc)[-1];
+      }
+      push @cyc, $cyc[0];      # make it loop
+      shift @cyc while $cyc[0] ne $breakv;
+      $v = $cyc[1];
+      print STDERR "  breaking dependency $breakv -> $v\n";
+      $deps{$breakv} = [ grep {$_ ne $v} @{$deps{$breakv}} ];
+      $rdeps{$v} = [ grep {$_ ne $breakv} @{$rdeps{$v}} ];
+      $needed{$breakv}--;
+    }
+  }
+  return @res;
+}
+
+sub add_all_providers {
+  my ($config, @p) = @_;
+  my $whatprovides = $config->{'whatprovidesh'};
+  my $requires = $config->{'requiresh'};
+  my %a;
+  for my $p (@p) {
+    for my $r (@{$requires->{$p} || [$p]}) {
+      my $rn = (split(' ', $r, 2))[0];
+      $a{$_} = 1 for @{$whatprovides->{$rn} || []};
+    }
+  }
+  push @p, keys %a;
+  return unify(@p);
+}
+
+###########################################################################
+
+sub parse {
+  my ($cf, $fn, @args) = @_;
+  return Build::Rpm::parse($cf, $fn, @args) if $do_rpm && $fn =~ /\.spec$/;
+  return Build::Deb::parse($cf, $fn, @args) if $do_deb && $fn =~ /\.dsc$/;
+  return Build::Kiwi::parse($cf, $fn, @args) if $do_kiwi && $fn =~ /config\.xml$/;
+  return Build::Kiwi::parse($cf, $fn, @args) if $do_kiwi && $fn =~ /\.kiwi$/;
+  return undef;
+}
+
+sub query {
+  my ($binname, %opts) = @_;
+  my $handle = $binname;
+  if (ref($binname) eq 'ARRAY') {
+    $handle = $binname->[1];
+    $binname = $binname->[0];
+  }
+  return Build::Rpm::query($handle, %opts) if $do_rpm && $binname =~ /\.rpm$/;
+  return Build::Deb::query($handle, %opts) if $do_deb && $binname =~ /\.deb$/;
+  return Build::Kiwi::queryiso($handle, %opts) if $do_kiwi && $binname =~ /\.iso$/;
+  return undef;
+}
+
+sub queryhdrmd5 {
+  my ($binname) = @_;
+  return Build::Rpm::queryhdrmd5(@_) if $do_rpm && $binname =~ /\.rpm$/;
+  return Build::Deb::queryhdrmd5(@_) if $do_deb && $binname =~ /\.deb$/;
+  return Build::Kiwi::queryhdrmd5(@_) if $do_kiwi && $binname =~ /\.iso$/;
+  return Build::Kiwi::queryhdrmd5(@_) if $do_kiwi && $binname =~ /\.raw$/;
+  return Build::Kiwi::queryhdrmd5(@_) if $do_kiwi && $binname =~ /\.raw.install$/;
+  return undef;
+}
+
+1;
diff --git a/Build/Deb.pm b/Build/Deb.pm
new file mode 100644 (file)
index 0000000..f613404
--- /dev/null
@@ -0,0 +1,341 @@
+package Build::Deb;
+
+use strict;
+use Digest::MD5;
+
+my $have_zlib;
+eval {
+  require Compress::Zlib;
+  $have_zlib = 1;
+};
+
+sub parse {
+  my ($bconf, $fn) = @_;
+  my $ret;
+  my @control;
+
+  # get arch and os from macros
+  my ($arch, $os);
+  for (@{$bconf->{'macros'} || []}) {
+    $arch = $1 if /^%define _target_cpu (\S+)/;
+    $os = $1 if /^%define _target_os (\S+)/;
+  }
+  # map to debian names
+  $os = 'linux' if !defined($os);
+  $arch = 'all' if !defined($arch) || $arch eq 'noarch';
+  $arch = 'i386' if $arch =~ /^i[456]86$/;
+  $arch = 'powerpc' if $arch eq 'ppc';
+  $arch = 'amd64' if $arch eq 'x86_64';
+
+  if (ref($fn) eq 'ARRAY') {
+    @control = @$fn;
+  } else {
+    local *F;
+    if (!open(F, '<', $fn)) {
+      $ret->{'error'} = "$fn: $!";
+      return $ret;
+    }
+    @control = <F>;
+    close F;
+    chomp @control;
+  }
+  splice(@control, 0, 3) if @control > 3 && $control[0] =~ /^-----BEGIN/;
+  my $name;
+  my $version;
+  my @deps;
+  while (@control) {
+    my $c = shift @control;
+    last if $c eq '';   # new paragraph
+    my ($tag, $data) = split(':', $c, 2);
+    next unless defined $data;
+    $tag = uc($tag);
+    while (@control && $control[0] =~ /^\s/) {
+      $data .= "\n".substr(shift @control, 1);
+    }
+    $data =~ s/^\s+//s;
+    $data =~ s/\s+$//s;
+    if ($tag eq 'VERSION') {
+      $version = $data;
+      $version =~ s/-[^-]+$//;
+    } elsif ($tag eq 'SOURCE') {
+      $name = $data;
+    } elsif ($tag eq 'BUILD-DEPENDS' || $tag eq 'BUILD-CONFLICTS' || $tag eq 'BUILD-IGNORE' || $tag eq 'BUILD-DEPENDS-INDEP') {
+      my @d = split(/,\s*/, $data);
+      for my $d (@d) {
+        my @alts = split('\s*\|\s*', $d);
+        my @needed;
+        for my $c (@alts) {
+          if ($c =~ /^(.*?)\s*\[(.*)\]$/) {
+            $c = $1;
+            my $isneg = 0;
+            my $bad;
+            for my $q (split('[\s,]', $2)) {
+              $isneg = 1 if $q =~ s/^\!//;
+              $bad = 1 if !defined($bad) && !$isneg;
+              if ($isneg) {
+                if ($q eq $arch || $q eq "$os-$arch") {
+                  $bad = 1;
+                  last;
+                }
+              } elsif ($q eq $arch || $q eq "$os-$arch") {
+                $bad = 0;
+              }
+            }
+            push @needed, $c unless $bad;
+          } else {
+            push @needed, $c;
+          }
+        }
+        next unless @needed;
+        $d = join(' | ', @needed);
+       $d =~ s/ \(([^\)]*)\)/ $1/g;
+       $d =~ s/>>/>/g;
+       $d =~ s/<</</g;
+       if ($tag eq 'BUILD-DEPENDS' || $tag eq 'BUILD-DEPENDS-INDEP') {
+         push @deps, $d;
+       } else {
+         push @deps, "-$d";
+       }
+      }
+    }
+  }
+  $ret->{'name'} = $name;
+  $ret->{'version'} = $version;
+  $ret->{'deps'} = \@deps;
+  return $ret;
+}
+
+sub ungzip {
+  my $data = shift;
+  local (*TMP, *TMP2);
+  open(TMP, "+>", undef) or die("could not open tmpfile\n");
+  syswrite TMP, $data;
+  sysseek(TMP, 0, 0);
+  my $pid = open(TMP2, "-|");
+  die("fork: $!\n") unless defined $pid;
+  if (!$pid) {
+    open(STDIN, "<&TMP");
+    exec 'gunzip';
+    die("gunzip: $!\n");
+  }
+  close(TMP);
+  $data = '';
+  1 while sysread(TMP2, $data, 1024, length($data)) > 0;
+  close(TMP2) || die("gunzip error");
+  return $data;
+}
+
+sub debq {
+  my ($fn) = @_;
+
+  local *DEBF;
+  if (ref($fn) eq 'GLOB') {
+      *DEBF = *$fn;
+  } elsif (!open(DEBF, '<', $fn)) {
+    warn("$fn: $!\n");
+    return ();
+  }
+  my $data = '';
+  sysread(DEBF, $data, 4096);
+  if (length($data) < 8+60) {
+    warn("$fn: not a debian package\n");
+    close DEBF unless ref $fn;
+    return ();
+  }
+  if (substr($data, 0, 8+16) ne "!<arch>\ndebian-binary   ") {
+    close DEBF unless ref $fn;
+    return ();
+  }
+  my $len = substr($data, 8+48, 10);
+  $len += $len & 1;
+  if (length($data) < 8+60+$len+60) {
+    my $r = 8+60+$len+60 - length($data);
+    $r -= length($data);
+    if ((sysread(DEBF, $data, $r < 4096 ? 4096 : $r, length($data)) || 0) < $r) {
+      warn("$fn: unexpected EOF\n");
+      close DEBF unless ref $fn;
+      return ();
+    }
+  }
+  $data = substr($data, 8 + 60 + $len);
+  if (substr($data, 0, 16) ne 'control.tar.gz  ') {
+    warn("$fn: control.tar.gz is not second ar entry\n");
+    close DEBF unless ref $fn;
+    return ();
+  }
+  $len = substr($data, 48, 10);
+  if (length($data) < 60+$len) {
+    my $r = 60+$len - length($data);
+    if ((sysread(DEBF, $data, $r, length($data)) || 0) < $r) {
+      warn("$fn: unexpected EOF\n");
+      close DEBF unless ref $fn;
+      return ();
+    }
+  }
+  close DEBF unless ref($fn);
+  $data = substr($data, 60, $len);
+  my $controlmd5 = Digest::MD5::md5_hex($data);        # our header signature
+  if ($have_zlib) {
+    $data = Compress::Zlib::memGunzip($data);
+  } else {
+    $data = ungzip($data);
+  }
+  if (!$data) {
+    warn("$fn: corrupt control.tar.gz file\n");
+    return ();
+  }
+  my $control;
+  while (length($data) >= 512) {
+    my $n = substr($data, 0, 100);
+    $n =~ s/\0.*//s;
+    my $len = oct('00'.substr($data, 124,12));
+    my $blen = ($len + 1023) & ~511;
+    if (length($data) < $blen) {
+      warn("$fn: corrupt control.tar.gz file\n");
+      return ();
+    }
+    if ($n eq './control') {
+      $control = substr($data, 512, $len);
+      last;
+    }
+    $data = substr($data, $blen);
+  }
+  my %res;
+  my @control = split("\n", $control);
+  while (@control) {
+    my $c = shift @control;
+    last if $c eq '';   # new paragraph
+    my ($tag, $data) = split(':', $c, 2);
+    next unless defined $data;
+    $tag = uc($tag);
+    while (@control && $control[0] =~ /^\s/) {
+      $data .= "\n".substr(shift @control, 1);
+    }
+    $data =~ s/^\s+//s;
+    $data =~ s/\s+$//s;
+    $res{$tag} = $data;
+  }
+  $res{'CONTROL_MD5'} = $controlmd5;
+  return %res;
+}
+
+sub query {
+  my ($handle, %opts) = @_;
+
+  my %res = debq($handle);
+  return undef unless %res;
+  my $name = $res{'PACKAGE'};
+  my $src = $name;
+  if ($res{'SOURCE'}) {
+    $src = $res{'SOURCE'};
+    $src =~ s/\s.*$//;
+  }
+  my @provides = split(',\s*', $res{'PROVIDES'} || '');
+  push @provides, "$name = $res{'VERSION'}";
+  my @depends = split(',\s*', $res{'DEPENDS'} || '');
+  my @predepends = split(',\s*', $res{'PRE-DEPENDS'} || '');
+  push @depends, @predepends;
+  s/ \(([^\)]*)\)/ $1/g for @provides;
+  s/ \(([^\)]*)\)/ $1/g for @depends;
+  s/>>/>/g for @provides;
+  s/<</</g for @provides;
+  s/>>/>/g for @depends;
+  s/<</</g for @depends;
+  my $data = {
+    name => $name,
+    hdrmd5 => $res{'CONTROL_MD5'},
+    provides => \@provides,
+    requires => \@depends,
+  };
+  $data->{'source'} = $src if $src ne '';
+  if ($opts{'evra'}) {
+    $res{'VERSION'} =~ /^(?:(\d+):)?(.*?)(?:-([^-]*))?$/s;
+    $data->{'epoch'} = $1 if defined $1;
+    $data->{'version'} = $2;
+    $data->{'release'} = $3 if defined $3;
+    $data->{'arch'} = $res{'ARCHITECTURE'};
+  }
+  if ($opts{'description'}) {
+    $data->{'description'} = $res{'DESCRIPTION'};
+  }
+  return $data;
+}
+
+sub queryhdrmd5 {
+  my ($bin) = @_;
+
+  local *F;
+  open(F, '<', $bin) || die("$bin: $!\n");
+  my $data = '';
+  sysread(F, $data, 4096);
+  if (length($data) < 8+60) {
+    warn("$bin: not a debian package\n");
+    close F;
+    return undef;
+  }
+  if (substr($data, 0, 8+16) ne "!<arch>\ndebian-binary   ") {
+    warn("$bin: not a debian package\n");
+    close F;
+    return undef;
+  }
+  my $len = substr($data, 8+48, 10);
+  $len += $len & 1;
+  if (length($data) < 8+60+$len+60) {
+    my $r = 8+60+$len+60 - length($data);
+    $r -= length($data);
+    if ((sysread(F, $data, $r < 4096 ? 4096 : $r, length($data)) || 0) < $r) {
+      warn("$bin: unexpected EOF\n");
+      close F;
+      return undef;
+    }
+  }
+  $data = substr($data, 8 + 60 + $len);
+  if (substr($data, 0, 16) ne 'control.tar.gz  ') {
+    warn("$bin: control.tar.gz is not second ar entry\n");
+    close F;
+    return undef;
+  }
+  $len = substr($data, 48, 10);
+  if (length($data) < 60+$len) {
+    my $r = 60+$len - length($data);
+    if ((sysread(F, $data, $r, length($data)) || 0) < $r) {
+      warn("$bin: unexpected EOF\n");
+      close F;
+      return undef;
+    }
+  }
+  close F;
+  $data = substr($data, 60, $len);
+  return Digest::MD5::md5_hex($data);
+}
+
+sub verscmp_part {
+  my ($s1, $s2) = @_;
+  return 0 if $s1 eq $s2;
+  $s1 =~ s/([0-9]+)/substr("00000000000000000000000000000000$1", -32, 32)/ge;
+  $s2 =~ s/([0-9]+)/substr("00000000000000000000000000000000$1", -32, 32)/ge;
+  $s1 .= "\0";
+  $s2 .= "\0";
+  $s1 =~ tr[\176\000-\037\060-\071\101-\132\141-\172\040-\057\072-\100\133-\140\173-\175][\000-\176];
+  $s2 =~ tr[\176\000-\037\060-\071\101-\132\141-\172\040-\057\072-\100\133-\140\173-\175][\000-\176];
+  return $s1 cmp $s2;
+}
+
+sub verscmp {
+  my ($s1, $s2) = @_;
+  my ($e1, $v1, $r1) = $s1 =~ /^(?:(\d+):)?(.*?)(?:-([^-]*))?$/s;
+  $e1 = 0 unless defined $e1;
+  my ($e2, $v2, $r2) = $s2 =~ /^(?:(\d+):)?(.*?)(?:-([^-]*))?$/s;
+  $e2 = 0 unless defined $e2;
+  if ($e1 ne $e2) {
+    my $r = verscmp_part($e1, $e2);
+    return $r if $r;
+  }
+  my $r = verscmp_part($v1, $v2);
+  return $r if $r;
+  $r1 = '' unless defined $r1;
+  $r2 = '' unless defined $r2;
+  return verscmp_part($r1, $r2);
+}
+
+1;
diff --git a/Build/Kiwi.pm b/Build/Kiwi.pm
new file mode 100644 (file)
index 0000000..05a6e5b
--- /dev/null
@@ -0,0 +1,303 @@
+package Build::Kiwi;
+
+use strict;
+
+our $bootcallback;
+
+# worst xml parser ever, just good enough to parse those kiwi files...
+# can't use standard XML parsers, unfortunatelly, as the build script
+# must not rely on external libraries
+#
+sub parsexml {
+  my ($xml) = @_;
+
+  my @nodestack;
+  my $node = {};
+  my $c = '';
+  $xml =~ s/^\s*\<\?.*?\?\>//s;
+  while ($xml =~ /^(.*?)\</s) {
+    if ($1 ne '') {
+      $c .= $1;
+      $xml = substr($xml, length($1));
+    }
+    if (substr($xml, 0, 4) eq '<!--') {
+      $xml =~ s/.*?-->//s;
+      next;
+    }
+    die("bad xml\n") unless $xml =~ /(.*?\>)/s;
+    my $tag = $1;
+    $xml = substr($xml, length($tag));
+    my $mode = 0;
+    if ($tag =~ s/^\<\///s) {
+      chop $tag;
+      $mode = 1;       # end
+    } elsif ($tag =~ s/\/\>$//s) {
+      $mode = 2;       # start & end
+      $tag = substr($tag, 1);
+    } else {
+      $tag = substr($tag, 1);
+      chop $tag;
+    }
+    my @tag = split(/(=(?:\"[^\"]*\"|\'[^\']*\'|[^\"\s]*))?\s+/, "$tag ");
+    $tag = shift @tag;
+    shift @tag;
+    push @tag, undef if @tag & 1;
+    my %atts = @tag;
+    for (values %atts) {
+      next unless defined $_;
+      s/^=\"([^\"]*)\"$/=$1/s or s/^=\'([^\']*)\'$/=$1/s;
+      s/^=//s;
+      s/&lt;/</g;
+      s/&gt;/>/g;
+      s/&amp;/&/g;
+      s/&apos;/\'/g;
+      s/&quot;/\"/g;
+    }
+    if ($mode == 0 || $mode == 2) {
+      my $n = {};
+      push @{$node->{$tag}}, $n;
+      for (sort keys %atts) {
+       $n->{$_} = $atts{$_};
+      }
+      if ($mode == 0) {
+       push @nodestack, [ $tag, $node, $c ];
+       $c = '';
+       $node = $n;
+      }
+    } else {
+      die("element '$tag' closes without open\n") unless @nodestack;
+      die("element '$tag' closes, but I expected '$nodestack[-1]->[0]'\n") unless $nodestack[-1]->[0] eq $tag;
+      $c =~ s/^\s*//s;
+      $c =~ s/\s*$//s;
+      $node->{'_content'} = $c if $c ne '';
+      $node = $nodestack[-1]->[1];
+      $c = $nodestack[-1]->[2];
+      pop @nodestack;
+    }
+  }
+  $c .= $xml;
+  $c =~ s/^\s*//s;
+  $c =~ s/\s*$//s;
+  $node->{'_content'} = $c if $c ne '';
+  return $node;
+}
+
+sub unify {
+  my %h = map {$_ => 1} @_;
+  return grep(delete($h{$_}), @_);
+}
+
+sub findFallBackArchs {
+  my ($fallbackArchXML, $arch) = @_;
+  my @fa;
+
+  for my $a (@{$fallbackArchXML->{'arch'}||[]}) {
+    if ( $a->{'id'} eq $arch && $a->{'fallback'} ) {
+      @fa = unify( $a->{'fallback'}, findFallBackArchs($fallbackArchXML, $a->{'fallback'}));
+    }
+  }
+
+  return @fa
+}
+
+sub kiwiparse {
+  my ($xml, $arch, $count) = @_;
+  $count ||= 0;
+  die("kiwi config inclusion depth limit reached\n") if $count++ > 10;
+
+  my $ret = {};
+  my @types;
+  my @repos;
+  my @bootrepos;
+  my @packages;
+  my @extrasources;
+  my @requiredarch;
+  my $kiwi = parsexml($xml);
+  die("not a kiwi config\n") unless $kiwi && $kiwi->{'image'};
+  $kiwi = $kiwi->{'image'}->[0];
+  $ret->{'filename'} = $kiwi->{'name'} if $kiwi->{'name'};
+  my $description = (($kiwi->{'description'} || [])->[0]) || {};
+  if ($description->{'specification'}) {
+    $ret->{'name'} = $description->{'specification'}->[0]->{'_content'};
+  }
+  # take default version setting
+  my $preferences = (($kiwi->{'preferences'} || [])->[0]) || {};
+  if ($preferences->{'version'}) {
+    $ret->{'version'} = $preferences->{'version'}->[0]->{'_content'};
+  }
+  for my $type (@{$preferences->{'type'} || []}) {
+    next unless @{$preferences->{'type'}} == 1 || !$type->{'optional'};
+    if (defined $type->{'image'}) {
+      # for kiwi 4.1
+      push @types, $type->{'image'};
+    } else {
+      # for kiwi 3.8 and before
+      push @types, $type->{'_content'};
+    }
+    push @packages, "kiwi-filesystem:$type->{'filesystem'}" if $type->{'filesystem'};
+    if (defined $type->{'boot'}) {
+      if ($type->{'boot'} =~ /^obs:\/\/\/?([^\/]+)\/([^\/]+)\/?$/) {
+       next unless $bootcallback;
+       my ($bootxml, $xsrc) = $bootcallback->($1, $2);
+       next unless $bootxml;
+       push @extrasources, $xsrc if $xsrc;
+       my $bret = kiwiparse($bootxml, $arch, $count);
+       push @bootrepos, map {"$_->{'project'}/$_->{'repository'}"} @{$bret->{'path'} || []};
+       push @packages, @{$bret->{'deps'} || []};
+       push @extrasources, @{$bret->{'extrasource'} || []};
+      } else {
+       die("bad boot reference: $type->{'boot'}\n") unless $type->{'boot'} =~ /^([^\/]+)\/([^\/]+)$/;
+       push @packages, "kiwi-boot:$1";
+      }
+    }
+  }
+
+  my $instsource = ($kiwi->{'instsource'} || [])->[0];
+  if ($instsource) {
+    foreach my $repository(sort {$a->{priority} <=> $b->{priority}} @{$instsource->{'instrepo'} || []}) {
+      my $kiwisource = ($repository->{'source'} || [])->[0];
+      die("bad instsource path: $kiwisource->{'path'}\n") unless $kiwisource->{'path'} =~ /^obs:\/\/\/?([^\/]+)\/([^\/]+)\/?$/;
+      push @repos, "$1/$2";
+    }
+    if ($instsource->{'productoptions'}) {
+      my $productoptions = $instsource->{'productoptions'}->[0] || {};
+      for my $po (@{$productoptions->{'productvar'} || []}) {
+       $ret->{'version'} = $po->{'_content'} if $po->{'name'} eq 'VERSION';
+      }
+    }
+    if ($instsource->{'architectures'}) {
+      my $a = $instsource->{'architectures'}->[0] || {};
+      for my $ra (@{$a->{'requiredarch'} || []}) {
+       push @requiredarch, $ra->{'ref'} if defined $ra->{'ref'};
+      }
+    }
+  }
+
+  my @repositories = sort {$a->{'priority'} <=> $b->{'priority'}} @{$kiwi->{'repository'} || []};
+  if ($preferences->{'packagemanager'}->[0]->{'_content'} eq 'smart') {
+    @repositories = reverse @repositories;
+  }
+  for my $repository (@repositories) {
+    my $kiwisource = ($repository->{'source'} || [])->[0];
+    next if $kiwisource->{'path'} eq '/var/lib/empty'; # grr
+    die("bad path using not obs:/ URL: $kiwisource->{'path'}\n") unless $kiwisource->{'path'} =~ /^obs:\/\/\/?([^\/]+)\/([^\/]+)\/?$/;
+    push @repos, "$1/$2";
+  }
+
+  # Find packages and possible additional required architectures
+  my @additionalarchs;
+  my @pkgs;
+  push @pkgs, @{$kiwi->{'packages'}->[0]->{'package'}} if $kiwi->{'packages'};
+  if ($instsource) {
+    push @pkgs, @{$instsource->{'metadata'}->[0]->{'repopackage'} || []} if $instsource->{'metadata'};
+    push @pkgs, @{$instsource->{'repopackages'}->[0]->{'repopackage'} || []} if $instsource->{'repopackages'};
+  }
+  @pkgs = unify(@pkgs);
+  for my $package (@pkgs) {
+    # filter packages, which are not targeted for the wanted plattform
+    if ($package->{'arch'}) {
+      my $valid=undef;
+      if (@requiredarch) {
+        # this is a product
+        foreach my $ma(@requiredarch) {
+          foreach my $pa(split(",", $package->{'arch'})) {
+            $valid = 1 if $ma eq $pa;
+          }
+        }
+      } else {
+        # live appliance
+        my $ma = $arch;
+        $ma =~ s/i[456]86/i386/;
+        foreach my $pa(split(",", $package->{'arch'})) {
+          $pa =~ s/i[456]86/i386/;
+          $valid = 1 if $ma eq $pa;
+        }
+      }
+      next unless $valid;
+    }
+
+    # not nice, but optimizes our build dependencies
+    # FIXME: design a real blacklist option in kiwi
+    if ($package->{'onlyarch'} && $package->{'onlyarch'} eq "skipit") {
+       push @packages, "-".$package->{'name'};
+       next;
+    }
+
+    # we need this package
+    push @packages, $package->{'name'};
+
+    # find the maximal superset of possible required architectures
+    push @additionalarchs, split(',', $package->{'addarch'}) if $package->{'addarch'};
+    push @additionalarchs, split(',', $package->{'onlyarch'}) if $package->{'onlyarch'};
+  }
+  @requiredarch = unify(@requiredarch, @additionalarchs);
+  
+  my @fallbackarchs;
+  for my $arch (@requiredarch) {
+    push @fallbackarchs, findFallBackArchs($instsource->{'architectures'}[0], $arch) if $instsource->{'architectures'}[0];
+  }
+  @requiredarch = unify(@requiredarch, @fallbackarchs);
+
+  if (!$instsource) {
+    my $packman = $preferences->{'packagemanager'}->[0]->{'_content'};
+    push @packages, "kiwi-packagemanager:$packman";
+  } else {
+    push @packages, "kiwi-packagemanager:instsource";
+  }
+
+  $ret->{'exclarch'} = [ unify(@requiredarch) ] if @requiredarch;
+  $ret->{'deps'} = [ unify(@packages) ];
+  $ret->{'path'} = [ unify(@repos, @bootrepos) ];
+  $ret->{'imagetype'} = [ unify(@types) ];
+  $ret->{'extrasource'} = \@extrasources if @extrasources;
+  for (@{$ret->{'path'}}) {
+    my @s = split('/', $_, 2);
+    $_ = {'project' => $s[0], 'repository' => $s[1]};
+  }
+  return $ret;
+}
+
+sub parse {
+  my ($cf, $fn) = @_;
+
+  local *F;
+  open(F, '<', $fn) || die("$fn: $!\n");
+  my $xml = '';
+  1 while sysread(F, $xml, 4096, length($xml)) > 0;
+  close F;
+  $cf ||= {};
+  my $d;
+  eval {
+    $d = kiwiparse($xml, ($cf->{'arch'} || ''));
+  };
+  if ($@) {
+    my $err = $@;
+    $err =~ s/^\n$//s;
+    return {'error' => $err};
+  }
+  return $d;
+}
+
+sub show {
+  my ($fn, $field, $arch) = @ARGV;
+  my $cf = {'arch' => $arch};
+  my $d = parse($cf, $fn);
+  die("$d->{'error'}\n") if $d->{'error'};
+  my $x = $d->{$field};
+  $x = [ $x ] unless ref $x;
+  print "@$x\n";
+}
+
+# not implemented yet.
+sub queryiso {
+  my ($handle, %opts) = @_;
+  return {};
+}
+
+
+sub queryhdrmd5 {
+  my ($bin) = @_;
+  die("Build::Kiwi::queryhdrmd5 unimplemented.\n");
+}
+
+1;
diff --git a/Build/Rpm.pm b/Build/Rpm.pm
new file mode 100644 (file)
index 0000000..4c3c8d2
--- /dev/null
@@ -0,0 +1,832 @@
+package Build::Rpm;
+
+use strict;
+
+use Digest::MD5;
+
+sub expr {
+  my $expr = shift;
+  my $lev = shift;
+
+  $lev ||= 0;
+  my ($v, $v2);
+  $expr =~ s/^\s+//;
+  my $t = substr($expr, 0, 1);
+  if ($t eq '(') {
+    ($v, $expr) = expr(substr($expr, 1), 0);
+    return undef unless defined $v;
+    return undef unless $expr =~ s/^\)//;
+  } elsif ($t eq '!') {
+    ($v, $expr) = expr(substr($expr, 1), 0);
+    return undef unless defined $v;
+    $v = 0 if $v && $v eq '\"\"';
+    $v =~ s/^0+/0/ if $v;
+    $v = !$v;
+  } elsif ($t eq '-') {
+    ($v, $expr) = expr(substr($expr, 1), 0);
+    return undef unless defined $v;
+    $v = -$v;
+  } elsif ($expr =~ /^([0-9]+)(.*?)$/) {
+    $v = $1;
+    $expr = $2;
+  } elsif ($expr =~ /^([a-zA-Z_0-9]+)(.*)$/) {
+    $v = "\"$1\"";
+    $expr = $2;
+  } elsif ($expr =~ /^(\".*?\")(.*)$/) {
+    $v = $1;
+    $expr = $2;
+  } else {
+    return;
+  }
+  while (1) {
+    $expr =~ s/^\s+//;
+    if ($expr =~ /^&&/) {
+      return ($v, $expr) if $lev > 1;
+      ($v2, $expr) = expr(substr($expr, 2), 1);
+      return undef unless defined $v2;
+      $v = 0 if $v && $v eq '\"\"';
+      $v =~ s/^0+/0/;
+      $v2 = 0 if $v2 && $v2 eq '\"\"';
+      $v2 =~ s/^0+/0/;
+      $v &&= $v2;
+    } elsif ($expr =~ /^\|\|/) {
+      return ($v, $expr) if $lev > 1;
+      ($v2, $expr) = expr(substr($expr, 2), 1);
+      return undef unless defined $v2;
+      $v = 0 if $v && $v eq '\"\"';
+      $v =~ s/^0+/0/;
+      $v2 = 0 if $v2 && $v2 eq '\"\"';
+      $v2 =~ s/^0+/0/;
+      $v ||= $v2;
+    } elsif ($expr =~ /^>=/) {
+      return ($v, $expr) if $lev > 2;
+      ($v2, $expr) = expr(substr($expr, 2), 2);
+      return undef unless defined $v2;
+      $v = (($v =~ /^\"/) ? $v ge $v2 : $v >= $v2) ? 1 : 0;
+    } elsif ($expr =~ /^>/) {
+      return ($v, $expr) if $lev > 2;
+      ($v2, $expr) = expr(substr($expr, 1), 2);
+      return undef unless defined $v2;
+      $v = (($v =~ /^\"/) ? $v gt $v2 : $v > $v2) ? 1 : 0;
+    } elsif ($expr =~ /^<=/) {
+      return ($v, $expr) if $lev > 2;
+      ($v2, $expr) = expr(substr($expr, 2), 2);
+      return undef unless defined $v2;
+      $v = (($v =~ /^\"/) ? $v le $v2 : $v <= $v2) ? 1 : 0;
+    } elsif ($expr =~ /^</) {
+      return ($v, $expr) if $lev > 2;
+      ($v2, $expr) = expr(substr($expr, 1), 2);
+      return undef unless defined $v2;
+      $v = (($v =~ /^\"/) ? $v lt $v2 : $v < $v2) ? 1 : 0;
+    } elsif ($expr =~ /^==/) {
+      return ($v, $expr) if $lev > 2;
+      ($v2, $expr) = expr(substr($expr, 2), 2);
+      return undef unless defined $v2;
+      $v = (($v =~ /^\"/) ? $v eq $v2 : $v == $v2) ? 1 : 0;
+    } elsif ($expr =~ /^!=/) {
+      return ($v, $expr) if $lev > 2;
+      ($v2, $expr) = expr(substr($expr, 2), 2);
+      return undef unless defined $v2;
+      $v = (($v =~ /^\"/) ? $v ne $v2 : $v != $v2) ? 1 : 0;
+    } elsif ($expr =~ /^\+/) {
+      return ($v, $expr) if $lev > 3;
+      ($v2, $expr) = expr(substr($expr, 1), 3);
+      return undef unless defined $v2;
+      $v += $v2;
+    } elsif ($expr =~ /^-/) {
+      return ($v, $expr) if $lev > 3;
+      ($v2, $expr) = expr(substr($expr, 1), 3);
+      return undef unless defined $v2;
+      $v -= $v2;
+    } elsif ($expr =~ /^\*/) {
+      ($v2, $expr) = expr(substr($expr, 1), 4);
+      return undef unless defined $v2;
+      $v *= $v2;
+    } elsif ($expr =~ /^\//) {
+      ($v2, $expr) = expr(substr($expr, 1), 4);
+      return undef unless defined $v2 && 0 + $v2;
+      $v /= $v2;
+    } else {
+      return ($v, $expr);
+    }
+  }
+}
+
+sub parse {
+  my ($config, $specfile, $xspec) = @_;
+
+  my $packname;
+  my $exclarch;
+  my $badarch;
+  my @subpacks;
+  my @packdeps;
+  my @prereqs;
+  my $hasnfb;
+  my $nfbline;
+  my %macros;
+  my $ret = {};
+  my $ifdeps;
+
+  my $specdata;
+  local *SPEC;
+  if (ref($specfile) eq 'GLOB') {
+    *SPEC = *$specfile;
+  } elsif (ref($specfile) eq 'ARRAY') {
+    $specdata = [ @$specfile ];
+  } elsif (!open(SPEC, '<', $specfile)) {
+    warn("$specfile: $!\n");
+    $ret->{'error'} = "open $specfile: $!";
+    return $ret;
+  }
+  my @macros = @{$config->{'macros'}};
+  my $skip = 0;
+  my $main_preamble = 1;
+  my $preamble = 1;
+  my $inspec = 0;
+  my $hasif = 0;
+  my $lineno = 0;
+  while (1) {
+    my $line;
+    if (@macros) {
+      $line = shift @macros;
+      $hasif = 0 unless @macros;
+    } elsif ($specdata) {
+      $inspec = 1;
+      last unless @$specdata;
+      $line = shift @$specdata;
+      ++$lineno;
+      if (ref $line) {
+       $line = $line->[0]; # verbatim line
+       push @$xspec, $line if $xspec;
+       $xspec->[-1] = [ $line, undef ] if $xspec && $skip;
+       next;
+      }
+    } else {
+      $inspec = 1;
+      $line = <SPEC>;
+      last unless defined $line;
+      chomp $line;
+      ++$lineno;
+    }
+    push @$xspec, $line if $inspec && $xspec;
+    if ($line =~ /^#\s*neededforbuild\s*(\S.*)$/) {
+      if (defined $hasnfb) {
+       $xspec->[-1] = [ $xspec->[-1], undef ] if $inspec && $xspec;
+       next;
+      }
+      $hasnfb = $1;
+      $nfbline = \$xspec->[-1] if $inspec && $xspec;
+      next;
+    }
+    if ($line =~ /^\s*#/) {
+      next unless $line =~ /^#!BuildIgnore/;
+    }
+    my $expandedline = '';
+    if (!$skip) {
+      my $tries = 0;
+      # newer perls: \{((?:(?>[^{}]+)|(?2))*)\}
+      while ($line =~ /^(.*?)%(\{([^\}]+)\}|[\?\!]*[0-9a-zA-Z_]+|%|\()(.*?)$/) {
+       if ($tries++ > 1000) {
+         print STDERR "Warning: spec file parser ",($lineno?" line $lineno":''),": macro too deeply nested\n" if $config->{'warnings'};
+         $line = 'MACRO';
+         last;
+       }
+       $expandedline .= $1;
+       $line = $4;
+       my $macname = defined($3) ? $3 : $2;
+       my $macorig = $2;
+        if (defined($3) && $macname =~ /{/) {
+         while (($macname =~ y/{/{/) > ($macname =~ y/}/}/)) {
+           last unless $line =~ /^([^}]*)}(.*)$/;
+           $macname .= "}$1";
+           $macorig .= "$1}";
+           $line = $2;
+         }
+       }
+       my $mactest = 0;
+       if ($macname =~ /^\!\?/ || $macname =~ /^\?\!/) {
+         $mactest = -1;
+       } elsif ($macname =~ /^\?/) {
+         $mactest = 1;
+       }
+       $macname =~ s/^[\!\?]+//;
+       $macname =~ s/^([^:\s]*)\s.*/$1/;
+       my $macalt;
+       ($macname, $macalt) = split(':', $macname, 2);
+       if ($macname eq '%') {
+         $expandedline .= '%';
+         next;
+       } elsif ($macname eq '(') {
+         print STDERR "Warning: spec file parser",($lineno?" line $lineno":''),": can't expand %(...)\n" if $config->{'warnings'};
+         $line = 'MACRO';
+         last;
+       } elsif ($macname eq 'define' || $macname eq 'global') {
+         if ($line =~ /^\s*([0-9a-zA-Z_]+)(\([^\)]*\))?\s*(.*?)$/) {
+           my $macname = $1;
+           my $macargs = $2;
+           my $macbody = $3;
+           $macbody = undef if $macargs;
+           $macros{$macname} = $macbody;
+         }
+         $line = '';
+         last;
+       } elsif ($macname eq 'defined' || $macname eq 'with' || $macname eq 'undefined' || $macname eq 'without' || $macname eq 'bcond_with' || $macname eq 'bcond_without') {
+         my @args;
+         if ($macorig =~ /^\{(.*)\}$/) {
+           @args = split(' ', $1);
+           shift @args;
+         } else {
+           @args = split(' ', $line);
+           $line = '';
+         }
+         next unless @args;
+         if ($macname eq 'bcond_with') {
+           $macros{"with_$args[0]"} = 1 if exists $macros{"_with_$args[0]"};
+           next;
+         }
+         if ($macname eq 'bcond_without') {
+           $macros{"with_$args[0]"} = 1 unless exists $macros{"_without_$args[0]"};
+           next;
+         }
+         $args[0] = "with_$args[0]" if $macname eq 'with' || $macname eq 'without';
+         $line = ((exists($macros{$args[0]}) ? 1 : 0) ^ ($macname eq 'undefined' || $macname eq 'without' ? 1 : 0)).$line;
+       } elsif (exists($macros{$macname})) {
+         if (!defined($macros{$macname})) {
+           print STDERR "Warning: spec file parser",($lineno?" line $lineno":''),": can't expand '$macname'\n" if $config->{'warnings'};
+           $line = 'MACRO';
+           last;
+         }
+         $macalt = $macros{$macname} unless defined $macalt;
+         $macalt = '' if $mactest == -1;
+         $line = "$macalt$line";
+       } elsif ($mactest) {
+         $macalt = '' if !defined($macalt) || $mactest == 1;
+         $line = "$macalt$line";
+       } else {
+         $expandedline .= "%$macorig";
+       }
+      }
+    }
+    $line = $expandedline . $line;
+    if ($line =~ /^\s*%else\b/) {
+      $skip = 1 - $skip if $skip < 2;
+      next;
+    }
+    if ($line =~ /^\s*%endif\b/) {
+      $skip-- if $skip;
+      next;
+    }
+    $skip++ if $skip && $line =~ /^\s*%if/;
+
+    if ($skip) {
+      $xspec->[-1] = [ $xspec->[-1], undef ] if $xspec;
+      $ifdeps = 1 if $line =~ /^(BuildRequires|BuildPrereq|BuildConflicts|\#\!BuildIgnore)\s*:\s*(\S.*)$/i;
+      next;
+    }
+
+    if ($line =~ /^\s*%ifarch(.*)$/) {
+      my $arch = $macros{'_target_cpu'} || 'unknown';
+      my @archs = grep {$_ eq $arch} split(/\s+/, $1);
+      $skip = 1 if !@archs;
+      $hasif = 1;
+      next;
+    }
+    if ($line =~ /^\s*%ifnarch(.*)$/) {
+      my $arch = $macros{'_target_cpu'} || 'unknown';
+      my @archs = grep {$_ eq $arch} split(/\s+/, $1);
+      $skip = 1 if @archs;
+      $hasif = 1;
+      next;
+    }
+    if ($line =~ /^\s*%ifos(.*)$/) {
+      my $os = $macros{'_target_os'} || 'unknown';
+      my @oss = grep {$_ eq $os} split(/\s+/, $1);
+      $skip = 1 if !@oss;
+      $hasif = 1;
+      next;
+    }
+    if ($line =~ /^\s*%ifnos(.*)$/) {
+      my $os = $macros{'_target_os'} || 'unknown';
+      my @oss = grep {$_ eq $os} split(/\s+/, $1);
+      $skip = 1 if @oss;
+      $hasif = 1;
+      next;
+    }
+    if ($line =~ /^\s*%if(.*)$/) {
+      my ($v, $r) = expr($1);
+      $v = 0 if $v && $v eq '\"\"';
+      $v =~ s/^0+/0/ if $v;
+      $skip = 1 unless $v;
+      $hasif = 1;
+      next;
+    }
+    if ($main_preamble) {
+      if ($line =~ /^(Name|Version|Disttag|Release)\s*:\s*(\S+)/i) {
+       $ret->{lc $1} = $2;
+       $macros{lc $1} = $2;
+      } elsif ($line =~ /^(Source\d*|Patch\d*|Url)\s*:\s*(\S+)/i) {
+       $ret->{lc $1} = $2;
+      } elsif ($line =~ /^ExclusiveArch\s*:\s*(.*)/i) {
+       $exclarch ||= [];
+       push @$exclarch, split(' ', $1);
+      } elsif ($line =~ /^ExcludeArch\s*:\s*(.*)/i) {
+       $badarch ||= [];
+       push @$badarch, split(' ', $1);
+      }
+    }
+    if (@subpacks && $preamble && exists($ret->{'version'}) && $line =~ /^Version\s*:\s*(\S+)/i) {
+      $ret->{'multiversion'} = 1 if $ret->{'version'} ne $1;
+    }
+    if ($line =~ /^(?:Requires\(pre\)|Requires\(post\)|PreReq)\s*:\s*(\S.*)$/i) {
+      my $deps = $1;
+      my @deps = $deps =~ /([^\s\[,]+)(\s+[<=>]+\s+[^\s\[,]+)?(\s+\[[^\]]+\])?[\s,]*/g;
+      while (@deps) {
+       my ($pack, $vers, $qual) = splice(@deps, 0, 3);
+       next if $pack =~ /\//;
+       push @prereqs, $pack unless grep {$_ eq $pack} @prereqs;
+      }
+      next;
+    }
+    if ($preamble && ($line =~ /^(BuildRequires|BuildPrereq|BuildConflicts|\#\!BuildIgnore)\s*:\s*(\S.*)$/i)) {
+      my $what = $1;
+      my $deps = $2;
+      $ifdeps = 1 if $hasif;
+      my @deps = $deps =~ /([^\s\[,]+)(\s+[<=>]+\s+[^\s\[,]+)?(\s+\[[^\]]+\])?[\s,]*/g;
+      my $replace = 0;
+      my @ndeps = ();
+      while (@deps) {
+       my ($pack, $vers, $qual) = splice(@deps, 0, 3);
+       if (defined($qual)) {
+         $replace = 1;
+         my $arch = $macros{'_target_cpu'} || '';
+         my $proj = $macros{'_target_project'} || '';
+         $qual =~ s/^\s*\[//;
+         $qual =~ s/\]$//;
+         my $isneg = 0;
+         my $bad;
+         for my $q (split('[\s,]', $qual)) {
+           $isneg = 1 if $q =~ s/^\!//;
+           $bad = 1 if !defined($bad) && !$isneg;
+           if ($isneg) {
+             if ($q eq $arch || $q eq $proj) {
+               $bad = 1;
+               last;
+             }
+           } elsif ($q eq $arch || $q eq $proj) {
+             $bad = 0;
+           }
+         }
+         next if $bad;
+       }
+       $vers = '' unless defined $vers;
+       $vers =~ s/=(>|<)/$1=/;
+       push @ndeps, "$pack$vers";
+      }
+
+      $replace = 1 if grep {/^-/} @ndeps;
+      if (lc($what) ne 'buildrequires' && lc($what) ne 'buildprereq') {
+       push @packdeps, map {"-$_"} @ndeps;
+       next;
+      }
+      if (defined($hasnfb)) {
+       if ((grep {$_ eq 'glibc' || $_ eq 'rpm' || $_ eq 'gcc' || $_ eq 'bash'} @ndeps) > 2) {
+         # ignore old generated BuildRequire lines.
+         $xspec->[-1] = [ $xspec->[-1], undef ] if $xspec;
+         next;
+       }
+      }
+      push @packdeps, @ndeps;
+      next unless $xspec && $inspec;
+      if ($replace) {
+       my @cndeps = grep {!/^-/} @ndeps;
+       if (@cndeps) {
+         $xspec->[-1] = [ $xspec->[-1], "$what:  ".join(' ', @cndeps) ];
+       } else {
+         $xspec->[-1] = [ $xspec->[-1], ''];
+       }
+      }
+      next;
+    }
+
+    if ($line =~ /^\s*%package\s+(-n\s+)?(\S+)/) {
+      if ($1) {
+       push @subpacks, $2;
+      } else {
+       push @subpacks, $ret->{'name'}.'-'.$2 if defined $ret->{'name'};
+      }
+      $preamble = 1;
+      $main_preamble = 0;
+    }
+
+    if ($line =~ /^\s*%(prep|build|install|check|clean|preun|postun|pretrans|posttrans|pre|post|files|changelog|description|triggerpostun|triggerun|triggerin|trigger|verifyscript)/) {
+      $main_preamble = 0;
+      $preamble = 0;
+    }
+
+    # do this always?
+    if ($xspec && @$xspec && $config->{'save_expanded'}) {
+      $xspec->[-1] = [ $xspec->[-1], $line ];
+    }
+  }
+  close SPEC unless ref $specfile;
+  if (defined($hasnfb)) {
+    if (!@packdeps) {
+      @packdeps = split(' ', $hasnfb);
+    } elsif ($nfbline) {
+      $$nfbline = [$$nfbline, undef ];
+    }
+  }
+  unshift @subpacks, $ret->{'name'};
+  $ret->{'subpacks'} = \@subpacks;
+  $ret->{'exclarch'} = $exclarch if defined $exclarch;
+  $ret->{'badarch'} = $badarch if defined $badarch;
+  $ret->{'deps'} = \@packdeps;
+  $ret->{'prereqs'} = \@prereqs if @prereqs;
+  $ret->{'configdependent'} = 1 if $ifdeps;
+  return $ret;
+}
+
+###########################################################################
+
+my %rpmstag = (
+  "SIGTAG_SIZE"    => 1000,     # /*!< internal Header+Payload size in bytes. */
+  "SIGTAG_MD5"     => 1004,     # /*!< internal MD5 signature. */
+  "NAME"           => 1000,
+  "VERSION"        => 1001,
+  "RELEASE"        => 1002,
+  "EPOCH"          => 1003,
+  "SUMMARY"        => 1004,
+  "DESCRIPTION"    => 1005,
+  "ARCH"           => 1022,
+  "OLDFILENAMES"   => 1027,
+  "SOURCERPM"      => 1044,
+  "PROVIDENAME"    => 1047,
+  "REQUIREFLAGS"   => 1048,
+  "REQUIRENAME"    => 1049,
+  "REQUIREVERSION" => 1050,
+  "NOSOURCE"       => 1051,
+  "NOPATCH"        => 1052,
+  "PROVIDEFLAGS"   => 1112,
+  "PROVIDEVERSION" => 1113,
+  "DIRINDEXES"     => 1116,
+  "BASENAMES"      => 1117,
+  "DIRNAMES"       => 1118,
+);
+
+sub rpmq {
+  my ($rpm, @stags) = @_;
+
+  my @sigtags = grep {/^SIGTAG_/} @stags;
+  @stags = grep {!/^SIGTAG_/} @stags;
+  my $dosigs = @sigtags && !@stags;
+  @stags = @sigtags if $dosigs;
+
+  my $need_filenames = grep { $_ eq 'FILENAMES' } @stags;
+  push @stags, 'BASENAMES', 'DIRNAMES', 'DIRINDEXES', 'OLDFILENAMES' if $need_filenames;
+  @stags = grep { $_ ne 'FILENAMES' } @stags if $need_filenames;
+
+  my %stags = map {0 + ($rpmstag{$_} || $_) => $_} @stags;
+
+  my ($magic, $sigtype, $headmagic, $cnt, $cntdata, $lead, $head, $index, $data, $tag, $type, $offset, $count);
+
+  local *RPM;
+  if (ref($rpm) eq 'ARRAY') {
+    ($headmagic, $cnt, $cntdata) = unpack('N@8NN', $rpm->[0]);
+    if ($headmagic != 0x8eade801) {
+      warn("Bad rpm\n");
+      return ();
+    }
+    if (length($rpm->[0]) < 16 + $cnt * 16 + $cntdata) {
+      warn("Bad rpm\n");
+      return ();
+    }
+    $index = substr($rpm->[0], 16, $cnt * 16);
+    $data = substr($rpm->[0], 16 + $cnt * 16, $cntdata);
+  } else {
+    if (ref($rpm) eq 'GLOB') {
+      *RPM = *$rpm;
+    } elsif (!open(RPM, '<', $rpm)) {
+      warn("$rpm: $!\n");
+      return ();
+    }
+    if (read(RPM, $lead, 96) != 96) {
+      warn("Bad rpm $rpm\n");
+      close RPM unless ref($rpm);
+      return ();
+    }
+    ($magic, $sigtype) = unpack('N@78n', $lead);
+    if ($magic != 0xedabeedb || $sigtype != 5) {
+      warn("Bad rpm $rpm\n");
+      close RPM unless ref($rpm);
+      return ();
+    }
+    if (read(RPM, $head, 16) != 16) {
+      warn("Bad rpm $rpm\n");
+      close RPM unless ref($rpm);
+      return ();
+    }
+    ($headmagic, $cnt, $cntdata) = unpack('N@8NN', $head);
+    if ($headmagic != 0x8eade801) {
+      warn("Bad rpm $rpm\n");
+      close RPM unless ref($rpm);
+      return ();
+    }
+    if (read(RPM, $index, $cnt * 16) != $cnt * 16) {
+      warn("Bad rpm $rpm\n");
+      close RPM unless ref($rpm);
+      return ();
+    }
+    $cntdata = ($cntdata + 7) & ~7;
+    if (read(RPM, $data, $cntdata) != $cntdata) {
+      warn("Bad rpm $rpm\n");
+      close RPM unless ref($rpm);
+      return ();
+    }
+  }
+
+  my %res = ();
+  if (@sigtags && !$dosigs) {
+    %res = &rpmq(["$head$index$data"], @sigtags);
+  }
+  if (ref($rpm) eq 'ARRAY' && !$dosigs && @$rpm > 1) {
+    my %res2 = &rpmq([ $rpm->[1] ], @stags);
+    %res = (%res, %res2);
+    return %res;
+  }
+  if (ref($rpm) ne 'ARRAY' && !$dosigs) {
+    if (read(RPM, $head, 16) != 16) {
+      warn("Bad rpm $rpm\n");
+      close RPM unless ref($rpm);
+      return ();
+    }
+    ($headmagic, $cnt, $cntdata) = unpack('N@8NN', $head);
+    if ($headmagic != 0x8eade801) {
+      warn("Bad rpm $rpm\n");
+      close RPM unless ref($rpm);
+      return ();
+    }
+    if (read(RPM, $index, $cnt * 16) != $cnt * 16) {
+      warn("Bad rpm $rpm\n");
+      close RPM unless ref($rpm);
+      return ();
+    }
+    if (read(RPM, $data, $cntdata) != $cntdata) {
+      warn("Bad rpm $rpm\n");
+      close RPM unless ref($rpm);
+      return ();
+    }
+  }
+  close RPM unless ref($rpm);
+
+#  return %res unless @stags;
+
+  while($cnt-- > 0) {
+    ($tag, $type, $offset, $count, $index) = unpack('N4a*', $index);
+    $tag = 0+$tag;
+    if ($stags{$tag} || !@stags) {
+      eval {
+       my $otag = $stags{$tag} || $tag;
+       if ($type == 0) {
+         $res{$otag} = [ '' ];
+       } elsif ($type == 1) {
+         $res{$otag} = [ unpack("\@${offset}c$count", $data) ];
+       } elsif ($type == 2) {
+         $res{$otag} = [ unpack("\@${offset}c$count", $data) ];
+       } elsif ($type == 3) {
+         $res{$otag} = [ unpack("\@${offset}n$count", $data) ];
+       } elsif ($type == 4) {
+         $res{$otag} = [ unpack("\@${offset}N$count", $data) ];
+       } elsif ($type == 5) {
+         $res{$otag} = [ undef ];
+       } elsif ($type == 6) {
+         $res{$otag} = [ unpack("\@${offset}Z*", $data) ];
+       } elsif ($type == 7) {
+         $res{$otag} = [ unpack("\@${offset}a$count", $data) ];
+       } elsif ($type == 8 || $type == 9) {
+         my $d = unpack("\@${offset}a*", $data);
+         my @res = split("\0", $d, $count + 1);
+         $res{$otag} = [ splice @res, 0, $count ];
+       } else {
+         $res{$otag} = [ undef ];
+       }
+      };
+      if ($@) {
+       warn("Bad rpm $rpm: $@\n");
+       return ();
+      }
+    }
+  }
+
+  if ($need_filenames) {
+    if ($res{'OLDFILENAMES'}) {
+      $res{'FILENAMES'} = [ @{$res{'OLDFILENAMES'}} ];
+    } else {
+      my $i = 0;
+      $res{'FILENAMES'} = [ map {"$res{'DIRNAMES'}->[$res{'DIRINDEXES'}->[$i++]]$_"} @{$res{'BASENAMES'}} ];
+    }
+  }
+
+  return %res;
+}
+
+sub add_flagsvers {
+  my $res = shift;
+  my $name = shift;
+  my $flags = shift;
+  my $vers = shift;
+
+  return unless $res;
+  my @flags = @{$res->{$flags} || []};
+  my @vers = @{$res->{$vers} || []};
+  for (@{$res->{$name}}) {
+    if (@flags && ($flags[0] & 0xe) && @vers) {
+      $_ .= ' ';
+      $_ .= '<' if $flags[0] & 2;
+      $_ .= '>' if $flags[0] & 4;
+      $_ .= '=' if $flags[0] & 8;
+      $_ .= " $vers[0]";
+    }
+    shift @flags;
+    shift @vers;
+  }
+}
+
+sub verscmp_part {
+  my ($s1, $s2) = @_;
+  if (!defined($s1)) {
+    return defined($s2) ? -1 : 0;
+  }
+  return 1 if !defined $s2;
+  return 0 if $s1 eq $s2;
+  while (1) {
+    $s1 =~ s/^[^a-zA-Z0-9]+//;
+    $s2 =~ s/^[^a-zA-Z0-9]+//;
+    my ($x1, $x2, $r);
+    if ($s1 =~ /^([0-9]+)(.*?)$/) {
+      $x1 = $1;
+      $s1 = $2;
+      $s2 =~ /^([0-9]*)(.*?)$/;
+      $x2 = $1;
+      $s2 = $2;
+      return 1 if $x2 eq '';
+      $x1 =~ s/^0+//;
+      $x2 =~ s/^0+//;
+      $r = length($x1) - length($x2) || $x1 cmp $x2;
+    } elsif ($s1 ne '' && $s2 ne '') {
+      $s1 =~ /^([a-zA-Z]*)(.*?)$/;
+      $x1 = $1;
+      $s1 = $2;
+      $s2 =~ /^([a-zA-Z]*)(.*?)$/;
+      $x2 = $1;
+      $s2 = $2;
+      return -1 if $x1 eq '' || $x2 eq '';
+      $r = $x1 cmp $x2;
+    }
+    return $r > 0 ? 1 : -1 if $r;
+    if ($s1 eq '') {
+      return $s2 eq '' ? 0 : -1;
+    }
+    return 1 if $s2 eq ''
+  }
+}
+
+sub verscmp {
+  my ($s1, $s2, $dtest) = @_;
+
+  return 0 if $s1 eq $s2;
+  my ($e1, $v1, $r1) = $s1 =~ /^(?:(\d+):)?(.*?)(?:-([^-]*))?$/s;
+  $e1 = 0 unless defined $e1;
+  my ($e2, $v2, $r2) = $s2 =~ /^(?:(\d+):)?(.*?)(?:-([^-]*))?$/s;
+  $e2 = 0 unless defined $e2;
+  if ($e1 ne $e2) {
+    my $r = verscmp_part($e1, $e2);
+    return $r if $r;
+  }
+  return 0 if $dtest && ($v1 eq '' || $v2 eq '');
+  if ($v1 ne $v2) {
+    my $r = verscmp_part($v1, $v2);
+    return $r if $r;
+  }
+  $r1 = '' unless defined $r1;
+  $r2 = '' unless defined $r2;
+  return 0 if $dtest && ($r1 eq '' || $r2 eq '');
+  if ($r1 ne $r2) {
+    return verscmp_part($r1, $r2);
+  }
+  return 0;
+}
+
+sub query {
+  my ($handle, %opts) = @_;
+
+  my @tags = qw{NAME SOURCERPM NOSOURCE NOPATCH SIGTAG_MD5 PROVIDENAME PROVIDEFLAGS PROVIDEVERSION REQUIRENAME REQUIREFLAGS REQUIREVERSION};
+  push @tags, qw{EPOCH VERSION RELEASE ARCH};
+  push @tags, qw{FILENAMES} if $opts{'filelist'};
+  push @tags, qw{SUMMARY DESCRIPTION} if $opts{'description'};
+  my %res = rpmq($handle, @tags);
+  return undef unless %res;
+  my $src = $res{'SOURCERPM'}->[0];
+  $src = '' unless defined $src;
+  $src =~ s/-[^-]*-[^-]*\.[^\.]*\.rpm//;
+  add_flagsvers(\%res, 'PROVIDENAME', 'PROVIDEFLAGS', 'PROVIDEVERSION');
+  add_flagsvers(\%res, 'REQUIRENAME', 'REQUIREFLAGS', 'REQUIREVERSION');
+  my $data = {
+    name => $res{'NAME'}->[0],
+    hdrmd5 => unpack('H32', $res{'SIGTAG_MD5'}->[0]),
+  };
+  if ($opts{'alldeps'}) {
+    $data->{'provides'} = [ @{$res{'PROVIDENAME'} || []} ];
+    $data->{'requires'} = [ @{$res{'REQUIRENAME'} || []} ];
+  } else {
+    $data->{'provides'} = [ grep {!/^rpmlib\(/ && !/^\//} @{$res{'PROVIDENAME'} || []} ];
+    $data->{'requires'} = [ grep {!/^rpmlib\(/ && !/^\//} @{$res{'REQUIRENAME'} || []} ];
+  }
+
+  # rpm3 compatibility: retrofit missing self provides
+  my $haveselfprovides;
+  if (@{$data->{'provides'}}) {
+    if ($data->{'provides'}->[-1] =~ /^\Q$res{'NAME'}->[0]\E =/) {
+      $haveselfprovides = 1;
+    } elsif (@{$data->{'provides'}} > 1 && $data->{'provides'}->[-2] =~ /^\Q$res{'NAME'}->[0]\E =/) {
+      $haveselfprovides = 1;
+    }
+  }
+  if (!$haveselfprovides) {
+    my $evr = "$res{'VERSION'}->[0]-$res{'RELEASE'}->[0]";
+    $evr = "$res{'EPOCH'}->[0]:$evr" if $res{'EPOCH'} && $res{'EPOCH'}->[0];
+    push @{$data->{'provides'}}, "$res{'NAME'}->[0] = $evr";
+  }
+
+  $data->{'source'} = $src if $src ne '';
+  if ($opts{'evra'}) {
+    my $arch = $res{'ARCH'}->[0];
+    $arch = $res{'NOSOURCE'} || $res{'NOPATCH'} ? 'nosrc' : 'src' unless $src ne '';
+    $data->{'version'} = $res{'VERSION'}->[0];
+    $data->{'release'} = $res{'RELEASE'}->[0];
+    $data->{'arch'} = $arch;
+    $data->{'epoch'} = $res{'EPOCH'}->[0] if exists $res{'EPOCH'};
+  }
+  if ($opts{'filelist'}) {
+    $data->{'filelist'} = $res{'FILENAMES'};
+  }
+  if ($opts{'description'}) {
+    $data->{'summary'} = $res{'SUMMARY'}->[0];
+    $data->{'description'} = $res{'DESCRIPTION'}->[0];
+  }
+  return $data;
+}
+
+sub queryhdrmd5 {
+  my ($bin, $leadsigp) = @_;
+
+  local *F;
+  open(F, '<', $bin) || die("$bin: $!\n");
+  my $buf = '';
+  my $l;
+  while (length($buf) < 96 + 16) {
+    $l = sysread(F, $buf, 4096, length($buf));
+    if (!$l) {
+      warn("$bin: read error\n");
+      close(F);
+      return undef;
+    }
+  }
+  my ($magic, $sigtype) = unpack('N@78n', $buf);
+  if ($magic != 0xedabeedb || $sigtype != 5) {
+    warn("$bin: not a rpm (bad magic of header type)\n");
+    close(F);
+    return undef;
+  }
+  my ($headmagic, $cnt, $cntdata) = unpack('@96N@104NN', $buf);
+  if ($headmagic != 0x8eade801) {
+    warn("$bin: not a rpm (bad sig header magic)\n");
+    close(F);
+    return undef;
+  }
+  my $hlen = 96 + 16 + $cnt * 16 + $cntdata;
+  $hlen = ($hlen + 7) & ~7;
+  while (length($buf) < $hlen) {
+    $l = sysread(F, $buf, 4096, length($buf));
+    if (!$l) {
+      warn("$bin: read error\n");
+      close(F);
+      return undef;
+    }
+  }
+  close F;
+  $$leadsigp = Digest::MD5::md5_hex(substr($buf, 0, $hlen)) if $leadsigp;
+  my $idxarea = substr($buf, 96 + 16, $cnt * 16);
+  if ($idxarea !~ /\A(?:.{16})*\000\000\003\354\000\000\000\007(....)\000\000\000\020/s) {
+    warn("$bin: no md5 signature header\n");
+    return undef;
+  }
+  my $md5off = unpack('N', $1);
+  if ($md5off >= $cntdata) {
+    warn("$bin: bad md5 offset\n");
+    return undef;
+  }
+  $md5off += 96 + 16 + $cnt * 16;
+  return unpack("\@${md5off}H32", $buf);
+}
+
+1;
diff --git a/Build/Susetags.pm b/Build/Susetags.pm
new file mode 100644 (file)
index 0000000..cd0a103
--- /dev/null
@@ -0,0 +1,66 @@
+package Build::Susetags;
+
+use strict;
+use warnings;
+use Data::Dumper;
+
+sub addpkg {
+  my ($pkgs, $cur, $order, $cb, $cbdata, @arches) = @_;
+  if (defined($cur) && (!@arches || grep { /$cur->{'arch'}/ } @arches)) {
+    if(!$cb || &$cb($cur, $cbdata)) {
+      my $k = "$cur->{'name'}-$cur->{'version'}-$cur->{'release'}-$cur->{'arch'}";
+      $pkgs->{$k} = $cur;
+      # keep order (or should we use Tie::IxHash?)
+      push @{$order}, $k if defined $order;
+    }
+  }
+}
+
+sub parse {
+  # if @arches is empty take all arches
+  my ($file, $tmap, $order, @arches) = @_;
+  my $cb;
+  my $cbdata;
+  if (ref $order eq 'HASH') {
+    my $d = $order;
+    $order = undef;
+    $cb = $d->{'cb'} if (exists $d->{'cb'});
+    $cbdata = $d->{'data'} if (exists $d->{'data'});
+  }
+
+  # if @arches is empty take all arches
+  my @needed = keys %$tmap;
+  my $r = '(' . join('|', @needed) . '|Pkg):\s*(.*)';
+
+  if (!open(F, '<', $file)) {
+    if (!open(F, '-|', "gzip", "-dc", $file.'.gz')) {
+      die "$file: $!";
+    }
+  }
+
+  my $cur;
+  my $pkgs = {};
+  while (<F>) {
+    chomp;
+    next unless $_ =~ /([\+=])$r/;
+    my ($multi, $tag, $data) = ($1, $2, $3);
+    if ($multi eq '+') {
+      while (<F>) {
+       chomp;
+       last if $_ =~ /-$tag/;
+       push @{$cur->{$tmap->{$tag}}}, $_;
+      }
+    } elsif ($tag eq 'Pkg') {
+      addpkg($pkgs, $cur, $order, $cb, $cbdata, @arches);
+      $cur = {};
+      ($cur->{'name'}, $cur->{'version'}, $cur->{'release'}, $cur->{'arch'}) = split(' ', $data);
+    } else {
+      $cur->{$tmap->{$tag}} = $data;
+    }
+  }
+  addpkg($pkgs, $cur, $order, $cb, $cbdata, @arches);
+  close(F);
+  return $pkgs;
+}
+
+1;
diff --git a/Build/Zypp.pm b/Build/Zypp.pm
new file mode 100644 (file)
index 0000000..354adca
--- /dev/null
@@ -0,0 +1,33 @@
+package Build::Zypp;
+
+use strict;
+
+our $root = '';
+
+sub parsecfg($)
+{
+  my $file = shift;
+  my $repocfg = "$root/etc/zypp/repos.d/$file.repo";
+  local *REPO;
+  open(REPO, '<', $repocfg) or return undef;
+  my $name;
+  my $repo = {};
+  while (<REPO>) {
+    chomp;
+    if (/^\[(.+)\]/) {
+      $name = $1;
+    } else {
+      my ($key, $value) = split(/=/,$_,2);
+      $repo->{$key} = $value if defined $key;
+    }
+  }
+  close(REPO);
+  return undef unless $name;
+  $repo->{'description'} = $repo->{'name'} if exists $repo->{'name'};
+  $repo->{'name'} = $name;
+  return $repo;
+}
+
+1;
+
+# vim: sw=2
diff --git a/Makefile b/Makefile
new file mode 100644 (file)
index 0000000..6c05a47
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,79 @@
+VERSION=0.1
+SCM=$(shell if test -d .svn; then echo svn; elif test -d .git; then echo git; fi)
+DATE=$(shell date +%Y%m%d%H%M)
+BUILD=build
+
+ifeq ($(SCM),svn)
+SVNVER=_SVN$(shell LANG=C svnversion .)
+endif
+
+prefix=/usr
+bindir=$(prefix)/bin
+datadir=$(prefix)/share
+libdir=$(prefix)/lib
+pkglibdir=$(libdir)/$(BUILD)
+mandir=$(datadir)/man
+man1dir=$(mandir)/man1
+sysconfdir=/etc
+DESTDIR=
+
+all:
+
+install:
+       install -m755 -d \
+           $(DESTDIR)$(pkglibdir)/configs \
+           $(DESTDIR)$(pkglibdir)/Build \
+           $(DESTDIR)$(bindir) \
+           $(DESTDIR)$(man1dir)
+       install -m755 \
+           build \
+           build_kiwi.sh \
+           vc \
+           createrpmdeps \
+           order \
+           expanddeps \
+           computeblocklists \
+           extractbuild \
+           getbinaryid \
+           killchroot \
+           getmacros \
+           getoptflags \
+           getchangetarget \
+           common_functions \
+           init_buildsystem \
+           initscript_qemu_vm \
+           substitutedeps \
+           debtransform \
+           debtransformbz2 \
+           debtransformzip \
+           mkbaselibs \
+           mkdrpms \
+           createrepomddeps \
+           createyastdeps \
+           changelog2spec \
+           spec2changelog \
+           download \
+           spec_add_patch \
+           spectool \
+           signdummy \
+           unrpm \
+           $(DESTDIR)$(pkglibdir)
+       install -m644 Build/*.pm $(DESTDIR)$(pkglibdir)/Build
+       install -m644 *.pm baselibs_global*.conf $(DESTDIR)$(pkglibdir)
+       install -m644 configs/* $(DESTDIR)$(pkglibdir)/configs
+       install -m644 build.1 $(DESTDIR)$(man1dir)
+       ln -sf $(pkglibdir)/build $(DESTDIR)$(bindir)/build
+       ln -sf $(pkglibdir)/vc    $(DESTDIR)$(bindir)/buildvc
+       ln -sf $(pkglibdir)/unrpm $(DESTDIR)$(bindir)/unrpm
+
+dist:
+ifeq ($(SCM),svn)
+       rm -rf $(BUILD)-$(VERSION)$(SVNVER)
+       svn export . $(BUILD)-$(VERSION)$(SVNVER)
+       tar --force-local -cjf $(BUILD)-$(VERSION)$(SVNVER).tar.bz2 $(BUILD)-$(VERSION)$(SVNVER)
+       rm -rf $(BUILD)-$(VERSION)$(SVNVER)
+else
+ifeq ($(SCM),git)
+       git archive --prefix=$(BUILD)-$(VERSION)_git$(DATE)/ HEAD| bzip2 > $(BUILD)-$(VERSION)_git$(DATE).tar.bz2
+endif
+endif
diff --git a/README b/README
new file mode 100644 (file)
index 0000000..3d758ae
--- /dev/null
+++ b/README
@@ -0,0 +1,21 @@
+
+This script is used for building SUSE Linux RPMs in
+a clean and safe chroot'ed build environment.
+
+At first you need to copy your SUSE Linux CDs into a
+path reachable by the build script, for example /home/suse-8.2-i386.
+
+If you have a DVD Drive and the SUSE Linux DVD, you can mount it
+and use this as the source for the RPMs.
+
+To build an RPM, change into the directory with the sources
+and the SPEC file. Then start the build script:
+env BUILD_RPMS=/home/suse-8.2-i386/suse build
+
+If this was successful you can find the binary and source RPMs below
+/var/tmp/build-root/usr/src/packages/
+
+Note: Depending on which package you want to build, you'll need
+a few hundred megabytes for the build in /var/tmp/build-root.
+
+For more information on using build, see 'man build'.
diff --git a/baselibs_global-deb.conf b/baselibs_global-deb.conf
new file mode 100644 (file)
index 0000000..3a56a1a
--- /dev/null
@@ -0,0 +1,39 @@
+arch i586   targets x86_64:32bit ia64:x86
+arch i686   targets x86_64:32bit ia64:x86
+arch s390   targets s390x:32bit
+arch ppc    targets ppc64:32bit
+arch ppc64  targets ppc:64bit
+
+configdir /usr/lib/baselibs-<targettype>/bin
+
+targettype x86 prefix /emul/ia32-linux
+
+targettype x86 extension -x86
+targettype 32bit extension 32
+targettype 64bit extension 64
+
+targetname <name>-<targettype>
+
++.*/lib(64)?/.*\.(so.*|o|a|la)$
+
+targettype 64bit -^(/usr)?/lib/lib
+targettype 32bit -/lib64/
+targettype x86   -/lib64/
+
+config    +.*bin.*-config$
+config    -/kde-config$
+
+targettype x86 requires "ia32el"
+targettype x86 prereq "glibc-x86"
+
+package /.(?<!-devel)$/
+post #!/bin/sh
+#post "/sbin/ldconfig"
+
+package /(.*)-devel$/
+targettype x86 block!
+requires "<name> = <version>"
+#requires "<match1>-<targettype> = <version>"
+
+package /(.*)-debuginfo$/
++/usr/lib(64)?/debug/.*/lib(64)?/.*\.(so.*|o|a|la)\.debug$
diff --git a/baselibs_global.conf b/baselibs_global.conf
new file mode 100644 (file)
index 0000000..96191bf
--- /dev/null
@@ -0,0 +1,45 @@
+arch i586   targets x86_64:32bit ia64:x86
+arch i686   targets x86_64:32bit ia64:x86
+arch s390   targets s390x:32bit
+arch ppc    targets ppc64:32bit
+arch ppc64  targets ppc:64bit
+arch sparc     targets sparc64:32bit
+arch sparcv8   targets sparc64:32bit
+arch sparcv9   targets sparc64:32bit
+arch sparcv9v  targets sparc64v:32bit
+arch sparc64   targets sparcv9:64bit
+arch sparc64v  targets sparcv9v:64bit
+
+configdir /usr/lib/baselibs-<targettype>/bin
+
+targettype x86 prefix /emul/ia32-linux
+
+targettype x86 extension -x86
+targettype 32bit extension 32
+targettype 64bit extension 64
+
+targetname <name>-<targettype>
+
++.*/lib(64)?/.*\.(so.*|o|a|la)$
+
+targettype 64bit -^(/usr)?/lib/lib
+targettype 32bit -/lib64/
+targettype x86   -/lib64/
+
+config    +.*bin.*-config$
+config    -/kde-config$
+
+targettype x86 requires "ia32el"
+targettype x86 prereq "glibc-x86"
+
+package /.(?<!-devel)$/
+post "/sbin/ldconfig"
+
+package /(.*)-devel$/
+targettype x86 block!
+requires "<name> = <version>"
+requires "<match1>-<targettype> = <version>"
+
+package /(.*)-debuginfo$/
++/usr/lib(64)?/debug/.*/lib(64)?/.*\.(so.*|o|a|la)\.debug$
++/usr/lib(64)?/debug/.build-id/.*
diff --git a/build b/build
new file mode 100755 (executable)
index 0000000..47cee3d
--- /dev/null
+++ b/build
@@ -0,0 +1,2068 @@
+#!/bin/bash
+# Script to build a package.  It uses init_buildsystem to setup a chroot
+# building tree.  This script needs a directory as parameter.  This directory
+# has to include sources and a spec file.
+#
+# BUILD_ROOT        here the packages will be built
+#
+# (c) 1997-2008 SuSE GmbH Nuernberg, Germany
+
+test -z "$BUILD_DIR" && BUILD_DIR=/usr/lib/build
+test -z "$BUILD_ROOT" && BUILD_ROOT=/var/tmp/build-root
+
+export BUILD_ARCH BUILD_HOST_ARCH BUILD_ROOT BUILD_RPMS BUILD_DIR BUILD_DEBUG
+export BUILD_DIST
+
+ccache=0
+icecream=0
+shell=
+definesnstuff=()
+repos=()
+old_packages=()
+
+# defaults for vm_img_mkfs
+vm_img_mkfs_ext4='mkfs.ext4 -m 0 -q -F'
+vm_img_tunefs_ext4='tune2fs -c 0 -O ^has_journal'
+vm_img_mkfs_ext3='mkfs.ext3 -m 0 -q -F'
+vm_img_tunefs_ext3='tune2fs -c 0 -o journal_data_writeback'
+vm_img_mkfs_ext2='mkfs.ext2 -m 0 -q -F'
+vm_img_tunefs_ext2='tune2fs -c 0'
+vm_img_mkfs_reiserfs='mkreiserfs -q -f'
+
+vm_kernel=/boot/vmlinuz
+vm_initrd=/boot/initrd
+qemu_bin=/usr/bin/qemu
+uml_kernel=/boot/vmlinux-um
+uml_initrd=/boot/initrd-um
+
+kvm_bin=/usr/bin/qemu-kvm
+# whether we have virtio support
+kvm_virtio=
+
+# need to restore build root owner for non-root builds
+browner=0
+
+# Default uid:gid for the build user
+ABUILD_UID=399
+ABUILD_GID=399
+
+DO_INIT=true
+DO_LINT=
+DO_CHECKS=true
+CLEAN_BUILD=
+SPECFILES=()
+SRCDIR=
+BUILD_JOBS=
+ABUILD_TARGET=
+CREATE_BASELIBS=
+USEUSEDFORBUILD=
+LIST_STATE=
+VM_IMAGE=
+VM_SWAP=
+VM_KERNEL=
+VM_INITRD=
+VMDISK_ROOTSIZE=4096
+VMDISK_SWAPSIZE=1024
+VMDISK_FILESYSTEM=ext3
+MEMSIZE=
+RUNNING_IN_VM=
+RPMLIST=
+RELEASE=
+REASON=
+NOROOTFORBUILD=
+LOGFILE=
+KILL=
+CHANGELOG=
+BUILD_DEBUG=
+PERSONALITY_SYSCALL=
+INCARNATION=
+DISTURL=
+LINKSOURCES=
+OVERLAY=
+RSYNCSRC=
+RSYNCDEST=
+RSYNCDONE=
+SIGNDUMMY=
+
+# list of archs which need emulator initialization
+: ${EMULATOR_ARCHS:="armv4l armv5el armv6el armv7el armv8el mips mipsel mips64 mips64el ppc ppc64 sh4"}
+export EMULATOR_ARCHS
+
+# list of devices registered by binfmt handlers in /proc/sys/fs/binfmt_misc
+: ${EMULATOR_DEVS:="arm mips mipsel mips64 mips64el ppc sh4 sparc"}
+export EMULATOR_DEVS
+
+: ${CACHE_DIR:=/var/cache/build}
+
+# This is for insserv
+export YAST_IS_RUNNING=instsys
+
+unset LANGUAGE
+unset LANG
+export LC_ALL=POSIX
+umask 022
+
+echo_help () {
+    cat << EOT
+
+Some comments for build
+-----------------------
+
+With build you can create rpm packages.  They will be built in a chroot
+system.  This chroot system will be setup automatically.  Normally you can
+simply call build with a spec file as parameter - nothing else has to be
+set.
+
+If you want to set the directory were the chroot system will be setup
+(at the moment it uses $BUILD_ROOT),
+simply set the the environment variable BUILD_ROOT.
+
+Example:
+
+  export BUILD_ROOT=/var/tmp/mybuildroot
+
+
+Normally build builds the complete package including src.rpm (rpmbuild -ba).
+If you want let build only make the binary package, simply set
+
+   export BUILD_RPM_BUILD_STAGE=-bb
+
+(or -bc, -bp, -bi, ...  see "Maximum RPM" for more details [*]).
+
+When the build command succeeds, the rpm files can be found under
+$BUILD_ROOT/usr/src/packages/RPMS/
+
+
+Known Parameters:
+
+  --help      You already got it :)
+
+  --clean     Delete old build root before initializing it
+
+  --no-init   Skip initialization of build root and start with build
+              immediately.
+
+  --no-checks Do not run post-build checks
+
+  --repository PATH
+             Use package repository at PATH. Supported formats are
+             rpm-md and yast2.
+             Alternatively zypp://NAME specifies the zypp
+             repository NAME. The repo must be refreshed with zypp
+             so package meta data is available locally. With emtpy
+             NAME all enabled repositories are used.
+              a url can specify a remote repo.
+
+  --rpms path1:path2:...
+              Specify path where to find the RPMs for the build system
+
+  --arch arch1:arch2:...
+              Specify what architectures to select from the RPMs
+
+  --verify    Run verify when initializing the build root
+
+  --extra-packs pack
+              Also install package 'pack'
+
+  --root rootdir
+              Use 'rootdir' to setup chroot environment
+
+  --cachedir cachedir
+              Use 'cachedir' to cache remote repo's packages, the
+              default cache dir is /var/cache/build, every repo
+              given by --repository corresponds to a subdir named
+              as md5sum of its repo url, forx eaxmple:
+                 /var/cache/build/3e8ea9b47808629414a0cebc33ea285e
+
+  --oldpackages oldpackagesdir
+              Define a directory with a former build
+
+  --baselibs  Create -32bit/-64bit/-x86 rpms for other architectures
+
+  --list-state
+              List rpms that would be used to create a fresh build root.
+              Does not create the build root or perform a build.
+
+  --with X
+              enable feature X for build
+
+  --without X
+              disable feature X for build
+
+  --define 'X Y'
+              define macro X with value Y
+
+  --ccache
+              use ccache to speed up rebuilds
+
+  --icecream N
+              use N parallel build jobs with icecream
+  --overlay OVERLAY
+              Copy overlay filesystem to buildroot after installing
+              all RPMs. This must be a valid directory.
+
+  --rsync-src RSYNCSRC
+              Copy overlay folder (RSYNCSRC) to a folder (RSYNCDEST)
+              inside the buildroot using rsync.
+              It will "%define RSYNCDONE 1" for handling %setup in your
+              specfile. E.g.:
+              %prep
+              %if 0%{?RSYNCDONE}
+              %setup -n aaa_base -T -D -b 5 -b 7
+              %else
+              %setup -n aaa_base -b 5 -b 7
+              %endif
+
+  --rsync-dest RSYNCDEST
+              Copy overlay folder (RSYNCSRC) to a folder (RSYNCDEST)
+              inside the buildroot using rsync.
+
+  --uid uid:gid
+              Specify the uid and gid to use for the abuild user.
+              This is useful if you are hacking in the buildroot.
+              This must be set to the same value if the buildroot is re-used.
+
+  --vm-type TYPE
+              Use virtual machine instead of chroot
+              TYPE is one of xen|kvm|uml|qemu|lxc
+
+  --vm-disk FILE
+              Use FILE as disk for virtual machine.
+              Defaults to \$BUILD_ROOT.img if unset
+
+  --vm-swap FILE
+              Use FILE as swap space for virtual machine. The swap space is
+              also used for retrieving packages from the VM so it's size must be
+              sufficiently large
+
+  --vm-disk-size SIZEINMB
+  --vm-swap-size SIZEINMB
+  --vm-disk-filesystem TYPE
+              Defaults for automatic setup of VM root/swap files
+
+  --vm-kernel FILE
+  --vm-initrd FILE
+              Kernel and initrd to use for VM (kvm and qemu only)
+
+  --debug
+              enable creation of a debuginfo package
+
+Remember to have fun!
+
+[*] Maximum RPM: http://www.rpm.org/max-rpm/
+EOT
+}
+usage () {
+    echo "Usage: `basename $0` [--no-init|--clean|--rpms path|--verify|--help] [dir-to-build|spec-to-build]"
+    cleanup_and_exit 1
+}
+
+#
+#  cleanup_and_exit
+#  return values: 0 -> success, new packages built
+#                 1 -> error, build failed
+#                 2 -> successfull build, but no changes to former built packages
+#                 3 -> something wrong with build host
+#
+cleanup_and_exit () {
+    trap EXIT
+    test -z "$1" && set 0
+    rm -f $BUILD_ROOT/exit
+    if test -n "$RUNNING_IN_VM" ; then
+       chown $browner $BUILD_ROOT
+       cd /
+       if test -n "$VM_SWAP" -a -e "$VM_SWAP" ; then
+           swapoff "$VM_SWAP" 2>/dev/null
+           echo -n "BUILDSTATUS$1" >"$VM_SWAP"
+       fi
+       exec >&0 2>&0        # so that the logging tee finishes
+       sleep 1                # wait till tee terminates
+       if test "$VM_TYPE" != lxc; then
+           kill -9 -1        # goodbye cruel world
+           if ! test -x /sbin/halt ; then
+               test -e /proc/sysrq-trigger || mount -n -tproc none /proc
+               sync
+               sleep 2 # like halt does
+               if test -e /proc/sysrq-trigger; then
+                   echo o > /proc/sysrq-trigger
+                   sleep 5 # wait for sysrq to take effect
+               else
+                   echo "Warning: VM doesn't support sysrq and /sbin/halt not installed"
+               fi
+           else
+               halt -f -p
+           fi
+           echo "Warning: clean shut down of the VM didn't work"
+       fi
+    else
+       umount -n $BUILD_ROOT/proc/sys/fs/binfmt_misc 2> /dev/null || true
+       umount -n $BUILD_ROOT/proc 2>/dev/null || true
+       umount -n $BUILD_ROOT/dev/pts 2>/dev/null || true
+       test "$VM_IMAGE" = 1 && VM_IMAGE=
+       [ -n "$VM_IMAGE" ] && umount $BUILD_ROOT 2>/dev/null || true
+    fi
+#    echo "pid $$ exit $1"
+    exit $1
+}
+
+fail_exit()
+{
+  cleanup_and_exit 1
+}
+
+shellquote()
+{
+    for arg; do
+       arg=${arg/\\/\\\\}
+       arg=${arg/\$/\\\$}
+       arg=${arg/\"/\\\"}
+       arg=${arg/\`/\\\`}
+       echo -n " \"$arg\""
+    done
+}
+
+# create a shell script from command line. Used for preserving arguments
+# through /bin/su -c
+toshellscript()
+{
+       echo "#!/bin/sh -x"
+       echo -n exec
+       shellquote "$@"
+       echo
+}
+
+setupccache()
+{
+    if [ "$ccache" = 1 ]; then
+       if mkdir -p $BUILD_ROOT/var/lib/build/ccache/bin; then
+           for i in gcc g++ cc c++; do
+#                ln -sf /usr/bin/ccache $BUILD_ROOT/var/lib/build/ccache/bin/$i
+               rm -f $BUILD_ROOT/var/lib/build/ccache/bin/$i
+               test -e $BUILD_ROOT/usr/bin/$i || continue
+               echo '#! /bin/sh' > $BUILD_ROOT/var/lib/build/ccache/bin/$i
+               echo "test -e /usr/bin/$i || exit 1" >> $BUILD_ROOT/var/lib/build/ccache/bin/$i
+               echo 'export PATH=/opt/icecream/bin:/usr/bin:$PATH' >> $BUILD_ROOT/var/lib/build/ccache/bin/$i
+               echo "ccache $i \"\$@\"" >> $BUILD_ROOT/var/lib/build/ccache/bin/$i
+               chmod 755 $BUILD_ROOT/var/lib/build/ccache/bin/$i
+               echo "Installed ccache wrapper as $BUILD_ROOT/var/lib/build/ccache/bin/$i"
+           done
+       fi
+       mkdir -p "$BUILD_ROOT"/.ccache
+       chown -R "$ABUILD_UID:$ABUILD_GID" "$BUILD_ROOT/.ccache"
+       echo "export CCACHE_DIR=/.ccache" > "$BUILD_ROOT"/etc/profile.d/build_ccache.sh
+       echo 'export PATH=/var/lib/build/ccache/bin:$PATH' >> "$BUILD_ROOT"/etc/profile.d/build_ccache.sh
+    else
+       rm -f "$BUILD_ROOT$builduserhome"/bin/{gcc,g++,cc,c++}
+       rm -f "$BUILD_ROOT"/var/lib/build/ccache/bin/{gcc,g++,cc,c++}
+    fi
+}
+
+setupicecream()
+{
+    if [ "$icecream" -eq 0 ]; then
+       rm -rf "$BUILD_ROOT"/var/run/icecream
+       rm -f "$BUILD_ROOT"/etc/profile.d/build_icecream.sh
+       return
+    fi
+
+    if ! chroot "$BUILD_ROOT" rpm -q icecream >/dev/null 2>/dev/null; then
+       echo "*** icecream package not installed ***"
+       false
+       return
+    fi
+
+    echo "using icecream with $icecream jobs"
+
+    if [ "$ccache" -ne 1 ]; then
+       echo 'export PATH=/opt/icecream/bin:$PATH' > "$BUILD_ROOT"/etc/profile.d/build_icecream.sh
+    else
+       echo 'export CCACHE_PATH=/opt/icecream/bin' > "$BUILD_ROOT"/etc/profile.d/build_icecream.sh
+    fi
+
+    local icecc_vers=(`shopt -s nullglob; echo $BUILD_ROOT/var/run/icecream/*.tar.{bz2,gz}`)
+    icecc_vers=${icecc_vers//$BUILD_ROOT/}
+
+    # XXX use changelog like autobuild does instead?
+    # only run create-env if compiler or glibc changed
+    if [ -z "$icecc_vers" \
+       -o ! -e "$BUILD_ROOT/$icecc_vers" \
+       -o "$BUILD_ROOT/usr/bin/gcc" -nt "$BUILD_ROOT/$icecc_vers" \
+       -o "$BUILD_ROOT/usr/bin/g++" -nt "$BUILD_ROOT/$icecc_vers" \
+       -o "$BUILD_ROOT/usr/bin/as" -nt "$BUILD_ROOT/$icecc_vers" \
+       -o "$BUILD_ROOT/lib/libc.so.6" -nt "$BUILD_ROOT/$icecc_vers" ]
+    then
+       rm -rf $BUILD_ROOT/var/run/icecream
+       mkdir -p $BUILD_ROOT/var/run/icecream
+       if [ -e "$BUILD_ROOT"/usr/bin/create-env ]; then
+         createenv=/usr/bin/create-env
+       elif [ -e "$BUILD_ROOT"/usr/lib/icecc/icecc-create-env ]; then
+         createenv="/usr/lib/icecc/icecc-create-env /usr/bin/gcc /usr/bin/g++" # XXX
+       elif [ -e "$BUILD_ROOT"/usr/lib64/icecc/icecc-create-env ]; then
+         createenv="/usr/lib64/icecc/icecc-create-env /usr/bin/gcc /usr/bin/g++" # XXX
+       else
+         echo "create-env not found"
+         false
+         return
+       fi
+       chroot $BUILD_ROOT bash -c "cd /var/run/icecream; $createenv" || cleanup_and_exit 1
+       icecc_vers=(`shopt -s nullglob; echo $BUILD_ROOT/var/run/icecream/*.tar.{bz2,gz}`)
+       icecc_vers=${icecc_vers//$BUILD_ROOT/}
+    else
+       echo "reusing existing icecream environment $icecc_vers"
+    fi
+    if [ -n "$icecc_vers" ]; then
+      echo "export ICECC_VERSION=$icecc_vers" >> "$BUILD_ROOT"/etc/profile.d/build_icecream.sh
+    fi
+}
+
+setmemorylimit()
+{
+    if [ -n "$VM_IMAGE" -o -n "$RUNNING_IN_VM" ]; then
+       return
+    fi
+    local mem
+    while read mem; do
+       case "$mem" in
+           MemTotal:*)
+               set -- $mem
+               eval "mem=\$(($2/3*4))"
+               ulimit -v $mem
+               echo "Memory limit set to ${mem}KB"
+               break;
+           ;;
+       esac
+    done < <(cat /proc/meminfo) # cat for proc stuff
+}
+
+create_baselibs()
+{
+    local pkgs=()
+
+    BASELIBS_CFG=
+
+    if test "$BUILDTYPE" == "dsc" ; then
+       pkgs=($DEBS)
+    else # spec and kiwi
+       if test -e $BUILD_ROOT$TOPDIR/SOURCES/baselibs.conf ; then
+           BASELIBS_CFG="-c $TOPDIR/SOURCES/baselibs.conf"
+       fi
+       if test -e $BUILD_ROOT/usr/lib/build/baselibs_global.conf; then
+           BASELIBS_GLOBAL="-c /usr/lib/build/baselibs_global.conf"
+       fi
+       pkgs=($RPMS)
+    fi
+
+    mount -n -tproc none $BUILD_ROOT/proc 2> /dev/null
+    # don't use -R as extracted sources, build root etc might be below $TOPDIR
+    chown "$ABUILD_UID:$ABUILD_GID" "$BUILD_ROOT$TOPDIR"/* "$BUILD_ROOT$TOPDIR"/RPMS/* || true
+
+    local mkbaselibs="/usr/lib/build/mkbaselibs"
+    local whichone=''
+    # $BUILD_DIR is set to /.build when using a vm. So we need to
+    # hardcode /usr/lib/build instead of $BUILD_DIR to prefer
+    # mkbaselibs from the distro.
+    if test -f $BUILD_ROOT$mkbaselibs; then
+       if test -z "$BASELIBS_CFG" -a -e $BUILD_ROOT/usr/lib/build/baselibs.conf ; then
+           BASELIBS_CFG="-c /usr/lib/build/baselibs.conf"
+       fi
+    else
+       if test "$CREATE_BASELIBS" = 'internal'; then
+           echo "Warning: mkbaselibs missing in build root, skipping baselibs"
+           return
+       fi
+       # use external version
+       whichone=" (external)"
+       mkbaselibs="/.mkbaselibs/mkbaselibs"
+       rm -rf $BUILD_ROOT/.mkbaselibs
+       mkdir -p $BUILD_ROOT/.mkbaselibs
+       cp -f $BUILD_DIR/mkbaselibs $BUILD_ROOT/.mkbaselibs/
+       if test "$BUILDTYPE" == "dsc" ; then
+           cp -f $BUILD_DIR/baselibs_global-deb.conf $BUILD_ROOT/.mkbaselibs/baselibs_g.conf
+           cp -f $BUILD_ROOT$TOPDIR/SOURCES/baselibs-deb.conf $BUILD_ROOT/.mkbaselibs/baselibs-deb.conf
+           BASELIBS_CFG="-c /.mkbaselibs/baselibs-deb.conf"
+       else
+           cp -f $BUILD_DIR/baselibs_global.conf $BUILD_ROOT/.mkbaselibs/baselibs_g.conf
+           if test -z "$BASELIBS_CFG" -a -e $BUILD_DIR/baselibs.conf; then
+               cp -f $BUILD_DIR/baselibs.conf $BUILD_ROOT/.mkbaselibs/baselibs.conf
+               BASELIBS_CFG="-c /.mkbaselibs/baselibs.conf"
+           fi
+       fi
+       if test -e $BUILD_ROOT/.mkbaselibs/baselibs_g.conf; then
+           BASELIBS_GLOBAL="-c /.mkbaselibs/baselibs_g.conf"
+       fi
+    fi
+    echo "... creating baselibs$whichone"
+    chroot $BUILD_ROOT su -c "$mkbaselibs $BASELIBS_GLOBAL $BASELIBS_CFG ${pkgs[*]#$BUILD_ROOT}" - $BUILD_USER || cleanup_and_exit 1
+    rm -rf $BUILD_ROOT/.mkbaselibs
+}
+
+copy_oldpackages()
+{
+    local i=0
+    local d
+    local dest
+    [ -z "$RUNNING_IN_VM" ] || return 0
+    if [ -z "$old_packages" ]; then
+       rm -rf "$BUILD_ROOT"/.build.oldpackages*
+       return 0
+    fi
+    for d in "${old_packages[@]}"; do
+       dest="$BUILD_ROOT/.build.oldpackages"
+       test "$i" = 0 || dest="$dest$i"
+       if [ -d "$d" -a "$d" != "$dest" ] ; then
+           rm -rf "$dest"
+           mkdir -p "$dest"
+           cp -L $d/* "$dest"
+           : $((++i))
+       fi
+    done
+}
+
+vm_img_mkfs()
+{
+    local fs="$1"
+    local img="$2"
+    local mkfs tunefs
+    eval "mkfs=\"\$vm_img_mkfs_${fs}\""
+    eval "tunefs=\"\$vm_img_tunefs_${fs}\""
+
+    if test -z "$mkfs"; then
+       echo "filesystem \"$fs\" isn't supported"
+       cleanup_and_exit 3
+    fi
+
+
+    echo "Creating $fs filesystem on $img"
+    $mkfs "$img"
+    if test -n "$tunefs" ; then
+       $tunefs "$img" || cleanup_and_exit 3
+    fi
+
+}
+
+detect_vm_2nd_stage()
+{
+    if ! test "$0" = "/.build/build" ; then
+       return 1
+    fi
+    if test $$ -eq 1 ; then
+       # ignore special init signals if we're init
+       # we're using ' ' instead of '' so that the signal handlers
+       # are reset in the child processes
+       trap ' ' HUP TERM
+       $0 "$@"
+       cleanup_and_exit $?
+    fi
+    echo "2nd stage started in virtual machine"
+    BUILD_ROOT=/
+    BUILD_DIR=/.build
+    . $BUILD_DIR/build.data
+    echo "machine type: `uname -m`"
+    if test "$PERSONALITY" != 0 -a -z "$PERSONALITY_SET" ; then
+       export PERSONALITY_SET=true
+       echo "switching personality to $PERSONALITY..."
+       # this is 32bit perl/glibc, thus the 32bit syscall number
+       exec perl -e 'syscall(136, '$PERSONALITY') == -1 && warn("personality: $!\n");exec "/.build/build" || die("/.build/build: $!\n")'
+    fi
+    RUNNING_IN_VM=true
+    mount -orw -n -tproc none /proc
+    if test "$VM_TYPE" != 'lxc'; then
+       mount -n -o remount,noatime,rw /
+    fi
+# qemu inside of xen does not work, check again with kvm later before enabling this
+#    if [ -e /dev/kqemu ]; then
+#        # allow abuild user to run qemu
+#        chmod 0666 /dev/kqemu
+#    fi
+    if test -n "$VM_SWAP" ; then
+       for i in 1 2 3 4 5 6 7 8 9 10 ; do
+           test -e "$VM_SWAP" && break
+           test $i = 1 && echo "waiting for $VM_SWAP to appear"
+           echo -n .
+           sleep 1
+       done
+       test $i = 1 || echo
+       # recreate the swap device manually if it didn't exist for some
+       # reason, hardcoded to hda2 atm
+       if ! test -b "$VM_SWAP" ; then
+           rm -f "$VM_SWAP"
+           umask 027
+           mknod "$VM_SWAP" b 3 2
+           umask 022
+       fi
+       swapon -v "$VM_SWAP" || exit 1
+    fi
+    HOST="$MYHOSTNAME"
+
+    return 0
+}
+
+find_spec_files()
+{
+    local spec files
+    if [ -z "$SPECFILES" ]; then
+       set -- "`pwd`"
+    else
+       set -- "${SPECFILES[@]}"
+    fi
+    SPECFILES=()
+    for spec in "$@"; do
+       if [ "$spec" = "${spec#/}" ]; then
+           spec="`pwd`/$spec"
+       fi
+
+       if [ -d "$spec" ]; then
+           specs=("$spec"/*.spec)
+           if [ -n "$specs" ]; then
+               SPECFILES=("${SPECFILES[@]}" "${specs[@]}")
+           else
+               specs=("$spec"/*.spec)
+               if [ -n "$specs" ]; then
+                   SPECFILES=("${SPECFILES[@]}" "${specs[@]}")
+               fi
+           fi
+       else
+           SPECFILES[${#SPECFILES[@]}]="$spec";
+       fi
+    done
+
+    if test -z "$SPECFILES"; then
+       echo no spec files or src rpms found in $@. exit...
+       cleanup_and_exit 1
+    fi
+}
+
+become_root_or_fail()
+{
+    if [ ! -w /root ]; then
+       echo "You have to be root to use $0" >&2
+       exit 1
+    fi
+    cleanup_and_exit 1
+}
+
+mkdir_build_root()
+{
+    if [ -d "$BUILD_ROOT" ]; then
+       # check if it is owned by root
+       if [ -z "$RUNNING_IN_VM" -a \! -O "$BUILD_ROOT" -a "`stat -c %u $BUILD_ROOT`" -ne 0 ]; then
+           echo "BUILD_ROOT=$BUILD_ROOT must be owned by root. Exit..."
+           cleanup_and_exit 1
+       fi
+    else
+       test "$BUILD_ROOT" != "${BUILD_ROOT%/*}" && mkdir -p "${BUILD_ROOT%/*}"
+       if ! mkdir $BUILD_ROOT; then
+           echo "can not create BUILD_ROOT=$BUILD_ROOT. Exit..."
+           cleanup_and_exit 1
+       fi
+    fi
+
+    if [ ! -w "$BUILD_ROOT" ]; then
+       echo "Error: BUILD_ROOT=$BUILD_ROOT not writeable, try --clean."
+       cleanup_and_exit 3
+    fi
+
+    rm -rf "$BUILD_ROOT"/.build.packages
+    if [ -z "$VM_TYPE" -a -z "$RUNNING_IN_VM" ]; then
+       # don't touch this in VM
+       rm -rf "$BUILD_ROOT"/.build
+       mkdir -p "$BUILD_ROOT"/.build
+    fi
+}
+
+linux64()
+{
+       perl -e 'syscall('$PERSONALITY_SYSCALL', 0); exec(@ARGV) || die("$ARGV[0]: $!\n")' "$@"
+}
+
+#### main ####
+
+trap fail_exit EXIT
+
+case `perl -V:archname` in
+    *x86_64*) PERSONALITY_SYSCALL=135 ;;
+    *i?86*)   PERSONALITY_SYSCALL=136 ;;
+esac
+
+shopt -s nullglob
+
+if detect_vm_2nd_stage ; then
+    set "/.build-srcdir/$SPECFILE"
+
+fi
+
+export PATH=$BUILD_DIR:/sbin:/usr/sbin:$PATH
+
+. $BUILD_DIR/common_functions || exit 1
+
+export HOST
+
+needarg()
+{
+  if [ -z "$ARG" ]; then
+    echo "$PARAM needs an agrument" >&2
+    cleanup_and_exit 1
+  fi
+}
+
+while test -n "$1"; do
+  PARAM="$1"
+  ARG="$2"
+  [ "$ARG" = "${ARG#-}" ] || ARG=""
+  shift
+  case $PARAM in
+    *-*=*)
+      ARG=${PARAM#*=}
+      PARAM=${PARAM%%=*}
+      set -- "----noarg=$PARAM" "$@"
+  esac
+  case $PARAM in
+      *-help|-h)
+       echo_help
+       cleanup_and_exit
+      ;;
+      *-no*init)
+       DO_INIT=false
+      ;;
+      *-no*checks)
+       DO_CHECKS=false
+      ;;
+      *-clean)
+       CLEAN_BUILD='--clean'
+      ;;
+      *-kill)
+       KILL=true
+      ;;
+      *-rpms)
+       needarg
+       BUILD_RPMS="$ARG"
+       shift
+      ;;
+      *-arch)
+       needarg
+       BUILD_ARCH="$ARG"
+       shift
+      ;;
+      *-verify)
+       export VERIFY_BUILD_SYSTEM=true
+      ;;
+      *-target)
+       needarg
+       ABUILD_TARGET="$ARG"
+       shift
+      ;;
+      *-jobs)
+       needarg
+       BUILD_JOBS="$ARG"
+       shift
+      ;;
+      *-extra*packs|-X)
+       needarg
+       BUILD_EXTRA_PACKS="$BUILD_EXTRA_PACKS $ARG"
+       shift
+      ;;
+      *-lint)
+       DO_LINT=true
+       ;;
+      *-baselibs)
+       CREATE_BASELIBS=true
+       ;;
+      *-baselibs-internal)
+       CREATE_BASELIBS=internal
+       ;;
+      *-root)
+       needarg
+       BUILD_ROOT="$ARG"
+       shift
+      ;;
+      *-cachedir)
+       needarg
+       CACHE_DIR="$ARG"
+       shift
+      ;;
+      *-oldpackages)
+       needarg
+       old_packages=("${old_packages[@]}" "$ARG")
+       shift
+      ;;
+      *-dist)
+       needarg
+       BUILD_DIST="$ARG"
+       shift
+      ;;
+      *-xen|*-kvm|--uml|--qemu)
+       VM_TYPE=${PARAM##*-}
+       if [ -n "$ARG" ]; then
+           VM_IMAGE="$ARG"
+           shift
+       else
+           VM_IMAGE=1
+       fi
+      ;;
+      --lxc)
+       VM_TYPE=${PARAM##*-}
+      ;;
+      --vm-type)
+       needarg
+       VM_TYPE="$ARG"
+       case "$VM_TYPE" in
+           xen|kvm|uml|qemu|lxc) ;;
+           none|chroot) VM_TYPE='' ;;
+           *)
+               echo "VM $VM_TYPE not supported"
+               cleanup_and_exit
+           ;;
+       esac
+       shift
+      ;;
+      --vm-disk)
+       needarg
+       VM_IMAGE="$ARG"
+       shift
+      ;;
+      *-xenswap|*-swap)
+       needarg
+       VM_SWAP="$ARG"
+       shift
+      ;;
+      *-xenmemory|*-memory)
+       needarg
+       MEMSIZE="$ARG"
+       shift
+      ;;
+      *-vm-kernel)
+       needarg
+       VM_KERNEL="$ARG"
+       shift
+      ;;
+      *-vm-initrd)
+       needarg
+       VM_INITRD="$ARG"
+       shift
+      ;;
+      *-vmdisk-rootsize|--vm-disk-size)
+       needarg
+       VMDISK_ROOTSIZE="$ARG"
+       shift
+      ;;
+      *-vmdisk-swapsize|--vm-swap-size)
+       needarg
+       VMDISK_SWAPSIZE="$ARG"
+       shift
+      ;;
+      *-vmdisk-filesystem|--vm-disk-filesystem)
+       needarg
+       VMDISK_FILESYSTEM="$ARG"
+       shift
+      ;;
+      *-rpmlist)
+       needarg
+       RPMLIST="--rpmlist $ARG"
+       BUILD_RPMS=
+       shift
+      ;;
+      *-release)
+       needarg
+       RELEASE="$ARG"
+       shift
+      ;;
+      *-logfile)
+       needarg
+       LOGFILE="$ARG"
+       shift
+      ;;
+      *-reason)
+       needarg
+       REASON="$ARG"
+       shift
+      ;;
+      *-norootforbuild)
+       NOROOTFORBUILD=true
+      ;;
+      *-stage)
+       needarg
+       BUILD_RPM_BUILD_STAGE="$ARG"
+       shift
+      ;;
+      *-useusedforbuild)
+       USEUSEDFORBUILD="--useusedforbuild"
+      ;;
+      *-list*state)
+       LIST_STATE=true
+      ;;
+      --define|--with|--without)
+       needarg
+       definesnstuff[${#definesnstuff[@]}]="$PARAM";
+       definesnstuff[${#definesnstuff[@]}]="$ARG";
+       shift
+      ;;
+      --repository|--repo)
+       needarg
+       repos[${#repos[@]}]="$PARAM";
+       repos[${#repos[@]}]="$ARG";
+       shift
+      ;;
+      --icecream)
+       needarg
+       icecream="$ARG"
+       if [ "$icecream" -gt 0 ]; then
+               BUILD_JOBS="$ARG"
+       fi
+       shift
+      ;;
+      --ccache)
+       ccache=1
+      ;;
+      --debug)
+       BUILD_DEBUG=1
+      ;;
+      --incarnation)
+       needarg
+       INCARNATION=$ARG
+       shift
+      ;;
+      --disturl)
+       needarg
+       DISTURL=$ARG
+       shift
+      ;;
+      --linksources)
+       LINKSOURCES=true
+      ;;
+      ----noarg)
+       echo "$ARG does not take an argument"
+       cleanup_and_exit
+      ;;
+      *-changelog)
+       CHANGELOG=true
+      ;;
+      --overlay)
+       needarg
+       OVERLAY=$ARG
+       shift
+      ;;
+      --rsync-src)
+       needarg
+       RSYNCSRC=$ARG
+       shift
+      ;;
+      --rsync-dest)
+       needarg
+       RSYNCDEST=$ARG
+       shift
+      ;;
+      --uid)
+       needarg
+       ABUILD_ID="$ARG"
+       if test -n "${ABUILD_ID//[0-9:]/}"; then
+           echo "--uid argument must be uid:gid"
+           cleanup_and_exit
+       fi
+       ABUILD_UID=${ABUILD_ID%:*}
+       ABUILD_GID=${ABUILD_ID#*:}
+       shift
+      ;;
+      --shell)
+         shell=1
+         shift
+      ;;
+      --signdummy)
+       SIGNDUMMY=1
+      ;;
+      -*)
+       echo Unknown Option "$PARAM". Exit.
+       cleanup_and_exit 1
+      ;;
+      *)
+       SPECFILES[${#SPECFILES[@]}]="$PARAM";
+      ;;
+    esac
+done
+
+if test "$VM_TYPE" = "lxc"; then
+    VM_IMAGE=''
+    VM_SWAP=''
+fi
+
+if test -n "$KILL" ; then
+    test -z "$SRCDIR" || usage
+    if test -n "$VM_IMAGE" -a -n "$VM_SWAP" -a -n "$VM_TYPE"; then
+       # mark job as failed so that we don't extract packages
+       echo -n "BUILDSTATUS1" >"$VM_SWAP"
+    fi
+    (set -C; > "$BUILD_ROOT/exit" 2>/dev/null || true)
+    if test "$VM_TYPE" = 'lxc'; then
+       LXCID=${BUILD_ROOT##*/}
+       lxc-stop -n "$LXCID" || true
+       lxc-destroy -n "$LXCID"
+    elif test -z "$VM_IMAGE" ; then
+       if ! $BUILD_DIR/killchroot -s 9 $BUILD_ROOT ; then
+           echo "could not kill build in $BUILD_ROOT"
+           cleanup_and_exit 1
+       fi
+    elif test "$VM_TYPE" = 'xen'; then
+       XENID="${VM_IMAGE%/root}"
+       XENID="${XENID%/tmpfs}"
+       XENID="${XENID##*/}"
+       XENID="${XENID#root_}"
+       if xm list "build:$XENID" >/dev/null 2>&1 ; then
+           if ! xm destroy "build:$XENID" ; then
+               echo "could not kill xen build $XENID"
+               cleanup_and_exit 1
+           fi
+       fi
+    elif test -n "$VM_TYPE"; then
+       if ! fuser -k -TERM "$VM_IMAGE"; then
+           echo "could not kill build in $VM_IMAGE"
+           cleanup_and_exit 1
+       fi
+    else
+       echo "don't know how to kill this build job"
+       cleanup_and_exit 1
+    fi
+    cleanup_and_exit 0
+fi
+
+if [ "$VM_TYPE" = 'xen' -a -z "$RUNNING_IN_VM" ]; then
+    if [ -n "$VM_KERNEL" ]; then
+       vm_kernel="$VM_KERNEL"
+    else
+       vm_kernel="/boot/vmlinuz-xen"
+    fi
+    if [ -n "$VM_INITRD" ]; then
+       vm_initrd="$VM_INITRD"
+    else
+       vm_initrd="/boot/initrd-xen"
+    fi
+    if [ -n "$MEMSIZE" ]; then
+       vm_memory="$MEMSIZE"
+    else
+       vm_memory="64"
+    fi
+fi
+
+if [ "$VM_TYPE" = 'kvm' -a -z "$RUNNING_IN_VM" ]; then
+    if [ ! -r /dev/kvm -o ! -x "$qemu_bin"-kvm ]; then
+       echo "host doesn't support kvm"
+       cleanup_and_exit 3
+    fi
+    qemu_bin="$kvm_bin"
+    if [ -n "$VM_KERNEL" ]; then
+       vm_kernel="$VM_KERNEL"
+    fi
+
+    # check if a SUSE system with virtio initrd is running
+    if [ -z "$VM_INITRD" -a -e /etc/sysconfig/kernel ]; then
+       a=$( source /etc/sysconfig/kernel; echo $INITRD_MODULES )
+       have_virtio_pci=""
+       have_virtio_blk=""
+       for i in $a; do
+          [ "$i" == "virtio_pci" ] && have_virtio_pci="1"
+          [ "$i" == "virtio_blk" ] && have_virtio_blk="1"
+       done
+       [ -n "$have_virtio_pci" -a -n "$have_virtio_blk" ] && VM_INITRD="/boot/initrd"
+    fi
+
+    if [ -n "$VM_INITRD" ]; then
+       vm_initrd="$VM_INITRD"
+       kvm_virtio=1
+    elif [ -e "${vm_initrd}-build" ]; then
+       vm_initrd="${vm_initrd}-build"
+       kvm_virtio=1
+    else
+       if [ -L "$vm_initrd" ]; then
+           vm_initrd=`readlink -f "$vm_initrd"` || cleanup_and_exit 3
+       fi
+       vm_initrd_virtio="${vm_initrd}-virtio"
+
+       if [ ! -e ${vm_initrd_virtio} -o $vm_kernel -nt ${vm_initrd_virtio} ]; then
+           mkinitrd_virtio_cmd=(env rootfstype="$VMDISK_FILESYSTEM" \
+                   mkinitrd -d /dev/null \
+                   -m "binfmt_misc virtio_pci virtio_blk" \
+                   -k $vm_kernel \
+                   -i ${vm_initrd_virtio})
+           if [ ! -w /root -o -n "$RPMLIST" ]; then
+               echo "No initrd that provides virtio support found. virtio accelleration disabled."
+               echo "Run the following command as root to enable virtio:"
+               shellquote "${mkinitrd_virtio_cmd[@]}"
+               echo
+           elif /sbin/modinfo virtio_pci >/dev/null 2>&1; then
+               echo "creating $vm_initrd_virtio"
+               "${mkinitrd_virtio_cmd[@]}" || cleanup_and_exit 1
+               kvm_virtio=1
+               vm_initrd="${vm_initrd_virtio}"
+           fi
+       else
+           kvm_virtio=1
+           vm_initrd="${vm_initrd_virtio}"
+       fi
+    fi
+
+    if [ "$kvm_virtio" = 1 ]; then
+       VM_SWAPDEV=/dev/vdb
+       qemu_rootdev=/dev/vda
+    else
+       VM_SWAPDEV=/dev/sdb
+       qemu_rootdev=/dev/sda
+    fi
+fi
+
+if [ "$VM_TYPE" = 'qemu' ]; then
+    VM_SWAPDEV=/dev/sdb
+    qemu_rootdev=/dev/sda
+fi
+
+if [ -z "$RPMLIST" -a -z "$RUNNING_IN_VM" ]; then
+    if [ -z "$repos" -a -z "$BUILD_RPMS" ]; then
+       repos=(--repository 'zypp://')
+    fi
+else
+    repos=()
+fi
+
+set_build_arch
+
+if [ -n "$CLEAN_BUILD" ]; then
+    DO_INIT=true
+fi
+
+find_spec_files
+
+if test -n "$LIST_STATE" ; then
+    BUILD_ROOT=`mktemp -d /var/tmp/build-list-state-XXXXXX`
+    test -d "$BUILD_ROOT" || cleanup_and_exit 3
+    SPECFILE=$SPECFILES # only one specified anyways
+    if test "$SPECFILE" != "${SPECFILE%.src.rpm}" ; then
+       rm -rf $BUILD_ROOT/usr/src/packages
+       mkdir -p $BUILD_ROOT/usr/src/packages/SOURCES $BUILD_ROOT/usr/src/packages/SPECS
+       rpm -i --nodigest --nosignature --root $BUILD_ROOT $SPECFILE || {
+          echo "could not install $SPECFILE." 2>&1
+          rm -rf $BUILD_ROOT
+          cleanup_and_exit 3
+       }
+       for SPECFILE in $BUILD_ROOT/usr/src/packages/SPECS/*.spec ; do : ; done
+    fi
+    init_buildsystem --cachedir "$CACHE_DIR" --list-state "${definesnstuff[@]}" "${repos[@]}" $USEUSEDFORBUILD $SPECFILE $BUILD_EXTRA_PACKS
+    ERR=$?
+    rm -rf $BUILD_ROOT
+    cleanup_and_exit $ERR
+fi
+
+if test -z "$RUNNING_IN_VM" ; then
+    if test -n "$VM_IMAGE" ; then
+       if test "$VM_IMAGE" = 1 ; then
+           VM_IMAGE="$BUILD_ROOT.img"
+           echo "using $VM_IMAGE as vm image"
+           if test -z "$VM_SWAP"; then
+               VM_SWAP="$BUILD_ROOT.swap"
+               echo "using $VM_SWAP as vm swap"
+           fi
+       fi
+       if [ "$VM_TYPE" = 'xen' ]; then
+           # this should not be needed, but sometimes a xen instance got lost
+           XENID="${VM_IMAGE%/root}"
+           XENID="${XENID%/tmpfs}"
+           XENID="${XENID##*/}"
+           XENID="${XENID#root_}"
+           xm destroy "build:$XENID" >/dev/null 2>&1
+       fi
+       if test ! -e "$VM_IMAGE"; then
+           echo "Creating $VM_IMAGE (${VMDISK_ROOTSIZE}M)"
+           mkdir -p "${VM_IMAGE%/*}"
+           dd if=/dev/zero of="$VM_IMAGE" bs=1 count=1 seek=$(( ${VMDISK_ROOTSIZE} * 1024 * 1024 - 1 )) || cleanup_and_exit 3
+           if test -z "$CLEAN_BUILD" ; then
+               vm_img_mkfs "$VMDISK_FILESYSTEM" "$VM_IMAGE" || cleanup_and_exit 3
+           fi
+       fi
+       if test ! -e "$VM_SWAP"; then
+           # setup VM_SWAP
+           echo "Creating $VM_SWAP (${VMDISK_SWAPSIZE}M)"
+           mkdir -p "${VM_SWAP%/*}"
+           dd if=/dev/zero of="$VM_SWAP" bs=1 count=1 seek=$(( ${VMDISK_SWAPSIZE} * 1024 * 1024 - 1 )) || cleanup_and_exit 3
+       fi
+       if test ! -e "$VM_IMAGE" ; then
+           echo "you need to create $VM_IMAGE first"
+           cleanup_and_exit 3
+       fi
+       if test -n "$CLEAN_BUILD" ; then
+           vm_img_mkfs "$VMDISK_FILESYSTEM" "$VM_IMAGE" || cleanup_and_exit 3
+       fi
+       mkdir_build_root
+       if [ -w /root ]; then
+           mount -o loop $VM_IMAGE $BUILD_ROOT || cleanup_and_exit 3
+       else
+           if ! mount $BUILD_ROOT; then
+               echo "mounting the build root failed. An fstab entry is probably missing or incorrect."
+               echo "/etc/fstab should contain an entry like this:"
+               echo "$VM_IMAGE $BUILD_ROOT auto noauto,user,loop 0 0"
+               cleanup_and_exit 3
+           fi
+       fi
+    else
+       test -w /root || become_root_or_fail
+    fi
+    if test -n "$VM_SWAP" ; then
+       dd if=/dev/zero of="$VM_SWAP" bs=12 count=1 conv=notrunc 2>/dev/null
+       echo "mkswap $VM_SWAP"
+       mkswap "$VM_SWAP"
+    fi
+fi
+
+mkdir_build_root
+
+if [ "$BUILD_ROOT" = / ]; then
+    read dummy dummy browner dummy < <(ls -ld /)
+fi
+
+rm -f $BUILD_ROOT/exit
+
+if [ -w /root ]; then
+    mkdir -p $BUILD_ROOT/proc
+    mkdir -p $BUILD_ROOT/dev/pts
+    mount -n -tproc none $BUILD_ROOT/proc || true
+    mount -n -tdevpts none $BUILD_ROOT/dev/pts
+fi
+
+if test -z "$VM_IMAGE" -a -z "$LOGFILE"; then
+    LOGFILE="$BUILD_ROOT/.build.log"
+fi
+
+if test -n "$LOGFILE" -a -z "$shell" ; then
+    echo  logging output to $LOGFILE...
+    rm -f $LOGFILE
+    touch $LOGFILE
+    if test -n "$VM_IMAGE" ; then
+       exec 1> >(exec -a 'build logging tee' perl -e 'open(F,">>",$ARGV[0])||die("$ARGV[0]: $!\n");$|=1;select(F);$|=1;while(<STDIN>){print STDOUT;s/^\r//s;s/\r\n/\n/gs;print F}' $LOGFILE) 2>&1
+    else
+       exec 1> >(exec -a 'build logging tee' tee -a $LOGFILE) 2>&1
+    fi
+fi
+
+setmemorylimit
+
+#
+# say hello
+#
+test -z "$HOST" && HOST=`hostname`
+
+if [ -z "$RUNNING_IN_VM" ]; then
+    echo Using BUILD_ROOT=$BUILD_ROOT
+    test -n "$BUILD_RPMS" && echo Using BUILD_RPMS=$BUILD_RPMS
+    echo Using BUILD_ARCH=$BUILD_ARCH
+    test -n "$VM_TYPE" && echo "Doing $VM_TYPE build${VM_IMAGE:+ in $VM_IMAGE}"
+    echo
+fi
+
+test "$BUILD_ARCH" = all && BUILD_ARCH=
+BUILD_USER_ABUILD_USED=
+
+for SPECFILE in "${SPECFILES[@]}" ; do
+
+    SRCDIR="${SPECFILE%/*}"
+    SPECFILE="${SPECFILE##*/}"
+
+    BUILDTYPE=
+    case $SPECFILE in
+      *.spec|*.src.rpm) BUILDTYPE=spec ;;
+      *.dsc) BUILDTYPE=dsc ;;
+      *.kiwi) BUILDTYPE=kiwi ;;
+    esac
+    if test -z "$BUILDTYPE" ; then
+       echo "don't know how to build $SPECFILE"
+       cleanup_and_exit 1
+    fi
+
+    cd "$SRCDIR"
+
+    if [ -z "$RUNNING_IN_VM" ]; then
+       echo
+       echo "$HOST started \"build $SPECFILE\" at `date --utc`."
+       echo
+       test -n "$REASON" && echo "$REASON"
+       echo
+    fi
+
+    #
+    # first setup building directory...
+    #
+    test -s "$SPECFILE" || {
+       echo "$SPECFILE" is empty.  This should not happen...
+       cleanup_and_exit 1
+    }
+
+    if test "$SPECFILE" != "${SPECFILE%.src.rpm}" ; then
+       echo processing src rpm $SRCDIR/$SPECFILE ...
+       MYSRCDIR=$BUILD_ROOT/.build-srcdir
+       rm -rf $MYSRCDIR
+       mkdir -p $MYSRCDIR
+       cd $MYSRCDIR || cleanup_and_exit 1
+       $BUILD_DIR/unrpm -q $SRCDIR/$SPECFILE || {
+           echo "could not install $SPECFILE."
+           cleanup_and_exit 1
+       }
+       for SPECFILE in *.spec ; do : ; done
+    else
+       MYSRCDIR="$SRCDIR"
+    fi
+
+    # FIX to work with baselibs_$PROJ etc
+    if test "$BUILDTYPE" == "dsc" -a -e ${SRCDIR}/baselibs-deb.conf ; then
+       # Set CREATE_BASELIBS if not set
+       echo "dsc build and baselibs-deb.conf present: forcing --baselibs to true"
+       CREATE_BASELIBS=true
+    fi
+
+# Currently local osc build does not allow extra .deb packages to be
+# specified on the command line. Both init_buildsystem and expanddeps
+# need to handle .deb dependencies first
+#    if test -n "$CREATE_BASELIBS" ; then
+#        case $BUILDTYPE in
+#            spec) ;;
+#            dsc) BUILD_EXTRA_PACKS="$BUILD_EXTRA_PACKS libparse-debcontrol-perl" ;;
+#        esac
+#    fi
+
+    echo processing specfile $MYSRCDIR/$SPECFILE ...
+
+    ADDITIONAL_PACKS=""
+    test -z "$BUILD_EXTRA_PACKS" || ADDITIONAL_PACKS="$ADDITIONAL_PACKS $BUILD_EXTRA_PACKS"
+    test -z "$CREATE_BASELIBS" || ADDITIONAL_PACKS="$ADDITIONAL_PACKS build"
+    test "$ccache" = '0' || ADDITIONAL_PACKS="$ADDITIONAL_PACKS ccache"
+    test "$icecream" = 0 || ADDITIONAL_PACKS="$ADDITIONAL_PACKS icecream gcc-c++"
+    test -z "$DO_LINT" || ADDITIONAL_PACKS="$ADDITIONAL_PACKS rpmlint-Factory"
+
+    if test -n "$CHANGELOG" -a -z "$RUNNING_IN_VM" ; then
+       rm -f $BUILD_ROOT/.build-changelog
+       case $SPECFILE in
+         *.dsc) CFFORMAT=debian ;;
+         *) CFFORMAT=rpm ;;
+       esac
+       echo "running changelog2spec --target $CFFORMAT --file $MYSRCDIR/$SPECFILE"
+       if ! $BUILD_DIR/changelog2spec --target $CFFORMAT --file "$MYSRCDIR/$SPECFILE" > $BUILD_ROOT/.build-changelog ; then
+           rm -f $BUILD_ROOT/.build-changelog
+       fi
+    fi
+
+    if test -n "$VM_TYPE" -a -z "$RUNNING_IN_VM"; then
+       rm -rf $BUILD_ROOT/.build
+       mkdir -p $BUILD_ROOT/.build
+       if test "$DO_INIT" = true ; then
+           # do fist stage of init_buildsystem
+           rm -f $BUILD_ROOT/.build.success
+           set -- init_buildsystem --cachedir "$CACHE_DIR" --prepare "${definesnstuff[@]}" "${repos[@]}" $CLEAN_BUILD $USEUSEDFORBUILD $RPMLIST "$MYSRCDIR/$SPECFILE" $ADDITIONAL_PACKS
+           echo "$* ..."
+           "$@" || cleanup_and_exit 1
+           check_exit
+           if [ ! -w /root ]; then
+               # remove setuid bit if files belong to user to make e.g. mount work
+               find $BUILD_ROOT/{bin,sbin,usr/bin,usr/sbin} -type f -uid $UID -perm +4000 -print0 | xargs -0 --no-run-if-empty chmod -s
+           fi
+           copy_oldpackages
+       fi
+       # start up xen, rerun ourself
+       cp -a $BUILD_DIR/. $BUILD_ROOT/.build
+       if ! test "$MYSRCDIR" = $BUILD_ROOT/.build-srcdir ; then
+           rm -rf $BUILD_ROOT/.build-srcdir
+           mkdir $BUILD_ROOT/.build-srcdir
+           if test "$BUILDTYPE" = kiwi ; then
+               cp -pRL "$MYSRCDIR"/* $BUILD_ROOT/.build-srcdir
+           else
+               cp -p "$MYSRCDIR"/* $BUILD_ROOT/.build-srcdir
+           fi
+           MYSRCDIR=$BUILD_ROOT/.build-srcdir
+       else
+           # cwd is at $BUILD_ROOT/.build-srcdir which we want to
+           # umount later so step aside
+           cd "$SRCDIR"
+       fi
+       Q="'\''"
+       echo "SPECFILE='${SPECFILE//"'"/$Q}'" > $BUILD_ROOT/.build/build.data
+       echo "BUILD_JOBS='${BUILD_JOBS//"'"/$Q}'" >> $BUILD_ROOT/.build/build.data
+       echo "BUILD_ARCH='${BUILD_ARCH//"'"/$Q}'" >> $BUILD_ROOT/.build/build.data
+       echo "BUILD_RPMS='${BUILD_RPMS//"'"/$Q}'" >> $BUILD_ROOT/.build/build.data
+       case $BUILD_DIST in
+           */*)
+               cp $BUILD_DIST $BUILD_ROOT/.build/build.dist
+               BUILD_DIST=/.build/build.dist
+               ;;
+       esac
+       echo "BUILD_DIST='${BUILD_DIST//"'"/$Q}'" >> $BUILD_ROOT/.build/build.data
+       echo "RELEASE='${RELEASE//"'"/$Q}'" >> $BUILD_ROOT/.build/build.data
+       echo "BUILD_DEBUG='${BUILD_DEBUG//"'"/$Q}'" >> $BUILD_ROOT/.build/build.data
+       echo "SIGNDUMMY='${SIGNDUMMY//"'"/$Q}'" >> $BUILD_ROOT/.build/build.data
+       echo "DO_LINT='${DO_LINT//"'"/$Q}'" >> $BUILD_ROOT/.build/build.data
+       echo "DO_CHECKS='${DO_CHECKS//"'"/$Q}'" >> $BUILD_ROOT/.build/build.data
+       echo "NOROOTFORBUILD='${NOROOTFORBUILD//"'"/$Q}'" >> $BUILD_ROOT/.build/build.data
+       echo "CREATE_BASELIBS='$CREATE_BASELIBS'" >> $BUILD_ROOT/.build/build.data
+       echo "REASON='${REASON//"'"/$Q}'" >> $BUILD_ROOT/.build/build.data
+       echo "CHANGELOG='${CHANGELOG//"'"/$Q}'" >> $BUILD_ROOT/.build/build.data
+       echo "INCARNATION='${INCARNATION//"'"/$Q}'" >> $BUILD_ROOT/.build/build.data
+       echo "DISTURL='${DISTURL//"'"/$Q}'" >> $BUILD_ROOT/.build/build.data
+       echo "DO_INIT='${DO_INIT//"'"/$Q}'" >> $BUILD_ROOT/.build/build.data
+       # FIXME: this depends on the kernel and vm.
+       # could be hda2, sda2 for xen or hdb/sdb for qemu
+       test -n "$VM_SWAP" && echo "VM_SWAP='${VM_SWAPDEV:-/dev/hda2}'" >> $BUILD_ROOT/.build/build.data
+       PERSONALITY=0
+       if test "$VM_TYPE" != 'lxc'; then
+           test -n "$PERSONALITY_SYSCALL" && PERSONALITY=`perl -e 'print syscall('$PERSONALITY_SYSCALL', 0)."\n"'`
+       fi
+       echo "PERSONALITY='$PERSONALITY'" >> $BUILD_ROOT/.build/build.data
+       echo "MYHOSTNAME='`hostname`'" >> $BUILD_ROOT/.build/build.data
+       echo -n "definesnstuff=(" >> $BUILD_ROOT/.build/build.data
+       shellquote "${definesnstuff[@]}" >> $BUILD_ROOT/.build/build.data
+       echo ")" >> $BUILD_ROOT/.build/build.data
+       echo -n "repos=(" >> $BUILD_ROOT/.build/build.data
+       shellquote "${repos[@]}" >> $BUILD_ROOT/.build/build.data
+       echo ")" >> $BUILD_ROOT/.build/build.data
+       echo "VM_TYPE='$VM_TYPE'" >> $BUILD_ROOT/.build/build.data
+       echo "shell='$shell'" >> $BUILD_ROOT/.build/build.data
+       umount -n $BUILD_ROOT/proc/sys/fs/binfmt_misc 2> /dev/null || true
+       umount -n $BUILD_ROOT/proc 2> /dev/null || true
+       umount -n $BUILD_ROOT/dev/pts 2> /dev/null || true
+       umount -n $BUILD_ROOT/mnt 2> /dev/null || true
+
+       if [ -n "$VM_IMAGE" ]; then
+           check_exit
+           # needs to work otherwise we have a corrupted file system
+           umount $BUILD_ROOT || cleanup_and_exit 1
+       fi
+
+       if check_use_emulator; then
+           vm_init_script="/.build/initscript_qemu_vm"
+       else
+           vm_init_script="/.build/build"
+       fi
+
+       if [ "$VM_TYPE" = 'xen' ]; then
+               XMROOT="file:$(readlink -f $VM_IMAGE)"
+               XMROOT=${XMROOT/#file:\/dev/phy:/dev}
+               XMROOT="disk=$XMROOT,hda1,w"
+               XMSWAP=
+               if test -n "$VM_SWAP" ; then
+                   XMSWAP="file:$(readlink -f $VM_SWAP)"
+                   XMSWAP=${XMSWAP/#file:\/dev/phy:/dev}
+                   XMSWAP="disk=$XMSWAP,hda2,w"
+               fi
+               XENID="${VM_IMAGE%/root}"
+               XENID="${XENID%/tmpfs}"
+               XENID="${XENID##*/}"
+               XENID="${XENID#root_}"
+
+               echo "booting XEN kernel ..."
+               if xm list "build:$XENID" >/dev/null 2>&1 ; then
+                  echo "Instance already exist, something really went wrong..."
+                  echo "Please report to your server admin, there might be multiple services running for same domain"
+                  cleanup_and_exit 3
+               fi
+               XEN_CONF_FILE=`mktemp build.xen.conf`
+               echo "kernel = \"$vm_kernel\""                                           >  $XEN_CONF_FILE
+               echo "ramdisk = \"$vm_initrd\""                                          >> $XEN_CONF_FILE
+               echo "memory = $vm_memory"                                               >> $XEN_CONF_FILE
+               echo "vcpus = $BUILD_JOBS"                                               >> $XEN_CONF_FILE
+               echo "root = \"/dev/hda1 ro\""                                           >> $XEN_CONF_FILE
+               echo "extra = \"init=/bin/bash console=ttyS0 panic=1 udev_timeout=360\"" >> $XEN_CONF_FILE
+               echo "on_poweroff = 'destroy'"                                           >> $XEN_CONF_FILE
+               echo "on_reboot = 'destroy'"                                             >> $XEN_CONF_FILE
+               echo "on_crash = 'destroy'"                                              >> $XEN_CONF_FILE
+               set -- xm create -c $XEN_CONF_FILE name="build:$XENID" $XMROOT $XMSWAP extra="quiet init="$vm_init_script" elevator=noop panic=1 console=ttyS0"
+               if test "$PERSONALITY" != 0 ; then
+                   # have to switch back to PER_LINUX to make xm work
+                   set -- linux64 "$@"
+               fi
+               rm "$XEN_CONF_FILE"
+               echo "$@"
+               "$@" || cleanup_and_exit 3
+       elif [ "$VM_TYPE" = 'uml' ]; then
+               echo "booting UML kernel ..."
+               set -- $uml_kernel initrd=$uml_initrd root=/ubda init="$vm_init_script" panic=1 elevator=noop quiet ubd0=$VM_IMAGE ${MEMSIZE:+mem=$MEMSIZE}
+               echo "$@"
+               "$@"
+       elif [ "$VM_TYPE" = 'qemu' -o "$VM_TYPE" = 'kvm' ]; then
+               echo "booting $VM_TYPE ..."
+               if [ "$kvm_virtio" = 1 ]; then
+                   qemu_args=(-drive file="$VM_IMAGE",if=virtio -hda "$VM_IMAGE")
+                   if [ -n "$VM_SWAP" ]; then
+                       qemu_args=("${qemu_args[@]}" "-drive")
+                       qemu_args=("${qemu_args[@]}" "file=$VM_SWAP,if=virtio")
+                   fi
+               else
+                   qemu_args=(-hda "$VM_IMAGE")
+                   if [ -n "$VM_SWAP" ]; then
+                       qemu_args=("${qemu_args[@]}" "-hdb")
+                       qemu_args=("${qemu_args[@]}" "$VM_SWAP")
+                   fi
+               fi
+               if [ -n "$BUILD_JOBS" -a "$icecream" = 0 ]; then
+                   qemu_args=("${qemu_args[@]}" "-smp" "$BUILD_JOBS")
+               fi
+
+               set -- $qemu_bin -no-reboot -nographic -net none \
+                   -kernel $vm_kernel \
+                   -initrd $vm_initrd \
+                   -append "root=$qemu_rootdev panic=1 quiet no-kvmclock rw elevator=noop console=ttyS0 init=$vm_init_script" \
+                   ${MEMSIZE:+-m $MEMSIZE} \
+                   "${qemu_args[@]}"
+
+               if test "$PERSONALITY" != 0 ; then
+                   # have to switch back to PER_LINUX to make qemu work
+                   set -- linux64 "$@"
+               fi
+               echo "$@"
+               "$@"
+       elif [ "$VM_TYPE" = 'lxc' ]; then
+               echo "booting $VM_TYPE ..."
+               LXCCONF="$BUILD_ROOT/.build.lxc.conf"
+               rm -f "$LXCCONF"
+               cat $BUILD_DIR/lxc.conf > "$LXCCONF"
+               cat >> "$LXCCONF" <<-EOF
+               lxc.rootfs = $BUILD_ROOT
+               EOF
+               # XXX: do this always instead of leaking the hosts' one?
+               echo "rootfs / rootfs rw 0 0" > $BUILD_ROOT/etc/mtab
+               LXCID=${BUILD_ROOT##*/}
+               lxc-destroy -n "$LXCID" >/dev/null 2>&1 || true
+               lxc-create -n "$LXCID" -f "$LXCCONF" || cleanup_and_exit 1
+               lxc-start -n "$LXCID" "$vm_init_script"
+               BUILDSTATUS="$?"
+               test "$BUILDSTATUS" != 255 || BUILDSTATUS=3
+               cleanup_and_exit "$BUILDSTATUS"
+       fi
+       if test -n "$VM_SWAP" ; then
+           BUILDSTATUS=`dd if="$VM_SWAP" bs=12 count=1 2>/dev/null`
+           case $BUILDSTATUS in
+             BUILDSTATUS[02])
+               mkdir -p $BUILD_ROOT/.build.packages
+               cd $BUILD_ROOT/.build.packages || cleanup_and_exit 1
+               echo "build: extracting built packages..."
+               extractbuild --disk "$VM_IMAGE" --input "$VM_SWAP" --skip 512 -v || cleanup_and_exit 3
+               # create same layout as with plain chroot
+               if test "$BUILDTYPE" = spec ; then
+                   mkdir -p SRPMS
+                   for i in *src.rpm *.desktopfiles ; do
+                       test -e "$i" || continue
+                       mv "$i" SRPMS/
+                   done
+                   for i in *.rpm ; do
+                       test -e "$i" || continue
+                       arch=${i%.rpm}
+                       arch=${i%.delta}
+                       arch=${arch##*\.}
+                       mkdir -p RPMS/$arch
+                       mv "$i" RPMS/$arch/
+                   done
+               elif test "$BUILDTYPE" = dsc ; then
+                   mkdir -p DEBS
+                   find . -type f | while read i; do mv "$i" DEBS/; done
+               else
+                   mkdir -p KIWI
+                   find . -type f | while read i; do mv "$i" KIWI/; done
+               fi
+               for i in * ; do
+                   test -f "$i" || continue
+                   case $i in
+                       _*|.*) ;;
+                       *) mkdir -p OTHER ; mv $i OTHER/ ;;
+                   esac
+               done
+               cleanup_and_exit ${BUILDSTATUS#BUILDSTATUS}
+               ;;
+             BUILDSTATUS*)
+               cleanup_and_exit ${BUILDSTATUS#BUILDSTATUS}
+               ;;
+             *)
+               echo "No buildstatus set, either the packager broke the base system (glibc/bash/perl) or the build host has a kernel or hardware problem, OBS server will retry..."
+               cleanup_and_exit 3
+               ;;
+           esac
+           cleanup_and_exit 1
+       fi
+       cleanup_and_exit 0
+    fi
+
+    if test "$DO_INIT" = true ; then
+       #
+       # create legacy .buildenv file
+       #
+       test -z "$INCARNATION" && INCARNATION=0
+       echo "BUILD_INCARNATION=$INCARNATION" > $BUILD_ROOT/.buildenv
+       CREATE_BUILD_BINARIES=
+       egrep '^#[       ]*needsbinariesforbuild[       ]*$' >/dev/null <$MYSRCDIR/$SPECFILE && CREATE_BUILD_BINARIES=--create-build-binaries
+       set -- init_buildsystem --cachedir "$CACHE_DIR" "${definesnstuff[@]}" "${repos[@]}" $CLEAN_BUILD $USEUSEDFORBUILD $CREATE_BUILD_BINARIES $RPMLIST "$MYSRCDIR/$SPECFILE" $ADDITIONAL_PACKS
+       echo "$* ..."
+       "$@" || cleanup_and_exit 1
+       check_exit
+       if df $BUILD_ROOT 2>/dev/null | grep -q "100%"; then
+           df -h $BUILD_ROOT
+           echo "build does not work on a completely full filesystem"
+           cleanup_and_exit 1
+       fi
+       mount -n -tproc none $BUILD_ROOT/proc || true
+       mount -n -tdevpts none $BUILD_ROOT/dev/pts
+
+       copy_oldpackages
+    fi
+
+    if test -z "$BUILD_DIST" -a -e "$BUILD_ROOT/.guessed_dist" ; then
+       read BUILD_DIST < $BUILD_ROOT/.guessed_dist
+    fi
+
+    #
+    # fix rpmrc if we are compiling for i686
+    #
+    test -f $BUILD_ROOT/usr/lib/rpm/rpmrc_i586 && mv $BUILD_ROOT/usr/lib/rpm/rpmrc_i586 $BUILD_ROOT/usr/lib/rpm/rpmrc
+    if test -e $BUILD_ROOT/usr/lib/rpm/rpmrc -a "$BUILD_ARCH" != "${BUILD_ARCH#i686}" ; then
+       mv $BUILD_ROOT/usr/lib/rpm/rpmrc $BUILD_ROOT/usr/lib/rpm/rpmrc_i586
+       sed -e 's/^buildarchtranslate: athlon.*/buildarchtranslate: athlon: i686/' -e 's/^buildarchtranslate: i686.*/buildarchtranslate: i686: i686/' < $BUILD_ROOT/usr/lib/rpm/rpmrc_i586 > $BUILD_ROOT/usr/lib/rpm/rpmrc
+    fi
+
+    #
+    # install dummy sign program if needed
+    #
+    test -f $BUILD_ROOT/usr/bin/sign_installed && mv $BUILD_ROOT/usr/bin/sign_installed $BUILD_ROOT/usr/bin/sign
+    if test -n "$SIGNDUMMY" ; then
+       test -f $BUILD_ROOT/usr/bin/sign && mv $BUILD_ROOT/usr/bin/sign $BUILD_ROOT/usr/bin/sign_installed
+       cp $BUILD_DIR/signdummy $BUILD_ROOT/usr/bin/sign
+       chmod 755 $BUILD_ROOT/usr/bin/sign
+    fi
+
+    #
+    # check if we want to build with the abuild user
+    #
+    BUILD_USER=abuild
+    if test -x $BUILD_ROOT/bin/rpm ; then
+       SUSE_VERSION=`chroot $BUILD_ROOT /bin/rpm --eval '%{?suse_version}' 2>/dev/null`
+       if test -n "$SUSE_VERSION" && test "$SUSE_VERSION" -le 1020 ; then
+           BUILD_USER=root
+       fi
+    fi
+    if test "$BUILD_USER" = abuild ; then
+       egrep '^#[       ]*needsrootforbuild[       ]*$' >/dev/null <$SPECFILE && BUILD_USER=root
+    else
+       egrep '^#[       ]*norootforbuild[       ]*$' >/dev/null <$SPECFILE && BUILD_USER=abuild
+    fi
+    test -n "$NOROOTFORBUILD" && BUILD_USER=abuild
+
+    if test $BUILD_USER = abuild ; then
+       if ! egrep '^abuild:' >/dev/null <$BUILD_ROOT/etc/passwd ; then
+           echo "abuild::${ABUILD_UID}:${ABUILD_GID}:Autobuild:/home/abuild:/bin/bash" >>$BUILD_ROOT/etc/passwd
+           echo 'abuild:*:::::::' >>$BUILD_ROOT/etc/shadow # This is needed on Mandriva 2009
+           echo 'abuild:*::' >>$BUILD_ROOT/etc/gshadow # This is needed on Ubuntu
+           echo "abuild::${ABUILD_GID}:" >>$BUILD_ROOT/etc/group
+           mkdir -p $BUILD_ROOT/home/abuild
+           chown "$ABUILD_UID:$ABUILD_GID" $BUILD_ROOT/home/abuild
+       else
+           if ! egrep "^abuild:x?:${ABUILD_UID}:${ABUILD_GID}" >/dev/null <$BUILD_ROOT/etc/passwd ; then
+               echo "abuild user present in the buildroot ($BUILD_ROOT) but uid:gid does not match"
+               echo "buildroot currently using:"
+               egrep "^abuild:" <$BUILD_ROOT/etc/passwd
+               echo "build script attempting to use:"
+               echo "abuild::${ABUILD_UID}:${ABUILD_GID}:..."
+               echo "build aborting"
+               cleanup_and_exit 1
+           fi
+       fi
+       if test -f $BUILD_ROOT/etc/shadow ; then
+           sed -e "s@^root::@root:*:@" < $BUILD_ROOT/etc/shadow > $BUILD_ROOT/etc/shadow.t && mv $BUILD_ROOT/etc/shadow.t $BUILD_ROOT/etc/shadow
+       fi
+       if test -f $BUILD_ROOT/etc/gshadow ; then
+           sed -e "s@^root::@root:*:@" < $BUILD_ROOT/etc/gshadow > $BUILD_ROOT/etc/gshadow.t && mv $BUILD_ROOT/etc/gshadow.t $BUILD_ROOT/etc/gshadow
+       fi
+       BUILD_USER_ABUILD_USED=true
+    else
+       # building as root
+       ABUILD_UID=0
+       ABUILD_GID=0
+       if egrep '^abuild:' >/dev/null <$BUILD_ROOT/etc/passwd ; then
+           rm -rf $BUILD_ROOT/home/abuild
+           egrep -v '^abuild:' <$BUILD_ROOT/etc/passwd >$BUILD_ROOT/etc/passwd.new
+           mv $BUILD_ROOT/etc/passwd.new $BUILD_ROOT/etc/passwd
+           egrep -v '^abuild:' <$BUILD_ROOT/etc/group >$BUILD_ROOT/etc/group.new
+           mv $BUILD_ROOT/etc/group.new $BUILD_ROOT/etc/group
+           if test -f $BUILD_ROOT/etc/shadow ; then
+             egrep -v '^abuild:' <$BUILD_ROOT/etc/shadow >$BUILD_ROOT/etc/shadow.new
+             mv $BUILD_ROOT/etc/shadow.new $BUILD_ROOT/etc/shadow
+           fi
+           if test -f $BUILD_ROOT/etc/gshadow ; then
+             egrep -v '^abuild:' <$BUILD_ROOT/etc/gshadow >$BUILD_ROOT/etc/gshadow.new
+             mv $BUILD_ROOT/etc/gshadow.new $BUILD_ROOT/etc/gshadow
+           fi
+       fi
+    fi
+
+    if test "$BUILDTYPE" = spec ; then
+       TOPDIR=`chroot $BUILD_ROOT su -c "rpm --eval '%_topdir'" - $BUILD_USER`
+       if test -z "$TOPDIR"; then
+           echo "Error: TOPDIR empty"
+           cleanup_and_exit 1
+       fi
+    else
+       TOPDIR=/usr/src/packages
+       mkdir -p $BUILD_ROOT$TOPDIR
+    fi
+
+    rm -f $BUILD_ROOT/.build.packages
+    ln -s ${TOPDIR#/} $BUILD_ROOT/.build.packages
+
+    mount -n -tproc none $BUILD_ROOT/proc 2> /dev/null
+    mount -n -tdevpts none $BUILD_ROOT/dev/pts 2> /dev/null
+
+    setupicecream
+
+    setupccache
+
+    # nasty hack to prevent rpath on known paths
+    # FIXME: do this only for suse
+    if test -d "$BUILD_ROOT/etc/profile.d" ; then
+       echo "export SUSE_IGNORED_RPATHS=/etc/ld.so.conf" > "$BUILD_ROOT/etc/profile.d/buildsystem.sh"
+    fi
+
+    #
+    # now clean up RPM building directories
+    #
+    rm -rf $BUILD_ROOT$TOPDIR
+    for i in BUILD RPMS/`uname -m` RPMS/i386 RPMS/noarch SOURCES SPECS SRPMS BUILDROOT OTHER ; do
+       mkdir -p $BUILD_ROOT$TOPDIR/$i
+    done
+    chown -R "$ABUILD_UID:$ABUILD_GID" "$BUILD_ROOT$TOPDIR"
+    check_exit
+
+    mkdir -p $BUILD_ROOT$TOPDIR/SOURCES
+    if test "$BUILDTYPE" = kiwi ; then
+       mkdir -p $BUILD_ROOT$TOPDIR/KIWI
+       if test "$MYSRCDIR" = $BUILD_ROOT/.build-srcdir ; then
+           mv "$MYSRCDIR"/* $BUILD_ROOT$TOPDIR/SOURCES/
+       else
+           if test -z "$LINKSOURCES" ; then
+               cp -dLR "$MYSRCDIR"/* $BUILD_ROOT$TOPDIR/SOURCES/
+           else
+               cp -lR "$MYSRCDIR"/* $BUILD_ROOT$TOPDIR/SOURCES/
+           fi
+           if test "$?" != 0 ; then
+               echo "source copy failed"
+               cleanup_and_exit 1
+           fi
+       fi
+    else
+       cp -p "$MYSRCDIR"/* $BUILD_ROOT$TOPDIR/SOURCES/
+    fi
+    # strip prefix from autogenerated files of source services.
+    for i in $BUILD_ROOT$TOPDIR/SOURCES/_service\:*; do
+      mv "$i" "${i%/*}/${i##*:}"
+    done
+    SPECFILE="${SPECFILE##*:}"
+
+    test "$MYSRCDIR" = $BUILD_ROOT/.build-srcdir && rm -rf "$MYSRCDIR"
+    CHANGELOGARGS=
+    test -n "$CHANGELOG" -a -f "$BUILD_ROOT/.build-changelog" && CHANGELOGARGS="--changelog $BUILD_ROOT/.build-changelog"
+
+    if test "$BUILDTYPE" = spec ; then
+       # do buildrequires/release substitution
+       args=()
+       if test -n "$RELEASE"; then
+               args=(--release "$RELEASE")
+       fi
+       substitutedeps "${args[@]}" --root "$BUILD_ROOT" --dist "$BUILD_DIST" --archpath "$BUILD_ARCH" --configdir "$BUILD_DIR/configs" $CHANGELOGARGS "$BUILD_ROOT$TOPDIR/SOURCES/$SPECFILE" "$BUILD_ROOT/.spec.new" || cleanup_and_exit 1
+       # extract macros from configuration
+       getmacros --dist "$BUILD_DIST" --archpath "$BUILD_ARCH" --configdir "$BUILD_DIR/configs" > $BUILD_ROOT/root/.rpmmacros
+       if test -n "$BUILD_DEBUG" ; then
+           echo '
+%prep %?_suse_insert_debug_package%%prep
+%package %?_suse_insert_debug_package%%package
+%suse_insert_debug_package \
+  %global _suse_insert_debug_package \\\
+    %%undefine _suse_insert_debug_package \\\
+    %%debug_package
+
+' >> $BUILD_ROOT/root/.rpmmacros
+       fi
+
+       if [ -n "$BUILD_JOBS" ]; then
+               cat >> $BUILD_ROOT/root/.rpmmacros <<-EOF
+               %jobs $BUILD_JOBS
+               %_smp_mflags -j$BUILD_JOBS
+               EOF
+       fi
+       test $BUILD_USER = abuild && cp -p $BUILD_ROOT/root/.rpmmacros $BUILD_ROOT/home/abuild/.rpmmacros
+       # extract optflags from configuration
+       getoptflags --dist "$BUILD_DIST" --configdir "$BUILD_DIR/configs" --archpath "$BUILD_ARCH" ${BUILD_DEBUG:+--debug} > $BUILD_ROOT/root/.rpmrc
+       test $BUILD_USER = abuild && cp -p $BUILD_ROOT/root/.rpmrc $BUILD_ROOT/home/abuild/.rpmrc
+       if test -z "$ABUILD_TARGET"; then
+           ABUILD_TARGET=$(getchangetarget --dist "$BUILD_DIST" --configdir "$BUILD_DIR/configs" --archpath "$BUILD_ARCH" )
+           test -z "$ABUILD_TARGET" || echo "build target is $ABUILD_TARGET"
+       fi
+    fi
+    if test -f $BUILD_ROOT/.spec.new ; then
+       if ! cmp -s $BUILD_ROOT$TOPDIR/SOURCES/$SPECFILE $BUILD_ROOT/.spec.new ; then
+           echo -----------------------------------------------------------------
+           echo I have the following modifications for $SPECFILE:
+           sed -e "/^%changelog/q" $BUILD_ROOT$TOPDIR/SOURCES/$SPECFILE > $BUILD_ROOT/.spec.t1
+           sed -e "/^%changelog/q" $BUILD_ROOT/.spec.new > $BUILD_ROOT/.spec.t2
+           diff $BUILD_ROOT/.spec.t1 $BUILD_ROOT/.spec.t2
+           rm -f $BUILD_ROOT/.spec.t1 $BUILD_ROOT/.spec.t2
+           mv $BUILD_ROOT/.spec.new $BUILD_ROOT$TOPDIR/SOURCES/$SPECFILE
+       else
+           rm -f $BUILD_ROOT/.spec.new
+       fi
+    fi
+
+    if test "$BUILDTYPE" = dsc ; then
+       rm -rf $BUILD_ROOT$TOPDIR/BUILD
+       mkdir -p $BUILD_ROOT$TOPDIR/SOURCES.DEB
+       chown -R "$ABUILD_UID:$ABUILD_GID" "$BUILD_ROOT$TOPDIR"
+       DEB_TRANSFORM=
+       DEB_SOURCEDIR=$TOPDIR/SOURCES
+       DEB_DSCFILE=$SPECFILE
+       for f in $BUILD_ROOT$TOPDIR/SOURCES/debian.* ; do
+           test -f $f && DEB_TRANSFORM=true
+       done
+       if test -n "$DEB_TRANSFORM" ; then
+           echo "running debian transformer..."
+           if ! debtransform $CHANGELOGARGS $BUILD_ROOT$TOPDIR/SOURCES $BUILD_ROOT$TOPDIR/SOURCES/$SPECFILE $BUILD_ROOT$TOPDIR/SOURCES.DEB ; then
+               echo "debian transforming failed."
+               cleanup_and_exit 1
+           fi
+           DEB_SOURCEDIR=$TOPDIR/SOURCES.DEB
+           for DEB_DSCFILE in $BUILD_ROOT/$DEB_SOURCEDIR/*.dsc ; do : ; done
+           DEB_DSCFILE="${DEB_DSCFILE##*/}"
+       fi
+       chroot $BUILD_ROOT su -c "dpkg-source -x $DEB_SOURCEDIR/$DEB_DSCFILE $TOPDIR/BUILD" - $BUILD_USER
+    fi
+
+    chown -R "$ABUILD_UID:$ABUILD_GID" "$BUILD_ROOT$TOPDIR"
+    cd $BUILD_ROOT$TOPDIR/SOURCES || cleanup_and_exit 1
+
+    echo -----------------------------------------------------------------
+    if test "$BUILD_USER" = root ; then
+       echo ----- building $SPECFILE
+    else
+       echo ----- building $SPECFILE "(user $BUILD_USER)"
+    fi
+    echo -----------------------------------------------------------------
+    echo -----------------------------------------------------------------
+    if [ -n "$RUNNING_IN_VM" ]; then
+       if [ -x /sbin/ip ]; then
+           ip addr add 127.0.0.1/8 dev lo
+           ip link set lo up
+       else
+           ifconfig lo 127.0.0.1 up
+       fi
+       if [ -n "$MYHOSTNAME" ]; then
+           hostname "$MYHOSTNAME"
+       fi
+    fi
+
+    BUILD_SUCCEEDED=false
+
+    if test -n "$OVERLAY" ; then
+       if test -d "$OVERLAY"; then
+           pushd $OVERLAY
+           echo "Copying overlay to BUILD_ROOT"
+           tar -cpf - . | (cd $BUILD_ROOT ; tar -xvf -)
+           popd
+       else
+           echo "OVERLAY ($OVERLAY) is no directory - skipping"
+       fi
+    fi
+
+    if test -n "$RSYNCSRC" ; then
+       if test -n "$RSYNCDEST"; then
+           if test -d "$RSYNCSRC"; then
+               if ! test -d "$BUILD_ROOT/$RSYNCDEST"; then
+                   echo "ATTENTION! Creating target directory ($BUILD_ROOT/$RSYNCDEST) as its not there."
+                   mkdir -p $BUILD_ROOT/$RSYNCDEST
+               fi
+               echo "Running rsync ..."
+               rsync -av $RSYNCSRC/* $BUILD_ROOT/$RSYNCDEST/
+               chown -R "$ABUILD_UID:$ABUILD_GID" "$BUILD_ROOT/$RSYNCDEST"
+               RSYNCDONE=true
+               echo "... done"
+           else
+               echo "RSYNCSRC is no directory - skipping"
+           fi
+       else
+           echo "RSYNCSRC given, but not RSYNCDEST - skipping"
+       fi
+    fi
+
+    if test "$BUILDTYPE" = spec ; then
+       test -z "$BUILD_RPM_BUILD_STAGE" && BUILD_RPM_BUILD_STAGE=-ba
+
+       # XXX: move _srcdefattr to macro file?
+       rpmbopts=("$BUILD_RPM_BUILD_STAGE" "--define" "_srcdefattr (-,root,root)")
+       if [ -n "$ABUILD_TARGET" ]; then
+               rpmbopts[${#rpmbopts[@]}]="--target=$ABUILD_TARGET"
+       fi
+       if [ -n "$DISTURL" ]; then
+               rpmbopts[${#rpmbopts[@]}]='--define'
+               rpmbopts[${#rpmbopts[@]}]="disturl $DISTURL"
+       fi
+       if test -s "$BUILD_ROOT/usr/lib/rpm/mandriva/macros" ; then
+               rpmbopts[${#rpmbopts[@]}]='--eval'
+               rpmbopts[${#rpmbopts[@]}]="%undefine _enable_debug_packages"
+       fi
+       if [ -n "$BUILD_DEBUG" ]; then
+               rpmbopts[${#rpmbopts[@]}]='--eval'
+               rpmbopts[${#rpmbopts[@]}]="%suse_insert_debug_package"
+       fi
+       if [ -n "$RSYNCDONE" ] ; then
+               rpmbopts[${#rpmbopts[@]}]='--define'
+               rpmbopts[${#rpmbopts[@]}]="RSYNCDONE 1"
+       fi
+
+       rpmbuild=rpmbuild
+
+       test -x $BUILD_ROOT/usr/bin/rpmbuild || rpmbuild=rpm
+       # su involves a shell which would require even more
+       # complicated quoting to bypass than this
+       toshellscript $rpmbuild \
+               "${definesnstuff[@]}" \
+               "${rpmbopts[@]}" \
+               "$TOPDIR/SOURCES/$SPECFILE" \
+               > $BUILD_ROOT/.build.command
+       chmod 755 $BUILD_ROOT/.build.command
+       check_exit
+       if test -n "$shell"; then
+           chroot $BUILD_ROOT su -
+       else
+           chroot $BUILD_ROOT su -c /.build.command - $BUILD_USER < /dev/null && BUILD_SUCCEEDED=true
+       fi
+    fi
+
+    if test "$BUILDTYPE" = dsc ; then
+       # Checks to see if a build script should be used
+       # this allows the build environment to be manipulated
+       # and alternate build commands can be used
+       if [ -n "$BUILD_JOBS" ]; then
+           DSC_BUILD_JOBS="-j$BUILD_JOBS"
+       fi
+       DSC_BUILD_CMD="dpkg-buildpackage -us -uc -rfakeroot-tcp $DSC_BUILD_JOBS"
+       if test -e $BUILD_ROOT/$TOPDIR/SOURCES/build.script ; then
+           echo "Sourcing build.script to build - it should normally run 'dpkg-buildpackage -us -uc -rfakeroot-tcp'"
+           DSC_BUILD_CMD="source $TOPDIR/SOURCES/build.script"
+           chmod +x $BUILD_ROOT/$TOPDIR/SOURCES/build.script
+       fi
+
+       if test -n "$shell"; then
+           chroot $BUILD_ROOT su -
+       else
+           chroot $BUILD_ROOT su -c "cd $TOPDIR/BUILD && $DSC_BUILD_CMD" - $BUILD_USER < /dev/null && BUILD_SUCCEEDED=true
+       fi
+
+       mkdir -p $BUILD_ROOT/$TOPDIR/DEBS
+       for DEB in $BUILD_ROOT/$TOPDIR/*.deb ; do
+           test -e "$DEB" && mv "$DEB" "$BUILD_ROOT/$TOPDIR/DEBS"
+       done
+       # link sources over
+       ln $BUILD_ROOT/$DEB_SOURCEDIR/$DEB_DSCFILE $BUILD_ROOT/$TOPDIR/DEBS/
+       while read f ; do
+           ln $BUILD_ROOT/$DEB_SOURCEDIR/$f $BUILD_ROOT/$TOPDIR/DEBS/
+       done < <(sed -ne '/^Files:/,$s/^ ................................ [0-9][0-9]* //p' < $BUILD_ROOT/$DEB_SOURCEDIR/$DEB_DSCFILE)
+    fi
+
+    if test "$BUILDTYPE" = kiwi ; then
+       . $BUILD_DIR/build_kiwi.sh
+       run_kiwi
+    fi
+
+    test "$BUILD_SUCCEEDED" = true || cleanup_and_exit 1
+    test -d "$SRCDIR" && cd "$SRCDIR"
+done
+
+RPMS=`find $BUILD_ROOT/$TOPDIR/RPMS -type f -name "*.rpm" 2>/dev/null || true`
+DEBS=`find $BUILD_ROOT/$TOPDIR/DEBS -type f -name "*.deb" 2>/dev/null || true`
+
+if test -n "$RPMS" -a -n "$BUILD_USER_ABUILD_USED" ; then
+    echo "... checking for files with abuild user/group"
+    BADFILE=
+    while read un gn fn ; do
+       if test "$un" = abuild -o "$gn" = abuild -o "$un" = ${ABUILD_UID} -o "$gn" = ${ABUILD_GID} ; then
+           echo "  $un $gn $fn"
+           BADFILE=true
+       fi
+    done < <(rpm -qp --qf '[%{FILEUSERNAME} %{FILEGROUPNAME} %{FILENAMES}\n]' $RPMS)
+    if test -n "$BADFILE" ; then
+       echo "please fix your filelist (e.g. add defattr)"
+       cleanup_and_exit 1
+    fi
+fi
+
+if test -n "$RPMS" -a -d "$BUILD_ROOT/usr/lib/build/checks" ; then
+    export PNAME=""
+    export DO_RPM_REMOVE=true
+    for SRPM in $BUILD_ROOT/$TOPDIR/SRPMS/*src.rpm ; do
+       test -f "$SRPM" && PNAME=`rpm --nodigest --nosignature -qp --qf "%{NAME}" $SRPM`
+    done
+    for CHECKSCRIPT in $BUILD_ROOT/usr/lib/build/checks/* ; do
+       echo "... running `basename $CHECKSCRIPT`"
+       $CHECKSCRIPT || cleanup_and_exit 1
+    done
+fi
+
+if test -n "$RPMS" -a "$DO_CHECKS" != "false" -a -x "$BUILD_ROOT/opt/testing/bin/rpmlint" -a -d "$BUILD_ROOT/$TOPDIR/RPMS" ; then
+    LINT_RPM_FILE_LIST=($(find $BUILD_ROOT/$TOPDIR/RPMS \
+       \( -name "*-debuginfo-*" -o -name "*-debugsource-*" \
+       -o -name "*-32bit-*" -o -name "*-64bit-*" \
+       -o -name "*-x86-*" -o -name "*-ia32-*" \) -prune \
+       -o -type f -name '*.rpm' -print))
+    SRPM_FILE_LIST=($(find $BUILD_ROOT/$TOPDIR/SRPMS -type f -name "*.rpm"))
+    echo
+    echo "RPMLINT report:"
+    echo "==============="
+    chroot $BUILD_ROOT /opt/testing/bin/rpmlint --info ${LINT_RPM_FILE_LIST[*]#$BUILD_ROOT} ${SRPM_FILE_LIST[*]#$BUILD_ROOT} || cleanup_and_exit 1
+    echo
+fi
+
+if test \( -n "$RPMS" -o -n "$DEBS" \) -a -n "$CREATE_BASELIBS"; then
+    create_baselibs
+fi
+
+exitcode=0
+# post build scripts
+# TODO: don't hardcode. instead run scripts in a directory as it's done for the checks
+if test -n "$RPMS" \
+       -a -d "$BUILD_ROOT/$TOPDIR/RPMS" \
+       -a -d "$BUILD_ROOT/.build.oldpackages" \
+       ; then
+    if test -x "$BUILD_ROOT/usr/lib/build/same-build-result.sh" ; then
+       echo "... comparing built packages with the former built"
+       mount -n -tproc none $BUILD_ROOT/proc 2> /dev/null
+       if chroot $BUILD_ROOT /usr/lib/build/same-build-result.sh /.build.oldpackages "$TOPDIR/RPMS" "$TOPDIR/SRPMS"; then
+           > $BUILD_ROOT/.build/.same_result_marker
+           # XXX: dirty build service hack. fix bs_worker. Search for
+           # 'same_result_marker' for traces of a first try to get rid of this
+           if test -n "$REASON" -a -n "$DISTURL"; then
+               exitcode=2
+           fi
+       fi
+    fi
+    if test ! -e $BUILD_ROOT/.build/.same_result_marker \
+       -a -x "$BUILD_ROOT/usr/bin/makedeltarpm" \
+       -a -x $BUILD_ROOT/usr/lib/build/mkdrpms; then
+       echo "... creating delta rpms"
+       ds=("$BUILD_ROOT/$TOPDIR"/RPMS/* "$BUILD_ROOT$TOPDIR/SRPMS")
+       chroot $BUILD_ROOT /usr/lib/build/mkdrpms /.build.oldpackages "${ds[@]#$BUILD_ROOT}"
+    fi
+fi
+
+if test -n "$RUNNING_IN_VM" -a -n "$VM_SWAP"; then
+    echo "... saving built packages"
+    swapoff "$VM_SWAP"
+    args="--padstart 512 --padend 512 -v"
+    case "$BUILDTYPE" in
+       spec)
+           computeblocklists $args $TOPDIR/RPMS/*/*.{d,}rpm $TOPDIR/SRPMS/* $TOPDIR/OTHER/* > "$VM_SWAP"
+           ;;
+       dsc)
+           computeblocklists $args $TOPDIR/DEBS/*.deb $TOPDIR/SOURCES.DEB/* $TOPDIR/OTHER/* > "$VM_SWAP"
+           ;;
+       kiwi)
+           computeblocklists $args $TOPDIR/KIWI/* $TOPDIR/OTHER/* > "$VM_SWAP"
+           ;;
+    esac || cleanup_and_exit 1
+fi
+
+echo
+echo "$HOST finished \"build $SPECFILE\" at `date --utc`."
+echo
+
+cleanup_and_exit "$exitcode"
diff --git a/build.1 b/build.1
new file mode 100644 (file)
index 0000000..53cfcea
--- /dev/null
+++ b/build.1
@@ -0,0 +1,169 @@
+.de TQ \"follow a TP item with several TQ items to define several
+.      \"entities with one shared description.
+.br
+.ns
+.TP \\$1
+..
+.TH build 1 "(c) 1997-2008 SuSE Linux AG Nuernberg, Germany"
+.SH NAME
+build \- build SuSE Linux RPMs in a chroot environment
+.SH SYNOPSIS
+.B build
+.RB [ --clean | --no-init]
+.RB [ --rpms
+.IR path1 : path2 : ... ]
+.RB [ --arch
+.IR arch1 : arch2 : ... ]
+.RB [ --root
+.IR buildroot ]
+.RB [ specfile | srcrpm ]
+.br
+.B build
+.B --help
+.br
+.B build
+.B --verify
+.SH DESCRIPTION
+\fBbuild\fR is a tool to build SuSE Linux RPMs in a safe and clean way.
+.B build
+will install a minimal SuSE Linux as build system into some directory
+and will chroot to this system to compile the package.
+This way you don't risk to corrupt your working system (due to a broken spec
+file for example), even if the package does not use BuildRoot.
+
+.B build
+searches the spec file for a
+.I BuildRequires:
+line; if such a line is found, all the specified rpms are installed.
+Otherwise a selection of default packages are used. Note that
+.B build
+doesn't automatically resolve missing dependencies, so the specified
+rpms have to be sufficient for the build.
+.P
+If a spec file is specified on the command line,
+.B build
+will use this file and all other files in the directory for building
+the package. If a srcrpm is specified,
+.B build
+automatically unpacks it for the build.
+If neither is given,
+.B build
+will use all the specfiles in the current directory.
+.P
+.SH OPTIONS
+.TP
+.B --clean
+remove the build system and reinitialize it from scratch.
+.TP
+.B --no-init
+skip the build system initialization and start with build immediately.
+.TP
+.B --list-state
+list rpms that would be used to create a fresh build root.
+Does not create the build root or perform a build.
+.TP
+.BI "\-\-rpms " path1 : path2 : path3\fR...\fP
+Where build can find the SuSE Linux RPMs needed to create the
+build system. This option overrides the BUILD_RPMS environment
+variable.
+.TP
+.BI "\-\-arch " arch1 : arch2 : arch3\fR...\fP
+What architectures to select from the RPMs.
+.B build
+automatically sets this to a sensible value for your host if you
+don't specify this option.
+.TP
+.BI "\-\-repo " url_or_dir
+Also use the specified repository to create the build system.
+The repositories may be either of type rpmmd, yast2 (susetags),
+or a simple directory. Multiple --repo options may be given.
+As a special form, 'zypp://reponame' can be used to specify
+a system repository. 'zypp://' selects all enabled system
+repositories. This is also the default if BUILD_RPMS is not
+set and no --rpms or --repo option is used.
+.TP
+.BI "\-\-root " buildroot
+Specifies where the build system is set up. Overrides the
+BUILD_ROOT enviroment variable.
+.TP
+.B --useusedforbuild
+Tell build not to do dependency expansion, but to extract the
+list of packages to install from "# usedforbuild" lines or, if none
+are found, from all "BuildRequires" lines.  This option is useful
+if you want to re-build a package from a srcrpm with exactly the
+same packages used for the srcrpm build.
+.TP
+.B --norootforbuild
+
+.TP
+.B --help
+Print a short help text.
+.TP
+.B --verify
+verify the files in an existing build system.
+.TP
+.BI "\-\--dist " distribution
+Set the distribution. If this option is not given, build tries to
+calculate the distribution by looking at the rpm package used in the
+build.
+The specified distribution can either be a string
+like "11.2" or "sles9", or the pathname of the build configuration to
+use.
+
+.SH .spec FILE OPTIONS
+The
+.B build
+command interprets some special control comments in the specfile:
+.TP
+.B # norootforbuild
+.TQ
+.B # needsrootforbuild
+.B build
+uses either user
+.I root
+or user
+.I abuild
+in the build system to do the build.  For non-SUSE distros as well as
+since SUSE 10.2, the default build user is
+.I abuild.
+For 10.2 and before, the default build user is
+.I root.
+These two flags in the spec file allow to deviate from the defaults
+and force-set the build user to
+.I abuild
+and
+.I root
+.RI "(for " "#\ norootforbuild" " and " "#\ needsrootforbuild" " respectively."
+.TP
+.B # needsbinariesforbuild
+provide the binary rpms that have been used to set up the build root
+in
+.I /.build.binaries
+within the build root.
+.SH ENVIRONMENT
+.TP
+.B BUILD_ROOT
+The directory where build should install the chrooted build system.
+"/var/tmp/build-root" is used by default.
+.TP
+.B BUILD_RPMS
+Where build can find the SuSE Linux RPMs.  build needs them to create the
+build system.
+.TP
+.B BUILD_RPM_BUILD_STAGE
+The rpm build stage (-ba, -bb, ...).  This is just passed through to
+rpm, check the rpm manpage for a complete list and descriptions.
+"-ba" is the default.
+You can use this to add more options to RPM.
+
+.SH SEE ALSO
+.BR rpm (8),
+.TP
+.BR "Maximum RPM":
+.I http://www.rpm.org/max-rpm/
+.TP
+.BR "cross distribution packaging":
+.I http://en.opensuse.org/openSUSE:Build_Service_cross_distribution_howto
+.TP
+.BR "openSUSE packaging standards and guidelines":
+.I http://en.opensuse.org/Portal:Packaging
diff --git a/build_kiwi.sh b/build_kiwi.sh
new file mode 100644 (file)
index 0000000..a825e16
--- /dev/null
@@ -0,0 +1,247 @@
+#!/bin/bash
+run_kiwi()
+{
+    imagetype=$(perl -I$BUILD_DIR -MBuild::Kiwi -e Build::Kiwi::show $BUILD_ROOT/$TOPDIR/SOURCES/$SPECFILE imagetype)
+    imagename=$(perl -I$BUILD_DIR -MBuild::Kiwi -e Build::Kiwi::show $BUILD_ROOT/$TOPDIR/SOURCES/$SPECFILE filename)
+    imageversion=$(perl -I$BUILD_DIR -MBuild::Kiwi -e Build::Kiwi::show $BUILD_ROOT/$TOPDIR/SOURCES/$SPECFILE version)
+    # prepare rpms as source and createrepo on the repositories
+    ln -sf $TOPDIR/SOURCES/repos $BUILD_ROOT/repos
+    cd $BUILD_ROOT/$TOPDIR/SOURCES/repos
+    for r in */* ; do
+        test -L $r && continue
+        test -d $r || continue
+        repo="$TOPDIR/SOURCES/repos/$r/"
+        # create compatibility link for old kiwi versions
+        rc="${r//:/:/}"
+        if test "$rc" != "$r" ; then
+       rl="${rc//[^\/]}"
+       rl="${rl//?/../}"
+       mkdir -p "${rc%/*}"
+       ln -s $rl$r "${rc%/*}/${rc##*/}"
+       repo="$TOPDIR/SOURCES/repos/${rc%/*}/${rc##*/}/"
+        fi
+        if test "$imagetype" != product ; then
+           echo "creating repodata for $repo"
+           if chroot $BUILD_ROOT createrepo --simple-md-filenames --help >/dev/null 2>&1 ; then
+               chroot $BUILD_ROOT createrepo --simple-md-filenames "$repo"
+           else
+               chroot $BUILD_ROOT createrepo "$repo"
+           fi
+        fi
+    done
+    # unpack root tar
+    for t in $BUILD_ROOT/$TOPDIR/SOURCES/root.tar* ; do
+       test -f $t || continue
+       mkdir -p $BUILD_ROOT/$TOPDIR/SOURCES/root
+       chroot $BUILD_ROOT tar -C $TOPDIR/SOURCES/root -xf "$TOPDIR/SOURCES/${t##*/}"
+    done
+    # fix script permissions
+    chmod a+x $BUILD_ROOT/$TOPDIR/SOURCES/*.sh 2>/dev/null
+    # unpack tar files in image directories
+    if test -d $BUILD_ROOT/$TOPDIR/SOURCES/images ; then
+       (
+       cd $BUILD_ROOT/$TOPDIR/SOURCES/images
+       for r in */* ; do
+           test -L $r && continue
+           test -d $r || continue
+           for t in $r/root.tar* ; do
+               test -f $t || continue
+               mkdir -p $r/root
+               chroot $BUILD_ROOT tar -C $TOPDIR/SOURCES/images/$r/root -xf "$TOPDIR/SOURCES/images/$r/${t##*/}"
+           done
+           # fix script permissions
+           chmod a+x $BUILD_ROOT/$TOPDIR/SOURCES/images/$r/*.sh 2>/dev/null
+           # create compatibility link for old kiwi versions
+           rc="${r//:/:/}"
+           if test "$rc" != "$r" ; then
+               rl="${rc//[^\/]}"
+               rl="${rl//?/../}"
+               mkdir -p "${rc%/*}"
+               ln -s $rl$r "${rc%/*}/${rc##*/}"
+           fi
+       done
+       )
+    fi
+    rm -f $BUILD_ROOT/$TOPDIR/SOURCES/config.xml
+    ln -s $SPECFILE $BUILD_ROOT/$TOPDIR/SOURCES/config.xml
+    chroot $BUILD_ROOT su -c "kiwi --version" -
+    if test "$imagetype" = product ; then
+       echo "running kiwi --create-instsource..."
+       # runs always as abuild user
+       mkdir -p "$BUILD_ROOT/$TOPDIR/KIWIROOT"
+       chroot "$BUILD_ROOT" chown -R abuild.abuild "$TOPDIR"
+       # --instsource-local is only needed for openSUSE 11.1 and SLE 11 SP0 kiwi.
+       chroot "$BUILD_ROOT" su -c "APPID=- LANG=POSIX /usr/sbin/kiwi --root $TOPDIR/KIWIROOT -v -v --logfile terminal -p $TOPDIR/SOURCES --instsource-local --create-instsource $TOPDIR/SOURCES" - abuild < /dev/null && BUILD_SUCCEEDED=true
+### This block is obsolete with current kiwi versions, only needed for kiwi 3.01 version
+#            for i in $BUILD_ROOT/$TOPDIR/KIWIROOT/main/* ; do
+#                test -d "$i" || continue
+#                n="${i##*/}"
+#                test "$n" = scripts && continue
+#                test "$n" != "${n%0}" && continue
+#                chroot $BUILD_ROOT su -c "suse-isolinux $TOPDIR/KIWIROOT/main/$n $TOPDIR/KIWI/$n.iso" - $BUILD_USER
+#            done
+
+       # move created product to correct destination
+       for i in $BUILD_ROOT/$TOPDIR/KIWIROOT/main/* ; do
+           test -e "$i" || continue
+           f=${i##*/}
+           case $f in
+               *.iso) mv $i $BUILD_ROOT/$TOPDIR/KIWI/. ;;
+               scripts) ;;
+               *0) ;;
+               *) test -d $i && mv $i $BUILD_ROOT/$TOPDIR/KIWI/. ;;
+           esac
+       done
+    else
+       BUILD_SUCCEEDED=true
+       if [ -z "$RUNNING_IN_VM" ]; then
+           # NOTE: this must be done with the outer system, because it loads the dm-mod kernel modules, which needs to fit to the kernel.
+           echo "starting device mapper for kiwi..."
+           [ -x /etc/init.d/boot.device-mapper ] && /etc/init.d/boot.device-mapper start
+       fi
+       for imgtype in $imagetype ; do
+           echo "running kiwi --prepare for $imgtype..."
+           # Do not use $BUILD_USER here, since we always need root permissions
+           if chroot $BUILD_ROOT su -c "cd $TOPDIR/SOURCES && kiwi --prepare $TOPDIR/SOURCES --logfile terminal --root $TOPDIR/KIWIROOT-$imgtype" - root < /dev/null ; then
+               echo "running kiwi --create for $imgtype..."
+               mkdir -p $BUILD_ROOT/$TOPDIR/KIWI-$imgtype
+               chroot $BUILD_ROOT su -c "cd $TOPDIR/SOURCES && kiwi --create $TOPDIR/KIWIROOT-$imgtype --logfile terminal --type $imgtype -d $TOPDIR/KIWI-$imgtype" - root < /dev/null || cleanup_and_exit 1
+           else
+               cleanup_and_exit 1
+           fi
+       done
+
+       # create tar.gz of images, in case it makes sense
+       imagearch=`uname -m`
+       buildnum=""
+         if test -n "$RELEASE"; then
+           buildnum="-Build$RELEASE"
+       fi
+       imageout="$imagename.$imagearch-$imageversion"
+       for imgtype in $imagetype ; do
+           case "$imgtype" in
+               oem)
+                   cat > $BUILD_ROOT/kiwi_post.sh << EOF
+echo "compressing oem images... "
+cd /$TOPDIR/KIWI-oem
+if [ -e "$imageout.iso" ]; then
+       echo "take iso file and create sha256..."
+       mv "$imageout.iso" "/$TOPDIR/KIWI/$imageout$buildnum.iso"
+       pushd /$TOPDIR/KIWI
+       if [ -x /usr/bin/sha256sum ]; then
+           /usr/bin/sha256sum "$imageout$buildnum.iso" > "$imageout$buildnum.iso.sha256"
+        fi
+       popd
+fi
+if [ -e "$imageout.raw" ]; then
+       mv "$imageout.raw" "/$TOPDIR/KIWI/$imageout$buildnum.raw"
+       pushd /$TOPDIR/KIWI
+       echo "bzip2 raw file..."
+       bzip2 "$imageout$buildnum.raw"
+       if [ -x /usr/bin/sha256sum ]; then
+           echo "Create sha256 file..."
+           /usr/bin/sha256sum "$imageout$buildnum.raw.bz2" > "$imageout$buildnum.raw.bz2.sha256"
+        fi
+       popd
+fi
+
+tar cvjfS "/$TOPDIR/KIWI/$imageout$buildnum-raw.tar.bz2" \
+       --exclude="$imageout.iso" --exclude="$imageout.raw" *
+cd /$TOPDIR/KIWI
+if [ -x /usr/bin/sha256sum ]; then
+   /usr/bin/sha256sum "$imageout$buildnum-raw.tar.bz2" > "$imageout$buildnum-raw.tar.bz2.sha256"
+fi
+EOF
+                   ;;
+               vmx)
+                   cat > $BUILD_ROOT/kiwi_post.sh << EOF
+echo "compressing vmx images... "
+cd /$TOPDIR/KIWI-vmx
+# This option has a number of format parameters
+VMXFILES=""
+SHAFILES=""
+for i in "$imageout.vmx" "$imageout.vmdk" "$imageout-disk*.vmdk" "$imageout.ovf"; do
+       ls \$i >& /dev/null && VMXFILES="\$VMXFILES \$i"
+done
+if [ -n "\$VMXFILES" ]; then
+       tar cvjfS "/$TOPDIR/KIWI/$imageout$buildnum-vmx.tar.bz2" \$VMXFILES
+       SHAFILES="\$SHAFILES $imageout$buildnum-vmx.tar.bz2"
+fi
+
+if [ -e "$imageout.xenconfig" ]; then
+       tar cvjfS "/$TOPDIR/KIWI/$imageout$buildnum-vmx.tar.bz2" $imageout.xenconfig $imageout.raw initrd-*
+       SHAFILES="\$SHAFILES $imageout$buildnum-vmx.tar.bz2"
+fi
+# FIXME: do we need a single .raw file in any case ?
+
+cd /$TOPDIR/KIWI
+if [ -n "\$SHAFILES" -a -x /usr/bin/sha256sum ]; then
+       for i in \$SHAFILES; do
+               echo "Create sha256 file..."
+               /usr/bin/sha256sum "\$i" > "\$i.sha256"
+       done
+fi
+EOF
+                   ;;
+               xen)
+                   cat > $BUILD_ROOT/kiwi_post.sh << EOF
+echo "compressing xen images... "
+cd /$TOPDIR/KIWI-xen
+tar cvjfS "/$TOPDIR/KIWI/$imageout$buildnum-xen.tar.bz2" \
+       `grep ^kernel $imageout.xenconfig | cut -d'"'  -f2` \
+       `grep ^ramdisk $imageout.xenconfig | cut -d'"'  -f2` \
+       initrd-* \
+       "$imageout.xenconfig" \
+       "$imageout"
+if [ -x /usr/bin/sha256sum ]; then
+   echo "Create sha256 file..."
+   cd $TOPDIR/KIWI
+   /usr/bin/sha256sum "$imageout$buildnum-xen.tar.bz2" > "$imageout$buildnum-xen.tar.bz2.sha256"
+fi
+EOF
+                   ;;
+               pxe)
+                   cat > $BUILD_ROOT/kiwi_post.sh << EOF
+echo "compressing pxe images... "
+cd /$TOPDIR/KIWI-pxe
+tar cvjfS "/$TOPDIR/KIWI/$imageout$buildnum-pxe.tar.bz2" ${imageout}* initrd-*
+if [ -x /usr/bin/sha256sum ]; then
+   echo "Create sha256 file..."
+   cd $TOPDIR/KIWI
+   /usr/bin/sha256sum "$imageout$buildnum-pxe.tar.bz2" > "$imageout$buildnum-pxe.tar.bz2.sha256"
+fi
+EOF
+                   ;;
+               iso)
+                   cat > $BUILD_ROOT/kiwi_post.sh << EOF
+cd /$TOPDIR/KIWI-iso
+for i in *.iso; do
+       mv "\$i" "/$TOPDIR/KIWI/\${i%.iso}$buildnum.iso"
+done
+if [ -x /usr/bin/sha256sum ]; then
+   echo "creating sha256 sum for iso images... "
+   cd $TOPDIR/KIWI
+   for i in *.iso; do
+       /usr/bin/sha256sum "\$i" > "\$i.sha256"
+   done
+fi
+EOF
+                   ;;
+               *)
+                   cat > $BUILD_ROOT/kiwi_post.sh << EOF
+echo "compressing unkown images... "
+cd /$TOPDIR/KIWI-$imgtype
+tar cvjfS "/$TOPDIR/KIWI/$imageout$buildnum-$imgtype.tar.bz2" *
+if [ -x /usr/bin/sha256sum ]; then
+   echo "Create sha256 file..."
+   cd /$TOPDIR/KIWI
+   /usr/bin/sha256sum "$imageout$buildnum-$imgtype.tar.bz2" > "$imageout$buildnum-$imgtype.tar.bz2.sha256"
+fi
+EOF
+                   ;;
+           esac
+           chroot $BUILD_ROOT su -c "sh -x -e /kiwi_post.sh" || cleanup_and_exit 1
+           rm -f $BUILD_ROOT/kiwi_post.sh
+       done
+    fi
+}
diff --git a/changelog2spec b/changelog2spec
new file mode 100755 (executable)
index 0000000..818501c
--- /dev/null
@@ -0,0 +1,222 @@
+#!/usr/bin/perl -w
+
+#
+# Convert a SUSE or Debian changelog file to rpm format
+#
+
+BEGIN {
+  unshift @INC, ($::ENV{'BUILD_DIR'} || '/usr/lib/build');
+}
+
+use Date::Parse;
+use Time::Zone;
+
+use strict;
+
+my @wday = qw{Sun Mon Tue Wed Thu Fri Sat};
+my @mon = qw{Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec};
+
+my $ok;
+my $zone;
+my $test;
+my $printtype;
+my $input = '';
+my $target = 'rpm';
+
+while (@ARGV) {
+  if ($ARGV[0] eq '--test') {
+    $test = 1;
+    shift @ARGV;
+    next;
+  }
+  if ($ARGV[0] eq '--type') {
+    $printtype = 1;
+    shift @ARGV;
+    next;
+  }
+  if (@ARGV > 1 && $ARGV[0] eq '--target') {
+    shift @ARGV;
+    $target = shift @ARGV;
+    next;
+  }
+  last;
+}
+
+if (@ARGV == 2 && $ARGV[0] eq '--file') {
+  die("bad --file arg\n") unless $ARGV[1] =~ /^(.*)\/([^\/]+)$/;
+  my ($dir, $file) = ($1, $2);
+  $file =~ s/\.(?:spec|dsc)$//;
+  opendir(D, $dir) || die("$dir: $!\n");
+  my @changes = grep {/\.changes$/} readdir(D);
+  closedir(D);
+  @changes = sort {length($a) <=> length($b) || $a cmp $b} @changes;
+  exit(1) unless @changes;     # nothing to do
+  if (@changes > 1) {
+    while ($file ne '') {
+      my @c = grep {/\Q$file\E/} @changes;
+      if (@c) {
+       @changes = @c;
+       last;
+      }
+      last unless $file =~ s/[-.][^-.]*$//;
+    }
+  }
+  @ARGV = ("$dir/$changes[0]");
+}
+
+sub parse_suse {
+  $_ = $_[0];
+
+  my $dline;
+  die("bad changelog heading\n") unless /^(?:\* )?([A-Za-z]+\s+[A-Za-z]+\s+[0-9].*[0-9][0-9][0-9][0-9])(.*\@.*$)/;
+  my $dt = $1;
+  my $who = $2;
+  $dt = lc($dt);
+  $who =~ s/^\s+//;
+  $who =~ s/^-\s*//;
+  $dt =~ /([0-9][0-9][0-9][0-9])/;
+  $dline = $_;
+  my $year = $1;
+  if (!defined($zone) && $dt =~ /\s([a-z]{3,4})(dst)?\s[0-9]{4}/) {
+    my $dst = $2;
+    $zone = tz_offset($1);
+    $zone += 3600 if defined($zone) && $dst;
+  }
+  my $tdt = str2time($dt);
+  $dt =~ /([0-9]+)/;
+  my $day = $1;
+  if (!$tdt) {
+    if ($dt =~ /([a-z]{3})\s+([a-z]{3})/) {
+      $tdt = str2time("$1 $2 $day $year");
+    }
+  }
+  if (!$tdt) {
+    if ($dt =~ /([a-z]{3})/) {
+      $tdt = str2time("$1 $day $year");
+    }
+  }
+  if (!$tdt) {
+    $tdt = str2time("$year-1-1");
+  }
+  $tdt += 12 * 3600 unless $dt =~ /\d:\d/;     # 12:00 if not specified
+  $tdt += ($zone || 0);
+  my $ok = 1;
+  my $change = '';
+  while(<>) {
+    chomp;
+    last if /^(?:\* )?([A-Za-z]+\s+[A-Za-z]+\s+[0-9].*[0-9][0-9][0-9][0-9])(.*\@.*$)/;
+    next if (/^--------------/);
+    next if (/^========================/);
+    s/\s+$//;
+    next if $_ eq '';
+    s/^\s*-/-/ if $ok == 1;    # obsolete?
+    s/^\s*\*\s*/  * /;
+    if (!/^-/) {
+      s/^\s+-\s*/  - /;
+      s/^\s*/  / unless s/^    \s*/    /;
+    }
+    $change .= "$_\n";
+    $ok = 2;
+  }
+  return ($_, $tdt, $dline, $who, $change);
+}
+
+sub parse_debian {
+  $_ = $_[0];
+
+  die("bad line: $_\n") unless /^(\w[-+0-9a-z.]*) \(([^\(\) \t]+)\)((\s+[-+0-9a-z.]+)+)\;.*$/;
+  my $package = $1;
+  my $version = $2;
+  my $distribution = $3;
+  my $who;
+  my $date;
+  my $changes = "- version $version\n";
+  while(<>) {
+    chomp;
+    s/\s+$//;
+    next if $_ eq '';
+    if (/^ --/) {
+      die("bad maintainer line\n") unless /^ \-\- (.* <.*>)  (.*)$/;
+      $who = $1;
+      $date = $2;
+      last;
+    }
+    die("bad change details line: $_\n") unless s/^  //;
+    s/^\*/-/;
+    s/\s*\(closes:\s*(?:bug)?\#?\s?\d+(?:,\s*(?:bug)?\#?\s?\d+)*\)//i;
+    s/\s+$//;
+    next if $_ eq '';
+    $changes .= "$_\n";
+  }
+  die("no maintainer line in last entry\n") unless defined $date;
+  if (!defined($zone) && ($date =~ /([-+])(\d\d)(\d\d)$/)) {
+    $zone = 60 * ($3 + 60 * $2);
+    $zone = -$zone if $1 eq '-';
+  }
+  my $tdt = str2time($date);
+  return ('', $tdt, $_, $who, $changes);
+}
+
+my $format;
+while (<>) {
+  chomp;
+  next if /^\s*$/;
+  next if (/^--------------/);
+  next if (/^========================/);
+  if (/^(?:\* )?([A-Za-z]+\s+[A-Za-z]+\s+[0-9].*[0-9][0-9][0-9][0-9])(.*\@.*$)/) {
+    $format = 'suse';
+
+  } elsif (/^(\w[-+0-9a-z.]*) \(([^\(\) \t]+)\)((\s+[-+0-9a-z.]+)+)\;.*$/) {
+    $format = 'debian';
+  } else {
+    die("unknown changelog format\n");
+  }
+  last;
+}
+exit(0) unless $format;
+
+if ($printtype) {
+  print "$format\n";
+  exit(0);
+}
+
+if ($target eq $format) {
+  print "$_\n";
+  while (<>) {
+    print $_;
+  }
+  exit(0);
+}
+
+die("don't know how to convert changelog to format '$target'\n") if $target ne 'rpm';
+
+my ($lastt, $t, $dline, $who, $changes);
+while(defined($_)) {
+  if (/^\s*$/) {
+    $_ = <>;
+    last unless $_;
+    chomp;
+    next;
+  }
+  if ($format eq 'suse') {
+    ($_, $t, $dline, $who, $changes) = parse_suse($_);
+  } elsif ($format eq 'debian') {
+    ($_, $t, $dline, $who, $changes) = parse_debian($_);
+  }
+  if (defined($lastt) && $lastt < $t) {
+    die("changes file not incremental: $dline\n") if $test;
+    warn("changes file not incremental: $dline\n");
+  }
+  $lastt = $t;
+  my @gm = gmtime($t);
+  # silly rpm can't hande dates < 1997, so we fold everything to
+  # Thu Jan 02 1997
+  @gm = (0, 0, 0, 2, 0, 97, 4) if $gm[5] < 97 || ($gm[5] == 97 && $gm[4] == 0 && $gm[3] <= 1);
+  printf("* %s %s %2d %4d %s\n", $wday[$gm[6]], $mon[$gm[4]], $gm[3], $gm[5] + 1900, $who);
+  $changes =~ s/%/%%/g;
+  $changes =~ s/^(\s*)%%(\S*)/$1\[%%$2\]/;
+  $changes =~ s/^(\s*)(\#\d*)/$1\[$2\]/mg;
+  $changes =~ s/^\*/  */mg;
+  print $changes;
+}
+exit(0);
diff --git a/common_functions b/common_functions
new file mode 100755 (executable)
index 0000000..69d277a
--- /dev/null
@@ -0,0 +1,76 @@
+#!/bin/bash
+
+set_build_arch()
+{
+    : ${BUILD_HOST_ARCH:=`uname -m`}
+
+    if [ -z "$BUILD_ARCH" ]; then
+       BUILD_ARCH="$BUILD_HOST_ARCH"
+       test i686 != "$BUILD_ARCH" || BUILD_ARCH=i586 # XXX: why?
+    fi
+
+    case $BUILD_ARCH in
+      i686) BUILD_ARCH="i686:i586:i486:i386" ;;
+      i586) BUILD_ARCH="i586:i486:i386" ;;
+      i486) BUILD_ARCH="i486:i386" ;;
+      i386) BUILD_ARCH="i386" ;;
+      x86_64) BUILD_ARCH="x86_64:i686:i586:i486:i386" ;;
+      sparc64v) BUILD_ARCH="sparc64v:sparc64:sparcv9v:sparcv9:sparcv8:sparc" ;;
+      sparc64) BUILD_ARCH="sparc64:sparcv9:sparcv8:sparc" ;;
+      sparcv9v) BUILD_ARCH="sparcv9v:sparcv9:sparcv8:sparc" ;;
+      sparcv9) BUILD_ARCH="sparcv9:sparcv8:sparc" ;;
+      sparcv8) BUILD_ARCH="sparcv8:sparc" ;;
+      sparc) BUILD_ARCH="sparc" ;;
+    esac
+    if test "$BUILD_ARCH" != "${BUILD_ARCH#i686}" ; then
+       cpuflags=`grep ^flags /proc/cpuinfo`
+       cpuflags="$cpuflags "
+       if test "$cpuflags" = "${cpuflags/ cx8 /}" -o "$cpuflags" = "${cpuflags/ cmov /}"; then
+           echo "Your cpu doesn't support i686 rpms. Exit."
+           cleanup_and_exit 1
+       fi
+    fi
+}
+
+check_exit()
+{
+    if test -e $BUILD_ROOT/exit; then
+       echo "exit ..."
+       cleanup_and_exit 1
+    fi
+}
+
+is_emulator_arch()
+{
+    local arch
+    for arch in $EMULATOR_ARCHS; do
+       if test "$BUILD_ARCH" = "$arch" -a "$BUILD_HOST_ARCH" != "$arch"; then
+           return 0
+       fi
+    done
+    return 1
+}
+
+check_use_emulator()
+{
+    is_emulator_arch || return
+
+    if [ -z "$VM_TYPE" ]; then
+       return 0
+    fi
+
+    # to run the qemu initialization in the XEN chroot, we need to register it with a statically build shell
+    case "$BUILD_HOST_ARCH" in
+       i?86|x86_64)
+           if test -e /bin/bash-static \
+               -a -e /bin/mount-static \
+               -a -e /usr/sbin/qemu-binfmt-conf.sh; then
+               return 0
+           else
+               # XXX: error?
+               echo "Warning: cross compile not possible due to missing static binaries"
+           fi
+       ;;
+    esac
+    return 1
+}
diff --git a/computeblocklists b/computeblocklists
new file mode 100755 (executable)
index 0000000..f9300d6
--- /dev/null
@@ -0,0 +1,100 @@
+#!/usr/bin/perl -w
+# compute the blocks used by a file
+# usage:
+# computeblocklists [options] <files...>
+# options:
+# --padstart NUM, --padend NUM, --verbose
+#
+# output:
+# <file base name> <size> <blocksize> <block numbers...>
+#
+# a block is either a number or a range (start-end)
+#
+# TODO: instead of printing zeroes for each block in a hole use
+# something like 0*num
+
+use strict;
+
+my ($opt_padstart, $opt_padend, $opt_verbose);
+
+while (@ARGV)  {
+  if ($ARGV[0] eq '--padstart') {
+    shift @ARGV;
+    $opt_padstart = shift @ARGV;
+    next;
+  }
+  if ($ARGV[0] eq '--padend') {
+    shift @ARGV;
+    $opt_padend = shift @ARGV;
+    next;
+  }
+  if ($ARGV[0] eq '--verbose' || $ARGV[0] eq '-v') {
+    shift @ARGV;
+    $opt_verbose = 1;
+    next;
+  }
+  last;
+}
+
+if($opt_padstart) {
+  print "\n"x$opt_padstart;
+}
+
+for my $file (@ARGV) {
+  next unless -f $file;
+  print STDERR "$file\n" if $opt_verbose;
+  my $n = $file;
+  $n =~ s/.*\///;
+
+  if(!open(F, '<', $file)) {
+    print STDERR "$file: $!";
+    next;
+  }
+
+  my $bsize = 'xxxx';
+  ioctl(F, 2, $bsize) || ioctl(F, 536870914, $bsize) || die("FIGETBSZ: $!\n");
+  $bsize = unpack("L", $bsize);
+
+  my @stat = stat(F);
+  my ($st_size, $st_blocks) = ($stat[7], $stat[11], $stat[12]);
+
+  my $blocks = int(($st_size+$bsize-1)/$bsize);
+
+  print "$n $st_size $bsize ";
+
+  my ($firstblock, $lastblock);
+  for ($b = 0; $b < $blocks; ++$b) {
+    my $block = pack('I', $b);
+    if(not defined ioctl(F, 1, $block)) {
+       if(not defined ioctl(F, 536870913, $block)) {
+           die "$file: $!";
+       }
+    }
+    $block = unpack('I', $block);
+    if($b == 0) {
+      print "$block";
+      $firstblock = $block;
+    } else {
+      # blocks are non-contiguous
+      if($lastblock+1 != $block) {
+       # check if we skipped some that form a range
+       if($firstblock != $lastblock) {
+         printf "-$lastblock";
+       }
+       print " $block";
+       $firstblock = $block;
+      }
+      # last block, check if contiguous
+      if($b+1==$blocks && $lastblock+1 == $block) {
+       print "-$block";
+      }
+    }
+    $lastblock = $block;
+  }
+  close F;
+  print "\n";
+}
+
+if($opt_padend) {
+  print "\n"x$opt_padend;
+}
diff --git a/configs/debian.conf b/configs/debian.conf
new file mode 100644 (file)
index 0000000..c37b4c4
--- /dev/null
@@ -0,0 +1,182 @@
+Repotype: debian
+
+Preinstall: bash perl-base sed grep coreutils debianutils
+Preinstall: libc6 libncurses5 libacl1 libattr1
+Preinstall: libreadline4 tar gawk dpkg
+Preinstall: sysv-rc gzip base-files
+
+Runscripts: base-files
+
+VMinstall: util-linux binutils libblkid1 libuuid1 libdevmapper1.02 mount
+
+Required: autoconf automake binutils bzip2 gcc gettext libc6
+Required: libtool libncurses5 perl zlib1g dpkg
+
+Support: build-essential fakeroot
+Support: bison cpio cracklib2 cvs login
+Support: file findutils flex diff
+Support: groff-base gzip info less
+Support: make man module-init-tools
+Support: net-tools util-linux
+Support: patch procps psmisc rcs strace
+Support: texinfo unzip vim ncurses-base sysvinit
+
+Keep: binutils cpp cracklib file findutils gawk gcc gcc-ada gcc-c++
+Keep: gzip libada libstdc++ libunwind
+Keep: libunwind-devel libzio make mktemp pam-devel pam-modules
+Keep: patch perl rcs timezone
+
+Prefer: xorg-x11-libs libpng fam mozilla mozilla-nss xorg-x11-Mesa
+Prefer: unixODBC libsoup glitz java-1_4_2-sun gnome-panel
+Prefer: desktop-data-SuSE gnome2-SuSE mono-nunit gecko-sharp2
+Prefer: apache2-prefork openmotif-libs ghostscript-mini gtk-sharp
+Prefer: glib-sharp libzypp-zmd-backend mDNSResponder
+
+Prefer: gnome-sharp2:art-sharp2 gnome-sharp:art-sharp
+Prefer: ifolder3:gnome-sharp2 ifolder3:gconf-sharp2
+Prefer: nautilus-ifolder3:gnome-sharp2
+Prefer: gconf-sharp2:glade-sharp2 gconf-sharp:glade-sharp
+Prefer: tomboy:gconf-sharp tomboy:gnome-sharp
+Prefer: zmd:libzypp-zmd-backend
+Prefer: yast2-packagemanager-devel:yast2-packagemanager
+
+Prefer: -libgcc-mainline -libstdc++-mainline -gcc-mainline-c++
+Prefer: -libgcj-mainline -viewperf -compat -compat-openssl097g
+Prefer: -zmd -OpenOffice_org -pam-laus -libgcc-tree-ssa -busybox-links
+Prefer: -crossover-office
+
+Conflict: ghostscript-library:ghostscript-mini
+
+Ignore: sysvinit:initscripts
+
+Ignore: aaa_base:aaa_skel,suse-release,logrotate,ash,mingetty,distribution-release
+Ignore: gettext-devel:libgcj,libstdc++-devel
+Ignore: pwdutils:openslp
+Ignore: pam-modules:resmgr
+Ignore: rpm:suse-build-key,build-key
+Ignore: bind-utils:bind-libs
+Ignore: alsa:dialog,pciutils
+Ignore: portmap:syslogd
+Ignore: fontconfig:freetype2
+Ignore: fontconfig-devel:freetype2-devel
+Ignore: xorg-x11-libs:freetype2
+Ignore: xorg-x11:x11-tools,resmgr,xkeyboard-config,xorg-x11-Mesa,libusb,freetype2,libjpeg,libpng
+Ignore: apache2:logrotate
+Ignore: arts:alsa,audiofile,resmgr,libogg,libvorbis
+Ignore: kdelibs3:alsa,arts,pcre,OpenEXR,aspell,cups-libs,mDNSResponder,krb5,libjasper
+Ignore: kdelibs3-devel:libvorbis-devel
+Ignore: kdebase3:kdebase3-ksysguardd,OpenEXR,dbus-1,dbus-1-qt,hal,powersave,openslp,libusb
+Ignore: kdebase3-SuSE:release-notes
+Ignore: jack:alsa,libsndfile
+Ignore: libxml2-devel:readline-devel
+Ignore: gnome-vfs2:gnome-mime-data,desktop-file-utils,cdparanoia,dbus-1,dbus-1-glib,krb5,hal,libsmbclient,fam,file_alteration
+Ignore: libgda:file_alteration
+Ignore: gnutls:lzo,libopencdk
+Ignore: gnutls-devel:lzo-devel,libopencdk-devel
+Ignore: pango:cairo,glitz,libpixman,libpng
+Ignore: pango-devel:cairo-devel
+Ignore: cairo-devel:libpixman-devel
+Ignore: libgnomeprint:libgnomecups
+Ignore: libgnomeprintui:libgnomecups
+Ignore: orbit2:libidl
+Ignore: orbit2-devel:libidl,libidl-devel,indent
+Ignore: qt3:libmng
+Ignore: qt-sql:qt_database_plugin
+Ignore: gtk2:libpng,libtiff
+Ignore: libgnomecanvas-devel:glib-devel
+Ignore: libgnomeui:gnome-icon-theme,shared-mime-info
+Ignore: scrollkeeper:docbook_4,sgml-skel
+Ignore: gnome-desktop:libgnomesu,startup-notification
+Ignore: python-devel:python-tk
+Ignore: gnome-pilot:gnome-panel
+Ignore: gnome-panel:control-center2
+Ignore: gnome-menus:kdebase3
+Ignore: gnome-main-menu:rug
+Ignore: libbonoboui:gnome-desktop
+Ignore: postfix:pcre
+Ignore: docbook_4:iso_ent,sgml-skel,xmlcharent
+Ignore: control-center2:nautilus,evolution-data-server,gnome-menus,gstreamer-plugins,gstreamer,metacity,mozilla-nspr,mozilla,libxklavier,gnome-desktop,startup-notification
+Ignore: docbook-xsl-stylesheets:xmlcharent
+Ignore: liby2util-devel:libstdc++-devel,openssl-devel
+Ignore: yast2:yast2-ncurses,yast2-theme-SuSELinux,perl-Config-Crontab,yast2-xml,SuSEfirewall2
+Ignore: yast2-core:netcat,hwinfo,wireless-tools,sysfsutils
+Ignore: yast2-core-devel:libxcrypt-devel,hwinfo-devel,blocxx-devel,sysfsutils,libstdc++-devel
+Ignore: yast2-packagemanager-devel:rpm-devel,curl-devel,openssl-devel
+Ignore: yast2-devtools:perl-XML-Writer,libxslt,pkgconfig
+Ignore: yast2-installation:yast2-update,yast2-mouse,yast2-country,yast2-bootloader,yast2-packager,yast2-network,yast2-online-update,yast2-users,release-notes,autoyast2-installation
+Ignore: yast2-bootloader:bootloader-theme
+Ignore: yast2-packager:yast2-x11
+Ignore: yast2-x11:sax2-libsax-perl
+Ignore: openslp-devel:openssl-devel
+Ignore: java-1_4_2-sun:xorg-x11-libs
+Ignore: java-1_4_2-sun-devel:xorg-x11-libs
+Ignore: kernel-um:xorg-x11-libs
+Ignore: tetex:xorg-x11-libs,expat,fontconfig,freetype2,libjpeg,libpng,ghostscript-x11,xaw3d,gd,dialog,ed
+Ignore: yast2-country:yast2-trans-stats
+Ignore: susehelp:susehelp_lang,suse_help_viewer
+Ignore: mailx:smtp_daemon
+Ignore: cron:smtp_daemon
+Ignore: hotplug:syslog
+Ignore: pcmcia:syslog
+Ignore: avalon-logkit:servlet
+Ignore: jython:servlet
+Ignore: ispell:ispell_dictionary,ispell_english_dictionary
+Ignore: aspell:aspel_dictionary,aspell_dictionary
+Ignore: smartlink-softmodem:kernel,kernel-nongpl
+Ignore: OpenOffice_org-de:myspell-german-dictionary
+Ignore: mediawiki:php-session,php-gettext,php-zlib,php-mysql,mod_php_any
+Ignore: squirrelmail:mod_php_any,php-session,php-gettext,php-iconv,php-mbstring,php-openssl
+
+Ignore: simias:mono(log4net)
+Ignore: zmd:mono(log4net)
+Ignore: horde:mod_php_any,php-gettext,php-mcrypt,php-imap,php-pear-log,php-pear,php-session,php
+Ignore: xerces-j2:xml-commons-apis,xml-commons-resolver
+Ignore: xdg-menu:desktop-data
+Ignore: nessus-libraries:nessus-core
+Ignore: evolution:yelp
+Ignore: mono-tools:mono(gconf-sharp),mono(glade-sharp),mono(gnome-sharp),mono(gtkhtml-sharp),mono(atk-sharp),mono(gdk-sharp),mono(glib-sharp),mono(gtk-sharp),mono(pango-sharp)
+Ignore: gecko-sharp2:mono(glib-sharp),mono(gtk-sharp)
+Ignore: vcdimager:libcdio.so.6,libcdio.so.6(CDIO_6),libiso9660.so.4,libiso9660.so.4(ISO9660_4)
+Ignore: libcdio:libcddb.so.2
+Ignore: gnome-libs:libgnomeui
+Ignore: nautilus:gnome-themes
+Ignore: gnome-panel:gnome-themes
+Ignore: gnome-panel:tomboy
+
+Substitute: utempter
+
+%ifnarch s390 s390x ppc ia64
+Substitute: java2-devel-packages java-1_4_2-sun-devel
+%else
+ %ifnarch s390x
+Substitute: java2-devel-packages java-1_4_2-ibm-devel
+ %else
+Substitute: java2-devel-packages java-1_4_2-ibm-devel xorg-x11-libs-32bit
+ %endif
+%endif
+
+Substitute: yast2-devel-packages docbook-xsl-stylesheets doxygen libxslt perl-XML-Writer popt-devel sgml-skel update-desktop-files yast2 yast2-devtools yast2-packagemanager-devel yast2-perl-bindings yast2-testsuite
+
+Substitute: glibc-devel-32bit
+
+%ifarch %ix86
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-bigsmp kernel-debug kernel-um kernel-xen kernel-kdump
+%endif
+%ifarch ia64
+Substitute: kernel-binary-packages kernel-default kernel-debug
+%endif
+%ifarch x86_64
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-xen kernel-kdump
+%endif
+%ifarch ppc
+Substitute: kernel-binary-packages kernel-default kernel-kdump kernel-ppc64 kernel-iseries64
+%endif
+%ifarch ppc64
+Substitute: kernel-binary-packages kernel-ppc64 kernel-iseries64
+%endif
+%ifarch s390
+Substitute: kernel-binary-packages kernel-s390
+%enidf
+%ifarch s390x
+Substitute: kernel-binary-packages kernel-default
+%enidf
diff --git a/configs/sl10.0.conf b/configs/sl10.0.conf
new file mode 100644 (file)
index 0000000..e9de0b1
--- /dev/null
@@ -0,0 +1,202 @@
+Repotype: rpm-md suse
+
+Preinstall: aaa_base acl attr bash bzip2 coreutils db devs diffutils
+Preinstall: filesystem fillup glibc grep insserv libacl libattr
+Preinstall: libgcc libnscd libselinux libxcrypt m4 ncurses pam
+Preinstall: permissions popt pwdutils readline rpm sed tar zlib
+
+Runscripts: aaa_base
+
+VMinstall: util-linux perl
+
+Required: autoconf automake binutils bzip2 db gcc gdbm gettext glibc
+Required: libtool ncurses perl rpm zlib
+
+Support: bind-libs bind-utils bison cpio cpp cracklib cvs cyrus-sasl
+Support: e2fsprogs file findutils flex gawk gdbm-devel gettext-devel
+Support: glibc-devel glibc-locale gpm groff gzip info klogd less
+Support: libcom_err libstdc++ libzio make man mktemp module-init-tools
+Support: ncurses-devel net-tools netcfg openldap2-client openssl
+Support: pam-modules patch procinfo procps psmisc rcs strace sysvinit
+Support: tcpd texinfo timezone unzip util-linux vim zlib-devel
+
+Keep: binutils cpp cracklib file findutils gawk gcc gcc-ada gcc-c++
+Keep: gdbm glibc-devel glibc-locale gzip libada libstdc++ libunwind
+Keep: libunwind-devel libzio make mktemp pam-devel pam-modules
+Keep: patch perl rcs timezone
+
+Prefer: xorg-x11-libs libpng fam mozilla mozilla-nss xorg-x11-Mesa
+Prefer: unixODBC libsoup glitz java-1_4_2-sun gnome-panel
+Prefer: desktop-data-SuSE gnome2-SuSE mono-nunit gecko-sharp2
+Prefer: apache2-prefork openmotif-libs ghostscript-mini gtk-sharp
+Prefer: glib-sharp libzypp-zmd-backend mDNSResponder
+
+Prefer: gnome-sharp2:art-sharp2 gnome-sharp:art-sharp
+Prefer: ifolder3:gnome-sharp2 ifolder3:gconf-sharp2
+Prefer: nautilus-ifolder3:gnome-sharp2
+Prefer: gconf-sharp2:glade-sharp2 gconf-sharp:glade-sharp
+Prefer: tomboy:gconf-sharp tomboy:gnome-sharp
+Prefer: zmd:libzypp-zmd-backend
+Prefer: yast2-packagemanager-devel:yast2-packagemanager
+
+Prefer: -libgcc-mainline -libstdc++-mainline -gcc-mainline-c++
+Prefer: -libgcj-mainline -viewperf -compat -compat-openssl097g
+Prefer: -zmd -OpenOffice_org -pam-laus -libgcc-tree-ssa -busybox-links
+Prefer: -crossover-office
+
+Conflict: ghostscript-library:ghostscript-mini
+
+Ignore: aaa_base:aaa_skel,suse-release,logrotate,ash,mingetty,distribution-release
+Ignore: gettext-devel:libgcj,libstdc++-devel
+Ignore: pwdutils:openslp
+Ignore: pam-modules:resmgr
+Ignore: rpm:suse-build-key,build-key
+Ignore: bind-utils:bind-libs
+Ignore: alsa:dialog,pciutils
+Ignore: portmap:syslogd
+Ignore: fontconfig:freetype2
+Ignore: fontconfig-devel:freetype2-devel
+Ignore: xorg-x11-libs:freetype2
+Ignore: xorg-x11:x11-tools,resmgr,xkeyboard-config,xorg-x11-Mesa,libusb,freetype2,libjpeg,libpng
+Ignore: apache2:logrotate
+Ignore: arts:alsa,audiofile,resmgr,libogg,libvorbis
+Ignore: kdelibs3:alsa,arts,pcre,OpenEXR,aspell,cups-libs,mDNSResponder,krb5,libjasper
+Ignore: kdelibs3-devel:libvorbis-devel
+Ignore: kdebase3:kdebase3-ksysguardd,OpenEXR,dbus-1,dbus-1-qt,hal,powersave,openslp,libusb
+Ignore: kdebase3-SuSE:release-notes
+Ignore: jack:alsa,libsndfile
+Ignore: libxml2-devel:readline-devel
+Ignore: gnome-vfs2:gnome-mime-data,desktop-file-utils,cdparanoia,dbus-1,dbus-1-glib,krb5,hal,libsmbclient,fam,file_alteration
+Ignore: libgda:file_alteration
+Ignore: gnutls:lzo,libopencdk
+Ignore: gnutls-devel:lzo-devel,libopencdk-devel
+Ignore: pango:cairo,glitz,libpixman,libpng
+Ignore: pango-devel:cairo-devel
+Ignore: cairo-devel:libpixman-devel
+Ignore: libgnomeprint:libgnomecups
+Ignore: libgnomeprintui:libgnomecups
+Ignore: orbit2:libidl
+Ignore: orbit2-devel:libidl,libidl-devel,indent
+Ignore: qt3:libmng
+Ignore: qt-sql:qt_database_plugin
+Ignore: gtk2:libpng,libtiff
+Ignore: libgnomecanvas-devel:glib-devel
+Ignore: libgnomeui:gnome-icon-theme,shared-mime-info
+Ignore: scrollkeeper:docbook_4,sgml-skel
+Ignore: gnome-desktop:libgnomesu,startup-notification
+Ignore: python-devel:python-tk
+Ignore: gnome-pilot:gnome-panel
+Ignore: gnome-panel:control-center2
+Ignore: gnome-menus:kdebase3
+Ignore: gnome-main-menu:rug
+Ignore: libbonoboui:gnome-desktop
+Ignore: postfix:pcre
+Ignore: docbook_4:iso_ent,sgml-skel,xmlcharent
+Ignore: control-center2:nautilus,evolution-data-server,gnome-menus,gstreamer-plugins,gstreamer,metacity,mozilla-nspr,mozilla,libxklavier,gnome-desktop,startup-notification
+Ignore: docbook-xsl-stylesheets:xmlcharent
+Ignore: liby2util-devel:libstdc++-devel,openssl-devel
+Ignore: yast2:yast2-ncurses,yast2-theme-SuSELinux,perl-Config-Crontab,yast2-xml,SuSEfirewall2
+Ignore: yast2-core:netcat,hwinfo,wireless-tools,sysfsutils
+Ignore: yast2-core-devel:libxcrypt-devel,hwinfo-devel,blocxx-devel,sysfsutils,libstdc++-devel
+Ignore: yast2-packagemanager-devel:rpm-devel,curl-devel,openssl-devel
+Ignore: yast2-devtools:perl-XML-Writer,libxslt,pkgconfig
+Ignore: yast2-installation:yast2-update,yast2-mouse,yast2-country,yast2-bootloader,yast2-packager,yast2-network,yast2-online-update,yast2-users,release-notes,autoyast2-installation
+Ignore: yast2-bootloader:bootloader-theme
+Ignore: yast2-packager:yast2-x11
+Ignore: yast2-x11:sax2-libsax-perl
+Ignore: openslp-devel:openssl-devel
+Ignore: java-1_4_2-sun:xorg-x11-libs
+Ignore: java-1_4_2-sun-devel:xorg-x11-libs
+Ignore: kernel-um:xorg-x11-libs
+Ignore: tetex:xorg-x11-libs,expat,fontconfig,freetype2,libjpeg,libpng,ghostscript-x11,xaw3d,gd,dialog,ed
+Ignore: yast2-country:yast2-trans-stats
+Ignore: libgcc:glibc-32bit
+Ignore: libstdc++:glibc-32bit
+Ignore: susehelp:susehelp_lang,suse_help_viewer
+Ignore: mailx:smtp_daemon
+Ignore: cron:smtp_daemon
+Ignore: hotplug:syslog
+Ignore: pcmcia:syslog
+Ignore: avalon-logkit:servlet
+Ignore: jython:servlet
+Ignore: ispell:ispell_dictionary,ispell_english_dictionary
+Ignore: aspell:aspel_dictionary,aspell_dictionary
+Ignore: smartlink-softmodem:kernel,kernel-nongpl
+Ignore: OpenOffice_org-de:myspell-german-dictionary
+Ignore: mediawiki:php-session,php-gettext,php-zlib,php-mysql,mod_php_any
+Ignore: squirrelmail:mod_php_any,php-session,php-gettext,php-iconv,php-mbstring,php-openssl
+
+Ignore: simias:mono(log4net)
+Ignore: zmd:mono(log4net)
+Ignore: horde:mod_php_any,php-gettext,php-mcrypt,php-imap,php-pear-log,php-pear,php-session,php
+Ignore: xerces-j2:xml-commons-apis,xml-commons-resolver
+Ignore: xdg-menu:desktop-data
+Ignore: nessus-libraries:nessus-core
+Ignore: evolution:yelp
+Ignore: mono-tools:mono(gconf-sharp),mono(glade-sharp),mono(gnome-sharp),mono(gtkhtml-sharp),mono(atk-sharp),mono(gdk-sharp),mono(glib-sharp),mono(gtk-sharp),mono(pango-sharp)
+Ignore: gecko-sharp2:mono(glib-sharp),mono(gtk-sharp)
+Ignore: vcdimager:libcdio.so.6,libcdio.so.6(CDIO_6),libiso9660.so.4,libiso9660.so.4(ISO9660_4)
+Ignore: libcdio:libcddb.so.2
+Ignore: gnome-libs:libgnomeui
+Ignore: nautilus:gnome-themes
+Ignore: gnome-panel:gnome-themes
+Ignore: gnome-panel:tomboy
+
+%ifnarch s390 s390x ia64
+Substitute: java2-devel-packages java-1_4_2-sun-devel jpackage-utils update-alternatives
+%else
+ %ifarch ppc
+Substitute: java2-devel-packages IBMJava2-JRE IBMJava2-SDK jpackage-utils update-alternatives
+ %endif
+ %ifarch s390 ia64
+Substitute: java2-devel-packages java-1_4_2-ibm-devel jpackage-utils update-alternatives
+ %endif
+ %ifarch s390x
+Substitute: java2-devel-packages java-1_4_2-ibm-devel xorg-x11-libs-32bit jpackage-utils update-alternatives
+ %endif
+%endif
+
+Substitute: yast2-devel-packages docbook-xsl-stylesheets doxygen libxslt perl-XML-Writer popt-devel sgml-skel update-desktop-files yast2 yast2-devtools yast2-packagemanager-devel yast2-perl-bindings yast2-testsuite
+
+%ifarch x86_64 ppc64 s390x sparc64
+Substitute: glibc-devel-32bit glibc-devel-32bit glibc-32bit
+%else
+ %ifarch ppc
+Substitute: glibc-devel-32bit glibc-devel-64bit
+ %else
+Substitute: glibc-devel-32bit
+ %endif
+%endif
+
+%ifarch %ix86
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-bigsmp kernel-um kernel-xen
+%endif
+%ifarch ia64
+Substitute: kernel-binary-packages kernel-default kernel-debug
+%endif
+%ifarch x86_64
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-xen
+%endif
+%ifarch ppc
+Substitute: kernel-binary-packages kernel-default kernel-ppc64 kernel-iseries64
+%endif
+%ifarch ppc64
+Substitute: kernel-binary-packages kernel-ppc64 kernel-iseries64
+%endif
+%ifarch s390
+Substitute: kernel-binary-packages kernel-s390
+%endif
+%ifarch s390x
+Substitute: kernel-binary-packages kernel-default
+%endif
+
+Macros:
+%insserv_prereq insserv sed
+%fillup_prereq fillup coreutils
+%suseconfig_fonts_prereq perl aaa_base
+%install_info_prereq info
+%suse_version 1000
+%sles_version 0
+%ul_version 0
+%do_profiling 1
+%_vendor suse
diff --git a/configs/sl10.1.conf b/configs/sl10.1.conf
new file mode 100644 (file)
index 0000000..654ea3e
--- /dev/null
@@ -0,0 +1,196 @@
+Preinstall: aaa_base acl attr bash bzip2 coreutils db diffutils
+Preinstall: filesystem fillup glibc grep insserv libacl libattr
+Preinstall: libgcc libnscd libxcrypt m4 ncurses pam
+Preinstall: permissions popt pwdutils readline rpm sed tar zlib
+
+Runscripts: aaa_base
+
+VMinstall: util-linux perl
+
+Required: autoconf automake binutils bzip2 db gcc gdbm gettext glibc
+Required: libtool ncurses perl rpm zlib
+
+Support: bind-libs bind-utils bison cpio cpp cracklib cvs cyrus-sasl
+Support: e2fsprogs file findutils flex gawk gdbm-devel gettext-devel
+Support: glibc-devel glibc-locale gpm groff gzip info klogd less
+Support: libcom_err libstdc++ libzio make man mktemp module-init-tools
+Support: ncurses-devel net-tools netcfg openldap2-client openssl
+Support: pam-modules patch procinfo procps psmisc rcs strace sysvinit
+Support: tcpd texinfo timezone unzip util-linux vim zlib-devel
+
+Keep: binutils cpp cracklib file findutils gawk gcc gcc-ada gcc-c++
+Keep: gdbm glibc-devel glibc-locale gzip libada libstdc++ libunwind
+Keep: libunwind-devel libzio make mktemp pam-devel pam-modules
+Keep: patch perl rcs timezone
+
+Prefer: xorg-x11-libs libpng fam mozilla mozilla-nss xorg-x11-Mesa
+Prefer: unixODBC libsoup glitz java-1_4_2-sun gnome-panel
+Prefer: desktop-data-SuSE gnome2-SuSE mono-nunit gecko-sharp2
+Prefer: apache2-prefork openmotif-libs ghostscript-mini gtk-sharp
+Prefer: glib-sharp libzypp-zmd-backend mDNSResponder
+
+Prefer: gnome-sharp2:art-sharp2 gnome-sharp:art-sharp
+Prefer: ifolder3:gnome-sharp2 ifolder3:gconf-sharp2
+Prefer: nautilus-ifolder3:gnome-sharp2
+Prefer: gconf-sharp2:glade-sharp2 gconf-sharp:glade-sharp
+Prefer: tomboy:gconf-sharp tomboy:gnome-sharp
+Prefer: zmd:libzypp-zmd-backend
+Prefer: yast2-packagemanager-devel:yast2-packagemanager
+
+Prefer: -libgcc-mainline -libstdc++-mainline -gcc-mainline-c++
+Prefer: -libgcj-mainline -viewperf -compat -compat-openssl097g
+Prefer: -zmd -OpenOffice_org -pam-laus -libgcc-tree-ssa -busybox-links
+Prefer: -crossover-office
+
+Conflict: ghostscript-library:ghostscript-mini
+
+Ignore: aaa_base:aaa_skel,suse-release,logrotate,ash,mingetty,distribution-release
+Ignore: gettext-devel:libgcj,libstdc++-devel
+Ignore: pwdutils:openslp
+Ignore: pam-modules:resmgr
+Ignore: rpm:suse-build-key,build-key
+Ignore: bind-utils:bind-libs
+Ignore: alsa:dialog,pciutils
+Ignore: portmap:syslogd
+Ignore: fontconfig:freetype2
+Ignore: fontconfig-devel:freetype2-devel
+Ignore: xorg-x11-libs:freetype2
+Ignore: xorg-x11:x11-tools,resmgr,xkeyboard-config,xorg-x11-Mesa,libusb,freetype2,libjpeg,libpng
+Ignore: apache2:logrotate
+Ignore: arts:alsa,audiofile,resmgr,libogg,libvorbis
+Ignore: kdelibs3:alsa,arts,pcre,OpenEXR,aspell,cups-libs,mDNSResponder,krb5,libjasper
+Ignore: kdelibs3-devel:libvorbis-devel
+Ignore: kdebase3:kdebase3-ksysguardd,OpenEXR,dbus-1,dbus-1-qt,hal,powersave,openslp,libusb
+Ignore: kdebase3-SuSE:release-notes
+Ignore: jack:alsa,libsndfile
+Ignore: libxml2-devel:readline-devel
+Ignore: gnome-vfs2:gnome-mime-data,desktop-file-utils,cdparanoia,dbus-1,dbus-1-glib,krb5,hal,libsmbclient,fam,file_alteration
+Ignore: libgda:file_alteration
+Ignore: gnutls:lzo,libopencdk
+Ignore: gnutls-devel:lzo-devel,libopencdk-devel
+Ignore: pango:cairo,glitz,libpixman,libpng
+Ignore: pango-devel:cairo-devel
+Ignore: cairo-devel:libpixman-devel
+Ignore: libgnomeprint:libgnomecups
+Ignore: libgnomeprintui:libgnomecups
+Ignore: orbit2:libidl
+Ignore: orbit2-devel:libidl,libidl-devel,indent
+Ignore: qt3:libmng
+Ignore: qt-sql:qt_database_plugin
+Ignore: gtk2:libpng,libtiff
+Ignore: libgnomecanvas-devel:glib-devel
+Ignore: libgnomeui:gnome-icon-theme,shared-mime-info
+Ignore: scrollkeeper:docbook_4,sgml-skel
+Ignore: gnome-desktop:libgnomesu,startup-notification
+Ignore: python-devel:python-tk
+Ignore: gnome-pilot:gnome-panel
+Ignore: gnome-panel:control-center2
+Ignore: gnome-menus:kdebase3
+Ignore: gnome-main-menu:rug
+Ignore: libbonoboui:gnome-desktop
+Ignore: postfix:pcre
+Ignore: docbook_4:iso_ent,sgml-skel,xmlcharent
+Ignore: control-center2:nautilus,evolution-data-server,gnome-menus,gstreamer-plugins,gstreamer,metacity,mozilla-nspr,mozilla,libxklavier,gnome-desktop,startup-notification
+Ignore: docbook-xsl-stylesheets:xmlcharent
+Ignore: liby2util-devel:libstdc++-devel,openssl-devel
+Ignore: yast2:yast2-ncurses,yast2-theme-SuSELinux,perl-Config-Crontab,yast2-xml,SuSEfirewall2
+Ignore: yast2-core:netcat,hwinfo,wireless-tools,sysfsutils
+Ignore: yast2-core-devel:libxcrypt-devel,hwinfo-devel,blocxx-devel,sysfsutils,libstdc++-devel
+Ignore: yast2-packagemanager-devel:rpm-devel,curl-devel,openssl-devel
+Ignore: yast2-devtools:perl-XML-Writer,libxslt,pkgconfig
+Ignore: yast2-installation:yast2-update,yast2-mouse,yast2-country,yast2-bootloader,yast2-packager,yast2-network,yast2-online-update,yast2-users,release-notes,autoyast2-installation
+Ignore: yast2-bootloader:bootloader-theme
+Ignore: yast2-packager:yast2-x11
+Ignore: yast2-x11:sax2-libsax-perl
+Ignore: openslp-devel:openssl-devel
+Ignore: java-1_4_2-sun:xorg-x11-libs
+Ignore: java-1_4_2-sun-devel:xorg-x11-libs
+Ignore: kernel-um:xorg-x11-libs
+Ignore: tetex:xorg-x11-libs,expat,fontconfig,freetype2,libjpeg,libpng,ghostscript-x11,xaw3d,gd,dialog,ed
+Ignore: yast2-country:yast2-trans-stats
+Ignore: libgcc:glibc-32bit
+Ignore: libstdc++:glibc-32bit
+Ignore: susehelp:susehelp_lang,suse_help_viewer
+Ignore: mailx:smtp_daemon
+Ignore: cron:smtp_daemon
+Ignore: hotplug:syslog
+Ignore: pcmcia:syslog
+Ignore: avalon-logkit:servlet
+Ignore: jython:servlet
+Ignore: ispell:ispell_dictionary,ispell_english_dictionary
+Ignore: aspell:aspel_dictionary,aspell_dictionary
+Ignore: smartlink-softmodem:kernel,kernel-nongpl
+Ignore: OpenOffice_org-de:myspell-german-dictionary
+Ignore: mediawiki:php-session,php-gettext,php-zlib,php-mysql,mod_php_any
+Ignore: squirrelmail:mod_php_any,php-session,php-gettext,php-iconv,php-mbstring,php-openssl
+
+Ignore: simias:mono(log4net)
+Ignore: zmd:mono(log4net)
+Ignore: horde:mod_php_any,php-gettext,php-mcrypt,php-imap,php-pear-log,php-pear,php-session,php
+Ignore: xerces-j2:xml-commons-apis,xml-commons-resolver
+Ignore: xdg-menu:desktop-data
+Ignore: nessus-libraries:nessus-core
+Ignore: evolution:yelp
+Ignore: mono-tools:mono(gconf-sharp),mono(glade-sharp),mono(gnome-sharp),mono(gtkhtml-sharp),mono(atk-sharp),mono(gdk-sharp),mono(glib-sharp),mono(gtk-sharp),mono(pango-sharp)
+Ignore: gecko-sharp2:mono(glib-sharp),mono(gtk-sharp)
+Ignore: vcdimager:libcdio.so.6,libcdio.so.6(CDIO_6),libiso9660.so.4,libiso9660.so.4(ISO9660_4)
+Ignore: libcdio:libcddb.so.2
+Ignore: gnome-libs:libgnomeui
+Ignore: nautilus:gnome-themes
+Ignore: gnome-panel:gnome-themes
+Ignore: gnome-panel:tomboy
+
+%ifnarch s390 s390x ppc ia64
+Substitute: java2-devel-packages java-1_4_2-sun-devel update-alternatives
+%else
+ %ifnarch s390x
+Substitute: java2-devel-packages java-1_4_2-ibm-devel update-alternatives
+ %else
+Substitute: java2-devel-packages java-1_4_2-ibm-devel xorg-x11-libs-32bit update-alternatives
+ %endif
+%endif
+
+Substitute: yast2-devel-packages docbook-xsl-stylesheets doxygen libxslt perl-XML-Writer popt-devel sgml-skel update-desktop-files yast2 yast2-devtools yast2-packagemanager-devel yast2-perl-bindings yast2-testsuite
+
+%ifarch x86_64 ppc64 s390x sparc64
+Substitute: glibc-devel-32bit glibc-devel-32bit glibc-32bit
+%else
+ %ifarch ppc
+Substitute: glibc-devel-32bit glibc-devel-64bit
+ %else
+Substitute: glibc-devel-32bit
+ %endif
+%endif
+
+%ifarch %ix86
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-bigsmp kernel-debug kernel-um kernel-xen kernel-kdump
+%endif
+%ifarch ia64
+Substitute: kernel-binary-packages kernel-default kernel-debug
+%endif
+%ifarch x86_64
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-xen kernel-kdump
+%endif
+%ifarch ppc
+Substitute: kernel-binary-packages kernel-default kernel-kdump kernel-ppc64 kernel-iseries64
+%endif
+%ifarch ppc64
+Substitute: kernel-binary-packages kernel-ppc64 kernel-iseries64
+%endif
+%ifarch s390
+Substitute: kernel-binary-packages kernel-s390
+%endif
+%ifarch s390x
+Substitute: kernel-binary-packages kernel-default
+%endif
+
+Macros:
+%insserv_prereq insserv sed
+%fillup_prereq fillup coreutils
+%suseconfig_fonts_prereq perl aaa_base
+%install_info_prereq info
+%suse_version 1010
+%sles_version 0
+%ul_version 0
+%do_profiling 1
+%_vendor suse
diff --git a/configs/sl10.2.conf b/configs/sl10.2.conf
new file mode 100644 (file)
index 0000000..fdf5ec6
--- /dev/null
@@ -0,0 +1,208 @@
+Preinstall: aaa_base acl attr bash bzip2 coreutils db diffutils
+Preinstall: filesystem fillup glibc grep insserv libacl libattr
+Preinstall: libgcc41 libnscd libxcrypt m4 ncurses pam
+Preinstall: permissions popt pwdutils readline rpm sed tar zlib
+
+Runscripts: aaa_base
+
+VMinstall: util-linux perl libvolume_id
+
+Required: autoconf automake binutils bzip2 db gcc gcc41
+Required: gdbm gettext glibc libtool ncurses perl rpm zlib
+
+Support: audit-libs bind-libs
+Support: bind-utils bison cpio cpp cpp41 cracklib cvs cyrus-sasl
+Support: e2fsprogs file findutils flex gawk gdbm-devel gettext-devel
+Support: glibc-devel glibc-locale gpm groff gzip info klogd less
+Support: libcom_err libltdl libmudflap41 libstdc++41 libzio
+Support: linux-kernel-headers make man mktemp module-init-tools
+Support: ncurses-devel net-tools netcfg openldap2-client openssl
+Support: pam-modules patch procinfo procps psmisc rcs strace sysvinit
+Support: tcpd texinfo timezone unzip util-linux vim zlib-devel
+
+Keep: binutils cpp cracklib file findutils gawk gcc gcc-ada gcc-c++
+Keep: gdbm glibc-devel glibc-locale gzip libada libstdc++ libunwind
+Keep: libunwind-devel libzio make mktemp pam-devel pam-modules
+Keep: patch perl rcs timezone
+
+Prefer: xorg-x11-libs libpng fam mozilla mozilla-nss xorg-x11-Mesa
+Prefer: unixODBC libsoup glitz java-1_4_2-sun java-1_4_2-sun-jdbc gnome-panel
+Prefer: desktop-data-SuSE gnome2-SuSE mono-nunit gecko-sharp2
+Prefer: apache2-prefork Mesa openmotif-libs ghostscript-mini ghostscript-library gtk-sharp
+Prefer: glib-sharp libzypp-zmd-backend mDNSResponder-lib
+
+Prefer: gnome-sharp2:art-sharp2 gnome-sharp:art-sharp
+Prefer: ifolder3:gnome-sharp2 ifolder3:gconf-sharp2
+Prefer: nautilus-ifolder3:gnome-sharp2
+Prefer: gconf-sharp2:glade-sharp2 gconf-sharp:glade-sharp
+Prefer: tomboy:gconf-sharp tomboy:gnome-sharp
+Prefer: zmd:libzypp-zmd-backend
+Prefer: yast2-packagemanager-devel:yast2-packagemanager
+Prefer: glitz-32bit:Mesa-32bit libcdio-mini faac-min
+
+Prefer: -libgcc-mainline -libstdc++-mainline -gcc-mainline-c++
+Prefer: -libgcj-mainline -viewperf -compat -compat-openssl097g
+Prefer: -zmd -OpenOffice_org -pam-laus -libgcc-tree-ssa -busybox-links
+Prefer: -crossover-office -java-1_5_0-ibm -java-1_5_0-ibm-jdbc
+Prefer: -java-1_4_2-gcj-compat -NX
+
+Conflict: ghostscript-library:ghostscript-mini
+
+Ignore: aaa_base:aaa_skel,suse-release,logrotate,ash,mingetty,distribution-release
+Ignore: gettext-devel:libgcj,libstdc++-devel,libgcj41,libstdc++41-devel
+Ignore: pwdutils:openslp
+Ignore: pam-modules:resmgr
+Ignore: rpm:suse-build-key,build-key
+Ignore: bind-utils:bind-libs
+Ignore: alsa:dialog,pciutils
+Ignore: portmap:syslogd
+Ignore: fontconfig:freetype2
+Ignore: fontconfig-devel:freetype2-devel
+Ignore: xorg-x11-libs:freetype2
+Ignore: xorg-x11:x11-tools,resmgr,xkeyboard-config,xorg-x11-Mesa,libusb,freetype2,libjpeg,libpng
+Ignore: xorg-x11-server:xorg-x11-driver-input,xorg-x11-driver-video
+Ignore: apache2:logrotate
+Ignore: arts:alsa,audiofile,resmgr,libogg,libvorbis
+Ignore: kdelibs3:alsa,arts,pcre,OpenEXR,aspell,cups-libs,mDNSResponder-lib,krb5,libjasper
+Ignore: kdelibs3-devel:libvorbis-devel
+Ignore: kdebase3:kdebase3-ksysguardd,OpenEXR,dbus-1,dbus-1-qt,hal,powersave,openslp,libusb
+Ignore: kdebase3-SuSE:release-notes
+Ignore: jack:alsa,libsndfile
+Ignore: libxml2-devel:readline-devel
+Ignore: gnome-vfs2:gnome-mime-data,desktop-file-utils,cdparanoia,dbus-1,dbus-1-glib,hal,libsmbclient,fam,file_alteration
+Ignore: libgda:file_alteration
+Ignore: gnutls:lzo,libopencdk
+Ignore: gnutls-devel:lzo-devel,libopencdk-devel
+Ignore: pango:cairo,glitz,libpixman,libpng
+Ignore: pango-devel:cairo-devel
+Ignore: cairo-devel:libpixman-devel
+Ignore: libgnomeprint:libgnomecups
+Ignore: libgnomeprintui:libgnomecups
+Ignore: orbit2:libidl
+Ignore: orbit2-devel:libidl,libidl-devel,indent
+Ignore: qt3:libmng
+Ignore: qt-sql:qt_database_plugin
+Ignore: gtk2:libpng,libtiff
+Ignore: libgnomecanvas-devel:glib-devel
+Ignore: libgnomeui:gnome-icon-theme,shared-mime-info
+Ignore: scrollkeeper:docbook_4
+Ignore: gnome-desktop:libgnomesu,startup-notification
+Ignore: python-devel:python-tk
+Ignore: gnome-pilot:gnome-panel
+Ignore: gnome-panel:control-center2
+Ignore: gnome-menus:kdebase3
+Ignore: gnome-main-menu:rug
+Ignore: libbonoboui:gnome-desktop
+Ignore: postfix:pcre
+Ignore: docbook_4:iso_ent,sgml-skel,xmlcharent
+Ignore: control-center2:nautilus,evolution-data-server,gnome-menus,gstreamer-plugins,gstreamer,metacity,mozilla-nspr,mozilla,libxklavier,gnome-desktop,startup-notification
+Ignore: docbook-xsl-stylesheets:xmlcharent
+Ignore: liby2util-devel:libstdc++-devel,openssl-devel
+Ignore: yast2:yast2-ncurses,yast2_theme,perl-Config-Crontab,yast2-xml,SuSEfirewall2
+Ignore: yast2-core:netcat,hwinfo,wireless-tools,sysfsutils
+Ignore: yast2-core-devel:libxcrypt-devel,hwinfo-devel,blocxx-devel,sysfsutils,libstdc++-devel
+Ignore: yast2-packagemanager-devel:rpm-devel,curl-devel,openssl-devel
+Ignore: yast2-devtools:libxslt
+Ignore: yast2-installation:yast2-update,yast2-mouse,yast2-country,yast2-bootloader,yast2-packager,yast2-network,yast2-online-update,yast2-users,release-notes,autoyast2-installation
+Ignore: yast2-bootloader:bootloader-theme
+Ignore: yast2-packager:yast2-x11
+Ignore: yast2-x11:sax2-libsax-perl
+Ignore: openslp-devel:openssl-devel
+Ignore: java-1_4_2-sun:xorg-x11-libs
+Ignore: java-1_4_2-sun-devel:xorg-x11-libs
+Ignore: kernel-um:xorg-x11-libs
+Ignore: tetex:xorg-x11-libs,expat,fontconfig,freetype2,libjpeg,ghostscript-x11,xaw3d,gd,dialog,ed
+Ignore: yast2-country:yast2-trans-stats
+Ignore: tpb:tpctl-kmp
+Ignore: tpctl:tpctl-kmp
+Ignore: mkinitrd:pciutils
+Ignore: libgcc:glibc-32bit
+Ignore: libstdc++:glibc-32bit
+Ignore: susehelp:susehelp_lang,suse_help_viewer
+Ignore: mailx:smtp_daemon
+Ignore: cron:smtp_daemon
+Ignore: hotplug:syslog
+Ignore: pcmcia:syslog
+Ignore: openct:syslog
+Ignore: avalon-logkit:servlet
+Ignore: jython:servlet
+Ignore: ispell:ispell_dictionary,ispell_english_dictionary
+Ignore: aspell:aspel_dictionary,aspell_dictionary
+Ignore: smartlink-softmodem:kernel,kernel-nongpl
+Ignore: OpenOffice_org-de:myspell-german-dictionary
+Ignore: mediawiki:php-session,php-gettext,php-zlib,php-mysql,mod_php_any
+Ignore: squirrelmail:mod_php_any,php-session,php-gettext,php-iconv,php-mbstring,php-openssl
+
+Ignore: simias:mono(log4net)
+Ignore: zmd:mono(log4net)
+Ignore: horde:mod_php_any,php-gettext,php-mcrypt,php-imap,php-pear-log,php-pear,php-session,php
+Ignore: xerces-j2:xml-commons-apis,xml-commons-resolver
+Ignore: xdg-menu:desktop-data
+Ignore: nessus-libraries:nessus-core
+Ignore: evolution:yelp
+Ignore: mono-tools:mono(gconf-sharp),mono(glade-sharp),mono(gnome-sharp),mono(gtkhtml-sharp),mono(atk-sharp),mono(gdk-sharp),mono(glib-sharp),mono(gtk-sharp),mono(pango-sharp)
+Ignore: gecko-sharp2:mono(glib-sharp),mono(gtk-sharp)
+Ignore: vcdimager:libcdio.so.6,libcdio.so.6(CDIO_6),libiso9660.so.4,libiso9660.so.4(ISO9660_4)
+Ignore: libcdio:libcddb.so.2
+Ignore: gnome-libs:libgnomeui
+Ignore: nautilus:gnome-themes
+Ignore: gnome-panel:gnome-themes
+Ignore: gnome-panel:tomboy
+
+%ifnarch s390 s390x ppc ia64
+Substitute: java2-devel-packages java-1_4_2-sun-devel update-alternatives
+%else
+ %ifnarch s390 ppc
+Substitute: java2-devel-packages java-1_4_2-ibm-devel update-alternatives
+ %endif
+ %ifarch s390x
+Substitute: java2-devel-packages java-1_4_2-ibm-devel xorg-x11-libs-32bit update-alternatives
+ %endif
+ %ifarch ia64
+Substitute: java2-devel-packages java-1_5_0-bea-devel update-alternatives
+ %endif
+%endif
+
+%ifarch x86_64 ppc64 s390x sparc64
+Substitute: glibc-devel-32bit glibc-devel-32bit glibc-32bit
+%else
+ %ifarch ppc
+Substitute: glibc-devel-32bit glibc-devel-64bit
+ %else
+Substitute: glibc-devel-32bit
+ %endif
+%endif
+
+%ifarch %ix86
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-bigsmp kernel-debug kernel-um kernel-xen kernel-kdump
+%endif
+%ifarch ia64
+Substitute: kernel-binary-packages kernel-default kernel-debug
+%endif
+%ifarch x86_64
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-xen kernel-kdump
+%endif
+%ifarch ppc
+Substitute: kernel-binary-packages kernel-default kernel-kdump kernel-ppc64 kernel-iseries64
+%endif
+%ifarch ppc64
+Substitute: kernel-binary-packages kernel-ppc64 kernel-iseries64
+%endif
+%ifarch s390
+Substitute: kernel-binary-packages kernel-s390
+%endif
+%ifarch s390x
+Substitute: kernel-binary-packages kernel-default
+%endif
+
+Macros:
+%insserv_prereq insserv sed
+%fillup_prereq fillup coreutils
+%suseconfig_fonts_prereq perl aaa_base
+%install_info_prereq info
+%kernel_module_package_buildreq kernel-source kernel-syms
+%suse_version 1020
+%sles_version 0
+%ul_version 0
+%do_profiling 1
+%_vendor suse
diff --git a/configs/sl10.3.conf b/configs/sl10.3.conf
new file mode 100644 (file)
index 0000000..03b71c0
--- /dev/null
@@ -0,0 +1,316 @@
+%define gcc_version 42
+
+Preinstall: aaa_base acl attr bash coreutils diffutils
+Preinstall: filesystem fillup glibc grep insserv libacl libattr
+Preinstall: libbz2-1 libgcc%{gcc_version} libxcrypt m4 ncurses pam
+Preinstall: permissions popt libreadline5 rpm sed tar zlib
+
+Runscripts: aaa_base
+
+VMinstall: util-linux perl-base libdb-4_5 libvolume_id
+
+Required: autoconf automake binutils bzip2 gcc gcc%{gcc_version}
+Required: gettext glibc libtool ncurses perl rpm zlib
+
+Support: audit-libs cpio cpp cpp%{gcc_version} cracklib cvs
+Support: file findutils gawk gdbm gettext-devel
+Support: glibc-devel glibc-locale groff gzip info less
+Support: libbz2-devel libdb-4_5
+Support: libltdl-3 libmudflap%{gcc_version} libstdc++%{gcc_version}
+Support: libvolume_id libxcrypt libzio
+Support: linux-kernel-headers make man mktemp netcfg
+Support: net-tools pam-modules patch perl-base sysvinit
+Support: texinfo timezone util-linux
+%ifarch ia64
+Support: libunwind libunwind-devel
+%endif
+
+Keep: audit-libs binutils bzip2 cpp cracklib file findutils gawk gcc gcc-ada gcc-c++
+Keep: gdbm glibc-devel glibc-locale gzip libada
+Keep: libunwind libunwind-devel libzio make mktemp pam-devel pam-modules
+Keep: patch perl-base perl rcs timezone
+Keep: cpp%{gcc_version} gcc%{gcc_version} gcc%{gcc_version}-ada libstdc++%{gcc_version}
+Keep: cpp41 gcc41 gcc41-ada libstdc++41
+
+Prefer: libreadline5
+Prefer: libdb_java-4_5 libltdl-3 libicu
+Prefer: cracklib-dict-small postfix
+Prefer: jta libpng fam mozilla mozilla-nss
+Prefer: unixODBC libsoup glitz
+Prefer: java-1_5_0-sun java-1_5_0-sun-jdbc java-1_5_0-sun-devel java-1_5_0-bea-devel
+Prefer: gnome-panel desktop-data-SuSE gnome2-SuSE
+Prefer: mono-nunit gecko-sharp2
+Prefer: apache2-prefork Mesa openmotif-libs ghostscript-mini ghostscript-library
+Prefer: gtk-sharp2 glib-sharp2 glade-sharp2
+Prefer: libzypp-zmd-backend novell-NLDAPsdk zaptel-kmp-default
+Prefer: hbedv-dazuko-kmp-default dazuko-kmp-default vmware-wkstnmods-kmp-default
+Prefer: virtualbox-kmp-default
+Prefer: libstdc++%{gcc_version} libgcc%{gcc_version} libmudflap%{gcc_version}
+
+Prefer: gnome-sharp2:art-sharp2 gnome-sharp:art-sharp
+Prefer: ifolder3:gnome-sharp2 ifolder3:gconf-sharp2
+Prefer: nautilus-ifolder3:gnome-sharp2 inkscape:gtkmm24
+Prefer: gconf-sharp2:glade-sharp2 gconf-sharp:glade-sharp
+Prefer: saxon:java-1_4_2-cacao gjdoc:antlr
+Prefer: tomboy:gconf-sharp2 tomboy:gnome-sharp2
+Prefer: zmd:libzypp-zmd-backend
+Prefer: yast2-packagemanager-devel:yast2-packagemanager
+Prefer: glitz-32bit:Mesa-32bit
+Prefer: poppler-tools
+Prefer: banshee:banshee-engine-gst helix-banshee:helix-banshee-engine-gst
+Prefer: java-1_5_0-ibm:java-1_5_0-ibm-alsa
+Prefer: java-1_5_0-ibm-devel
+Prefer: microcode_ctl:kernel-default
+Prefer: notification-daemon
+Prefer: pkg-config gtk-doc wlan-kmp-default lua-libs
+Prefer: gnu-jaf gnu-javamail avahi-compat-mDNSResponder yast2-control-center-qt
+Prefer: vim-normal myspell-american wine
+Prefer: eclipse-platform eclipse-scripts
+Prefer: yast2-theme-openSUSE
+
+Prefer: -bundle-lang-kde-de -bundle-lang-kde-en -bundle-lang-kde-es
+Prefer: -bundle-lang-kde-fr -bundle-lang-kde-pt
+Prefer: -bundle-lang-kde-zh -bundle-lang-kde-ja -bundle-lang-kde-ru -bundle-lang-kde-pl
+Prefer: -bundle-lang-kde-sv -bundle-lang-kde-ko -bundle-lang-kde-fi -bundle-lang-kde-da
+Prefer: -bundle-lang-kde-cs -bundle-lang-kde-nl -bundle-lang-kde-hu -bundle-lang-kde-nb
+Prefer: -bundle-lang-kde-it -bundle-lang-kde-ca -bundle-lang-kde-ar
+Prefer: -bundle-lang-gnome-es -bundle-lang-gnome-de -bundle-lang-gnome-fr
+Prefer: -bundle-lang-gnome-pt -bundle-lang-gnome-en
+Prefer: -bundle-lang-gnome-zh -bundle-lang-gnome-ja -bundle-lang-gnome-ru -bundle-lang-gnome-cs
+Prefer: -bundle-lang-gnome-ko -bundle-lang-gnome-da -bundle-lang-gnome-nl -bundle-lang-gnome-hu
+Prefer: -bundle-lang-gnome-pl -bundle-lang-gnome-fi -bundle-lang-gnome-nb -bundle-lang-gnome-sv
+Prefer: -bundle-lang-gnome-it -bundle-lang-gnome-ca -bundle-lang-gnome-ar
+Prefer: -bundle-lang-common-es -bundle-lang-common-de -bundle-lang-common-fr
+Prefer: -bundle-lang-common-pt -bundle-lang-common-en
+Prefer: -bundle-lang-common-ja -bundle-lang-common-zh -bundle-lang-common-cs -bundle-lang-common-ru
+Prefer: -bundle-lang-common-nl -bundle-lang-common-hu -bundle-lang-common-pl -bundle-lang-common-da
+Prefer: -bundle-lang-common-ko -bundle-lang-common-nb -bundle-lang-common-fi -bundle-lang-common-sv
+Prefer: -bundle-lang-common-it -bundle-lang-common-ca -bundle-lang-common-ar
+Prefer: -libgcc-mainline -libstdc++-mainline -gcc-mainline-c++
+Prefer: -libgcj-mainline -viewperf -compat -compat-openssl097g
+Prefer: -zmd -OpenOffice_org -pam-laus -libgcc-tree-ssa -busybox-links
+%if ! 0%{?opensuse_bs}
+Prefer: -crossover-office -java-1_5_0-ibm -java-1_5_0-ibm-jdbc
+Prefer: -java-1_4_2-gcj-compat -java-1_4_2-gcj-compat-devel
+%endif
+Prefer: -java-1_4_2-cacao -java-1_4_2-cacao-devel -java-1_4_2-ibm -java-1_4_2-ibm-devel
+Prefer: -NX -xaw3dd -db43
+Prefer: -xerces-j2-xml-resolver -xerces-j2-xml-apis
+Prefer: -vmware-player
+Prefer: -libgcc41 -libgcc41-32bit -libgcc41-64bit
+Prefer: -libffi41
+Prefer: -libgcc43 -libgcc43-32bit -libgcc43-64bit
+Prefer: -libffi43 -libgomp43
+Prefer: -libnetpbm -libcdio7-mini -libiso9660-5-mini
+Prefer: -libcdio-mini -faac-mini
+
+Conflict: ghostscript-library:ghostscript-mini
+
+Ignore: cracklib:cracklib-dict
+Ignore: aaa_base:aaa_skel,suse-release,logrotate,ash,mingetty,distribution-release,udev
+Ignore: gettext-devel:libgcj,libstdc++-devel,libgcj41,libstdc++41-devel,libgcj42,libstdc++42-devel
+Ignore: libgcj43,libstdc++43-devel
+Ignore: pwdutils:openslp
+Ignore: pam-modules:resmgr
+Ignore: rpm:suse-build-key,build-key
+Ignore: bind-utils:bind-libs
+Ignore: alsa:dialog,pciutils
+Ignore: portmap:syslogd
+Ignore: fontconfig:freetype2
+Ignore: fontconfig-devel:freetype2-devel
+Ignore: xorg-x11-libs:freetype2
+Ignore: xorg-x11:x11-tools,resmgr,xkeyboard-config,xorg-x11-Mesa,libusb,freetype2,libjpeg,libpng
+Ignore: xorg-x11-server:xorg-x11-driver-input,xorg-x11-driver-video
+Ignore: apache2:logrotate
+Ignore: arts:alsa,audiofile,resmgr,libogg,libvorbis
+Ignore: kdelibs3:alsa,arts,pcre,OpenEXR,aspell,cups-libs,mDNSResponder-lib,krb5,libjasper
+Ignore: kdelibs3-devel:libvorbis-devel
+Ignore: kdebase3:kdebase3-ksysguardd,OpenEXR,dbus-1,dbus-1-qt,hal,powersave,openslp,libusb
+Ignore: kdebase3-SuSE:release-notes
+Ignore: jack:alsa,libsndfile
+Ignore: libxml2-devel:readline-devel
+Ignore: gnome-vfs2:gnome-mime-data,desktop-file-utils,cdparanoia,dbus-1,dbus-1-glib,hal,libsmbclient,fam,file_alteration
+Ignore: libgda:file_alteration
+Ignore: gnutls:lzo,libopencdk
+Ignore: gnutls-devel:lzo-devel,libopencdk-devel
+Ignore: pango:cairo,glitz,libpixman,libpng
+Ignore: pango-devel:cairo-devel
+Ignore: cairo-devel:libpixman-devel
+Ignore: libgnomeprint:libgnomecups
+Ignore: libgnomeprintui:libgnomecups
+Ignore: orbit2:libidl
+Ignore: orbit2-devel:libidl,libidl-devel,indent
+Ignore: qt3:libmng
+Ignore: qt-sql:qt_database_plugin
+Ignore: gtk2:libpng,libtiff
+Ignore: libgnomecanvas-devel:glib-devel
+Ignore: libgnomeui:gnome-icon-theme,shared-mime-info
+Ignore: scrollkeeper:docbook_4
+Ignore: gnome-desktop:libgnomesu,startup-notification
+Ignore: python-devel:python-tk
+Ignore: gnome-pilot:gnome-panel
+Ignore: gnome-panel:control-center2
+Ignore: gnome-menus:kdebase3
+Ignore: gnome-main-menu:rug
+Ignore: libbonoboui:gnome-desktop
+Ignore: postfix:pcre
+Ignore: docbook_4:iso_ent,xmlcharent
+Ignore: control-center2:nautilus,evolution-data-server,gnome-menus,gstreamer-plugins,gstreamer,metacity,mozilla-nspr,mozilla,libxklavier,gnome-desktop,startup-notification
+Ignore: docbook-xsl-stylesheets:xmlcharent
+Ignore: liby2util-devel:libstdc++-devel,openssl-devel
+Ignore: yast2:yast2-ncurses,yast2_theme,perl-Config-Crontab,yast2-xml,SuSEfirewall2
+Ignore: yast2-core:netcat,hwinfo,wireless-tools,sysfsutils
+Ignore: yast2-core-devel:libxcrypt-devel,hwinfo-devel,blocxx-devel,sysfsutils,libstdc++-devel
+Ignore: yast2-packagemanager-devel:rpm-devel,curl-devel,openssl-devel
+Ignore: yast2-devtools:libxslt
+Ignore: yast2-installation:yast2-update,yast2-mouse,yast2-country,yast2-bootloader,yast2-packager,yast2-network,yast2-online-update,yast2-users,release-notes,autoyast2-installation
+Ignore: yast2-bootloader:bootloader-theme
+Ignore: yast2-packager:yast2-x11
+Ignore: yast2-x11:sax2-libsax-perl
+Ignore: yast2-network:yast2-inetd
+Ignore: openslp-devel:openssl-devel
+Ignore: java-1_4_2-sun:xorg-x11-libs
+Ignore: java-1_4_2-sun-devel:xorg-x11-libs
+Ignore: tetex:xorg-x11-libs,expat,fontconfig,freetype2,libjpeg,ghostscript-x11,xaw3d,gd,dialog,ed
+Ignore: texlive-bin:ghostscript-x11
+Ignore: texlive-bin-omega:ghostscript-x11
+Ignore: yast2-country:yast2-trans-stats
+Ignore: tpb:tpctl-kmp
+Ignore: tpctl:tpctl-kmp
+Ignore: zaptel:zaptel-kmp
+Ignore: mkinitrd:pciutils
+
+Ignore: libgcc:glibc-32bit
+Ignore: libgcc41:glibc-32bit
+Ignore: libgcc42:glibc-32bit
+Ignore: libgcc43:glibc-32bit
+Ignore: libstdc++:glibc-32bit
+Ignore: libstdc41++:glibc-32bit
+Ignore: libstdc42++:glibc-32bit
+Ignore: libstdc43++:glibc-32bit
+
+Ignore: susehelp:susehelp_lang,suse_help_viewer
+Ignore: mailx:smtp_daemon
+Ignore: cron:smtp_daemon
+Ignore: hotplug:syslog
+Ignore: pcmcia:syslog
+Ignore: openct:syslog
+Ignore: avalon-logkit:servlet
+Ignore: jython:servlet
+Ignore: ispell:ispell_dictionary,ispell_english_dictionary
+Ignore: aspell:aspel_dictionary,aspell_dictionary
+Ignore: smartlink-softmodem:kernel,kernel-nongpl
+Ignore: OpenOffice_org-de:myspell-german-dictionary
+Ignore: OpenOffice_org:OpenOffice_org-i18n
+Ignore: mediawiki:php-session,php-gettext,php-zlib,php-mysql,mod_php_any
+Ignore: squirrelmail:mod_php_any,php-session,php-gettext,php-iconv,php-mbstring,php-openssl
+
+Ignore: simias:mono(log4net)
+Ignore: zmd:mono(log4net)
+Ignore: horde:mod_php_any,php-gettext,php-mcrypt,php-imap,php-pear-log,php-pear,php-session,php
+
+Ignore: xerces-j2:xml-commons-apis,xml-commons-resolver
+Ignore: xdg-menu:desktop-data
+Ignore: nessus-libraries:nessus-core
+Ignore: evolution:yelp
+
+Ignore: mono-tools:mono(gconf-sharp),mono(glade-sharp),mono(gnome-sharp),mono(gtkhtml-sharp),mono(atk-sharp),mono(gdk-sharp),mono(glib-sharp),mono(gtk-sharp),mono(pango-sharp)
+Ignore: gecko-sharp2:mono(glib-sharp),mono(gtk-sharp)
+
+Ignore: vcdimager:libcdio.so.6,libcdio.so.6(CDIO_6),libiso9660.so.4,libiso9660.so.4(ISO9660_4)
+Ignore: libcdio:libcddb.so.2
+
+Ignore: gnome-libs:libgnomeui
+Ignore: nautilus:gnome-themes
+Ignore: gnome-panel:gnome-themes
+Ignore: gnome-panel:tomboy
+Ignore: NetworkManager:NetworkManager-client
+Ignore: libbeagle:beagle
+Ignore: glib2:glib2-lang
+Ignore: gtk2:gtk2-lang
+Ignore: gtk:gtk-lang
+Ignore: atk:atk-lang
+Ignore: hal:pm-utils
+Ignore: MozillaThunderbird:pinentry-dialog
+Ignore: seamonkey:pinentry-dialog
+
+Ignore: icecream:gcc-c++
+Ignore: no
+Ignore: package
+Ignore: provides
+
+%if 0%{?opensuse_bs}
+Substitute: java2-devel-packages gcc-java java-1_4_2-gcj-compat-devel
+%else
+ %ifnarch s390 s390x ppc ppc64 ia64
+Substitute: java2-devel-packages java-1_5_0-sun-devel unzip update-alternatives
+ %else
+  %ifarch s390 s390x ppc ppc64
+Substitute: java2-devel-packages java-1_5_0-ibm-devel unzip update-alternatives
+  %endif
+  %ifarch ia64
+Substitute: java2-devel-packages java-1_5_0-bea-devel unzip update-alternatives
+  %endif
+ %endif
+%endif
+
+%ifarch x86_64 ppc64 s390x sparc64
+Substitute: glibc-devel-32bit glibc-devel-32bit glibc-32bit
+%else
+ %ifarch ppc
+Substitute: glibc-devel-32bit glibc-devel-64bit
+ %else
+Substitute: glibc-devel-32bit
+ %endif
+%endif
+
+%ifarch %ix86
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-bigsmp kernel-debug kernel-xen kernel-xenpae
+%endif
+%ifarch ia64
+Substitute: kernel-binary-packages kernel-default kernel-debug
+%endif
+%ifarch x86_64
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-xen
+%endif
+%ifarch ppc
+Substitute: kernel-binary-packages kernel-default kernel-kdump kernel-ppc64 kernel-iseries64
+%endif
+%ifarch ppc64
+Substitute: kernel-binary-packages kernel-ppc64 kernel-iseries64
+%endif
+%ifarch s390
+Substitute: kernel-binary-packages kernel-s390
+%endif
+%ifarch s390x
+Substitute: kernel-binary-packages kernel-default
+%endif
+
+%ifarch ppc64
+Substitute: mono-devel mono-devel mono-biarchcompat
+Substitute: mono-basic mono-basic mono-biarchcompat
+Substitute: mono-tools mono-tools mono-biarchcompat
+%endif
+
+
+Optflags: i586 -march=i586 -mtune=i686 -fmessage-length=0 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector
+Optflags: i686 -march=i686 -mtune=i686 -fmessage-length=0 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector
+Optflags: x86_64 -fmessage-length=0 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector
+Optflags: ppc -fmessage-length=0 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector
+Optflags: ppc64 -fmessage-length=0 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector
+
+Optflags: * -O2
+
+%define suse_version 1030
+
+Macros:
+%insserv_prereq insserv sed
+%fillup_prereq fillup coreutils
+%suseconfig_fonts_prereq perl aaa_base
+%install_info_prereq info
+%kernel_module_package_buildreq kernel-source kernel-syms
+%suse_version 1030
+%sles_version 0
+%ul_version 0
+%do_profiling 1
+%_vendor suse
diff --git a/configs/sl11.0.conf b/configs/sl11.0.conf
new file mode 100644 (file)
index 0000000..3b1a048
--- /dev/null
@@ -0,0 +1,377 @@
+%define gcc_version 43
+
+Preinstall: aaa_base acl attr bash coreutils diffutils
+Preinstall: filesystem fillup glibc grep insserv libacl libattr
+Preinstall: libbz2-1 libgcc%{gcc_version} libxcrypt m4 libncurses5 pam
+Preinstall: permissions popt libreadline5 rpm sed tar zlib
+
+Runscripts: aaa_base
+
+VMinstall: util-linux perl-base libdb-4_5 libvolume_id
+
+Required: autoconf automake binutils bzip2 gcc gcc%{gcc_version}
+Required: gettext-runtime glibc libtool perl rpm zlib libmpfr1 gmp
+Required: libncurses5
+
+Support: audit-libs cpio cpp cpp%{gcc_version} cracklib cvs
+Support: file findutils gawk gdbm gettext-tools
+Support: glibc-devel glibc-locale groff gzip info less
+Support: libbz2-devel libdb-4_5
+Support: libltdl-3 libmudflap%{gcc_version} libstdc++%{gcc_version}
+Support: libvolume_id libxcrypt libzio
+Support: linux-kernel-headers make man netcfg
+Support: net-tools pam-modules patch perl-base sysvinit
+Support: texinfo timezone util-linux login
+Support: terminfo-base libgomp43 libuuid1 psmisc
+%ifarch ia64
+Support: libunwind libunwind-devel
+%endif
+
+Keep: audit-libs binutils bzip2 cpp cracklib file findutils gawk gcc gcc-ada gcc-c++
+Keep: gdbm glibc-devel glibc-locale gzip libada
+Keep: libunwind libunwind-devel libzio make pam-devel pam-modules
+Keep: patch perl-base perl rcs timezone gmp libmpfr1
+Keep: cpp43 gcc43 gcc43-ada libstdc++43
+Keep: cpp42 gcc42 gcc42-ada libstdc++42
+Keep: cpp41 gcc41 gcc41-ada libstdc++41
+Keep: java-1_6_0-openjdk java-1_6_0-openjdk-devel
+
+Prefer: libreadline5
+Prefer: libdb_java-4_5 libltdl-3 libicu
+Prefer: cracklib-dict-small postfix
+Prefer: jta libpng fam mozilla mozilla-nss
+Prefer: unixODBC libsoup glitz
+Prefer: java-1_5_0-sun java-1_5_0-sun-jdbc java-1_5_0-sun-devel java-1_5_0-bea java-1_5_0-bea-devel
+Prefer: java-1_7_0-icedtea
+%ifarch ppc ppc64
+Prefer: java-1_5_0-ibm
+%endif
+%ifarch s390 s390x
+Prefer: java-1_6_0-ibm
+%endif
+Prefer: gnome-panel desktop-data-openSUSE gnome2-SuSE
+Prefer: mono-nunit gecko-sharp2
+Prefer: apache2-prefork Mesa openmotif-libs ghostscript-mini ghostscript-library
+Prefer: gtk-sharp2 glib-sharp2 glade-sharp2
+Prefer: libzypp-zmd-backend novell-NLDAPsdk zaptel-kmp-default
+Prefer: hbedv-dazuko-kmp-default dazuko-kmp-default vmware-wkstnmods-kmp-default
+Prefer: virtualbox-kmp-default
+Prefer: libstdc++%{gcc_version} libgcc%{gcc_version}
+Prefer: libstdc++%{gcc_version}-32bit libstdc++%{gcc_version}-64bit
+Prefer: libstroke
+Prefer: gnome-sharp2:art-sharp2 gnome-sharp:art-sharp
+Prefer: ifolder3:gnome-sharp2 ifolder3:gconf-sharp2
+Prefer: nautilus-ifolder3:gnome-sharp2 inkscape:gtkmm24
+Prefer: gconf-sharp2:glade-sharp2 gconf-sharp:glade-sharp
+Prefer: saxon:java-1_4_2-cacao gjdoc:antlr
+Prefer: tomboy:gconf-sharp2 tomboy:gnome-sharp2
+Prefer: zmd:libzypp-zmd-backend
+Prefer: yast2-packagemanager-devel:yast2-packagemanager
+Prefer: glitz-32bit:Mesa-32bit
+Prefer: poppler-tools
+Prefer: banshee:banshee-engine-gst helix-banshee:helix-banshee-engine-gst
+Prefer: java-1_5_0-ibm:java-1_5_0-ibm-alsa
+Prefer: java-1_5_0-ibm-devel
+Prefer: microcode_ctl:kernel-default
+Prefer: notification-daemon
+Prefer: pkg-config gtk-doc wlan-kmp-default lua-libs
+Prefer: gnu-jaf gnu-javamail avahi-compat-mDNSResponder yast2-control-center-qt
+Prefer: vim-normal myspell-american wine
+Prefer: eclipse-platform eclipse-scripts
+Prefer: yast2-theme-openSUSE
+Prefer: amarok:amarok-xine
+Prefer: kdenetwork3-vnc:tightvnc
+Prefer: libgweather0 jessie ndesk-dbus ndesk-dbus-glib tomcat6-jsp-2_1-api tomcat6-servlet-2_5-api
+Prefer: icewm-lite
+Prefer: patterns-openSUSE-GNOME-cd:banshee
+Prefer: yast2-ncurses-pkg
+Prefer: monodevelop: mono-addins
+Prefer: ant-trax:saxon
+Prefer: gnome-session:gnome-session-branding-openSUSE
+Prefer: gnome-session:gconf2-branding-openSUSE
+Prefer: xfce4-desktop:xfce4-desktop-branding-openSUSE
+Prefer: bundle-lang-gnome:gnome-session-branding-openSUSE
+Prefer: texlive-xmltex texlive-tools texlive-jadetex
+Prefer: mono-web:mono-data-sqlite
+Prefer: gnome-games:gnuchess
+Prefer: OpenOffice_org:OpenOffice_org-branding-upstream
+Prefer: gimp:gimp-branding-upstream
+Prefer: libesd-devel:esound
+Prefer: glib2:glib2-branding-upstream
+Prefer: kdebase4-workspace:kdebase4-workspace-branding-upstream
+Prefer: mysql-connector-java:java-1_5_0-gcj-compat
+Prefer: -geronimo-jta-1_0_1B-api
+Prefer: ghostscript-devel:ghostscript-library
+Prefer: gdm:gdm-branding-upstream
+Prefer: rpcbind log4j-mini eclipse-source
+Prefer: mx4j:log4j-mini
+Prefer: podsleuth:sg3_utils
+Prefer: libcdio_cdda0 libcdio_paranoia0
+
+Prefer: -bundle-lang-kde-de -bundle-lang-kde-en -bundle-lang-kde-es
+Prefer: -bundle-lang-kde-fr -bundle-lang-kde-pt
+Prefer: -bundle-lang-kde-zh -bundle-lang-kde-ja -bundle-lang-kde-ru -bundle-lang-kde-pl
+Prefer: -bundle-lang-kde-sv -bundle-lang-kde-ko -bundle-lang-kde-fi -bundle-lang-kde-da
+Prefer: -bundle-lang-kde-cs -bundle-lang-kde-nl -bundle-lang-kde-hu -bundle-lang-kde-nb
+Prefer: -bundle-lang-kde-it -bundle-lang-kde-ca -bundle-lang-kde-ar
+Prefer: -bundle-lang-gnome-es -bundle-lang-gnome-de -bundle-lang-gnome-fr
+Prefer: -bundle-lang-gnome-pt -bundle-lang-gnome-en
+Prefer: -bundle-lang-gnome-zh -bundle-lang-gnome-ja -bundle-lang-gnome-ru -bundle-lang-gnome-cs
+Prefer: -bundle-lang-gnome-ko -bundle-lang-gnome-da -bundle-lang-gnome-nl -bundle-lang-gnome-hu
+Prefer: -bundle-lang-gnome-pl -bundle-lang-gnome-fi -bundle-lang-gnome-nb -bundle-lang-gnome-sv
+Prefer: -bundle-lang-gnome-it -bundle-lang-gnome-ca -bundle-lang-gnome-ar
+Prefer: -bundle-lang-common-es -bundle-lang-common-de -bundle-lang-common-fr
+Prefer: -bundle-lang-common-pt -bundle-lang-common-en
+Prefer: -bundle-lang-common-ja -bundle-lang-common-zh -bundle-lang-common-cs -bundle-lang-common-ru
+Prefer: -bundle-lang-common-nl -bundle-lang-common-hu -bundle-lang-common-pl -bundle-lang-common-da
+Prefer: -bundle-lang-common-ko -bundle-lang-common-nb -bundle-lang-common-fi -bundle-lang-common-sv
+Prefer: -bundle-lang-common-it -bundle-lang-common-ca -bundle-lang-common-ar
+Prefer: -libgcc-mainline -libstdc++-mainline -gcc-mainline-c++
+Prefer: -libgcj-mainline -viewperf -compat -compat-openssl097g
+Prefer: -zmd -OpenOffice_org -pam-laus -libgcc-tree-ssa -busybox-links
+%if ! 0%{?opensuse_bs}
+Prefer: -crossover-office
+%ifnarch s390 s390x
+Prefer:  -java-1_6_0-ibm
+%endif
+%ifnarch ppc
+Prefer: -java-1_5_0-ibm -java-1_5_0-ibm-jdbc
+%endif
+Prefer: -java-1_4_2-gcj-compat -java-1_4_2-gcj-compat-devel
+%endif
+Prefer: -java-1_4_2-cacao -java-1_4_2-cacao-devel -java-1_4_2-ibm -java-1_4_2-ibm-devel
+Prefer: -NX -xaw3dd -db43
+Prefer: -xerces-j2-xml-resolver -xerces-j2-xml-apis
+Prefer: -vmware-player
+Prefer: libgcc%{gcc_version} libgcc%{gcc_version}-32bit libgcc%{gcc_version}-64bit
+Prefer: libgcc%{gcc_version}-x86 libffi%{gcc_version} libgcj_bc%{gcc_version}
+Prefer: libgomp%{gcc_version} libgomp%{gcc_version}-32bit libgomp%{gcc_version}-64bit
+Prefer: libmudflap%{gcc_version} libmudflap%{gcc_version}-32bit libmudflap%{gcc_version}-64bit
+Prefer: libobjc%{gcc_version}
+Prefer: -libnetpbm -libcdio7-mini -libiso9660-5-mini
+Prefer: -libcdio-mini -faac-mini
+Prefer: -seamonkey
+Prefer: -libdb-4_4-devel
+
+Conflict: ghostscript-library:ghostscript-mini
+Conflict: ghostscript-fonts-std:ghostscript-mini
+
+Ignore: cracklib:cracklib-dict
+Ignore: aaa_base:aaa_skel,suse-release,logrotate,ash,mingetty,distribution-release,udev
+Ignore: gettext-tools:libgcj,libstdc++-devel,libgcj41,libstdc++41-devel,libgcj42,libstdc++42-devel
+Ignore: libgcj43,libstdc++43-devel
+Ignore: pwdutils:openslp
+Ignore: pam-modules:resmgr
+Ignore: rpm:suse-build-key,build-key
+Ignore: bind-utils:bind-libs
+Ignore: alsa:dialog,pciutils
+Ignore: portmap:syslogd
+Ignore: fontconfig:freetype2
+Ignore: fontconfig-devel:freetype2-devel
+Ignore: xorg-x11-libs:freetype2
+Ignore: xorg-x11:x11-tools,resmgr,xkeyboard-config,xorg-x11-Mesa,libusb,freetype2,libjpeg,libpng
+Ignore: xorg-x11-server:xorg-x11-driver-input,xorg-x11-driver-video
+Ignore: apache2:logrotate
+Ignore: arts:alsa,audiofile,resmgr,libogg,libvorbis
+Ignore: kdelibs3:alsa,arts,pcre,OpenEXR,aspell,cups-libs,mDNSResponder-lib,krb5,libjasper
+Ignore: kdelibs3-devel:libvorbis-devel
+Ignore: kdebase3:kdebase3-ksysguardd,OpenEXR,dbus-1,dbus-1-qt,hal,powersave,openslp,libusb
+Ignore: kdebase3-SuSE:release-notes
+Ignore: jack:alsa,libsndfile
+Ignore: libxml2-devel:readline-devel
+Ignore: gnome-vfs2:gnome-mime-data,desktop-file-utils,cdparanoia,dbus-1,dbus-1-glib,hal,libsmbclient,fam,file_alteration
+Ignore: libgda:file_alteration
+Ignore: gnutls:lzo,libopencdk
+Ignore: gnutls-devel:lzo-devel,libopencdk-devel
+Ignore: pango:cairo,glitz,libpixman,libpng
+Ignore: pango-devel:cairo-devel
+Ignore: cairo-devel:libpixman-devel
+Ignore: libgnomeprint:libgnomecups
+Ignore: libgnomeprintui:libgnomecups
+Ignore: orbit2:libidl
+Ignore: orbit2-devel:libidl,libidl-devel,indent
+Ignore: qt3:libmng
+Ignore: qt-sql:qt_database_plugin
+Ignore: gtk2:libpng,libtiff
+Ignore: libgnomecanvas-devel:glib-devel
+Ignore: libgnomeui:gnome-icon-theme,shared-mime-info
+Ignore: scrollkeeper:docbook_4
+Ignore: gnome-desktop:libgnomesu,startup-notification
+Ignore: python-devel:python-tk
+Ignore: gnome-pilot:gnome-panel
+Ignore: gnome-panel:control-center2
+Ignore: gnome-menus:kdebase3
+Ignore: gnome-main-menu:rug
+Ignore: libbonoboui:gnome-desktop
+Ignore: postfix:pcre
+Ignore: docbook_4:iso_ent,xmlcharent
+Ignore: control-center2:nautilus,evolution-data-server,gnome-menus,gstreamer-plugins,gstreamer,metacity,mozilla-nspr,mozilla,libxklavier,gnome-desktop,startup-notification
+Ignore: docbook-xsl-stylesheets:xmlcharent
+Ignore: liby2util-devel:libstdc++-devel,openssl-devel
+Ignore: yast2:yast2-ncurses,yast2_theme,perl-Config-Crontab,yast2-xml,SuSEfirewall2
+Ignore: yast2-core:netcat,hwinfo,wireless-tools,sysfsutils
+Ignore: yast2-core-devel:libxcrypt-devel,hwinfo-devel,blocxx-devel,sysfsutils,libstdc++-devel
+Ignore: yast2-packagemanager-devel:rpm-devel,curl-devel,openssl-devel
+Ignore: yast2-devtools:libxslt
+Ignore: yast2-installation:yast2-update,yast2-mouse,yast2-country,yast2-bootloader,yast2-packager,yast2-network,yast2-online-update,yast2-users,release-notes,autoyast2-installation
+Ignore: yast2-bootloader:bootloader-theme
+Ignore: yast2-packager:yast2-x11
+Ignore: yast2-x11:sax2-libsax-perl
+Ignore: yast2-network:yast2-inetd
+Ignore: openslp-devel:openssl-devel
+Ignore: java-1_4_2-sun:xorg-x11-libs
+Ignore: java-1_4_2-sun-devel:xorg-x11-libs
+Ignore: tetex:xorg-x11-libs,expat,fontconfig,freetype2,libjpeg,ghostscript-x11,xaw3d,gd,dialog,ed
+Ignore: texlive-bin:ghostscript-x11
+Ignore: texlive-bin-omega:ghostscript-x11
+Ignore: yast2-country:yast2-trans-stats
+Ignore: tpb:tpctl-kmp
+Ignore: tpctl:tpctl-kmp
+Ignore: zaptel:zaptel-kmp
+Ignore: mkinitrd:pciutils
+
+Ignore: libgcc:glibc-32bit
+Ignore: libgcc41:glibc-32bit
+Ignore: libgcc42:glibc-32bit
+Ignore: libgcc43:glibc-32bit
+Ignore: libstdc++:glibc-32bit
+Ignore: libstdc41++:glibc-32bit
+Ignore: libstdc42++:glibc-32bit
+Ignore: libstdc43++:glibc-32bit
+Ignore: ncurses-32bit
+
+Ignore: susehelp:susehelp_lang,suse_help_viewer
+Ignore: mailx:smtp_daemon
+Ignore: cron:smtp_daemon
+Ignore: hotplug:syslog
+Ignore: pcmcia:syslog
+Ignore: openct:syslog
+Ignore: avalon-logkit:servlet
+Ignore: jython:servlet
+Ignore: ispell:ispell_dictionary,ispell_english_dictionary
+Ignore: aspell:aspel_dictionary,aspell_dictionary
+Ignore: smartlink-softmodem:kernel,kernel-nongpl
+Ignore: OpenOffice_org-de:myspell-german-dictionary
+Ignore: OpenOffice_org:OpenOffice_org-i18n
+Ignore: mediawiki:php-session,php-gettext,php-zlib,php-mysql,mod_php_any
+Ignore: squirrelmail:mod_php_any,php-session,php-gettext,php-iconv,php-mbstring,php-openssl
+
+Ignore: simias:mono(log4net)
+Ignore: zmd:mono(log4net)
+Ignore: horde:mod_php_any,php-gettext,php-mcrypt,php-imap,php-pear-log,php-pear,php-session,php
+
+Ignore: xerces-j2:xml-commons-apis,xml-commons-resolver
+Ignore: xdg-menu:desktop-data
+Ignore: nessus-libraries:nessus-core
+Ignore: evolution:yelp
+
+Ignore: mono-tools:mono(gconf-sharp),mono(glade-sharp),mono(gnome-sharp),mono(gtkhtml-sharp),mono(atk-sharp),mono(gdk-sharp),mono(glib-sharp),mono(gtk-sharp),mono(pango-sharp)
+Ignore: gecko-sharp2:mono(glib-sharp),mono(gtk-sharp)
+
+Ignore: vcdimager:libcdio.so.6,libcdio.so.6(CDIO_6),libiso9660.so.4,libiso9660.so.4(ISO9660_4)
+Ignore: libcdio:libcddb.so.2
+
+Ignore: gnome-libs:libgnomeui
+Ignore: nautilus:gnome-themes
+Ignore: gnome-panel:gnome-themes
+Ignore: gnome-panel:tomboy
+Ignore: NetworkManager:NetworkManager-client
+Ignore: libbeagle:beagle
+Ignore: coreutils:coreutils-lang
+Ignore: cpio:cpio-lang
+Ignore: glib2:glib2-lang
+Ignore: gtk2:gtk2-lang
+Ignore: gtk:gtk-lang
+Ignore: atk:atk-lang
+Ignore: hal:pm-utils
+Ignore: MozillaThunderbird:pinentry-dialog
+Ignore: seamonkey:pinentry-dialog
+Ignore: gpg2:gpg2-lang
+Ignore: util-linux:util-linux-lang
+
+Ignore: icecream:gcc-c++
+Ignore: no
+Ignore: package
+Ignore: provides
+Ignore: j9vm/libjvm.so()(64bit)
+Ignore: kdepim3:suse_help_viewer
+Ignore: kdebase3-SuSE:kdebase3-SuSE-branding
+Ignore: kio_sysinfo:kdebase3-SuSE-branding
+Ignore: yast2-casa-ats:CASA_auth_token_svc
+
+%if 0%{?opensuse_bs}
+Substitute: java2-devel-packages gcc-java java-1_4_2-gcj-compat-devel
+%else
+ %ifnarch s390 s390x ppc ppc64 ia64
+Substitute: java2-devel-packages java-1_5_0-sun-devel unzip update-alternatives
+ %else
+  %ifarch s390 s390x ppc ppc64
+Substitute: java2-devel-packages java-1_5_0-ibm-devel unzip update-alternatives
+  %endif
+  %ifarch ia64
+Substitute: java2-devel-packages java-1_5_0-bea-devel unzip update-alternatives
+  %endif
+ %endif
+%endif
+
+%ifarch x86_64 ppc64 s390x sparc64
+Substitute: glibc-devel-32bit glibc-devel-32bit glibc-32bit
+%else
+ %ifarch ppc
+Substitute: glibc-devel-32bit glibc-devel-64bit
+ %else
+Substitute: glibc-devel-32bit
+ %endif
+%endif
+
+%ifarch %ix86
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-bigsmp kernel-debug kernel-xen
+%endif
+%ifarch ia64
+Substitute: kernel-binary-packages kernel-default kernel-debug
+%endif
+%ifarch x86_64
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-xen
+%endif
+%ifarch ppc
+Substitute: kernel-binary-packages kernel-default kernel-kdump kernel-ppc64 kernel-iseries64
+%endif
+%ifarch ppc64
+Substitute: kernel-binary-packages kernel-ppc64 kernel-iseries64
+%endif
+%ifarch s390
+Substitute: kernel-binary-packages kernel-s390
+%endif
+%ifarch s390x
+Substitute: kernel-binary-packages kernel-default
+%endif
+
+%ifarch ppc64
+Substitute: mono-devel mono-devel mono-biarchcompat
+Substitute: mono-basic mono-basic mono-biarchcompat
+Substitute: mono-tools mono-tools mono-biarchcompat
+%endif
+
+
+Optflags: i586 -march=i586 -mtune=i686 -fmessage-length=0 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector
+Optflags: i686 -march=i686 -mtune=i686 -fmessage-length=0 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector
+Optflags: x86_64 -fmessage-length=0 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector
+Optflags: ppc -fmessage-length=0 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector
+Optflags: ppc64 -fmessage-length=0 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector
+
+Optflags: * -O2
+
+%define suse_version 1100
+
+Macros:
+%insserv_prereq insserv sed
+%fillup_prereq fillup coreutils grep diffutils
+%suseconfig_fonts_prereq perl aaa_base
+%install_info_prereq info
+%kernel_module_package_buildreq kernel-source kernel-syms
+%kernel_module_package_buildreqs kernel-source kernel-syms
+%suse_version 1100
+%sles_version 0
+%ul_version 0
+%do_profiling 1
+%_vendor suse
diff --git a/configs/sl11.1.conf b/configs/sl11.1.conf
new file mode 100644 (file)
index 0000000..ef63de8
--- /dev/null
@@ -0,0 +1,407 @@
+%define gcc_version 43
+
+Preinstall: aaa_base acl attr bash coreutils diffutils
+Preinstall: filesystem fillup glibc grep insserv libacl libattr
+Preinstall: libbz2-1 libgcc%{gcc_version} libxcrypt m4 libncurses5 pam
+Preinstall: permissions popt libreadline5 rpm sed tar zlib libselinux1
+
+Runscripts: aaa_base
+
+Order: libopenssl0_9_8:openssl-certs
+
+VMinstall: util-linux perl-base libdb-4_5 libvolume_id1 libsepol1
+
+Required: autoconf automake binutils bzip2 gcc gcc%{gcc_version}
+Required: gettext-runtime glibc libtool perl rpm zlib libmpfr1 gmp
+Required: libncurses5
+
+Support: audit-libs cpio cpp cpp%{gcc_version} cracklib cvs
+Support: file findutils gawk gdbm gettext-tools
+Support: glibc-devel glibc-locale groff gzip info less
+Support: libbz2-devel libdb-4_5
+Support: libstdc++%{gcc_version}
+Support: libvolume_id1 libxcrypt libzio
+Support: linux-kernel-headers make man netcfg
+Support: net-tools pam-modules patch perl-base sysvinit
+Support: texinfo timezone util-linux login
+Support: libgomp43 libuuid1 psmisc
+Support: terminfo-base
+
+Support: build brp-check-suse post-build-checks rpmlint-Factory
+Keep: brp-check-suse
+
+%ifarch ia64
+Support: libunwind libunwind-devel
+%endif
+
+Keep: audit-libs binutils bzip2 cpio cpp cracklib file findutils gawk gcc gcc-ada gcc-c++
+Keep: gdbm glibc-devel glibc-locale gzip libada
+Keep: libunwind libunwind-devel libzio make pam-devel pam-modules
+Keep: patch perl-base perl rcs timezone gmp libmpfr1
+Keep: cpp43 gcc43 gcc43-ada libstdc++43
+Keep: cpp42 gcc42 gcc42-ada libstdc++42
+Keep: cpp41 gcc41 gcc41-ada libstdc++41
+Keep: java-1_6_0-openjdk java-1_6_0-openjdk-devel
+Keep: libvolume_id libvolume_id1
+
+Prefer: -openSUSE-build-key
+Prefer: libreadline5
+Prefer: libdb_java-4_5 libicu
+Prefer: cracklib-dict-small postfix
+Prefer: jta libpng fam mozilla mozilla-nss
+Prefer: unixODBC libsoup glitz
+Prefer: gnome-panel desktop-data-openSUSE gnome2-SuSE
+Prefer: mono-nunit gecko-sharp2
+Prefer: apache2-prefork Mesa openmotif-libs ghostscript-mini ghostscript-library
+Prefer: gtk-sharp2 glib-sharp2 glade-sharp2
+Prefer: libzypp-zmd-backend novell-NLDAPsdk zaptel-kmp-default
+Prefer: hbedv-dazuko-kmp-default dazuko-kmp-default vmware-wkstnmods-kmp-default
+Prefer: virtualbox-kmp-default
+Prefer: libstdc++%{gcc_version} libgcc%{gcc_version}
+Prefer: libstdc++%{gcc_version}-32bit libstdc++%{gcc_version}-64bit
+Prefer: libstroke
+Prefer: gnome-sharp2:art-sharp2 gnome-sharp:art-sharp
+Prefer: ifolder3:gnome-sharp2 ifolder3:gconf-sharp2
+Prefer: nautilus-ifolder3:gnome-sharp2 inkscape:gtkmm24
+Prefer: gconf-sharp2:glade-sharp2 gconf-sharp:glade-sharp
+Prefer: gjdoc:antlr-bootstrap
+Prefer: tomboy:gconf-sharp2 tomboy:gnome-sharp2
+Prefer: zmd:libzypp-zmd-backend
+Prefer: yast2-packagemanager-devel:yast2-packagemanager
+Prefer: glitz-32bit:Mesa-32bit
+Prefer: poppler-tools
+Prefer: banshee:banshee-engine-gst helix-banshee:helix-banshee-engine-gst
+Prefer: java-1_5_0-ibm:java-1_5_0-ibm-alsa
+Prefer: microcode_ctl:kernel-default
+Prefer: notification-daemon
+Prefer: pkg-config gtk-doc wlan-kmp-default lua-libs
+Prefer: gnu-jaf classpathx-mail avahi-compat-mDNSResponder yast2-control-center-qt
+Prefer: vim-normal myspell-american wine
+Prefer: eclipse-platform eclipse-scripts
+Prefer: yast2-theme-openSUSE
+Prefer: amarok:amarok-xine
+Prefer: kdenetwork3-vnc:tightvnc
+Prefer: libgweather0 jessie ndesk-dbus ndesk-dbus-glib tomcat6-jsp-2_1-api tomcat6-servlet-2_5-api
+Prefer: icewm-lite
+Prefer: patterns-openSUSE-GNOME-cd:banshee
+Prefer: yast2-ncurses-pkg
+Prefer: monodevelop: mono-addins
+Prefer: ant-trax:saxon
+Prefer: gnome-session:gnome-session-branding-openSUSE
+Prefer: gnome-session:gconf2-branding-openSUSE
+Prefer: xfce4-desktop:xfce4-desktop-branding-openSUSE
+Prefer: bundle-lang-gnome:gnome-session-branding-openSUSE
+Prefer: texlive-xmltex texlive-tools texlive-jadetex
+Prefer: mono-web:mono-data-sqlite
+Prefer: gnome-games:gnuchess
+Prefer: OpenOffice_org:OpenOffice_org-branding-upstream
+Prefer: gimp:gimp-branding-upstream
+Prefer: libesd-devel:esound
+Prefer: libesd0:esound-daemon
+Prefer: glib2:glib2-branding-upstream
+Prefer: kdebase4-workspace:kdebase4-workspace-branding-upstream
+Prefer: mysql-connector-java:java-1_5_0-gcj-compat
+Prefer: -geronimo-jta-1_0_1B-api
+Prefer: rhino:xmlbeans-mini
+Prefer: ghostscript-devel:ghostscript-library
+Prefer: gdm:gdm-branding-upstream
+Prefer: rpcbind log4j-mini eclipse-source
+Prefer: mx4j:log4j-mini
+Prefer: podsleuth:sg3_utils
+Prefer: libcdio_cdda0 libcdio_paranoia0
+Prefer: mozilla-xulrunner190-32bit
+Prefer: boo tog-pegasus
+Prefer: kde4-kupdateapplet:kde4-kupdateapplet-zypp
+Prefer: ant:xerces-j2
+Prefer: -bundle-lang-kde-de -bundle-lang-kde-en -bundle-lang-kde-es
+Prefer: -bundle-lang-kde-fr -bundle-lang-kde-pt
+Prefer: -bundle-lang-kde-zh -bundle-lang-kde-ja -bundle-lang-kde-ru -bundle-lang-kde-pl
+Prefer: -bundle-lang-kde-sv -bundle-lang-kde-ko -bundle-lang-kde-fi -bundle-lang-kde-da
+Prefer: -bundle-lang-kde-cs -bundle-lang-kde-nl -bundle-lang-kde-hu -bundle-lang-kde-nb
+Prefer: -bundle-lang-kde-it -bundle-lang-kde-ca -bundle-lang-kde-ar
+Prefer: -bundle-lang-gnome-es -bundle-lang-gnome-de -bundle-lang-gnome-fr
+Prefer: -bundle-lang-gnome-pt -bundle-lang-gnome-en
+Prefer: -bundle-lang-gnome-zh -bundle-lang-gnome-ja -bundle-lang-gnome-ru -bundle-lang-gnome-cs
+Prefer: -bundle-lang-gnome-ko -bundle-lang-gnome-da -bundle-lang-gnome-nl -bundle-lang-gnome-hu
+Prefer: -bundle-lang-gnome-pl -bundle-lang-gnome-fi -bundle-lang-gnome-nb -bundle-lang-gnome-sv
+Prefer: -bundle-lang-gnome-it -bundle-lang-gnome-ca -bundle-lang-gnome-ar
+Prefer: -bundle-lang-common-es -bundle-lang-common-de -bundle-lang-common-fr
+Prefer: -bundle-lang-common-pt -bundle-lang-common-en
+Prefer: -bundle-lang-common-ja -bundle-lang-common-zh -bundle-lang-common-cs -bundle-lang-common-ru
+Prefer: -bundle-lang-common-nl -bundle-lang-common-hu -bundle-lang-common-pl -bundle-lang-common-da
+Prefer: -bundle-lang-common-ko -bundle-lang-common-nb -bundle-lang-common-fi -bundle-lang-common-sv
+Prefer: -bundle-lang-common-it -bundle-lang-common-ca -bundle-lang-common-ar
+Prefer: -libgcc-mainline -libstdc++-mainline -gcc-mainline-c++
+Prefer: -libgcj-mainline -viewperf -compat -compat-openssl097g
+Prefer: -zmd -OpenOffice_org -pam-laus -libgcc-tree-ssa -busybox-links
+
+Prefer: -NX -xaw3dd -db43
+Prefer: -xerces-j2-xml-resolver -xerces-j2-xml-apis
+Prefer: -vmware-player
+Prefer: libgcc%{gcc_version} libgcc%{gcc_version}-32bit libgcc%{gcc_version}-64bit
+Prefer: libgcc%{gcc_version}-x86 libffi%{gcc_version} libgcj_bc%{gcc_version}
+Prefer: libgomp%{gcc_version} libgomp%{gcc_version}-32bit libgomp%{gcc_version}-64bit
+Prefer: libmudflap%{gcc_version} libmudflap%{gcc_version}-32bit libmudflap%{gcc_version}-64bit
+Prefer: libobjc%{gcc_version}
+Prefer: -libnetpbm -libcdio7-mini -libiso9660-5-mini
+Prefer: -libcdio-mini -faac-mini
+Prefer: -seamonkey
+Prefer: -libdb-4_4-devel -libevoldap-2_4-2
+Conflict: ghostscript-library:ghostscript-mini
+Conflict: ghostscript-fonts-std:ghostscript-mini
+Prefer: -libopenal0-soft -openal-soft -lsb-buildenv
+Prefer: gnu-crypto libusb-compat-devel
+Prefer: libusb-0_1-4
+Prefer: CASA_auth_token_svc:xerces-j2
+Prefer: OpenOffice_org:xerces-j2
+Prefer: k3b:libdvdread4
+Prefer: glibc-devel
+Prefer: NetworkManager:dhcp-client
+Prefer: kdebase3-SuSE:kdebase3
+
+Ignore: openSUSE-release:openSUSE-release-ftp,openSUSE-release-dvd5,openSUSE-release-dvd9,openSUSE-release-livecdkde,openSUSE-release-livecdgnome
+Ignore: cracklib:cracklib-dict
+Ignore: aaa_base:aaa_skel,suse-release,logrotate,ash,mingetty,distribution-release,udev
+Ignore: gettext-tools:libgcj,libstdc++-devel,libgcj41,libstdc++41-devel,libgcj42,libstdc++42-devel
+Ignore: libgcj43,libstdc++43-devel
+Ignore: pwdutils:openslp
+Ignore: pam-modules:resmgr
+Ignore: rpm:suse-build-key,build-key
+Ignore: bind-utils:bind-libs
+Ignore: alsa:dialog,pciutils
+Ignore: portmap:syslogd
+Ignore: fontconfig:freetype2
+Ignore: fontconfig-devel:freetype2-devel
+Ignore: xorg-x11-libs:freetype2
+Ignore: xorg-x11:x11-tools,resmgr,xkeyboard-config,xorg-x11-Mesa,libusb,freetype2,libjpeg,libpng
+Ignore: xorg-x11-server:xorg-x11-driver-input,xorg-x11-driver-video
+Ignore: apache2:logrotate
+Ignore: arts:alsa,audiofile,resmgr,libogg,libvorbis
+Ignore: kdelibs3:alsa,arts,pcre,OpenEXR,aspell,cups-libs,mDNSResponder-lib,krb5,libjasper
+Ignore: kdelibs3-devel:libvorbis-devel
+Ignore: kdebase3:kdebase3-ksysguardd,OpenEXR,dbus-1,dbus-1-qt,hal,powersave,openslp,libusb
+Ignore: kdebase3-SuSE:release-notes
+Ignore: jack:alsa,libsndfile
+Ignore: libxml2-devel:readline-devel
+Ignore: gnome-vfs2:gnome-mime-data,desktop-file-utils,cdparanoia,dbus-1,dbus-1-glib,hal,libsmbclient,fam,file_alteration
+Ignore: libgda:file_alteration
+Ignore: gnutls:lzo,libopencdk
+Ignore: gnutls-devel:lzo-devel,libopencdk-devel
+Ignore: pango:cairo,glitz,libpixman,libpng
+Ignore: pango-devel:cairo-devel
+Ignore: cairo-devel:libpixman-devel
+Ignore: libgnomeprint:libgnomecups
+Ignore: libgnomeprintui:libgnomecups
+Ignore: orbit2:libidl
+Ignore: orbit2-devel:libidl,libidl-devel,indent
+Ignore: qt3:libmng
+Ignore: qt-sql:qt_database_plugin
+Ignore: gtk2:libpng,libtiff
+Ignore: libgnomecanvas-devel:glib-devel
+Ignore: libgnomeui:gnome-icon-theme,shared-mime-info
+Ignore: scrollkeeper:docbook_4
+Ignore: gnome-desktop:libgnomesu,startup-notification
+Ignore: python-devel:python-tk
+Ignore: gnome-pilot:gnome-panel
+Ignore: gnome-panel:control-center2
+Ignore: gnome-menus:kdebase3
+Ignore: gnome-main-menu:rug
+Ignore: libbonoboui:gnome-desktop
+Ignore: postfix:pcre
+Ignore: docbook_4:iso_ent,xmlcharent
+Ignore: control-center2:nautilus,evolution-data-server,gnome-menus,gstreamer-plugins,gstreamer,metacity,mozilla-nspr,mozilla,libxklavier,gnome-desktop,startup-notification
+Ignore: docbook-xsl-stylesheets:xmlcharent
+Ignore: liby2util-devel:libstdc++-devel,openssl-devel
+Ignore: yast2:yast2-ncurses,yast2_theme,perl-Config-Crontab,yast2-xml,SuSEfirewall2
+Ignore: yast2-core:netcat,hwinfo,wireless-tools,sysfsutils
+Ignore: yast2-core-devel:libxcrypt-devel,hwinfo-devel,blocxx-devel,sysfsutils,libstdc++-devel
+Ignore: yast2-packagemanager-devel:rpm-devel,curl-devel,openssl-devel
+Ignore: yast2-devtools:libxslt
+Ignore: yast2-installation:yast2-update,yast2-mouse,yast2-country,yast2-bootloader,yast2-packager,yast2-network,yast2-online-update,yast2-users,release-notes,autoyast2-installation
+Ignore: yast2-bootloader:bootloader-theme
+Ignore: yast2-packager:yast2-x11
+Ignore: yast2-x11:sax2-libsax-perl
+Ignore: yast2-network:yast2-inetd
+Ignore: openslp-devel:openssl-devel
+Ignore: java-1_4_2-sun:xorg-x11-libs
+Ignore: java-1_4_2-sun-devel:xorg-x11-libs
+Ignore: tetex:xorg-x11-libs,expat,fontconfig,freetype2,libjpeg,ghostscript-x11,xaw3d,gd,dialog,ed
+Ignore: texlive-bin:ghostscript-x11
+Ignore: texlive-bin-omega:ghostscript-x11
+Ignore: yast2-country:yast2-trans-stats
+Ignore: tpb:tpctl-kmp
+Ignore: tpctl:tpctl-kmp
+Ignore: zaptel:zaptel-kmp
+Ignore: mkinitrd:pciutils
+Ignore: pciutils:pciutils-ids
+
+Ignore: libgcc:glibc-32bit
+Ignore: libgcc41:glibc-32bit
+Ignore: libgcc42:glibc-32bit
+Ignore: libgcc43:glibc-32bit
+Ignore: libstdc++:glibc-32bit
+Ignore: libstdc41++:glibc-32bit
+Ignore: libstdc42++:glibc-32bit
+Ignore: libstdc43++:glibc-32bit
+Ignore: ncurses-32bit
+
+Ignore: susehelp:susehelp_lang,suse_help_viewer
+Ignore: mailx:smtp_daemon
+Ignore: cron:smtp_daemon
+Ignore: hotplug:syslog
+Ignore: pcmcia:syslog
+Ignore: openct:syslog
+Ignore: avalon-logkit:servlet
+Ignore: jython:servlet
+Ignore: ispell:ispell_dictionary,ispell_english_dictionary
+Ignore: aspell:aspel_dictionary,aspell_dictionary
+Ignore: smartlink-softmodem:kernel,kernel-nongpl
+Ignore: OpenOffice_org-de:myspell-german-dictionary
+Ignore: OpenOffice_org:OpenOffice_org-i18n
+Ignore: mediawiki:php-session,php-gettext,php-zlib,php-mysql,mod_php_any
+Ignore: squirrelmail:mod_php_any,php-session,php-gettext,php-iconv,php-mbstring,php-openssl
+
+Ignore: simias:mono(log4net)
+Ignore: zmd:mono(log4net)
+Ignore: horde:mod_php_any,php-gettext,php-mcrypt,php-imap,php-pear-log,php-pear,php-session,php
+
+Ignore: xerces-j2:xml-commons-apis,xml-commons-resolver
+Ignore: xdg-menu:desktop-data
+Ignore: nessus-libraries:nessus-core
+Ignore: evolution:yelp
+
+Ignore: mono-tools:mono(gconf-sharp),mono(glade-sharp),mono(gnome-sharp),mono(gtkhtml-sharp),mono(atk-sharp),mono(gdk-sharp),mono(glib-sharp),mono(gtk-sharp),mono(pango-sharp)
+Ignore: gecko-sharp2:mono(glib-sharp),mono(gtk-sharp)
+
+Ignore: vcdimager:libcdio.so.6,libcdio.so.6(CDIO_6),libiso9660.so.4,libiso9660.so.4(ISO9660_4)
+Ignore: libcdio:libcddb.so.2
+
+Ignore: gnome-libs:libgnomeui
+Ignore: nautilus:gnome-themes
+Ignore: gnome-panel:gnome-themes
+Ignore: gnome-panel:tomboy
+Ignore: NetworkManager:NetworkManager-client
+Ignore: libbeagle:beagle
+Ignore: coreutils:coreutils-lang
+Ignore: cpio:cpio-lang
+Ignore: glib2:glib2-lang
+Ignore: gtk2:gtk2-lang
+Ignore: gtk:gtk-lang
+Ignore: atk:atk-lang
+Ignore: hal:pm-utils
+Ignore: MozillaThunderbird:pinentry-dialog
+Ignore: seamonkey:pinentry-dialog
+Ignore: pinentry:pinentry-dialog
+Ignore: gpg2:gpg2-lang
+Ignore: util-linux:util-linux-lang
+Ignore: suseRegister:distribution-release
+Ignore: compiz:compiz-decorator
+Ignore: icecream:gcc-c++
+Ignore: no
+Ignore: package
+Ignore: provides
+Ignore: j9vm/libjvm.so()(64bit)
+Ignore: kdepim3:suse_help_viewer
+Ignore: kdebase3-SuSE:kdebase3-SuSE-branding
+Ignore: kio_sysinfo:kdebase3-SuSE-branding
+Ignore: gnome-menus:gnome-menus-branding
+Ignore: epiphany:epiphany-branding
+Ignore: phonon:phonon-backend
+Ignore: openwbem-devel
+Ignore: MozillaFirefox:MozillaFirefox-branding
+Ignore: yast2:yast2-branding
+Ignore: yast2-theme-SLE:yast2-branding
+Ignore: yast2-registration:yast2-registration-branding
+
+%ifarch s390 s390x
+Ignore: yast2-all-packages:yast2-x11
+%endif
+
+%ifnarch ia64 s390 s390x ppc ppc64
+Prefer: java-1_6_0-openjdk java-1_6_0-openjdk-devel
+%endif
+%ifarch s390 s390x ppc ppc64
+Prefer: java-1_6_0-ibm java-1_6_0-ibm-devel
+%endif
+%ifarch ia64
+Prefer: java-1_6_0-bea java-1_6_0-bea-devel
+%endif
+
+Prefer: -java-1_5_0-gcj-compat-devel
+%ifnarch ia64 s390 s390x ppc ppc64
+Substitute: java2-devel-packages java-1_6_0-openjdk-devel
+%else
+ %ifarch s390 s390x ppc ppc64
+Substitute: java2-devel-packages java-1_6_0-ibm-devel unzip update-alternatives
+ %endif
+ %ifarch ia64
+Substitute: java2-devel-packages java-1_6_0-bea-devel unzip update-alternatives
+ %endif
+%endif
+
+%ifarch x86_64 ppc64 s390x sparc64
+Substitute: glibc-devel-32bit glibc-devel-32bit glibc-32bit
+%else
+ %ifarch ppc
+Substitute: glibc-devel-32bit glibc-devel-64bit
+ %else
+Substitute: glibc-devel-32bit
+ %endif
+%endif
+
+%ifarch %ix86
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-bigsmp kernel-debug kernel-xen
+%endif
+%ifarch ia64
+Substitute: kernel-binary-packages kernel-default kernel-debug
+%endif
+%ifarch x86_64
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-xen
+%endif
+%ifarch ppc
+Substitute: kernel-binary-packages kernel-default kernel-ppc64 kernel-ps3
+%endif
+%ifarch ppc64
+Substitute: kernel-binary-packages kernel-default kernel-ppc64
+%endif
+%ifarch s390
+Substitute: kernel-binary-packages kernel-s390
+%endif
+%ifarch s390x
+Substitute: kernel-binary-packages kernel-default
+%endif
+
+%ifarch ppc64
+Substitute: mono-devel mono-devel mono-biarchcompat
+Substitute: mono-basic mono-basic mono-biarchcompat
+Substitute: mono-tools mono-tools mono-biarchcompat
+Substitute: mono-data-sqlite mono-data-sqlite libsqlite3-0-32bit
+%endif
+
+
+Optflags: i586 -march=i586 -mtune=i686 -fmessage-length=0
+Optflags: i686 -march=i686 -mtune=i686 -fmessage-length=0
+Optflags: x86_64 -fmessage-length=0
+Optflags: ppc -fmessage-length=0
+Optflags: ppc64 -fmessage-length=0
+Optflags: ia64 -fmessage-length=0
+Optflags: s390 -fmessage-length=0
+Optflags: s390x -fmessage-length=0
+
+Optflags: * -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables
+
+%define suse_version 1110
+
+Macros:
+%insserv_prereq insserv sed
+%fillup_prereq fillup coreutils grep diffutils
+%suseconfig_fonts_prereq perl aaa_base
+%install_info_prereq info
+%kernel_module_package_buildreq module-init-tools kernel-syms
+%kernel_module_package_buildreqs module-init-tools kernel-syms
+
+%suse_version 1110
+%sles_version 0
+%ul_version 0
+%do_profiling 1
+%_vendor suse
diff --git a/configs/sl11.2.conf b/configs/sl11.2.conf
new file mode 100644 (file)
index 0000000..daa1bcb
--- /dev/null
@@ -0,0 +1,452 @@
+%define gcc_version 44
+
+Substitute: kiwi-packagemanager:zypper zypper
+Substitute: kiwi-packagemanager:smart smart
+Substitute: kiwi-packagemanager:instsource kiwi-instsource cdrkit-cdrtools-compat syslinux
+Substitute: kiwi-filesystem:ext3 e2fsprogs procps psmisc reiserfs
+Substitute: kiwi-filesystem:squashfs squashfs
+Substitute: kiwi-boot:isoboot kiwi-desc-isoboot module-init-tools elfutils squashfs aufs aufs-kmp-default
+Substitute: kiwi-boot:netboot kiwi-desc-netboot kiwi-desc-xenboot ncurses-utils curl dhcpcd iputils nbd net-tools netcfg nfs-client parted grub mdadm
+Substitute: kiwi-boot:oemboot kiwi-desc-oemboot
+Substitute: kiwi-boot:usbboot kiwi-desc-usbboot
+Substitute: kiwi-boot:vmxboot kiwi-desc-vmxboot
+Substitute: kiwi-boot:xenboot kiwi-desc-xenboot
+
+Substitute: build:debug vim strace gdb
+
+Preinstall: aaa_base acl attr bash coreutils diffutils
+Preinstall: filesystem fillup glibc grep insserv libacl libattr
+Preinstall: libbz2-1 libgcc%{gcc_version} libxcrypt m4 libncurses5 pam
+Preinstall: permissions libreadline6 rpm sed tar zlib libselinux1
+Preinstall: liblzma0 libcap2 libpcre0
+Preinstall: libpopt0 libelf1 liblua5_1
+
+Runscripts: aaa_base
+
+Order: libopenssl0_9_8:openssl-certs
+
+VMinstall: util-linux perl-base libdb-4_5 libsepol1 libblkid1 libuuid1
+
+Required: autoconf automake binutils bzip2 gcc gcc%{gcc_version}
+Required: gettext-runtime glibc libtool perl rpm zlib libmpfr1
+Required: libncurses5 libgmp3 libgmpxx4
+
+Support: audit-libs cpio cpp cpp%{gcc_version} cracklib cvs
+Support: file findutils gawk gdbm gettext-tools
+Support: glibc-devel glibc-locale groff gzip info less
+Support: libbz2-devel libdb-4_5
+Support: libstdc++%{gcc_version}
+Support: libxcrypt libzio
+Support: linux-kernel-headers make man netcfg
+Support: net-tools pam-modules patch perl-base sysvinit
+Support: texinfo timezone util-linux login
+Support: libgomp%{gcc_version} libuuid1 psmisc
+Support: terminfo-base
+
+# build tools packages
+Support: build brp-check-suse post-build-checks
+Support: rpmlint-Factory
+Keep: brp-check-suse
+# remove build-compare support to disable "same result" package dropping
+Support: build-compare
+
+%ifarch ia64
+Support: libunwind libunwind-devel
+%endif
+
+Keep: audit-libs binutils bzip2 cpio cpp cracklib file findutils gawk gcc gcc-ada gcc-c++
+Keep: gdbm glibc-devel glibc-locale gzip libada libpcre0
+Keep: libunwind libunwind-devel libzio make pam-devel pam-modules
+Keep: patch perl-base perl rcs timezone libmpfr1 libcap2
+Keep: gmp libgmp3 libgmpxx4
+Keep: cpp44 gcc44 gcc44-ada libstdc++44
+Keep: cpp43 gcc43 gcc43-ada libstdc++43
+Keep: cpp42 gcc42 gcc42-ada libstdc++42
+Keep: cpp41 gcc41 gcc41-ada libstdc++41
+Keep: java-1_6_0-openjdk java-1_6_0-openjdk-devel libcloog0 libppl7 libppl_c2
+Keep: libpopt0
+
+Prefer: -suse-build-key
+Prefer: krb5 krb5-devel
+Prefer: krb5-mini-devel:krb5-mini
+Prefer: libreadline5
+Prefer: libdb_java-4_5 libicu
+Prefer: cracklib-dict-small postfix
+Prefer: jta libpng fam mozilla mozilla-nss
+Prefer: unixODBC libsoup glitz
+Prefer: gnome-panel desktop-data-openSUSE gnome2-SuSE
+Prefer: mono-nunit gecko-sharp2
+Prefer: apache2-prefork Mesa openmotif-libs ghostscript-mini ghostscript-library
+Prefer: gtk-sharp2 glib-sharp2 glade-sharp2
+Prefer: libzypp-zmd-backend novell-NLDAPsdk zaptel-kmp-default
+Prefer: hbedv-dazuko-kmp-default dazuko-kmp-default vmware-wkstnmods-kmp-default
+Prefer: virtualbox-kmp-default preload-kmp-default
+Prefer: libstdc++%{gcc_version} libgcc%{gcc_version}
+Prefer: libstdc++%{gcc_version}-32bit libstdc++%{gcc_version}-64bit
+Prefer: libstroke
+Prefer: gnome-sharp2:art-sharp2 gnome-sharp:art-sharp
+Prefer: ifolder3:gnome-sharp2 ifolder3:gconf-sharp2
+Prefer: nautilus-ifolder3:gnome-sharp2 inkscape:gtkmm24
+Prefer: gconf-sharp2:glade-sharp2 gconf-sharp:glade-sharp
+Prefer: gjdoc:antlr-bootstrap
+Prefer: tomboy:gconf-sharp2 tomboy:gnome-sharp2
+Prefer: zmd:libzypp-zmd-backend
+Prefer: yast2-packagemanager-devel:yast2-packagemanager
+Prefer: glitz-32bit:Mesa-32bit
+Prefer: poppler-tools
+Prefer: banshee:banshee-engine-gst helix-banshee:helix-banshee-engine-gst
+Prefer: java-1_5_0-ibm:java-1_5_0-ibm-alsa
+Prefer: java-1_5_0-ibm:java-1_5_0-ibm-fonts
+Prefer: java-1_6_0-ibm:java-1_6_0-ibm-fonts
+Prefer: microcode_ctl:kernel-default
+Prefer: notification-daemon
+Prefer: pkg-config gtk-doc wlan-kmp-default lua-libs
+Prefer: gnu-jaf classpathx-mail avahi-compat-mDNSResponder yast2-control-center-qt
+Prefer: vim-normal myspell-american wine
+Prefer: eclipse-platform eclipse-scripts
+Prefer: yast2-theme-openSUSE
+Prefer: amarok:amarok-xine
+Prefer: kdenetwork3-vnc:tightvnc
+Prefer: libgweather0 jessie ndesk-dbus ndesk-dbus-glib tomcat6-jsp-2_1-api tomcat6-servlet-2_5-api
+Prefer: icewm-lite
+Prefer: patterns-openSUSE-GNOME-cd:banshee
+Prefer: yast2-ncurses-pkg
+Prefer: monodevelop: mono-addins
+Prefer: ant-trax:saxon
+Prefer: gnome-session:gnome-session-branding-openSUSE
+Prefer: gnome-session:gconf2-branding-openSUSE
+Prefer: bundle-lang-gnome:gnome-session-branding-openSUSE
+Prefer: texlive-xmltex texlive-tools texlive-jadetex
+Prefer: mono-web:mono-data-sqlite
+Prefer: gnome-games:gnuchess
+Prefer: OpenOffice_org:OpenOffice_org-branding-upstream
+Prefer: gimp:gimp-branding-upstream
+Prefer: libesd-devel:esound
+Prefer: libesd0:esound-daemon
+Prefer: package-lists-openSUSE-KDE-cd: esound-daemon
+Prefer: glib2:glib2-branding-upstream
+Prefer: kdebase4-workspace:kdebase4-workspace-branding-upstream
+Prefer: mysql-connector-java:java-1_5_0-gcj-compat
+Prefer: -geronimo-jta-1_0_1B-api -geronimo-jms-1_1-api
+Prefer: rhino:xmlbeans-mini
+Prefer: ghostscript-devel:ghostscript-library
+Prefer: gdm:gdm-branding-upstream
+Prefer: rpcbind log4j-mini eclipse-source
+Prefer: mx4j:log4j-mini
+Prefer: podsleuth:sg3_utils
+Prefer: libcdio_cdda0 libcdio_paranoia0
+Prefer: mozilla-xulrunner191
+Prefer: mozilla-xulrunner191-32bit
+Prefer: boo tog-pegasus
+Prefer: kde4-kupdateapplet:kde4-kupdateapplet-zypp
+Prefer: ant:xerces-j2
+Prefer: dhcp-client:dhcp
+Prefer: beagle-index:preload-kmp-default
+Prefer: -bundle-lang-kde-de -bundle-lang-kde-en -bundle-lang-kde-es
+Prefer: -bundle-lang-kde-fr -bundle-lang-kde-pt
+Prefer: -bundle-lang-kde-zh -bundle-lang-kde-ja -bundle-lang-kde-ru -bundle-lang-kde-pl
+Prefer: -bundle-lang-kde-sv -bundle-lang-kde-ko -bundle-lang-kde-fi -bundle-lang-kde-da
+Prefer: -bundle-lang-kde-cs -bundle-lang-kde-nl -bundle-lang-kde-hu -bundle-lang-kde-nb
+Prefer: -bundle-lang-kde-it -bundle-lang-kde-ca -bundle-lang-kde-ar
+Prefer: -bundle-lang-gnome-es -bundle-lang-gnome-de -bundle-lang-gnome-fr
+Prefer: -bundle-lang-gnome-pt -bundle-lang-gnome-en
+Prefer: -bundle-lang-gnome-zh -bundle-lang-gnome-ja -bundle-lang-gnome-ru -bundle-lang-gnome-cs
+Prefer: -bundle-lang-gnome-ko -bundle-lang-gnome-da -bundle-lang-gnome-nl -bundle-lang-gnome-hu
+Prefer: -bundle-lang-gnome-pl -bundle-lang-gnome-fi -bundle-lang-gnome-nb -bundle-lang-gnome-sv
+Prefer: -bundle-lang-gnome-it -bundle-lang-gnome-ca -bundle-lang-gnome-ar
+Prefer: -bundle-lang-gnome-extras-es -bundle-lang-gnome-extras-de -bundle-lang-gnome-extras-fr
+Prefer: -bundle-lang-gnome-extras-pt -bundle-lang-gnome-extras-en
+Prefer: -bundle-lang-gnome-extras-zh -bundle-lang-gnome-extras-ja -bundle-lang-gnome-extras-ru -bundle-lang-gnome-extras-cs
+Prefer: -bundle-lang-gnome-extras-ko -bundle-lang-gnome-extras-da -bundle-lang-gnome-extras-nl -bundle-lang-gnome-extras-hu
+Prefer: -bundle-lang-gnome-extras-pl -bundle-lang-gnome-extras-fi -bundle-lang-gnome-extras-nb -bundle-lang-gnome-extras-sv
+Prefer: -bundle-lang-gnome-extras-it -bundle-lang-gnome-extras-ca -bundle-lang-gnome-extras-ar
+Prefer: -bundle-lang-common-es -bundle-lang-common-de -bundle-lang-common-fr
+Prefer: -bundle-lang-common-pt -bundle-lang-common-en
+Prefer: -bundle-lang-common-ja -bundle-lang-common-zh -bundle-lang-common-cs -bundle-lang-common-ru
+Prefer: -bundle-lang-common-nl -bundle-lang-common-hu -bundle-lang-common-pl -bundle-lang-common-da
+Prefer: -bundle-lang-common-ko -bundle-lang-common-nb -bundle-lang-common-fi -bundle-lang-common-sv
+Prefer: -bundle-lang-common-it -bundle-lang-common-ca -bundle-lang-common-ar
+Prefer: -libgcc-mainline -libstdc++-mainline -gcc-mainline-c++
+Prefer: -libgcj-mainline -viewperf -compat -compat-openssl097g
+Prefer: -zmd -OpenOffice_org -pam-laus -libgcc-tree-ssa -busybox-links
+
+Prefer: -NX -xaw3dd -db43
+Prefer: -xerces-j2-xml-resolver -xerces-j2-xml-apis
+Prefer: -vmware-player
+Prefer: libgcc%{gcc_version} libgcc%{gcc_version}-32bit libgcc%{gcc_version}-64bit
+Prefer: libgcc%{gcc_version}-x86 libffi%{gcc_version} libgcj_bc%{gcc_version}
+Prefer: libgomp%{gcc_version} libgomp%{gcc_version}-32bit libgomp%{gcc_version}-64bit
+Prefer: libmudflap%{gcc_version} libmudflap%{gcc_version}-32bit libmudflap%{gcc_version}-64bit
+Prefer: libobjc%{gcc_version} libgfortran%{gcc_version}
+Prefer: -libnetpbm -libcdio7-mini -libiso9660-5-mini -libiso9660-7-mini -libcdio10-mini
+Prefer: -libcdio-mini -faac-mini
+Prefer: -seamonkey
+Prefer: -libdb-4_4-devel -libevoldap-2_4-2
+Conflict: ghostscript-library:ghostscript-mini
+Conflict: ghostscript-fonts-std:ghostscript-mini
+Prefer: libopenal0-soft openal-soft -lsb-buildenv
+Prefer: -libevent
+Prefer: gnu-crypto libusb-compat-devel
+Prefer: libusb-0_1-4
+Prefer: CASA_auth_token_svc:xerces-j2
+Prefer: OpenOffice_org:xerces-j2
+Prefer: k3b:libdvdread4
+Prefer: glibc-devel
+Prefer: -libpcap -java-1_7_0-icedtea-devel -libiniparser -loudmouth -libkonq4 -libnetcdf-4
+Prefer: NetworkManager:dhcp-client
+Prefer: kdebase3-SuSE:kdebase3
+Prefer: kde4-kdm:kde4-kdm-branding-upstream
+Prefer: kdm:kdm-branding-upstream
+Prefer: pcre-tools
+Prefer: libpopt0
+Prefer: -apache2-mod_perl -otrs -qa_apache_testsuite -ctcs2
+
+#Temporary hack to solve #442202
+Ignore: yast2-all-packages:yast2-boot-server,yast2-heartbeat,yast2-issleconfig,yast2-linux-user-mgmt,yast2-trans-am,yast2-trans-be,yast2-trans-he,yast2-trans-ms,yast2-trans-my,yast2-trans-tk
+
+Ignore: openSUSE-release:openSUSE-release-ftp,openSUSE-release-dvd5,openSUSE-release-biarch,openSUSE-release-livecdkde,openSUSE-release-livecdgnome
+Ignore: cracklib:cracklib-dict
+Ignore: aaa_base:aaa_skel,suse-release,logrotate,ash,mingetty,distribution-release,udev
+Ignore: gettext-tools:libgcj,libstdc++-devel,libgcj41,libstdc++41-devel,libgcj42,libstdc++42-devel
+Ignore: libgcj43,libstdc++43-devel
+Ignore: libgcj44,libstdc++44-devel
+Ignore: pwdutils:openslp
+Ignore: pam-modules:resmgr
+Ignore: rpm:suse-build-key,build-key
+Ignore: bind-utils:bind-libs
+Ignore: alsa:dialog,pciutils
+Ignore: portmap:syslogd
+Ignore: fontconfig:freetype2
+Ignore: fontconfig-devel:freetype2-devel
+Ignore: xorg-x11-libs:freetype2
+Ignore: xorg-x11:x11-tools,resmgr,xkeyboard-config,xorg-x11-Mesa,libusb,freetype2,libjpeg,libpng
+Ignore: xorg-x11-server:xorg-x11-driver-input,xorg-x11-driver-video
+Ignore: apache2:logrotate
+Ignore: arts:alsa,audiofile,resmgr,libogg,libvorbis
+Ignore: kdelibs3:alsa,arts,OpenEXR,aspell,cups-libs,mDNSResponder-lib,krb5,libjasper
+Ignore: kdelibs3-devel:libvorbis-devel
+Ignore: kdebase3:kdebase3-ksysguardd,OpenEXR,dbus-1,dbus-1-qt,hal,powersave,openslp,libusb
+Ignore: kdebase3-SuSE:release-notes
+Ignore: jack:alsa,libsndfile
+Ignore: libxml2-devel:readline-devel
+Ignore: gnome-vfs2:gnome-mime-data,desktop-file-utils,cdparanoia,dbus-1,dbus-1-glib,hal,libsmbclient,fam,file_alteration
+Ignore: libgda:file_alteration
+Ignore: gnutls:lzo,libopencdk
+Ignore: gnutls-devel:lzo-devel,libopencdk-devel
+Ignore: pango:cairo,glitz,libpixman,libpng
+Ignore: pango-devel:cairo-devel
+Ignore: cairo-devel:libpixman-devel
+Ignore: libgnomeprint:libgnomecups
+Ignore: libgnomeprintui:libgnomecups
+Ignore: orbit2-devel:indent
+Ignore: qt3:libmng
+Ignore: qt-sql:qt_database_plugin
+Ignore: gtk2:libpng,libtiff
+Ignore: libgnomecanvas-devel:glib-devel
+Ignore: libgnomeui:gnome-icon-theme,shared-mime-info
+Ignore: scrollkeeper:docbook_4
+Ignore: gnome-desktop:libgnomesu,startup-notification
+Ignore: python-devel:python-tk
+Ignore: gnome-pilot:gnome-panel
+Ignore: gnome-panel:control-center2
+Ignore: gnome-menus:kdebase3
+Ignore: gnome-main-menu:rug
+Ignore: libbonoboui:gnome-desktop
+Ignore: postfix:pcre,libpcre0
+Ignore: docbook_4:iso_ent,xmlcharent
+Ignore: control-center2:nautilus,evolution-data-server,gnome-menus,gstreamer-plugins,gstreamer,metacity,mozilla-nspr,mozilla,libxklavier,gnome-desktop,startup-notification
+Ignore: docbook-xsl-stylesheets:xmlcharent
+Ignore: liby2util-devel:libstdc++-devel,openssl-devel
+Ignore: yast2:yast2-ncurses,yast2_theme,perl-Config-Crontab,yast2-xml,SuSEfirewall2
+Ignore: yast2-core:netcat,hwinfo,wireless-tools,sysfsutils
+Ignore: yast2-core-devel:libxcrypt-devel,hwinfo-devel,blocxx-devel,sysfsutils,libstdc++-devel
+Ignore: yast2-packagemanager-devel:rpm-devel,curl-devel,openssl-devel
+Ignore: yast2-devtools:libxslt
+Ignore: yast2-installation:yast2-update,yast2-mouse,yast2-country,yast2-bootloader,yast2-packager,yast2-network,yast2-online-update,yast2-users,release-notes,autoyast2-installation
+Ignore: yast2-bootloader:bootloader-theme
+Ignore: yast2-packager:yast2-x11
+Ignore: yast2-x11:sax2-libsax-perl
+Ignore: yast2-network:yast2-inetd
+Ignore: openslp-devel:openssl-devel
+Ignore: java-1_4_2-sun:xorg-x11-libs
+Ignore: java-1_4_2-sun-devel:xorg-x11-libs
+Ignore: tetex:xorg-x11-libs,expat,fontconfig,freetype2,libjpeg,ghostscript-x11,xaw3d,gd,dialog,ed
+Ignore: texlive-bin:ghostscript-x11
+Ignore: texlive-bin-omega:ghostscript-x11
+Ignore: yast2-country:yast2-trans-stats
+Ignore: tpb:tpctl-kmp
+Ignore: tpctl:tpctl-kmp
+Ignore: zaptel:zaptel-kmp
+Ignore: mkinitrd:pciutils
+Ignore: pciutils:pciutils-ids
+
+Ignore: libgcc:glibc-32bit
+Ignore: libgcc41:glibc-32bit
+Ignore: libgcc42:glibc-32bit
+Ignore: libgcc43:glibc-32bit
+Ignore: libgcc44:glibc-32bit
+Ignore: libstdc++:glibc-32bit
+Ignore: libstdc41++:glibc-32bit
+Ignore: libstdc42++:glibc-32bit
+Ignore: libstdc43++:glibc-32bit
+Ignore: libstdc44++:glibc-32bit
+Ignore: ncurses-32bit
+
+Ignore: susehelp:susehelp_lang,suse_help_viewer
+Ignore: mailx:smtp_daemon
+Ignore: cron:smtp_daemon
+Ignore: hotplug:syslog
+Ignore: pcmcia:syslog
+Ignore: openct:syslog
+Ignore: avalon-logkit:servlet
+Ignore: jython:servlet
+Ignore: ispell:ispell_dictionary,ispell_english_dictionary
+Ignore: aspell:aspel_dictionary,aspell_dictionary
+Ignore: smartlink-softmodem:kernel,kernel-nongpl
+Ignore: OpenOffice_org-de:myspell-german-dictionary
+Ignore: OpenOffice_org:OpenOffice_org-i18n
+Ignore: OpenOffice_org:OpenOffice_org-icon-themes
+Ignore: mediawiki:php-session,php-gettext,php-zlib,php-mysql,mod_php_any
+Ignore: squirrelmail:mod_php_any,php-session,php-gettext,php-iconv,php-mbstring,php-openssl
+
+Ignore: simias:mono(log4net)
+Ignore: zmd:mono(log4net)
+Ignore: horde:mod_php_any,php-gettext,php-mcrypt,php-imap,php-pear-log,php-pear,php-session,php
+
+Ignore: xerces-j2:xml-commons-apis,xml-commons-resolver
+Ignore: xdg-menu:desktop-data
+Ignore: nessus-libraries:nessus-core
+Ignore: evolution:yelp
+
+Ignore: mono-tools:mono(gconf-sharp),mono(glade-sharp),mono(gnome-sharp),mono(gtkhtml-sharp),mono(atk-sharp),mono(gdk-sharp),mono(glib-sharp),mono(gtk-sharp),mono(pango-sharp)
+Ignore: gecko-sharp2:mono(glib-sharp),mono(gtk-sharp)
+
+Ignore: vcdimager:libcdio.so.6,libcdio.so.6(CDIO_6),libiso9660.so.4,libiso9660.so.4(ISO9660_4)
+Ignore: libcdio:libcddb.so.2
+
+Ignore: gnome-libs:libgnomeui
+Ignore: nautilus:gnome-themes
+Ignore: gnome-panel:gnome-themes
+Ignore: gnome-panel:tomboy
+Ignore: NetworkManager:NetworkManager-client
+Ignore: libbeagle:beagle
+Ignore: coreutils:coreutils-lang
+Ignore: cpio:cpio-lang
+Ignore: glib2:glib2-lang
+Ignore: gtk2:gtk2-lang
+Ignore: gtk:gtk-lang
+Ignore: atk:atk-lang
+Ignore: hal:pm-utils
+Ignore: MozillaThunderbird:pinentry-dialog
+Ignore: seamonkey:pinentry-dialog
+Ignore: pinentry:pinentry-dialog
+Ignore: gpg2:gpg2-lang
+Ignore: util-linux:util-linux-lang
+Ignore: suseRegister:distribution-release
+Ignore: compiz:compiz-decorator
+Ignore: icecream:gcc-c++
+Ignore: no
+Ignore: package
+Ignore: provides
+Ignore: j9vm/libjvm.so()(64bit)
+Ignore: kdepim3:suse_help_viewer
+Ignore: kdebase3-SuSE:kdebase3-SuSE-branding
+Ignore: kio_sysinfo:kdebase3-SuSE-branding
+Ignore: gnome-menus:gnome-menus-branding
+Ignore: epiphany:epiphany-branding
+Ignore: phonon:phonon-backend
+Ignore: openwbem-devel
+Ignore: MozillaFirefox:MozillaFirefox-branding
+Ignore: yast2:yast2-branding
+Ignore: yast2-theme-SLE:yast2-branding
+Ignore: yast2-registration:yast2-registration-branding
+Ignore: compiz:compiz-branding
+Ignore: texlive:perl-Tk texlive-bin:perl-Tk
+Ignore: xfce4-desktop:xfce4-desktop-branding
+Ignore: xfce4-panel:xfce4-panel-branding
+Ignore: xfce4-session:xfce4-session-branding
+Ignore: kdebase4-runtime:kdebase4-runtime-branding
+Ignore: pulseaudio:kernel
+
+%ifarch s390 s390x
+Ignore: yast2-all-packages:yast2-x11
+%endif
+
+%ifnarch ia64 s390 s390x
+Prefer: java-1_6_0-openjdk java-1_6_0-openjdk-devel
+%endif
+%ifarch s390 s390x
+Prefer: java-1_6_0-ibm java-1_6_0-ibm-devel
+%endif
+%ifarch ia64
+Prefer: java-1_6_0-bea java-1_6_0-bea-devel
+%endif
+
+Prefer: -java-1_5_0-gcj-compat-devel
+%ifarch %ix86 x86_64
+Prefer: -java-1_5_0-ibm-devel
+%endif
+Substitute: java2-devel-packages java-1_6_0-openjdk-devel
+
+%ifarch x86_64 ppc64 s390x sparc64
+Substitute: glibc-devel-32bit glibc-devel-32bit glibc-32bit
+%else
+ %ifarch ppc
+Substitute: glibc-devel-32bit glibc-devel-64bit
+ %else
+Substitute: glibc-devel-32bit
+ %endif
+%endif
+
+%ifarch %ix86
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-bigsmp kernel-debug kernel-xen
+%endif
+%ifarch ia64
+Substitute: kernel-binary-packages kernel-default kernel-debug
+%endif
+%ifarch x86_64
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-xen
+%endif
+%ifarch ppc
+Substitute: kernel-binary-packages kernel-default kernel-ppc64 kernel-ps3
+%endif
+%ifarch ppc64
+Substitute: kernel-binary-packages kernel-default kernel-ppc64
+%endif
+%ifarch s390
+Substitute: kernel-binary-packages kernel-s390
+%endif
+%ifarch s390x
+Substitute: kernel-binary-packages kernel-default
+%endif
+
+# until the builds of the packages are fixed...
+Substitute: yast2-theme-SLED
+Substitute: yast2-theme-SLE
+
+Optflags: i586 -fomit-frame-pointer -fmessage-length=0
+Optflags: i686 -march=i686 -mtune=generic -fomit-frame-pointer -fmessage-length=0
+Optflags: x86_64 -fmessage-length=0
+Optflags: ppc -fmessage-length=0
+Optflags: ppc64 -fmessage-length=0
+Optflags: ia64 -fmessage-length=0
+Optflags: s390 -fmessage-length=0
+Optflags: s390x -fmessage-length=0
+
+Optflags: * -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables
+
+%define suse_version 1120
+
+Macros:
+%insserv_prereq insserv sed
+%fillup_prereq fillup coreutils grep diffutils
+%suseconfig_fonts_prereq perl aaa_base
+%install_info_prereq info
+%kernel_module_package_buildreq module-init-tools kernel-syms
+%kernel_module_package_buildreqs module-init-tools kernel-syms
+
+%suse_version 1120
+%sles_version 0
+%ul_version 0
+%do_profiling 1
+%_vendor suse
diff --git a/configs/sl11.3.conf b/configs/sl11.3.conf
new file mode 100644 (file)
index 0000000..4155315
--- /dev/null
@@ -0,0 +1,489 @@
+%define gcc_version 45
+
+Substitute: kiwi-packagemanager:zypper zypper
+Substitute: kiwi-packagemanager:smart smart
+Substitute: kiwi-packagemanager:instsource kiwi-instsource cdrkit-cdrtools-compat syslinux kiwi-instsource-plugins-openSUSE-11-3
+Substitute: kiwi-filesystem:ext3 e2fsprogs procps psmisc reiserfs
+Substitute: kiwi-filesystem:squashfs squashfs
+Substitute: kiwi-boot:isoboot kiwi-desc-isoboot module-init-tools elfutils squashfs clicfs e2fsprogs fribidi gfxboot-devel gawk gfxboot gfxboot-devel grub hdparm hwinfo iproute2 kiwi-tools lvm2 make memtest86+ netcfg psmisc
+Substitute: kiwi-boot:netboot kiwi-desc-netboot kiwi-desc-xenboot ncurses-utils curl dhcpcd iputils nbd net-tools netcfg nfs-client parted grub mdadm
+Substitute: kiwi-boot:oemboot kiwi-desc-oemboot
+Substitute: kiwi-boot:usbboot kiwi-desc-usbboot
+Substitute: kiwi-boot:vmxboot kiwi-desc-vmxboot
+Substitute: kiwi-boot:xenboot kiwi-desc-xenboot
+
+Substitute: build:debug vim strace gdb
+
+Preinstall: aaa_base acl attr bash coreutils diffutils
+Preinstall: filesystem fillup glibc grep insserv libacl libattr
+Preinstall: libbz2-1 libgcc%{gcc_version} libxcrypt m4 libncurses5 pam
+Preinstall: permissions libreadline6 rpm sed tar zlib libselinux1
+Preinstall: liblzma0 libcap2 libpcre0
+Preinstall: libpopt0 libelf1 liblua5_1
+
+Runscripts: aaa_base
+
+Order: libopenssl0_9_8:openssl-certs
+
+VMinstall: util-linux perl-base libdb-4_5 libsepol1 libblkid1 libuuid1
+
+Required: autoconf automake binutils bzip2 gcc gcc%{gcc_version}
+Required: gettext-runtime glibc libtool perl rpm zlib libmpfr1
+Required: libncurses5 libgmp3 libgmpxx4
+
+Support: libaudit1
+Support: cpio cpp cpp%{gcc_version} cracklib cvs
+Support: file findutils gawk gdbm gettext-tools
+Support: glibc-devel glibc-locale groff gzip info less
+Support: libbz2-devel libdb-4_5
+Support: libstdc++%{gcc_version}
+Support: libxcrypt libzio
+Support: make man netcfg
+Support: linux-glibc-devel
+Support: net-tools pam-modules patch perl-base sysvinit-tools
+Support: texinfo timezone util-linux login
+Support: libgomp%{gcc_version} libuuid1 psmisc
+Support: terminfo-base update-alternatives pwdutils build-mkbaselibs
+Support: brp-check-suse post-build-checks rpmlint-Factory
+Keep: brp-check-suse
+# remove build-compare support to disable "same result" package dropping
+Support: build-compare
+
+%ifarch ia64
+Support: libunwind libunwind-devel
+%endif
+
+Keep: libaudit1 binutils bzip2 cpio cpp cracklib file findutils gawk gcc gcc-ada gcc-c++
+Keep: gdbm glibc-devel glibc-locale gzip libada libpcre0
+Keep: libunwind libunwind-devel libzio make pam-devel pam-modules
+Keep: patch perl-base perl rcs timezone libmpfr1 libcap2
+Keep: gmp libgmp3 libgmpxx4 libmpc2
+Keep: cpp45 gcc45 gcc45-ada libstdc++45
+Keep: cpp44 gcc44 gcc44-ada libstdc++44
+Keep: cpp43 gcc43 gcc43-ada libstdc++43
+Keep: cpp42 gcc42 gcc42-ada libstdc++42
+Keep: cpp41 gcc41 gcc41-ada libstdc++41
+Keep: java-1_6_0-openjdk java-1_6_0-openjdk-devel libcloog0 libppl7 libppl_c2
+Keep: libpopt0 pkg-config
+
+Prefer: -suse-build-key
+Prefer: krb5 krb5-devel
+Prefer: krb5-mini-devel:krb5-mini
+Prefer: libreadline5
+Prefer: libdb_java-4_5 libicu
+Prefer: cracklib-dict-small postfix
+Prefer: jta libpng fam mozilla mozilla-nss
+Prefer: unixODBC libsoup glitz
+Prefer: gnome-panel desktop-data-openSUSE gnome2-SuSE
+Prefer: mono-nunit gecko-sharp2
+Prefer: apache2-prefork Mesa openmotif-libs ghostscript-mini ghostscript-library
+Prefer: gtk-sharp2 glib-sharp2 glade-sharp2
+Prefer: libzypp-zmd-backend novell-NLDAPsdk zaptel-kmp-default
+Prefer: hbedv-dazuko-kmp-default dazuko-kmp-default vmware-wkstnmods-kmp-default
+Prefer: virtualbox-kmp-default preload-kmp-default
+Prefer: libstdc++%{gcc_version} libgcc%{gcc_version}
+Prefer: libstdc++%{gcc_version}-32bit libstdc++%{gcc_version}-64bit
+%ifarch s390x
+Prefer: -libstdc++41
+%endif
+Prefer: libstroke
+Prefer: gnome-sharp2:art-sharp2 gnome-sharp:art-sharp
+Prefer: ifolder3:gnome-sharp2 ifolder3:gconf-sharp2
+Prefer: nautilus-ifolder3:gnome-sharp2 inkscape:gtkmm24
+Prefer: gconf-sharp2:glade-sharp2 gconf-sharp:glade-sharp
+Prefer: gjdoc:antlr-bootstrap
+Prefer: tomboy:gconf-sharp2 tomboy:gnome-sharp2
+Prefer: zmd:libzypp-zmd-backend
+Prefer: yast2-packagemanager-devel:yast2-packagemanager
+Prefer: glitz-32bit:Mesa-32bit
+Prefer: poppler-tools
+Prefer: banshee:banshee-engine-gst helix-banshee:helix-banshee-engine-gst
+Prefer: banshee-1:banshee-1-client-classic
+Prefer: java-1_5_0-ibm:java-1_5_0-ibm-alsa
+Prefer: java-1_5_0-ibm:java-1_5_0-ibm-fonts
+Prefer: java-1_6_0-ibm:java-1_6_0-ibm-fonts
+Prefer: microcode_ctl:kernel-default
+Prefer: notification-daemon
+Prefer: pkg-config gtk-doc wlan-kmp-default lua-libs
+Prefer: gnu-jaf classpathx-mail avahi-compat-mDNSResponder yast2-control-center-qt
+Prefer: vim-normal myspell-american wine
+Prefer: eclipse-platform eclipse-scripts
+Prefer: yast2-theme-openSUSE
+Prefer: amarok:amarok-xine
+Prefer: kdenetwork3-vnc:tightvnc
+Prefer: libgweather0 jessie ndesk-dbus ndesk-dbus-glib tomcat6-jsp-2_1-api tomcat6-servlet-2_5-api
+Prefer: icewm-lite
+Prefer: patterns-openSUSE-GNOME-cd:banshee
+Prefer: yast2-ncurses-pkg
+Prefer: monodevelop: mono-addins
+Prefer: ant-trax:saxon
+Prefer: gnome-session:gnome-session-branding-openSUSE
+Prefer: gnome-session:gconf2-branding-openSUSE
+Prefer: bundle-lang-gnome:gnome-session-branding-openSUSE
+Prefer: texlive-xmltex texlive-tools texlive-jadetex
+Prefer: mono-web:mono-data-sqlite
+Prefer: gnome-games:gnuchess
+Prefer: glchess:gnuchess
+Prefer: OpenOffice_org:OpenOffice_org-branding-upstream
+Prefer: gimp:gimp-branding-upstream
+Prefer: libesd-devel:esound
+Prefer: libesd0:esound-daemon
+Prefer: package-lists-openSUSE-KDE-cd: esound-daemon
+Prefer: glib2:glib2-branding-upstream
+Prefer: kdelibs4:kdelibs4-branding-upstream
+Prefer: kdebase4-workspace:kdebase4-workspace-branding-upstream
+Prefer: kdelibs4-branding:kdelibs4-branding-upstream
+Prefer: PackageKit:PackageKit-branding-upstream
+Prefer: mysql-connector-java:java-1_5_0-gcj-compat
+Prefer: -geronimo-jta-1_0_1B-api -geronimo-jms-1_1-api -geronimo-el-1_0-api
+Prefer: rhino:xmlbeans-mini
+Prefer: ghostscript-devel:ghostscript-library
+Prefer: gdm:gdm-branding-upstream
+Prefer: rpcbind log4j-mini eclipse-source
+Prefer: mx4j:log4j-mini
+Prefer: podsleuth:sg3_utils
+Prefer: libcdio_cdda0 libcdio_paranoia0
+Prefer: mozilla-xulrunner191
+Prefer: mozilla-xulrunner191-32bit
+Prefer: boo tog-pegasus
+Prefer: kde4-kupdateapplet:kde4-kupdateapplet-zypp
+Prefer: ant:xerces-j2
+Prefer: dhcp-client:dhcp
+Prefer: beagle-index:preload-kmp-default
+Prefer: dummy-release
+Prefer: -bundle-lang-kde-de -bundle-lang-kde-en -bundle-lang-kde-es
+Prefer: -bundle-lang-kde-fr -bundle-lang-kde-pt
+Prefer: -bundle-lang-kde-zh -bundle-lang-kde-ja -bundle-lang-kde-ru -bundle-lang-kde-pl
+Prefer: -bundle-lang-kde-sv -bundle-lang-kde-ko -bundle-lang-kde-fi -bundle-lang-kde-da
+Prefer: -bundle-lang-kde-cs -bundle-lang-kde-nl -bundle-lang-kde-hu -bundle-lang-kde-nb
+Prefer: -bundle-lang-kde-it -bundle-lang-kde-ca -bundle-lang-kde-ar
+Prefer: -bundle-lang-gnome-es -bundle-lang-gnome-de -bundle-lang-gnome-fr
+Prefer: -bundle-lang-gnome-pt -bundle-lang-gnome-en
+Prefer: -bundle-lang-gnome-zh -bundle-lang-gnome-ja -bundle-lang-gnome-ru -bundle-lang-gnome-cs
+Prefer: -bundle-lang-gnome-ko -bundle-lang-gnome-da -bundle-lang-gnome-nl -bundle-lang-gnome-hu
+Prefer: -bundle-lang-gnome-pl -bundle-lang-gnome-fi -bundle-lang-gnome-nb -bundle-lang-gnome-sv
+Prefer: -bundle-lang-gnome-it -bundle-lang-gnome-ca -bundle-lang-gnome-ar
+Prefer: -bundle-lang-gnome-extras-es -bundle-lang-gnome-extras-de -bundle-lang-gnome-extras-fr
+Prefer: -bundle-lang-gnome-extras-pt -bundle-lang-gnome-extras-en
+Prefer: -bundle-lang-gnome-extras-zh -bundle-lang-gnome-extras-ja -bundle-lang-gnome-extras-ru -bundle-lang-gnome-extras-cs
+Prefer: -bundle-lang-gnome-extras-ko -bundle-lang-gnome-extras-da -bundle-lang-gnome-extras-nl -bundle-lang-gnome-extras-hu
+Prefer: -bundle-lang-gnome-extras-pl -bundle-lang-gnome-extras-fi -bundle-lang-gnome-extras-nb -bundle-lang-gnome-extras-sv
+Prefer: -bundle-lang-gnome-extras-it -bundle-lang-gnome-extras-ca -bundle-lang-gnome-extras-ar
+Prefer: -bundle-lang-common-es -bundle-lang-common-de -bundle-lang-common-fr
+Prefer: -bundle-lang-common-pt -bundle-lang-common-en
+Prefer: -bundle-lang-common-ja -bundle-lang-common-zh -bundle-lang-common-cs -bundle-lang-common-ru
+Prefer: -bundle-lang-common-nl -bundle-lang-common-hu -bundle-lang-common-pl -bundle-lang-common-da
+Prefer: -bundle-lang-common-ko -bundle-lang-common-nb -bundle-lang-common-fi -bundle-lang-common-sv
+Prefer: -bundle-lang-common-it -bundle-lang-common-ca -bundle-lang-common-ar
+Prefer: -libgcc-mainline -libstdc++-mainline -gcc-mainline-c++
+Prefer: -libgcj-mainline -viewperf -compat -compat-openssl097g
+Prefer: -zmd -OpenOffice_org -pam-laus -libgcc-tree-ssa -busybox-links
+
+Prefer: -NX -xaw3dd -db43
+Prefer: -xerces-j2-xml-resolver -xerces-j2-xml-apis
+Prefer: -vmware-player
+Prefer: libgcc%{gcc_version} libgcc%{gcc_version}-32bit libgcc%{gcc_version}-64bit
+Prefer: libgcc%{gcc_version}-x86 libffi%{gcc_version} libffi%{gcc_version}-devel libgcj_bc%{gcc_version}
+Prefer: libgomp%{gcc_version} libgomp%{gcc_version}-32bit libgomp%{gcc_version}-64bit
+Prefer: libmudflap%{gcc_version} libmudflap%{gcc_version}-32bit libmudflap%{gcc_version}-64bit
+Prefer: libobjc%{gcc_version} libgfortran%{gcc_version}
+Prefer: -libnetpbm -libcdio7-mini -libiso9660-5-mini -libiso9660-7-mini -libcdio10-mini
+Prefer: -libcdio-mini -faac-mini
+Prefer: -seamonkey
+Prefer: -libdb-4_4-devel -libevoldap-2_4-2
+Conflict: ghostscript-library:ghostscript-mini
+Conflict: ghostscript-fonts-std:ghostscript-mini
+Prefer: libopenal0-soft openal-soft -lsb-buildenv
+Prefer: -libevent
+Prefer: gnu-crypto libusb-compat-devel
+Prefer: libusb-0_1-4
+Prefer: CASA_auth_token_svc:xerces-j2
+Prefer: OpenOffice_org:xerces-j2
+Prefer: k3b:libdvdread4
+Prefer: glibc-devel
+Prefer: -libpcap -java-1_7_0-icedtea-devel -libiniparser -loudmouth -libkonq4 -libnetcdf-4
+Prefer: NetworkManager:dhcp-client
+Prefer: kdebase3-SuSE:kdebase3
+Prefer: kde4-kdm:kde4-kdm-branding-upstream
+Prefer: kdm:kdm-branding-upstream
+Prefer: pcre-tools
+Prefer: libpopt0
+Prefer: -apache2-mod_perl -otrs -qa_apache_testsuite -ctcs2
+Prefer: libgnome-keyring-devel
+Prefer: linux-glibc-devel
+Prefer: squid sysvinit
+Prefer: libpng14-compat-devel
+Prefer: -python3 -x11-video-fglrxG02 -libpng12-0
+Prefer: perl-Mail-SPF:perl-Error libldb0 -audit-libs mysql-community-server mysql-community-server-client
+
+#Temporary hack to solve #442202
+Ignore: yast2-all-packages:yast2-boot-server,yast2-heartbeat,yast2-issleconfig,yast2-linux-user-mgmt,yast2-trans-am,yast2-trans-be,yast2-trans-he,yast2-trans-ms,yast2-trans-my,yast2-trans-tk
+
+Ignore: openSUSE-release:openSUSE-release-ftp,openSUSE-release-dvd5,openSUSE-release-biarch,openSUSE-release-livecdkde,openSUSE-release-livecdgnome
+Ignore: cracklib:cracklib-dict
+Ignore: aaa_base:aaa_skel,suse-release,logrotate,ash,mingetty,distribution-release,udev
+Ignore: gettext-tools:libgcj,libstdc++-devel,libgcj41,libstdc++41-devel,libgcj42,libstdc++42-devel
+Ignore: libgcj43,libstdc++43-devel
+Ignore: libgcj44,libstdc++44-devel
+Ignore: libgcj45,libstdc++45-devel
+Ignore: pwdutils:openslp
+Ignore: pam-modules:resmgr
+Ignore: rpm:suse-build-key,build-key
+Ignore: bind-utils:bind-libs
+Ignore: alsa:dialog,pciutils
+Ignore: portmap:syslogd
+Ignore: xorg-x11:x11-tools,resmgr,xkeyboard-config,xorg-x11-Mesa,libusb,freetype2,libjpeg,libpng
+Ignore: xorg-x11-server:xorg-x11-driver-input,xorg-x11-driver-video
+Ignore: apache2:logrotate
+Ignore: arts:alsa,audiofile,resmgr,libogg,libvorbis
+Ignore: kdelibs3:alsa,arts,OpenEXR,aspell,cups-libs,mDNSResponder-lib,krb5,libjasper
+Ignore: kdelibs3-devel:libvorbis-devel
+Ignore: kdebase3:kdebase3-ksysguardd,OpenEXR,dbus-1,dbus-1-qt,hal,powersave,openslp,libusb
+Ignore: kdebase3-SuSE:release-notes
+Ignore: jack:alsa,libsndfile
+Ignore: libxml2-devel:readline-devel
+Ignore: gnome-vfs2:gnome-mime-data,desktop-file-utils,cdparanoia,dbus-1,dbus-1-glib,hal,libsmbclient,fam,file_alteration
+Ignore: libgda:file_alteration
+Ignore: gnutls:lzo,libopencdk
+Ignore: gnutls-devel:lzo-devel,libopencdk-devel
+Ignore: pango:cairo,glitz,libpixman,libpng
+Ignore: pango-devel:cairo-devel
+Ignore: cairo-devel:libpixman-devel
+Ignore: libgnomeprint:libgnomecups
+Ignore: libgnomeprintui:libgnomecups
+Ignore: orbit2-devel:indent
+Ignore: qt3:libmng
+Ignore: qt-sql:qt_database_plugin
+Ignore: gtk2:libpng,libtiff
+Ignore: libgnomecanvas-devel:glib-devel
+Ignore: libgnomeui:gnome-icon-theme,shared-mime-info
+Ignore: scrollkeeper:docbook_4
+Ignore: gnome-desktop:libgnomesu,startup-notification
+Ignore: python-devel:python-tk
+Ignore: gnome-pilot:gnome-panel
+Ignore: gnome-panel:control-center2
+Ignore: gnome-menus:kdebase3
+Ignore: gnome-main-menu:rug
+Ignore: libbonoboui:gnome-desktop
+Ignore: postfix:pcre,libpcre0
+Ignore: docbook_4:iso_ent,xmlcharent
+Ignore: control-center2:nautilus,evolution-data-server,gnome-menus,gstreamer-plugins,gstreamer,metacity,mozilla-nspr,mozilla,libxklavier,gnome-desktop,startup-notification
+Ignore: docbook-xsl-stylesheets:xmlcharent
+Ignore: liby2util-devel:libstdc++-devel,openssl-devel
+Ignore: yast2:yast2-ncurses,yast2_theme,perl-Config-Crontab,yast2-xml,SuSEfirewall2
+Ignore: yast2-core:netcat,hwinfo,wireless-tools,sysfsutils
+Ignore: yast2-core-devel:libxcrypt-devel,hwinfo-devel,blocxx-devel,sysfsutils,libstdc++-devel
+Ignore: yast2-packagemanager-devel:rpm-devel,curl-devel,openssl-devel
+Ignore: yast2-devtools:libxslt
+Ignore: yast2-installation:yast2-update,yast2-mouse,yast2-country,yast2-bootloader,yast2-packager,yast2-network,yast2-online-update,yast2-users,release-notes,autoyast2-installation
+Ignore: yast2-bootloader:bootloader-theme
+Ignore: yast2-packager:yast2-x11
+Ignore: yast2-x11:sax2-libsax-perl
+Ignore: yast2-network:yast2-inetd
+Ignore: openslp-devel:openssl-devel
+Ignore: java-1_4_2-sun:xorg-x11-libs
+Ignore: java-1_4_2-sun-devel:xorg-x11-libs
+Ignore: tetex:xorg-x11-libs,expat,fontconfig,freetype2,libjpeg,ghostscript-x11,xaw3d,gd,dialog,ed
+Ignore: texlive-bin:ghostscript-x11
+Ignore: texlive-bin-omega:ghostscript-x11
+Ignore: yast2-country:yast2-trans-stats
+Ignore: tpb:tpctl-kmp
+Ignore: tpctl:tpctl-kmp
+Ignore: zaptel:zaptel-kmp
+Ignore: mkinitrd:pciutils
+Ignore: pciutils:pciutils-ids
+
+Ignore: libgcc:glibc-32bit
+Ignore: libgcc41:glibc-32bit
+Ignore: libgcc42:glibc-32bit
+Ignore: libgcc43:glibc-32bit
+Ignore: libgcc44:glibc-32bit
+Ignore: libgcc45:glibc-32bit
+Ignore: libstdc++:glibc-32bit
+Ignore: libstdc41++:glibc-32bit
+Ignore: libstdc42++:glibc-32bit
+Ignore: libstdc43++:glibc-32bit
+Ignore: libstdc44++:glibc-32bit
+Ignore: libstdc45++:glibc-32bit
+Ignore: ncurses-32bit
+
+Ignore: susehelp:susehelp_lang,suse_help_viewer
+Ignore: mailx:smtp_daemon
+Ignore: cron:smtp_daemon
+Ignore: hotplug:syslog
+Ignore: pcmcia:syslog
+Ignore: openct:syslog
+Ignore: avalon-logkit:servlet
+Ignore: jython:servlet
+Ignore: ispell:ispell_dictionary,ispell_english_dictionary
+Ignore: aspell:aspel_dictionary,aspell_dictionary
+Ignore: smartlink-softmodem:kernel,kernel-nongpl
+Ignore: OpenOffice_org-de:myspell-german-dictionary
+Ignore: OpenOffice_org:OpenOffice_org-i18n
+Ignore: OpenOffice_org:OpenOffice_org-icon-themes
+Ignore: mediawiki:php-session,php-gettext,php-zlib,php-mysql,mod_php_any
+Ignore: squirrelmail:mod_php_any,php-session,php-gettext,php-iconv,php-mbstring,php-openssl
+
+Ignore: simias:mono(log4net)
+Ignore: zmd:mono(log4net)
+Ignore: horde:mod_php_any,php-gettext,php-mcrypt,php-imap,php-pear-log,php-pear,php-session,php
+
+Ignore: xerces-j2:xml-commons-apis,xml-commons-resolver
+Ignore: xdg-menu:desktop-data
+Ignore: nessus-libraries:nessus-core
+Ignore: evolution:yelp
+
+Ignore: mono-tools:mono(gconf-sharp),mono(glade-sharp),mono(gnome-sharp),mono(gtkhtml-sharp),mono(atk-sharp),mono(gdk-sharp),mono(glib-sharp),mono(gtk-sharp),mono(pango-sharp)
+Ignore: gecko-sharp2:mono(glib-sharp),mono(gtk-sharp)
+
+Ignore: vcdimager:libcdio.so.6,libcdio.so.6(CDIO_6),libiso9660.so.4,libiso9660.so.4(ISO9660_4)
+Ignore: libcdio:libcddb.so.2
+
+Ignore: gnome-libs:libgnomeui
+Ignore: nautilus:gnome-themes
+Ignore: gnome-panel:gnome-themes
+Ignore: gnome-panel:tomboy
+Ignore: NetworkManager:NetworkManager-client
+Ignore: libbeagle:beagle
+Ignore: coreutils:coreutils-lang
+Ignore: cpio:cpio-lang
+Ignore: glib2:glib2-lang
+Ignore: gtk2:gtk2-lang
+Ignore: gtk:gtk-lang
+Ignore: atk:atk-lang
+Ignore: hal:pm-utils
+Ignore: MozillaThunderbird:pinentry-dialog
+Ignore: seamonkey:pinentry-dialog
+Ignore: pinentry:pinentry-dialog
+Ignore: gpg2:gpg2-lang
+Ignore: util-linux:util-linux-lang
+Ignore: suseRegister:distribution-release
+Ignore: compiz:compiz-decorator
+Ignore: icecream:gcc-c++
+Ignore: no
+Ignore: package
+Ignore: provides
+Ignore: j9vm/libjvm.so()(64bit)
+Ignore: kdepim3:suse_help_viewer
+Ignore: kdebase3-SuSE:kdebase3-SuSE-branding
+Ignore: kio_sysinfo:kdebase3-SuSE-branding
+Ignore: gnome-menus:gnome-menus-branding
+Ignore: epiphany:epiphany-branding
+Ignore: phonon:phonon-backend
+Ignore: openwbem-devel
+Ignore: MozillaFirefox:MozillaFirefox-branding
+Ignore: yast2:yast2-branding
+Ignore: yast2-theme-SLE:yast2-branding
+Ignore: yast2-registration:yast2-registration-branding
+Ignore: compiz:compiz-branding
+Ignore: texlive:perl-Tk texlive-bin:perl-Tk
+Ignore: xfce4-desktop:xfce4-desktop-branding
+Ignore: xfce4-panel:xfce4-panel-branding
+Ignore: xfce4-session:xfce4-session-branding
+Ignore: kdebase4-runtime:kdebase4-runtime-branding
+Ignore: pulseaudio:kernel
+Ignore: transmission-common:transmission-ui
+Ignore: mutter-moblin:moblin-branding
+Ignore: sysvinit-tools:mkinitrd cifs-utils:mkinitrd
+Ignore: opensc:pinentry
+Ignore: gpg2:pinentry
+Ignore: NetworkManager:dhcp
+# sysconfig requires it at runtime, not buildtime
+Ignore: sysconfig:dbus-1
+Ignore: sysconfig:procps
+Ignore: sysconfig:iproute2
+# no build dependencies
+Ignore: libksuseinstall1:yast2-packager
+Ignore: libksuseinstall1:zypper
+Ignore: libqca2:gpg2
+Ignore: NetworkManager:wpa_supplicant
+Ignore: NetworkManager:dhcp-client
+
+%ifnarch ia64 s390 s390x
+Prefer: java-1_6_0-openjdk java-1_6_0-openjdk-devel
+%endif
+%ifarch s390 s390x
+Prefer: java-1_6_0-ibm java-1_6_0-ibm-devel
+%endif
+%ifarch ia64
+Prefer: java-1_6_0-bea java-1_6_0-bea-devel
+%endif
+
+Prefer: -java-1_5_0-gcj-compat-devel
+%ifarch %ix86 x86_64
+Prefer: -java-1_5_0-ibm-devel
+%endif
+# We use always openjdk on openSUSE !
+#%ifnarch ia64 s390 s390x
+Substitute: java2-devel-packages java-1_6_0-openjdk-devel
+#%else
+# %ifarch s390 s390x
+#Substitute: java2-devel-packages java-1_6_0-ibm-devel unzip update-alternatives
+# %endif
+# %ifarch ia64
+#Substitute: java2-devel-packages java-1_6_0-bea-devel unzip update-alternatives
+# %endif
+#%endif
+
+%ifarch x86_64 ppc64 s390x sparc64
+Substitute: glibc-devel-32bit glibc-devel-32bit glibc-32bit
+%else
+ %ifarch ppc
+Substitute: glibc-devel-32bit glibc-devel-64bit
+ %else
+Substitute: glibc-devel-32bit
+ %endif
+%endif
+
+%ifarch %ix86
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-bigsmp kernel-debug kernel-xen
+%endif
+%ifarch ia64
+Substitute: kernel-binary-packages kernel-default kernel-debug
+%endif
+%ifarch x86_64
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-xen
+%endif
+%ifarch ppc
+Substitute: kernel-binary-packages kernel-default kernel-ppc64 kernel-ps3
+%endif
+%ifarch ppc64
+Substitute: kernel-binary-packages kernel-default kernel-ppc64
+%endif
+%ifarch s390
+Substitute: kernel-binary-packages kernel-s390
+%endif
+%ifarch s390x
+Substitute: kernel-binary-packages kernel-default
+%endif
+
+# until the builds of the packages are fixed...
+Substitute: yast2-theme-SLED
+Substitute: yast2-theme-SLE
+
+Optflags: i586 -fomit-frame-pointer -fmessage-length=0
+Optflags: i686 -march=i686 -mtune=generic -fomit-frame-pointer -fmessage-length=0
+Optflags: x86_64 -fmessage-length=0
+Optflags: ppc -fmessage-length=0
+Optflags: ppc64 -fmessage-length=0
+Optflags: ia64 -fmessage-length=0
+Optflags: s390 -fmessage-length=0
+Optflags: s390x -fmessage-length=0
+
+Optflags: * -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables
+
+%define suse_version 1130
+
+Macros:
+%insserv_prereq insserv sed
+%fillup_prereq fillup coreutils grep diffutils
+%suseconfig_fonts_prereq perl aaa_base
+%install_info_prereq info
+%kernel_module_package_buildreq module-init-tools kernel-syms
+%kernel_module_package_buildreqs module-init-tools kernel-syms
+
+%suse_version 1130
+%sles_version 0
+%ul_version 0
+%do_profiling 1
+%_vendor suse
diff --git a/configs/sl8.1.conf b/configs/sl8.1.conf
new file mode 100644 (file)
index 0000000..e1b095e
--- /dev/null
@@ -0,0 +1,196 @@
+Repotype: suse
+
+Preinstall: aaa_base acl attr bash db devs diffutils filesystem
+Preinstall: fileutils fillup glibc grep libgcc libxcrypt m4 ncurses
+Preinstall: pam permissions readline rpm sed sh-utils shadow tar
+Preinstall: textutils
+
+Runscripts: aaa_base
+
+VMinstall: util-linux perl
+
+Required: autoconf automake binutils bzip2 cracklib db gcc gdbm gettext
+Required: glibc libtool ncurses pam perl rpm zlib
+
+Support: bind9-utils bison cpio cpp cyrus-sasl e2fsprogs file
+Support: findutils flex gawk gdbm-devel glibc-devel glibc-locale
+Support: gpm groff gzip kbd less libstdc++ make man mktemp modutils
+Support: ncurses-devel net-tools netcfg pam-devel pam-modules
+Support: patch ps rcs sendmail strace syslogd sysvinit texinfo
+Support: timezone unzip util-linux vim zlib-devel
+
+Keep: binutils bzip2 cpp cracklib file findutils fpk gawk gcc
+Keep: gcc-c++ gdbm glibc-devel glibc-locale gnat gnat-runtime
+Keep: gzip libstdc++ make mktemp pam-devel pam-modules patch perl
+Keep: popt rcs shlibs5 timezone
+
+Prefer: xorg-x11-libs libpng fam mozilla mozilla-nss xorg-x11-Mesa
+Prefer: unixODBC libsoup glitz java-1_4_2-sun gnome-panel
+Prefer: desktop-data-SuSE gnome2-SuSE mono-nunit gecko-sharp2
+Prefer: apache2-prefork openmotif-libs ghostscript-mini gtk-sharp
+Prefer: glib-sharp libzypp-zmd-backend mDNSResponder
+
+Prefer: gnome-sharp2:art-sharp2 gnome-sharp:art-sharp
+Prefer: ifolder3:gnome-sharp2 ifolder3:gconf-sharp2
+Prefer: nautilus-ifolder3:gnome-sharp2
+Prefer: gconf-sharp2:glade-sharp2 gconf-sharp:glade-sharp
+Prefer: tomboy:gconf-sharp tomboy:gnome-sharp
+Prefer: zmd:libzypp-zmd-backend
+Prefer: yast2-packagemanager-devel:yast2-packagemanager
+
+Prefer: -libgcc-mainline -libstdc++-mainline -gcc-mainline-c++
+Prefer: -libgcj-mainline -viewperf -compat -compat-openssl097g
+Prefer: -zmd -OpenOffice_org -pam-laus -libgcc-tree-ssa -busybox-links
+Prefer: -crossover-office
+
+Conflict: ghostscript-library:ghostscript-mini
+
+Ignore: aaa_base:aaa_skel,suse-release,logrotate,ash,mingetty,distribution-release
+Ignore: gettext-devel:libgcj,libstdc++-devel
+Ignore: pwdutils:openslp
+Ignore: pam-modules:resmgr
+Ignore: rpm:suse-build-key,build-key
+Ignore: bind-utils:bind-libs
+Ignore: alsa:dialog,pciutils
+Ignore: portmap:syslogd
+Ignore: fontconfig:freetype2
+Ignore: fontconfig-devel:freetype2-devel
+Ignore: xorg-x11-libs:freetype2
+Ignore: xorg-x11:x11-tools,resmgr,xkeyboard-config,xorg-x11-Mesa,libusb,freetype2,libjpeg,libpng
+Ignore: apache2:logrotate
+Ignore: arts:alsa,audiofile,resmgr,libogg,libvorbis
+Ignore: kdelibs3:alsa,arts,pcre,OpenEXR,aspell,cups-libs,mDNSResponder,krb5,libjasper
+Ignore: kdelibs3-devel:libvorbis-devel
+Ignore: kdebase3:kdebase3-ksysguardd,OpenEXR,dbus-1,dbus-1-qt,hal,powersave,openslp,libusb
+Ignore: kdebase3-SuSE:release-notes
+Ignore: jack:alsa,libsndfile
+Ignore: libxml2-devel:readline-devel
+Ignore: gnome-vfs2:gnome-mime-data,desktop-file-utils,cdparanoia,dbus-1,dbus-1-glib,krb5,hal,libsmbclient,fam,file_alteration
+Ignore: libgda:file_alteration
+Ignore: gnutls:lzo,libopencdk
+Ignore: gnutls-devel:lzo-devel,libopencdk-devel
+Ignore: pango:cairo,glitz,libpixman,libpng
+Ignore: pango-devel:cairo-devel
+Ignore: cairo-devel:libpixman-devel
+Ignore: libgnomeprint:libgnomecups
+Ignore: libgnomeprintui:libgnomecups
+Ignore: orbit2:libidl
+Ignore: orbit2-devel:libidl,libidl-devel,indent
+Ignore: qt3:libmng
+Ignore: qt-sql:qt_database_plugin
+Ignore: gtk2:libpng,libtiff
+Ignore: libgnomecanvas-devel:glib-devel
+Ignore: libgnomeui:gnome-icon-theme,shared-mime-info
+Ignore: scrollkeeper:docbook_4,sgml-skel
+Ignore: gnome-desktop:libgnomesu,startup-notification
+Ignore: python-devel:python-tk
+Ignore: gnome-pilot:gnome-panel
+Ignore: gnome-panel:control-center2
+Ignore: gnome-menus:kdebase3
+Ignore: gnome-main-menu:rug
+Ignore: libbonoboui:gnome-desktop
+Ignore: postfix:pcre
+Ignore: docbook_4:iso_ent,sgml-skel,xmlcharent
+Ignore: control-center2:nautilus,evolution-data-server,gnome-menus,gstreamer-plugins,gstreamer,metacity,mozilla-nspr,mozilla,libxklavier,gnome-desktop,startup-notification
+Ignore: docbook-xsl-stylesheets:xmlcharent
+Ignore: liby2util-devel:libstdc++-devel,openssl-devel
+Ignore: yast2:yast2-ncurses,yast2-theme-SuSELinux,perl-Config-Crontab,yast2-xml,SuSEfirewall2
+Ignore: yast2-core:netcat,hwinfo,wireless-tools,sysfsutils
+Ignore: yast2-core-devel:libxcrypt-devel,hwinfo-devel,blocxx-devel,sysfsutils,libstdc++-devel
+Ignore: yast2-packagemanager-devel:rpm-devel,curl-devel,openssl-devel
+Ignore: yast2-devtools:perl-XML-Writer,libxslt,pkgconfig
+Ignore: yast2-installation:yast2-update,yast2-mouse,yast2-country,yast2-bootloader,yast2-packager,yast2-network,yast2-online-update,yast2-users,release-notes,autoyast2-installation
+Ignore: yast2-bootloader:bootloader-theme
+Ignore: yast2-packager:yast2-x11
+Ignore: yast2-x11:sax2-libsax-perl
+Ignore: openslp-devel:openssl-devel
+Ignore: java-1_4_2-sun:xorg-x11-libs
+Ignore: java-1_4_2-sun-devel:xorg-x11-libs
+Ignore: kernel-um:xorg-x11-libs
+Ignore: tetex:xorg-x11-libs,expat,fontconfig,freetype2,libjpeg,libpng,ghostscript-x11,xaw3d,gd,dialog,ed
+Ignore: yast2-country:yast2-trans-stats
+Ignore: libgcc:glibc-32bit
+Ignore: libstdc++:glibc-32bit
+Ignore: susehelp:susehelp_lang,suse_help_viewer
+Ignore: mailx:smtp_daemon
+Ignore: cron:smtp_daemon
+Ignore: hotplug:syslog
+Ignore: pcmcia:syslog
+Ignore: avalon-logkit:servlet
+Ignore: jython:servlet
+Ignore: ispell:ispell_dictionary,ispell_english_dictionary
+Ignore: aspell:aspel_dictionary,aspell_dictionary
+Ignore: smartlink-softmodem:kernel,kernel-nongpl
+Ignore: OpenOffice_org-de:myspell-german-dictionary
+Ignore: mediawiki:php-session,php-gettext,php-zlib,php-mysql,mod_php_any
+Ignore: squirrelmail:mod_php_any,php-session,php-gettext,php-iconv,php-mbstring,php-openssl
+
+Ignore: simias:mono(log4net)
+Ignore: zmd:mono(log4net)
+Ignore: horde:mod_php_any,php-gettext,php-mcrypt,php-imap,php-pear-log,php-pear,php-session,php
+Ignore: xerces-j2:xml-commons-apis,xml-commons-resolver
+Ignore: xdg-menu:desktop-data
+Ignore: nessus-libraries:nessus-core
+Ignore: evolution:yelp
+Ignore: mono-tools:mono(gconf-sharp),mono(glade-sharp),mono(gnome-sharp),mono(gtkhtml-sharp),mono(atk-sharp),mono(gdk-sharp),mono(glib-sharp),mono(gtk-sharp),mono(pango-sharp)
+Ignore: gecko-sharp2:mono(glib-sharp),mono(gtk-sharp)
+Ignore: vcdimager:libcdio.so.6,libcdio.so.6(CDIO_6),libiso9660.so.4,libiso9660.so.4(ISO9660_4)
+Ignore: libcdio:libcddb.so.2
+Ignore: gnome-libs:libgnomeui
+Ignore: nautilus:gnome-themes
+Ignore: gnome-panel:gnome-themes
+Ignore: gnome-panel:tomboy
+
+%ifnarch s390 s390x ia64
+Substitute: java2-devel-packages java2 java2-jre jpackage-utils
+%else
+ %ifarch ia64 s390
+Substitute: java2-devel-packages IBMJava2-SDK jpackage-utils
+ %endif
+ %ifarch s390x
+Substitute: java2-devel-packages IBMJava2-SDK jpackage-utils glibc-32bit baselibs-32bit
+ %endif
+%endif
+
+Substitute: yast2-devel-packages docbook-xsl-stylesheets doxygen libxslt perl-XML-Writer popt-devel sgml-skel update-desktop-files yast2 yast2-devtools yast2-packagemanager-devel yast2-perl-bindings yast2-testsuite
+
+%ifarch x86_64 ppc64 s390x sparc64
+Substitute: glibc-devel-32bit glibc-devel-32bit glibc-32bit baselibs-32bit
+%else
+ %ifarch ppc
+Substitute: glibc-devel-32bit glibc-devel-64bit glibc-64bit
+ %else
+Substitute: glibc-devel-32bit
+ %endif
+%endif
+
+%ifarch %ix86
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-bigsmp kernel-um
+%endif
+%ifarch ia64
+Substitute: kernel-binary-packages kernel-default kernel-sn2 kernel-64k-pagesize
+%endif
+%ifarch x86_64
+Substitute: kernel-binary-packages kernel-default kernel-smp
+%endif
+%ifarch ppc
+Substitute: kernel-binary-packages kernel-default kernel-pmac64_32bit kernel-power3 kernel-smp kernel-iseries64 kernel-pseries64 kernel-pmac64
+%endif
+%ifarch ppc64
+Substitute: kernel-binary-packages kernel-iseries64 kernel-pseries64 kernel-pmac64
+%endif
+%ifarch s390
+Substitute: kernel-binary-packages kernel-s390
+%endif
+%ifarch s390x
+Substitute: kernel-binary-packages kernel-s390x
+%endif
+
+Macros:
+%insserv_prereq aaa_base
+%fillup_prereq fillup fileutils
+%install_info_prereq texinfo
+%suse_version 810
+%sles_version 0
+%ul_version 0
+%_vendor suse
diff --git a/configs/sl8.2.conf b/configs/sl8.2.conf
new file mode 100644 (file)
index 0000000..a12fbce
--- /dev/null
@@ -0,0 +1,199 @@
+Repotype: suse
+
+Preinstall: aaa_base acl attr bash coreutils db devs diffutils
+Preinstall: filesystem fillup glibc grep insserv libacl libattr
+Preinstall: libgcc libxcrypt m4 ncurses pam permissions readline
+Preinstall: rpm sed shadow tar zlib
+
+Runscripts: aaa_base
+
+VMinstall: util-linux perl
+
+Required: autoconf automake binutils bzip2 cracklib db gcc gdbm gettext
+Required: glibc libtool ncurses pam perl rpm zlib
+
+Support: bind9-utils bison cpio cpp cvs cyrus-sasl2 e2fsprogs
+Support: file findutils flex gawk gdbm-devel glibc-devel glibc-locale
+Support: gpm groff gzip info kbd less libstdc++ make man mktemp
+Support: modutils ncurses-devel net-tools netcfg pam-devel pam-modules
+Support: patch ps rcs sendmail strace syslogd sysvinit texinfo
+Support: timezone unzip util-linux vim zlib-devel
+
+Keep: binutils bzip2 cpp cracklib file findutils fpk gawk gcc
+Keep: gcc-c++ gdbm glibc-devel glibc-locale gnat gnat-runtime
+Keep: gzip libstdc++ make mktemp pam-devel pam-modules patch perl
+Keep: popt rcs shlibs5 timezone
+
+Prefer: xorg-x11-libs libpng fam mozilla mozilla-nss xorg-x11-Mesa
+Prefer: unixODBC libsoup glitz java-1_4_2-sun gnome-panel
+Prefer: desktop-data-SuSE gnome2-SuSE mono-nunit gecko-sharp2
+Prefer: apache2-prefork openmotif-libs ghostscript-mini gtk-sharp
+Prefer: glib-sharp libzypp-zmd-backend mDNSResponder
+
+Prefer: gnome-sharp2:art-sharp2 gnome-sharp:art-sharp
+Prefer: ifolder3:gnome-sharp2 ifolder3:gconf-sharp2
+Prefer: nautilus-ifolder3:gnome-sharp2
+Prefer: gconf-sharp2:glade-sharp2 gconf-sharp:glade-sharp
+Prefer: tomboy:gconf-sharp tomboy:gnome-sharp
+Prefer: zmd:libzypp-zmd-backend
+Prefer: yast2-packagemanager-devel:yast2-packagemanager
+
+Prefer: -libgcc-mainline -libstdc++-mainline -gcc-mainline-c++
+Prefer: -libgcj-mainline -viewperf -compat -compat-openssl097g
+Prefer: -zmd -OpenOffice_org -pam-laus -libgcc-tree-ssa -busybox-links
+Prefer: -crossover-office
+
+Conflict: ghostscript-library:ghostscript-mini
+
+Ignore: aaa_base:aaa_skel,suse-release,logrotate,ash,mingetty,distribution-release
+Ignore: gettext-devel:libgcj,libstdc++-devel
+Ignore: pwdutils:openslp
+Ignore: pam-modules:resmgr
+Ignore: rpm:suse-build-key,build-key
+Ignore: bind-utils:bind-libs
+Ignore: alsa:dialog,pciutils
+Ignore: portmap:syslogd
+Ignore: fontconfig:freetype2
+Ignore: fontconfig-devel:freetype2-devel
+Ignore: xorg-x11-libs:freetype2
+Ignore: xorg-x11:x11-tools,resmgr,xkeyboard-config,xorg-x11-Mesa,libusb,freetype2,libjpeg,libpng
+Ignore: apache2:logrotate
+Ignore: arts:alsa,audiofile,resmgr,libogg,libvorbis
+Ignore: kdelibs3:alsa,arts,pcre,OpenEXR,aspell,cups-libs,mDNSResponder,krb5,libjasper
+Ignore: kdelibs3-devel:libvorbis-devel
+Ignore: kdebase3:kdebase3-ksysguardd,OpenEXR,dbus-1,dbus-1-qt,hal,powersave,openslp,libusb
+Ignore: kdebase3-SuSE:release-notes
+Ignore: jack:alsa,libsndfile
+Ignore: libxml2-devel:readline-devel
+Ignore: gnome-vfs2:gnome-mime-data,desktop-file-utils,cdparanoia,dbus-1,dbus-1-glib,krb5,hal,libsmbclient,fam,file_alteration
+Ignore: libgda:file_alteration
+Ignore: gnutls:lzo,libopencdk
+Ignore: gnutls-devel:lzo-devel,libopencdk-devel
+Ignore: pango:cairo,glitz,libpixman,libpng
+Ignore: pango-devel:cairo-devel
+Ignore: cairo-devel:libpixman-devel
+Ignore: libgnomeprint:libgnomecups
+Ignore: libgnomeprintui:libgnomecups
+Ignore: orbit2:libidl
+Ignore: orbit2-devel:libidl,libidl-devel,indent
+Ignore: qt3:libmng
+Ignore: qt-sql:qt_database_plugin
+Ignore: gtk2:libpng,libtiff
+Ignore: libgnomecanvas-devel:glib-devel
+Ignore: libgnomeui:gnome-icon-theme,shared-mime-info
+Ignore: scrollkeeper:docbook_4,sgml-skel
+Ignore: gnome-desktop:libgnomesu,startup-notification
+Ignore: python-devel:python-tk
+Ignore: gnome-pilot:gnome-panel
+Ignore: gnome-panel:control-center2
+Ignore: gnome-menus:kdebase3
+Ignore: gnome-main-menu:rug
+Ignore: libbonoboui:gnome-desktop
+Ignore: postfix:pcre
+Ignore: docbook_4:iso_ent,sgml-skel,xmlcharent
+Ignore: control-center2:nautilus,evolution-data-server,gnome-menus,gstreamer-plugins,gstreamer,metacity,mozilla-nspr,mozilla,libxklavier,gnome-desktop,startup-notification
+Ignore: docbook-xsl-stylesheets:xmlcharent
+Ignore: liby2util-devel:libstdc++-devel,openssl-devel
+Ignore: yast2:yast2-ncurses,yast2-theme-SuSELinux,perl-Config-Crontab,yast2-xml,SuSEfirewall2
+Ignore: yast2-core:netcat,hwinfo,wireless-tools,sysfsutils
+Ignore: yast2-core-devel:libxcrypt-devel,hwinfo-devel,blocxx-devel,sysfsutils,libstdc++-devel
+Ignore: yast2-packagemanager-devel:rpm-devel,curl-devel,openssl-devel
+Ignore: yast2-devtools:perl-XML-Writer,libxslt,pkgconfig
+Ignore: yast2-installation:yast2-update,yast2-mouse,yast2-country,yast2-bootloader,yast2-packager,yast2-network,yast2-online-update,yast2-users,release-notes,autoyast2-installation
+Ignore: yast2-bootloader:bootloader-theme
+Ignore: yast2-packager:yast2-x11
+Ignore: yast2-x11:sax2-libsax-perl
+Ignore: openslp-devel:openssl-devel
+Ignore: java-1_4_2-sun:xorg-x11-libs
+Ignore: java-1_4_2-sun-devel:xorg-x11-libs
+Ignore: kernel-um:xorg-x11-libs
+Ignore: tetex:xorg-x11-libs,expat,fontconfig,freetype2,libjpeg,libpng,ghostscript-x11,xaw3d,gd,dialog,ed
+Ignore: yast2-country:yast2-trans-stats
+Ignore: libgcc:glibc-32bit
+Ignore: libstdc++:glibc-32bit
+Ignore: susehelp:susehelp_lang,suse_help_viewer
+Ignore: mailx:smtp_daemon
+Ignore: cron:smtp_daemon
+Ignore: hotplug:syslog
+Ignore: pcmcia:syslog
+Ignore: avalon-logkit:servlet
+Ignore: jython:servlet
+Ignore: ispell:ispell_dictionary,ispell_english_dictionary
+Ignore: aspell:aspel_dictionary,aspell_dictionary
+Ignore: smartlink-softmodem:kernel,kernel-nongpl
+Ignore: OpenOffice_org-de:myspell-german-dictionary
+Ignore: mediawiki:php-session,php-gettext,php-zlib,php-mysql,mod_php_any
+Ignore: squirrelmail:mod_php_any,php-session,php-gettext,php-iconv,php-mbstring,php-openssl
+
+Ignore: simias:mono(log4net)
+Ignore: zmd:mono(log4net)
+Ignore: horde:mod_php_any,php-gettext,php-mcrypt,php-imap,php-pear-log,php-pear,php-session,php
+Ignore: xerces-j2:xml-commons-apis,xml-commons-resolver
+Ignore: xdg-menu:desktop-data
+Ignore: nessus-libraries:nessus-core
+Ignore: evolution:yelp
+Ignore: mono-tools:mono(gconf-sharp),mono(glade-sharp),mono(gnome-sharp),mono(gtkhtml-sharp),mono(atk-sharp),mono(gdk-sharp),mono(glib-sharp),mono(gtk-sharp),mono(pango-sharp)
+Ignore: gecko-sharp2:mono(glib-sharp),mono(gtk-sharp)
+Ignore: vcdimager:libcdio.so.6,libcdio.so.6(CDIO_6),libiso9660.so.4,libiso9660.so.4(ISO9660_4)
+Ignore: libcdio:libcddb.so.2
+Ignore: gnome-libs:libgnomeui
+Ignore: nautilus:gnome-themes
+Ignore: gnome-panel:gnome-themes
+Ignore: gnome-panel:tomboy
+
+%ifnarch s390 s390x ia64
+Substitute: java2-devel-packages java2 java2-jre jpackage-utils
+%else
+ %ifarch ia64 s390
+Substitute: java2-devel-packages IBMJava2-SDK jpackage-utils
+ %endif
+ %ifarch s390x
+Substitute: java2-devel-packages IBMJava2-SDK jpackage-utils glibc-32bit baselibs-32bit
+ %endif
+%endif
+
+Substitute: yast2-devel-packages docbook-xsl-stylesheets doxygen libxslt perl-XML-Writer popt-devel sgml-skel update-desktop-files yast2 yast2-devtools yast2-packagemanager-devel yast2-perl-bindings yast2-testsuite
+
+%ifarch x86_64 ppc64 s390x sparc64
+Substitute: glibc-devel-32bit glibc-devel-32bit glibc-32bit
+%else
+ %ifarch ppc
+Substitute: glibc-devel-32bit glibc-devel-64bit glibc-64bit
+ %else
+Substitute: glibc-devel-32bit
+ %endif
+%endif
+
+%ifarch %ix86
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-bigsmp kernel-um
+%endif
+%ifarch ia64
+Substitute: kernel-binary-packages kernel-default kernel-sn2 kernel-64k-pagesize
+%endif
+%ifarch x86_64
+Substitute: kernel-binary-packages kernel-default kernel-smp
+%endif
+%ifarch ppc
+Substitute: kernel-binary-packages kernel-default kernel-pmac64_32bit kernel-power3 kernel-smp kernel-iseries64 kernel-pseries64 kernel-pmac64
+%endif
+%ifarch ppc64
+Substitute: kernel-binary-packages kernel-iseries64 kernel-pseries64 kernel-pmac64
+%endif
+%ifarch s390
+Substitute: kernel-binary-packages kernel-s390
+%endif
+%ifarch s390x
+Substitute: kernel-binary-packages kernel-s390x
+%endif
+
+Macros:
+%insserv_prereq insserv
+%fillup_prereq fillup fileutils
+%suseconfig_fonts_prereq perl aaa_base
+%install_info_prereq info
+%suse_version 820
+%sles_version 0
+%ul_version 0
+%jds_version 0
+%do_profiling 1
+%_vendor suse
diff --git a/configs/sl9.0.conf b/configs/sl9.0.conf
new file mode 100644 (file)
index 0000000..f5ab2b5
--- /dev/null
@@ -0,0 +1,200 @@
+Repotype: suse
+
+Preinstall: aaa_base acl attr bash bzip2 coreutils db devs diffutils
+Preinstall: filesystem fillup glibc grep insserv libacl libattr
+Preinstall: libgcc libxcrypt m4 ncurses pam permissions popt readline
+Preinstall: rpm sed shadow tar zlib
+
+Runscripts: aaa_base
+
+VMinstall: util-linux perl
+
+Required: autoconf automake binutils bzip2 cracklib db gcc gdbm gettext
+Required: glibc libtool ncurses perl rpm zlib
+
+Support: bind-utils bison cpio cpp cvs cyrus-sasl e2fsprogs file
+Support: findutils flex gawk gdbm-devel glibc-devel glibc-locale
+Support: gpm groff gzip info kbd less libstdc++ make man mktemp
+Support: modutils ncurses-devel net-tools netcfg openldap2-client
+Support: openssl pam-devel pam-modules patch ps rcs sendmail strace
+Support: syslogd sysvinit texinfo timezone unzip util-linux vim
+Support: zlib-devel
+
+Keep: binutils cpp cracklib file findutils fpk gawk gcc gcc-c++
+Keep: gdbm glibc-devel glibc-locale gnat gnat-runtime gzip libstdc++
+Keep: libunwind make mktemp pam-devel pam-modules patch perl rcs
+Keep: shlibs5 timezone
+
+Prefer: xorg-x11-libs libpng fam mozilla mozilla-nss xorg-x11-Mesa
+Prefer: unixODBC libsoup glitz java-1_4_2-sun gnome-panel
+Prefer: desktop-data-SuSE gnome2-SuSE mono-nunit gecko-sharp2
+Prefer: apache2-prefork openmotif-libs ghostscript-mini gtk-sharp
+Prefer: glib-sharp libzypp-zmd-backend mDNSResponder
+
+Prefer: gnome-sharp2:art-sharp2 gnome-sharp:art-sharp
+Prefer: ifolder3:gnome-sharp2 ifolder3:gconf-sharp2
+Prefer: nautilus-ifolder3:gnome-sharp2
+Prefer: gconf-sharp2:glade-sharp2 gconf-sharp:glade-sharp
+Prefer: tomboy:gconf-sharp tomboy:gnome-sharp
+Prefer: zmd:libzypp-zmd-backend
+Prefer: yast2-packagemanager-devel:yast2-packagemanager
+
+Prefer: -libgcc-mainline -libstdc++-mainline -gcc-mainline-c++
+Prefer: -libgcj-mainline -viewperf -compat -compat-openssl097g
+Prefer: -zmd -OpenOffice_org -pam-laus -libgcc-tree-ssa -busybox-links
+Prefer: -crossover-office
+
+Conflict: ghostscript-library:ghostscript-mini
+
+Ignore: aaa_base:aaa_skel,suse-release,logrotate,ash,mingetty,distribution-release
+Ignore: gettext-devel:libgcj,libstdc++-devel
+Ignore: pwdutils:openslp
+Ignore: pam-modules:resmgr
+Ignore: rpm:suse-build-key,build-key
+Ignore: bind-utils:bind-libs
+Ignore: alsa:dialog,pciutils
+Ignore: portmap:syslogd
+Ignore: fontconfig:freetype2
+Ignore: fontconfig-devel:freetype2-devel
+Ignore: xorg-x11-libs:freetype2
+Ignore: xorg-x11:x11-tools,resmgr,xkeyboard-config,xorg-x11-Mesa,libusb,freetype2,libjpeg,libpng
+Ignore: apache2:logrotate
+Ignore: arts:alsa,audiofile,resmgr,libogg,libvorbis
+Ignore: kdelibs3:alsa,arts,pcre,OpenEXR,aspell,cups-libs,mDNSResponder,krb5,libjasper
+Ignore: kdelibs3-devel:libvorbis-devel
+Ignore: kdebase3:kdebase3-ksysguardd,OpenEXR,dbus-1,dbus-1-qt,hal,powersave,openslp,libusb
+Ignore: kdebase3-SuSE:release-notes
+Ignore: jack:alsa,libsndfile
+Ignore: libxml2-devel:readline-devel
+Ignore: gnome-vfs2:gnome-mime-data,desktop-file-utils,cdparanoia,dbus-1,dbus-1-glib,krb5,hal,libsmbclient,fam,file_alteration
+Ignore: libgda:file_alteration
+Ignore: gnutls:lzo,libopencdk
+Ignore: gnutls-devel:lzo-devel,libopencdk-devel
+Ignore: pango:cairo,glitz,libpixman,libpng
+Ignore: pango-devel:cairo-devel
+Ignore: cairo-devel:libpixman-devel
+Ignore: libgnomeprint:libgnomecups
+Ignore: libgnomeprintui:libgnomecups
+Ignore: orbit2:libidl
+Ignore: orbit2-devel:libidl,libidl-devel,indent
+Ignore: qt3:libmng
+Ignore: qt-sql:qt_database_plugin
+Ignore: gtk2:libpng,libtiff
+Ignore: libgnomecanvas-devel:glib-devel
+Ignore: libgnomeui:gnome-icon-theme,shared-mime-info
+Ignore: scrollkeeper:docbook_4,sgml-skel
+Ignore: gnome-desktop:libgnomesu,startup-notification
+Ignore: python-devel:python-tk
+Ignore: gnome-pilot:gnome-panel
+Ignore: gnome-panel:control-center2
+Ignore: gnome-menus:kdebase3
+Ignore: gnome-main-menu:rug
+Ignore: libbonoboui:gnome-desktop
+Ignore: postfix:pcre
+Ignore: docbook_4:iso_ent,sgml-skel,xmlcharent
+Ignore: control-center2:nautilus,evolution-data-server,gnome-menus,gstreamer-plugins,gstreamer,metacity,mozilla-nspr,mozilla,libxklavier,gnome-desktop,startup-notification
+Ignore: docbook-xsl-stylesheets:xmlcharent
+Ignore: liby2util-devel:libstdc++-devel,openssl-devel
+Ignore: yast2:yast2-ncurses,yast2-theme-SuSELinux,perl-Config-Crontab,yast2-xml,SuSEfirewall2
+Ignore: yast2-core:netcat,hwinfo,wireless-tools,sysfsutils
+Ignore: yast2-core-devel:libxcrypt-devel,hwinfo-devel,blocxx-devel,sysfsutils,libstdc++-devel
+Ignore: yast2-packagemanager-devel:rpm-devel,curl-devel,openssl-devel
+Ignore: yast2-devtools:perl-XML-Writer,libxslt,pkgconfig
+Ignore: yast2-installation:yast2-update,yast2-mouse,yast2-country,yast2-bootloader,yast2-packager,yast2-network,yast2-online-update,yast2-users,release-notes,autoyast2-installation
+Ignore: yast2-bootloader:bootloader-theme
+Ignore: yast2-packager:yast2-x11
+Ignore: yast2-x11:sax2-libsax-perl
+Ignore: openslp-devel:openssl-devel
+Ignore: java-1_4_2-sun:xorg-x11-libs
+Ignore: java-1_4_2-sun-devel:xorg-x11-libs
+Ignore: kernel-um:xorg-x11-libs
+Ignore: tetex:xorg-x11-libs,expat,fontconfig,freetype2,libjpeg,libpng,ghostscript-x11,xaw3d,gd,dialog,ed
+Ignore: yast2-country:yast2-trans-stats
+Ignore: libgcc:glibc-32bit
+Ignore: libstdc++:glibc-32bit
+Ignore: susehelp:susehelp_lang,suse_help_viewer
+Ignore: mailx:smtp_daemon
+Ignore: cron:smtp_daemon
+Ignore: hotplug:syslog
+Ignore: pcmcia:syslog
+Ignore: avalon-logkit:servlet
+Ignore: jython:servlet
+Ignore: ispell:ispell_dictionary,ispell_english_dictionary
+Ignore: aspell:aspel_dictionary,aspell_dictionary
+Ignore: smartlink-softmodem:kernel,kernel-nongpl
+Ignore: OpenOffice_org-de:myspell-german-dictionary
+Ignore: mediawiki:php-session,php-gettext,php-zlib,php-mysql,mod_php_any
+Ignore: squirrelmail:mod_php_any,php-session,php-gettext,php-iconv,php-mbstring,php-openssl
+
+Ignore: simias:mono(log4net)
+Ignore: zmd:mono(log4net)
+Ignore: horde:mod_php_any,php-gettext,php-mcrypt,php-imap,php-pear-log,php-pear,php-session,php
+Ignore: xerces-j2:xml-commons-apis,xml-commons-resolver
+Ignore: xdg-menu:desktop-data
+Ignore: nessus-libraries:nessus-core
+Ignore: evolution:yelp
+Ignore: mono-tools:mono(gconf-sharp),mono(glade-sharp),mono(gnome-sharp),mono(gtkhtml-sharp),mono(atk-sharp),mono(gdk-sharp),mono(glib-sharp),mono(gtk-sharp),mono(pango-sharp)
+Ignore: gecko-sharp2:mono(glib-sharp),mono(gtk-sharp)
+Ignore: vcdimager:libcdio.so.6,libcdio.so.6(CDIO_6),libiso9660.so.4,libiso9660.so.4(ISO9660_4)
+Ignore: libcdio:libcddb.so.2
+Ignore: gnome-libs:libgnomeui
+Ignore: nautilus:gnome-themes
+Ignore: gnome-panel:gnome-themes
+Ignore: gnome-panel:tomboy
+
+%ifnarch s390 s390x ia64
+Substitute: java2-devel-packages java2 java2-jre jpackage-utils
+%else
+ %ifarch ia64 s390
+Substitute: java2-devel-packages IBMJava2-SDK jpackage-utils
+ %endif
+ %ifarch s390x
+Substitute: java2-devel-packages IBMJava2-SDK jpackage-utils glibc-32bit baselibs-32bit
+ %endif
+%endif
+
+Substitute: yast2-devel-packages docbook-xsl-stylesheets doxygen libxslt perl-XML-Writer popt-devel sgml-skel update-desktop-files yast2 yast2-devtools yast2-packagemanager-devel yast2-perl-bindings yast2-testsuite
+
+%ifarch x86_64 ppc64 s390x sparc64
+Substitute: glibc-devel-32bit glibc-devel-32bit glibc-32bit
+%else
+ %ifarch ppc
+Substitute: glibc-devel-32bit glibc-devel-64bit glibc-64bit
+ %else
+Substitute: glibc-devel-32bit
+ %endif
+%endif
+
+%ifarch %ix86
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-bigsmp kernel-um
+%endif
+%ifarch ia64
+Substitute: kernel-binary-packages kernel-default kernel-sn2 kernel-64k-pagesize
+%endif
+%ifarch x86_64
+Substitute: kernel-binary-packages kernel-default kernel-smp
+%endif
+%ifarch ppc
+Substitute: kernel-binary-packages kernel-default kernel-pmac64_32bit kernel-power3 kernel-smp kernel-iseries64 kernel-pseries64 kernel-pmac64
+%endif
+%ifarch ppc64
+Substitute: kernel-binary-packages kernel-iseries64 kernel-pseries64 kernel-pmac64
+%endif
+%ifarch s390
+Substitute: kernel-binary-packages kernel-s390
+%endif
+%ifarch s390x
+Substitute: kernel-binary-packages kernel-s390x
+%endif
+
+Macros:
+%insserv_prereq insserv
+%fillup_prereq fillup fileutils
+%suseconfig_fonts_prereq perl aaa_base
+%install_info_prereq info
+%suse_version 900
+%sles_version 0
+%ul_version 0
+%jds_version 0
+%do_profiling 1
+%_vendor suse
diff --git a/configs/sl9.1.conf b/configs/sl9.1.conf
new file mode 100644 (file)
index 0000000..24d4fcf
--- /dev/null
@@ -0,0 +1,203 @@
+Repotype: suse
+
+Preinstall: aaa_base acl attr bash bzip2 coreutils db devs diffutils
+Preinstall: filesystem fillup glibc grep insserv libacl libattr
+Preinstall: libgcc libselinux libxcrypt m4 ncurses pam permissions
+Preinstall: popt pwdutils readline rpm sed tar zlib
+
+Runscripts: aaa_base
+
+VMinstall: util-linux perl
+
+Required: autoconf automake binutils bzip2 db gcc gdbm gettext glibc
+Required: libtool ncurses perl rpm zlib
+
+Support: bind-utils bison cpio cpp cracklib cvs cyrus-sasl e2fsprogs
+Support: file findutils flex gawk gdbm-devel glibc-devel glibc-locale
+Support: gpm groff gzip info kbd less libstdc++ make man mktemp
+Support: module-init-tools ncurses-devel net-tools netcfg
+Support: openldap2-client openssl pam-modules patch procinfo procps
+Support: psmisc rcs strace syslogd sysvinit tcpd texinfo timezone
+Support: unzip util-linux vim zlib-devel
+
+Keep: binutils cpp cracklib file findutils gawk gcc gcc-c++ gdbm
+Keep: glibc-devel glibc-locale gnat gnat-runtime gzip libstdc++
+Keep: libunwind make mktemp pam-devel pam-modules patch perl rcs
+Keep: shlibs5 timezone
+
+Prefer: xorg-x11-libs libpng fam mozilla mozilla-nss xorg-x11-Mesa
+Prefer: unixODBC libsoup glitz java-1_4_2-sun gnome-panel
+Prefer: desktop-data-SuSE gnome2-SuSE mono-nunit gecko-sharp2
+Prefer: apache2-prefork openmotif-libs ghostscript-mini gtk-sharp
+Prefer: glib-sharp libzypp-zmd-backend mDNSResponder
+
+Prefer: gnome-sharp2:art-sharp2 gnome-sharp:art-sharp
+Prefer: ifolder3:gnome-sharp2 ifolder3:gconf-sharp2
+Prefer: nautilus-ifolder3:gnome-sharp2
+Prefer: gconf-sharp2:glade-sharp2 gconf-sharp:glade-sharp
+Prefer: tomboy:gconf-sharp tomboy:gnome-sharp
+Prefer: zmd:libzypp-zmd-backend
+Prefer: yast2-packagemanager-devel:yast2-packagemanager
+
+Prefer: -libgcc-mainline -libstdc++-mainline -gcc-mainline-c++
+Prefer: -libgcj-mainline -viewperf -compat -compat-openssl097g
+Prefer: -zmd -OpenOffice_org -pam-laus -libgcc-tree-ssa -busybox-links
+Prefer: -crossover-office
+
+Conflict: ghostscript-library:ghostscript-mini
+
+Ignore: aaa_base:aaa_skel,suse-release,logrotate,ash,mingetty,distribution-release
+Ignore: gettext-devel:libgcj,libstdc++-devel
+Ignore: pwdutils:openslp
+Ignore: pam-modules:resmgr
+Ignore: rpm:suse-build-key,build-key
+Ignore: bind-utils:bind-libs
+Ignore: alsa:dialog,pciutils
+Ignore: portmap:syslogd
+Ignore: fontconfig:freetype2
+Ignore: fontconfig-devel:freetype2-devel
+Ignore: xorg-x11-libs:freetype2
+Ignore: xorg-x11:x11-tools,resmgr,xkeyboard-config,xorg-x11-Mesa,libusb,freetype2,libjpeg,libpng
+Ignore: apache2:logrotate
+Ignore: arts:alsa,audiofile,resmgr,libogg,libvorbis
+Ignore: kdelibs3:alsa,arts,pcre,OpenEXR,aspell,cups-libs,mDNSResponder,krb5,libjasper
+Ignore: kdelibs3-devel:libvorbis-devel
+Ignore: kdebase3:kdebase3-ksysguardd,OpenEXR,dbus-1,dbus-1-qt,hal,powersave,openslp,libusb
+Ignore: kdebase3-SuSE:release-notes
+Ignore: jack:alsa,libsndfile
+Ignore: libxml2-devel:readline-devel
+Ignore: gnome-vfs2:gnome-mime-data,desktop-file-utils,cdparanoia,dbus-1,dbus-1-glib,krb5,hal,libsmbclient,fam,file_alteration
+Ignore: libgda:file_alteration
+Ignore: gnutls:lzo,libopencdk
+Ignore: gnutls-devel:lzo-devel,libopencdk-devel
+Ignore: pango:cairo,glitz,libpixman,libpng
+Ignore: pango-devel:cairo-devel
+Ignore: cairo-devel:libpixman-devel
+Ignore: libgnomeprint:libgnomecups
+Ignore: libgnomeprintui:libgnomecups
+Ignore: orbit2:libidl
+Ignore: orbit2-devel:libidl,libidl-devel,indent
+Ignore: qt3:libmng
+Ignore: qt-sql:qt_database_plugin
+Ignore: gtk2:libpng,libtiff
+Ignore: libgnomecanvas-devel:glib-devel
+Ignore: libgnomeui:gnome-icon-theme,shared-mime-info
+Ignore: scrollkeeper:docbook_4,sgml-skel
+Ignore: gnome-desktop:libgnomesu,startup-notification
+Ignore: python-devel:python-tk
+Ignore: gnome-pilot:gnome-panel
+Ignore: gnome-panel:control-center2
+Ignore: gnome-menus:kdebase3
+Ignore: gnome-main-menu:rug
+Ignore: libbonoboui:gnome-desktop
+Ignore: postfix:pcre
+Ignore: docbook_4:iso_ent,sgml-skel,xmlcharent
+Ignore: control-center2:nautilus,evolution-data-server,gnome-menus,gstreamer-plugins,gstreamer,metacity,mozilla-nspr,mozilla,libxklavier,gnome-desktop,startup-notification
+Ignore: docbook-xsl-stylesheets:xmlcharent
+Ignore: liby2util-devel:libstdc++-devel,openssl-devel
+Ignore: yast2:yast2-ncurses,yast2-theme-SuSELinux,perl-Config-Crontab,yast2-xml,SuSEfirewall2
+Ignore: yast2-core:netcat,hwinfo,wireless-tools,sysfsutils
+Ignore: yast2-core-devel:libxcrypt-devel,hwinfo-devel,blocxx-devel,sysfsutils,libstdc++-devel
+Ignore: yast2-packagemanager-devel:rpm-devel,curl-devel,openssl-devel
+Ignore: yast2-devtools:perl-XML-Writer,libxslt,pkgconfig
+Ignore: yast2-installation:yast2-update,yast2-mouse,yast2-country,yast2-bootloader,yast2-packager,yast2-network,yast2-online-update,yast2-users,release-notes,autoyast2-installation
+Ignore: yast2-bootloader:bootloader-theme
+Ignore: yast2-packager:yast2-x11
+Ignore: yast2-x11:sax2-libsax-perl
+Ignore: openslp-devel:openssl-devel
+Ignore: java-1_4_2-sun:xorg-x11-libs
+Ignore: java-1_4_2-sun-devel:xorg-x11-libs
+Ignore: kernel-um:xorg-x11-libs
+Ignore: tetex:xorg-x11-libs,expat,fontconfig,freetype2,libjpeg,libpng,ghostscript-x11,xaw3d,gd,dialog,ed
+Ignore: yast2-country:yast2-trans-stats
+Ignore: libgcc:glibc-32bit
+Ignore: libstdc++:glibc-32bit
+Ignore: susehelp:susehelp_lang,suse_help_viewer
+Ignore: mailx:smtp_daemon
+Ignore: cron:smtp_daemon
+Ignore: hotplug:syslog
+Ignore: pcmcia:syslog
+Ignore: avalon-logkit:servlet
+Ignore: jython:servlet
+Ignore: ispell:ispell_dictionary,ispell_english_dictionary
+Ignore: aspell:aspel_dictionary,aspell_dictionary
+Ignore: smartlink-softmodem:kernel,kernel-nongpl
+Ignore: OpenOffice_org-de:myspell-german-dictionary
+Ignore: mediawiki:php-session,php-gettext,php-zlib,php-mysql,mod_php_any
+Ignore: squirrelmail:mod_php_any,php-session,php-gettext,php-iconv,php-mbstring,php-openssl
+
+Ignore: simias:mono(log4net)
+Ignore: zmd:mono(log4net)
+Ignore: horde:mod_php_any,php-gettext,php-mcrypt,php-imap,php-pear-log,php-pear,php-session,php
+Ignore: xerces-j2:xml-commons-apis,xml-commons-resolver
+Ignore: xdg-menu:desktop-data
+Ignore: nessus-libraries:nessus-core
+Ignore: evolution:yelp
+Ignore: mono-tools:mono(gconf-sharp),mono(glade-sharp),mono(gnome-sharp),mono(gtkhtml-sharp),mono(atk-sharp),mono(gdk-sharp),mono(glib-sharp),mono(gtk-sharp),mono(pango-sharp)
+Ignore: gecko-sharp2:mono(glib-sharp),mono(gtk-sharp)
+Ignore: vcdimager:libcdio.so.6,libcdio.so.6(CDIO_6),libiso9660.so.4,libiso9660.so.4(ISO9660_4)
+Ignore: libcdio:libcddb.so.2
+Ignore: gnome-libs:libgnomeui
+Ignore: nautilus:gnome-themes
+Ignore: gnome-panel:gnome-themes
+Ignore: gnome-panel:tomboy
+
+%ifnarch s390 s390x ppc ia64
+Substitute: java2-devel-packages java2 java2-jre jpackage-utils
+%else
+ %ifarch ia64
+Substitute: java2-devel-packages IBMJava2-JRE BEAJava2-JRE BEAJava2-SDK jpackage-utils
+ %endif
+ %ifarch s390 ppc
+Substitute: java2-devel-packages IBMJava2-JRE IBMJava2-SDK jpackage-utils
+ %endif
+ %ifarch s390x
+Substitute: java2-devel-packages IBMJava2-JRE IBMJava2-SDK jpackage-utils XFree86-libs-32bit
+ %endif
+%endif
+
+Substitute: yast2-devel-packages docbook-xsl-stylesheets doxygen libxslt perl-XML-Writer popt-devel sgml-skel update-desktop-files yast2 yast2-devtools yast2-packagemanager-devel yast2-perl-bindings yast2-testsuite
+
+%ifarch x86_64 ppc64 s390x sparc64
+Substitute: glibc-devel-32bit glibc-devel-32bit glibc-32bit
+%else
+ %ifarch ppc
+Substitute: glibc-devel-32bit glibc-devel-64bit glibc-64bit
+ %else
+Substitute: glibc-devel-32bit
+ %endif
+%endif
+
+%ifarch %ix86
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-bigsmp kernel-um
+%endif
+%ifarch ia64
+Substitute: kernel-binary-packages kernel-default kernel-sn2 kernel-64k-pagesize
+%endif
+%ifarch x86_64
+Substitute: kernel-binary-packages kernel-default kernel-smp
+%endif
+%ifarch ppc
+Substitute: kernel-binary-packages kernel-default kernel-pmac64_32bit kernel-power3 kernel-smp kernel-iseries64 kernel-pseries64 kernel-pmac64
+%endif
+%ifarch ppc64
+Substitute: kernel-binary-packages kernel-iseries64 kernel-pseries64 kernel-pmac64
+%endif
+%ifarch s390
+Substitute: kernel-binary-packages kernel-s390
+%endif
+%ifarch s390x
+Substitute: kernel-binary-packages kernel-s390x
+%endif
+
+Macros:
+%insserv_prereq insserv
+%fillup_prereq fillup fileutils
+%suseconfig_fonts_prereq perl aaa_base
+%install_info_prereq info
+%suse_version 910
+%sles_version 0
+%ul_version 0
+%jds_version 0
+%do_profiling 1
+%_vendor suse
diff --git a/configs/sl9.2.conf b/configs/sl9.2.conf
new file mode 100644 (file)
index 0000000..cd1902f
--- /dev/null
@@ -0,0 +1,198 @@
+Repotype: suse
+
+Preinstall: aaa_base acl attr bash bzip2 coreutils db devs diffutils
+Preinstall: filesystem fillup glibc grep insserv libacl libattr
+Preinstall: libgcc libnscd libselinux libxcrypt m4 ncurses pam
+Preinstall: permissions popt pwdutils readline rpm sed tar zlib
+
+Runscripts: aaa_base
+
+VMinstall: util-linux perl
+
+Required: autoconf automake binutils bzip2 db gcc gdbm gettext glibc
+Required: libtool ncurses perl rpm zlib
+
+Support: bind-utils bison cpio cpp cracklib cvs cyrus-sasl e2fsprogs
+Support: file findutils flex gawk gdbm-devel glibc-devel glibc-locale
+Support: gpm groff gzip info less libstdc++ libzio make man mktemp
+Support: module-init-tools ncurses-devel net-tools netcfg
+Support: openldap2-client openssl pam-modules patch procinfo procps
+Support: psmisc rcs strace syslogd sysvinit tcpd texinfo timezone
+Support: unzip util-linux vim zlib-devel
+
+Keep: binutils cpp cracklib file findutils gawk gcc gcc-c++ gdbm
+Keep: glibc-devel glibc-locale gnat gnat-runtime gzip libstdc++
+Keep: libunwind libzio make mktemp pam-devel pam-modules patch
+Keep: perl rcs timezone
+
+Prefer: xorg-x11-libs libpng fam mozilla mozilla-nss xorg-x11-Mesa
+Prefer: unixODBC libsoup glitz java-1_4_2-sun gnome-panel
+Prefer: desktop-data-SuSE gnome2-SuSE mono-nunit gecko-sharp2
+Prefer: apache2-prefork openmotif-libs ghostscript-mini gtk-sharp
+Prefer: glib-sharp libzypp-zmd-backend mDNSResponder
+
+Prefer: gnome-sharp2:art-sharp2 gnome-sharp:art-sharp
+Prefer: ifolder3:gnome-sharp2 ifolder3:gconf-sharp2
+Prefer: nautilus-ifolder3:gnome-sharp2
+Prefer: gconf-sharp2:glade-sharp2 gconf-sharp:glade-sharp
+Prefer: tomboy:gconf-sharp tomboy:gnome-sharp
+Prefer: zmd:libzypp-zmd-backend
+Prefer: yast2-packagemanager-devel:yast2-packagemanager
+
+Prefer: -libgcc-mainline -libstdc++-mainline -gcc-mainline-c++
+Prefer: -libgcj-mainline -viewperf -compat -compat-openssl097g
+Prefer: -zmd -OpenOffice_org -pam-laus -libgcc-tree-ssa -busybox-links
+Prefer: -crossover-office
+
+Conflict: ghostscript-library:ghostscript-mini
+
+Ignore: aaa_base:aaa_skel,suse-release,logrotate,ash,mingetty,distribution-release
+Ignore: gettext-devel:libgcj,libstdc++-devel
+Ignore: pwdutils:openslp
+Ignore: pam-modules:resmgr
+Ignore: rpm:suse-build-key,build-key
+Ignore: bind-utils:bind-libs
+Ignore: alsa:dialog,pciutils
+Ignore: portmap:syslogd
+Ignore: fontconfig:freetype2
+Ignore: fontconfig-devel:freetype2-devel
+Ignore: xorg-x11-libs:freetype2
+Ignore: xorg-x11:x11-tools,resmgr,xkeyboard-config,xorg-x11-Mesa,libusb,freetype2,libjpeg,libpng
+Ignore: apache2:logrotate
+Ignore: arts:alsa,audiofile,resmgr,libogg,libvorbis
+Ignore: kdelibs3:alsa,arts,pcre,OpenEXR,aspell,cups-libs,mDNSResponder,krb5,libjasper
+Ignore: kdelibs3-devel:libvorbis-devel
+Ignore: kdebase3:kdebase3-ksysguardd,OpenEXR,dbus-1,dbus-1-qt,hal,powersave,openslp,libusb
+Ignore: kdebase3-SuSE:release-notes
+Ignore: jack:alsa,libsndfile
+Ignore: libxml2-devel:readline-devel
+Ignore: gnome-vfs2:gnome-mime-data,desktop-file-utils,cdparanoia,dbus-1,dbus-1-glib,krb5,hal,libsmbclient,fam,file_alteration
+Ignore: libgda:file_alteration
+Ignore: gnutls:lzo,libopencdk
+Ignore: gnutls-devel:lzo-devel,libopencdk-devel
+Ignore: pango:cairo,glitz,libpixman,libpng
+Ignore: pango-devel:cairo-devel
+Ignore: cairo-devel:libpixman-devel
+Ignore: libgnomeprint:libgnomecups
+Ignore: libgnomeprintui:libgnomecups
+Ignore: orbit2:libidl
+Ignore: orbit2-devel:libidl,libidl-devel,indent
+Ignore: qt3:libmng
+Ignore: qt-sql:qt_database_plugin
+Ignore: gtk2:libpng,libtiff
+Ignore: libgnomecanvas-devel:glib-devel
+Ignore: libgnomeui:gnome-icon-theme,shared-mime-info
+Ignore: scrollkeeper:docbook_4,sgml-skel
+Ignore: gnome-desktop:libgnomesu,startup-notification
+Ignore: python-devel:python-tk
+Ignore: gnome-pilot:gnome-panel
+Ignore: gnome-panel:control-center2
+Ignore: gnome-menus:kdebase3
+Ignore: gnome-main-menu:rug
+Ignore: libbonoboui:gnome-desktop
+Ignore: postfix:pcre
+Ignore: docbook_4:iso_ent,sgml-skel,xmlcharent
+Ignore: control-center2:nautilus,evolution-data-server,gnome-menus,gstreamer-plugins,gstreamer,metacity,mozilla-nspr,mozilla,libxklavier,gnome-desktop,startup-notification
+Ignore: docbook-xsl-stylesheets:xmlcharent
+Ignore: liby2util-devel:libstdc++-devel,openssl-devel
+Ignore: yast2:yast2-ncurses,yast2-theme-SuSELinux,perl-Config-Crontab,yast2-xml,SuSEfirewall2
+Ignore: yast2-core:netcat,hwinfo,wireless-tools,sysfsutils
+Ignore: yast2-core-devel:libxcrypt-devel,hwinfo-devel,blocxx-devel,sysfsutils,libstdc++-devel
+Ignore: yast2-packagemanager-devel:rpm-devel,curl-devel,openssl-devel
+Ignore: yast2-devtools:perl-XML-Writer,libxslt,pkgconfig
+Ignore: yast2-installation:yast2-update,yast2-mouse,yast2-country,yast2-bootloader,yast2-packager,yast2-network,yast2-online-update,yast2-users,release-notes,autoyast2-installation
+Ignore: yast2-bootloader:bootloader-theme
+Ignore: yast2-packager:yast2-x11
+Ignore: yast2-x11:sax2-libsax-perl
+Ignore: openslp-devel:openssl-devel
+Ignore: java-1_4_2-sun:xorg-x11-libs
+Ignore: java-1_4_2-sun-devel:xorg-x11-libs
+Ignore: kernel-um:xorg-x11-libs
+Ignore: tetex:xorg-x11-libs,expat,fontconfig,freetype2,libjpeg,libpng,ghostscript-x11,xaw3d,gd,dialog,ed
+Ignore: yast2-country:yast2-trans-stats
+Ignore: libgcc:glibc-32bit
+Ignore: libstdc++:glibc-32bit
+Ignore: susehelp:susehelp_lang,suse_help_viewer
+Ignore: mailx:smtp_daemon
+Ignore: cron:smtp_daemon
+Ignore: hotplug:syslog
+Ignore: pcmcia:syslog
+Ignore: avalon-logkit:servlet
+Ignore: jython:servlet
+Ignore: ispell:ispell_dictionary,ispell_english_dictionary
+Ignore: aspell:aspel_dictionary,aspell_dictionary
+Ignore: smartlink-softmodem:kernel,kernel-nongpl
+Ignore: OpenOffice_org-de:myspell-german-dictionary
+Ignore: mediawiki:php-session,php-gettext,php-zlib,php-mysql,mod_php_any
+Ignore: squirrelmail:mod_php_any,php-session,php-gettext,php-iconv,php-mbstring,php-openssl
+
+Ignore: simias:mono(log4net)
+Ignore: zmd:mono(log4net)
+Ignore: horde:mod_php_any,php-gettext,php-mcrypt,php-imap,php-pear-log,php-pear,php-session,php
+Ignore: xerces-j2:xml-commons-apis,xml-commons-resolver
+Ignore: xdg-menu:desktop-data
+Ignore: nessus-libraries:nessus-core
+Ignore: evolution:yelp
+Ignore: mono-tools:mono(gconf-sharp),mono(glade-sharp),mono(gnome-sharp),mono(gtkhtml-sharp),mono(atk-sharp),mono(gdk-sharp),mono(glib-sharp),mono(gtk-sharp),mono(pango-sharp)
+Ignore: gecko-sharp2:mono(glib-sharp),mono(gtk-sharp)
+Ignore: vcdimager:libcdio.so.6,libcdio.so.6(CDIO_6),libiso9660.so.4,libiso9660.so.4(ISO9660_4)
+Ignore: libcdio:libcddb.so.2
+Ignore: gnome-libs:libgnomeui
+Ignore: nautilus:gnome-themes
+Ignore: gnome-panel:gnome-themes
+Ignore: gnome-panel:tomboy
+
+%ifnarch s390 s390x ppc ia64
+Substitute: java2-devel-packages java-1_4_2-sun-devel jpackage-utils update-alternatives
+%else
+ %ifnarch s390x
+Substitute: java2-devel-packages java-1_4_2-ibm-devel jpackage-utils update-alternatives
+ %else
+Substitute: java2-devel-packages java-1_4_2-ibm-devel xorg-x11-libs-32bit jpackage-utils update-alternatives
+ %endif
+%endif
+
+Substitute: yast2-devel-packages docbook-xsl-stylesheets doxygen libxslt perl-XML-Writer popt-devel sgml-skel update-desktop-files yast2 yast2-devtools yast2-packagemanager-devel yast2-perl-bindings yast2-testsuite
+
+%ifarch x86_64 ppc64 s390x sparc64
+Substitute: glibc-devel-32bit glibc-devel-32bit glibc-32bit
+%else
+ %ifarch ppc
+Substitute: glibc-devel-32bit glibc-devel-64bit
+ %else
+Substitute: glibc-devel-32bit
+ %endif
+%endif
+
+%ifarch %ix86
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-bigsmp kernel-um
+%endif
+%ifarch ia64
+Substitute: kernel-binary-packages kernel-default
+%endif
+%ifarch x86_64
+Substitute: kernel-binary-packages kernel-default kernel-smp
+%endif
+%ifarch ppc
+Substitute: kernel-binary-packages kernel-default kernel-ppc64 kernel-iseries64
+%endif
+%ifarch ppc64
+Substitute: kernel-binary-packages kernel-ppc64 kernel-iseries64
+%endif
+%ifarch s390
+Substitute: kernel-binary-packages kernel-s390
+%endif
+%ifarch s390x
+Substitute: kernel-binary-packages kernel-s390x
+%endif
+
+Macros:
+%insserv_prereq insserv sed devs
+%fillup_prereq fillup coreutils
+%suseconfig_fonts_prereq perl aaa_base
+%install_info_prereq info
+%suse_version 920
+%sles_version 0
+%ul_version 0
+%do_profiling 1
+%_vendor suse
diff --git a/configs/sl9.3.conf b/configs/sl9.3.conf
new file mode 100644 (file)
index 0000000..33c4256
--- /dev/null
@@ -0,0 +1,198 @@
+Repotype: suse
+
+Preinstall: aaa_base acl attr bash bzip2 coreutils db devs diffutils
+Preinstall: filesystem fillup glibc grep insserv libacl libattr
+Preinstall: libgcc libnscd libselinux libxcrypt m4 ncurses pam
+Preinstall: permissions popt pwdutils readline rpm sed tar zlib
+
+Runscripts: aaa_base
+
+VMinstall: util-linux perl
+
+Required: autoconf automake binutils bzip2 db gcc gdbm gettext glibc
+Required: libtool ncurses perl rpm zlib
+
+Support: bind-utils bison cpio cpp cracklib cvs cyrus-sasl e2fsprogs
+Support: file findutils flex gawk gdbm-devel glibc-devel glibc-locale
+Support: gpm groff gzip info klogd less libstdc++ libzio make
+Support: man mktemp module-init-tools ncurses-devel net-tools
+Support: netcfg openldap2-client openssl pam-modules patch procinfo
+Support: procps psmisc rcs strace syslogd sysvinit tcpd texinfo
+Support: timezone unzip util-linux vim zlib-devel
+
+Keep: binutils cpp cracklib file findutils gawk gcc gcc-c++ gdbm
+Keep: glibc-devel glibc-locale gnat gnat-runtime gzip libstdc++
+Keep: libunwind libunwind-devel libzio make mktemp pam-devel pam-modules
+Keep: patch perl rcs timezone
+
+Prefer: xorg-x11-libs libpng fam mozilla mozilla-nss xorg-x11-Mesa
+Prefer: unixODBC libsoup glitz java-1_4_2-sun gnome-panel
+Prefer: desktop-data-SuSE gnome2-SuSE mono-nunit gecko-sharp2
+Prefer: apache2-prefork openmotif-libs ghostscript-mini gtk-sharp
+Prefer: glib-sharp libzypp-zmd-backend mDNSResponder
+
+Prefer: gnome-sharp2:art-sharp2 gnome-sharp:art-sharp
+Prefer: ifolder3:gnome-sharp2 ifolder3:gconf-sharp2
+Prefer: nautilus-ifolder3:gnome-sharp2
+Prefer: gconf-sharp2:glade-sharp2 gconf-sharp:glade-sharp
+Prefer: tomboy:gconf-sharp tomboy:gnome-sharp
+Prefer: zmd:libzypp-zmd-backend
+Prefer: yast2-packagemanager-devel:yast2-packagemanager
+
+Prefer: -libgcc-mainline -libstdc++-mainline -gcc-mainline-c++
+Prefer: -libgcj-mainline -viewperf -compat -compat-openssl097g
+Prefer: -zmd -OpenOffice_org -pam-laus -libgcc-tree-ssa -busybox-links
+Prefer: -crossover-office
+
+Conflict: ghostscript-library:ghostscript-mini
+
+Ignore: aaa_base:aaa_skel,suse-release,logrotate,ash,mingetty,distribution-release
+Ignore: gettext-devel:libgcj,libstdc++-devel
+Ignore: pwdutils:openslp
+Ignore: pam-modules:resmgr
+Ignore: rpm:suse-build-key,build-key
+Ignore: bind-utils:bind-libs
+Ignore: alsa:dialog,pciutils
+Ignore: portmap:syslogd
+Ignore: fontconfig:freetype2
+Ignore: fontconfig-devel:freetype2-devel
+Ignore: xorg-x11-libs:freetype2
+Ignore: xorg-x11:x11-tools,resmgr,xkeyboard-config,xorg-x11-Mesa,libusb,freetype2,libjpeg,libpng
+Ignore: apache2:logrotate
+Ignore: arts:alsa,audiofile,resmgr,libogg,libvorbis
+Ignore: kdelibs3:alsa,arts,pcre,OpenEXR,aspell,cups-libs,mDNSResponder,krb5,libjasper
+Ignore: kdelibs3-devel:libvorbis-devel
+Ignore: kdebase3:kdebase3-ksysguardd,OpenEXR,dbus-1,dbus-1-qt,hal,powersave,openslp,libusb
+Ignore: kdebase3-SuSE:release-notes
+Ignore: jack:alsa,libsndfile
+Ignore: libxml2-devel:readline-devel
+Ignore: gnome-vfs2:gnome-mime-data,desktop-file-utils,cdparanoia,dbus-1,dbus-1-glib,krb5,hal,libsmbclient,fam,file_alteration
+Ignore: libgda:file_alteration
+Ignore: gnutls:lzo,libopencdk
+Ignore: gnutls-devel:lzo-devel,libopencdk-devel
+Ignore: pango:cairo,glitz,libpixman,libpng
+Ignore: pango-devel:cairo-devel
+Ignore: cairo-devel:libpixman-devel
+Ignore: libgnomeprint:libgnomecups
+Ignore: libgnomeprintui:libgnomecups
+Ignore: orbit2:libidl
+Ignore: orbit2-devel:libidl,libidl-devel,indent
+Ignore: qt3:libmng
+Ignore: qt-sql:qt_database_plugin
+Ignore: gtk2:libpng,libtiff
+Ignore: libgnomecanvas-devel:glib-devel
+Ignore: libgnomeui:gnome-icon-theme,shared-mime-info
+Ignore: scrollkeeper:docbook_4,sgml-skel
+Ignore: gnome-desktop:libgnomesu,startup-notification
+Ignore: python-devel:python-tk
+Ignore: gnome-pilot:gnome-panel
+Ignore: gnome-panel:control-center2
+Ignore: gnome-menus:kdebase3
+Ignore: gnome-main-menu:rug
+Ignore: libbonoboui:gnome-desktop
+Ignore: postfix:pcre
+Ignore: docbook_4:iso_ent,sgml-skel,xmlcharent
+Ignore: control-center2:nautilus,evolution-data-server,gnome-menus,gstreamer-plugins,gstreamer,metacity,mozilla-nspr,mozilla,libxklavier,gnome-desktop,startup-notification
+Ignore: docbook-xsl-stylesheets:xmlcharent
+Ignore: liby2util-devel:libstdc++-devel,openssl-devel
+Ignore: yast2:yast2-ncurses,yast2-theme-SuSELinux,perl-Config-Crontab,yast2-xml,SuSEfirewall2
+Ignore: yast2-core:netcat,hwinfo,wireless-tools,sysfsutils
+Ignore: yast2-core-devel:libxcrypt-devel,hwinfo-devel,blocxx-devel,sysfsutils,libstdc++-devel
+Ignore: yast2-packagemanager-devel:rpm-devel,curl-devel,openssl-devel
+Ignore: yast2-devtools:perl-XML-Writer,libxslt,pkgconfig
+Ignore: yast2-installation:yast2-update,yast2-mouse,yast2-country,yast2-bootloader,yast2-packager,yast2-network,yast2-online-update,yast2-users,release-notes,autoyast2-installation
+Ignore: yast2-bootloader:bootloader-theme
+Ignore: yast2-packager:yast2-x11
+Ignore: yast2-x11:sax2-libsax-perl
+Ignore: openslp-devel:openssl-devel
+Ignore: java-1_4_2-sun:xorg-x11-libs
+Ignore: java-1_4_2-sun-devel:xorg-x11-libs
+Ignore: kernel-um:xorg-x11-libs
+Ignore: tetex:xorg-x11-libs,expat,fontconfig,freetype2,libjpeg,libpng,ghostscript-x11,xaw3d,gd,dialog,ed
+Ignore: yast2-country:yast2-trans-stats
+Ignore: libgcc:glibc-32bit
+Ignore: libstdc++:glibc-32bit
+Ignore: susehelp:susehelp_lang,suse_help_viewer
+Ignore: mailx:smtp_daemon
+Ignore: cron:smtp_daemon
+Ignore: hotplug:syslog
+Ignore: pcmcia:syslog
+Ignore: avalon-logkit:servlet
+Ignore: jython:servlet
+Ignore: ispell:ispell_dictionary,ispell_english_dictionary
+Ignore: aspell:aspel_dictionary,aspell_dictionary
+Ignore: smartlink-softmodem:kernel,kernel-nongpl
+Ignore: OpenOffice_org-de:myspell-german-dictionary
+Ignore: mediawiki:php-session,php-gettext,php-zlib,php-mysql,mod_php_any
+Ignore: squirrelmail:mod_php_any,php-session,php-gettext,php-iconv,php-mbstring,php-openssl
+
+Ignore: simias:mono(log4net)
+Ignore: zmd:mono(log4net)
+Ignore: horde:mod_php_any,php-gettext,php-mcrypt,php-imap,php-pear-log,php-pear,php-session,php
+Ignore: xerces-j2:xml-commons-apis,xml-commons-resolver
+Ignore: xdg-menu:desktop-data
+Ignore: nessus-libraries:nessus-core
+Ignore: evolution:yelp
+Ignore: mono-tools:mono(gconf-sharp),mono(glade-sharp),mono(gnome-sharp),mono(gtkhtml-sharp),mono(atk-sharp),mono(gdk-sharp),mono(glib-sharp),mono(gtk-sharp),mono(pango-sharp)
+Ignore: gecko-sharp2:mono(glib-sharp),mono(gtk-sharp)
+Ignore: vcdimager:libcdio.so.6,libcdio.so.6(CDIO_6),libiso9660.so.4,libiso9660.so.4(ISO9660_4)
+Ignore: libcdio:libcddb.so.2
+Ignore: gnome-libs:libgnomeui
+Ignore: nautilus:gnome-themes
+Ignore: gnome-panel:gnome-themes
+Ignore: gnome-panel:tomboy
+
+%ifnarch s390 s390x ppc ia64
+Substitute: java2-devel-packages java-1_4_2-sun-devel jpackage-utils update-alternatives
+%else
+ %ifnarch s390x
+Substitute: java2-devel-packages java-1_4_2-ibm-devel jpackage-utils update-alternatives
+ %else
+Substitute: java2-devel-packages java-1_4_2-ibm-devel xorg-x11-libs-32bit jpackage-utils update-alternatives
+ %endif
+%endif
+
+Substitute: yast2-devel-packages docbook-xsl-stylesheets doxygen libxslt perl-XML-Writer popt-devel sgml-skel update-desktop-files yast2 yast2-devtools yast2-packagemanager-devel yast2-perl-bindings yast2-testsuite
+
+%ifarch x86_64 ppc64 s390x sparc64
+Substitute: glibc-devel-32bit glibc-devel-32bit glibc-32bit
+%else
+ %ifarch ppc
+Substitute: glibc-devel-32bit glibc-devel-64bit
+ %else
+Substitute: glibc-devel-32bit
+ %endif
+%endif
+
+%ifarch %ix86
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-bigsmp kernel-um
+%endif
+%ifarch ia64
+Substitute: kernel-binary-packages kernel-default
+%endif
+%ifarch x86_64
+Substitute: kernel-binary-packages kernel-default kernel-smp
+%endif
+%ifarch ppc
+Substitute: kernel-binary-packages kernel-default kernel-ppc64 kernel-iseries64
+%endif
+%ifarch ppc64
+Substitute: kernel-binary-packages kernel-ppc64 kernel-iseries64
+%endif
+%ifarch s390
+Substitute: kernel-binary-packages kernel-s390
+%endif
+%ifarch s390x
+Substitute: kernel-binary-packages kernel-s390x
+%endif
+
+Macros:
+%insserv_prereq insserv sed devs
+%fillup_prereq fillup coreutils
+%suseconfig_fonts_prereq perl aaa_base
+%install_info_prereq info
+%suse_version 930
+%sles_version 0
+%ul_version 0
+%do_profiling 1
+%_vendor suse
diff --git a/configs/sles10.conf b/configs/sles10.conf
new file mode 100644 (file)
index 0000000..bdc5827
--- /dev/null
@@ -0,0 +1,200 @@
+Preinstall: aaa_base acl attr bash bzip2 coreutils db diffutils
+Preinstall: filesystem fillup glibc grep insserv libacl libattr
+Preinstall: libgcc libnscd libxcrypt m4 ncurses pam
+Preinstall: permissions popt pwdutils readline rpm sed tar zlib
+
+Runscripts: aaa_base
+
+VMinstall: util-linux perl
+
+Required: autoconf automake binutils bzip2 db gcc gdbm gettext glibc
+Required: libtool ncurses perl rpm zlib
+
+Support: bind-libs bind-utils bison cpio cpp cracklib cvs cyrus-sasl
+Support: e2fsprogs file findutils flex gawk gdbm-devel gettext-devel
+Support: glibc-devel glibc-locale gpm groff gzip info klogd less
+Support: libcom_err libstdc++ libzio make man mktemp module-init-tools
+Support: ncurses-devel net-tools netcfg openldap2-client openssl
+Support: pam-modules patch procinfo procps psmisc rcs strace sysvinit
+Support: tcpd texinfo timezone unzip util-linux vim zlib-devel
+
+Keep: binutils cpp cracklib file findutils gawk gcc gcc-ada gcc-c++
+Keep: gdbm glibc-devel glibc-locale gzip libada libstdc++ libunwind
+Keep: libunwind-devel libzio make mktemp pam-devel pam-modules
+Keep: patch perl rcs timezone
+
+Prefer: xorg-x11-libs libpng fam mozilla mozilla-nss xorg-x11-Mesa
+Prefer: unixODBC libsoup glitz java-1_4_2-sun gnome-panel
+Prefer: desktop-data-SuSE gnome2-SuSE mono-nunit gecko-sharp2
+Prefer: apache2-prefork openmotif-libs ghostscript-mini gtk-sharp
+Prefer: glib-sharp libzypp-zmd-backend mDNSResponder
+Prefer: novell-NLDAPsdk zaptel-kmp-default
+
+Prefer: gnome-sharp2:art-sharp2 gnome-sharp:art-sharp
+Prefer: ifolder3:gnome-sharp2 ifolder3:gconf-sharp2
+Prefer: nautilus-ifolder3:gnome-sharp2
+Prefer: gconf-sharp2:glade-sharp2 gconf-sharp:glade-sharp
+Prefer: tomboy:gconf-sharp tomboy:gnome-sharp
+Prefer: zmd:libzypp-zmd-backend
+Prefer: yast2-packagemanager-devel:yast2-packagemanager
+Prefer: glitz-32bit:Mesa-32bit
+
+Prefer: -libgcc-mainline -libstdc++-mainline -gcc-mainline-c++
+Prefer: -libgcj-mainline -viewperf -compat -compat-openssl097g
+Prefer: -zmd -OpenOffice_org -pam-laus -libgcc-tree-ssa -busybox-links
+Prefer: -crossover-office
+
+Conflict: ghostscript-library:ghostscript-mini
+
+Ignore: aaa_base:aaa_skel,suse-release,logrotate,ash,mingetty,distribution-release
+Ignore: gettext-devel:libgcj,libstdc++-devel
+Ignore: pwdutils:openslp
+Ignore: pam-modules:resmgr
+Ignore: rpm:suse-build-key,build-key
+Ignore: bind-utils:bind-libs
+Ignore: alsa:dialog,pciutils
+Ignore: portmap:syslogd
+Ignore: fontconfig:freetype2
+Ignore: fontconfig-devel:freetype2-devel
+Ignore: xorg-x11-libs:freetype2
+Ignore: xorg-x11:x11-tools,resmgr,xkeyboard-config,xorg-x11-Mesa,libusb,freetype2,libjpeg,libpng
+Ignore: apache2:logrotate
+Ignore: arts:alsa,audiofile,resmgr,libogg,libvorbis
+Ignore: kdelibs3:alsa,arts,pcre,OpenEXR,aspell,cups-libs,mDNSResponder,krb5,libjasper
+Ignore: kdelibs3-devel:libvorbis-devel
+Ignore: kdebase3:kdebase3-ksysguardd,OpenEXR,dbus-1,dbus-1-qt,hal,powersave,openslp,libusb
+Ignore: kdebase3-SuSE:release-notes
+Ignore: jack:alsa,libsndfile
+Ignore: libxml2-devel:readline-devel
+Ignore: gnome-vfs2:gnome-mime-data,desktop-file-utils,cdparanoia,dbus-1,dbus-1-glib,krb5,hal,libsmbclient,fam,file_alteration
+Ignore: libgda:file_alteration
+Ignore: gnutls:lzo,libopencdk
+Ignore: gnutls-devel:lzo-devel,libopencdk-devel
+Ignore: pango:cairo,glitz,libpixman,libpng
+Ignore: pango-devel:cairo-devel
+Ignore: cairo-devel:libpixman-devel
+Ignore: libgnomeprint:libgnomecups
+Ignore: libgnomeprintui:libgnomecups
+Ignore: orbit2:libidl
+Ignore: orbit2-devel:libidl,libidl-devel,indent
+Ignore: qt3:libmng
+Ignore: qt-sql:qt_database_plugin
+Ignore: gtk2:libpng,libtiff
+Ignore: libgnomecanvas-devel:glib-devel
+Ignore: libgnomeui:gnome-icon-theme,shared-mime-info
+Ignore: scrollkeeper:docbook_4,sgml-skel
+Ignore: gnome-desktop:libgnomesu,startup-notification
+Ignore: python-devel:python-tk
+Ignore: gnome-pilot:gnome-panel
+Ignore: gnome-panel:control-center2
+Ignore: gnome-menus:kdebase3
+Ignore: gnome-main-menu:rug
+Ignore: libbonoboui:gnome-desktop
+Ignore: postfix:pcre
+Ignore: docbook_4:iso_ent,sgml-skel,xmlcharent
+Ignore: control-center2:nautilus,evolution-data-server,gnome-menus,gstreamer-plugins,gstreamer,metacity,mozilla-nspr,mozilla,libxklavier,gnome-desktop,startup-notification
+Ignore: docbook-xsl-stylesheets:xmlcharent
+Ignore: liby2util-devel:libstdc++-devel,openssl-devel
+Ignore: yast2:yast2-ncurses,yast2-theme-SuSELinux,perl-Config-Crontab,yast2-xml,SuSEfirewall2
+Ignore: yast2-core:netcat,hwinfo,wireless-tools,sysfsutils
+Ignore: yast2-core-devel:libxcrypt-devel,hwinfo-devel,blocxx-devel,sysfsutils,libstdc++-devel
+Ignore: yast2-packagemanager-devel:rpm-devel,curl-devel,openssl-devel
+Ignore: yast2-devtools:perl-XML-Writer,libxslt,pkgconfig
+Ignore: yast2-installation:yast2-update,yast2-mouse,yast2-country,yast2-bootloader,yast2-packager,yast2-network,yast2-online-update,yast2-users,release-notes,autoyast2-installation
+Ignore: yast2-bootloader:bootloader-theme
+Ignore: yast2-packager:yast2-x11
+Ignore: yast2-x11:sax2-libsax-perl
+Ignore: openslp-devel:openssl-devel
+Ignore: java-1_4_2-sun:xorg-x11-libs
+Ignore: java-1_4_2-sun-devel:xorg-x11-libs
+Ignore: kernel-um:xorg-x11-libs
+Ignore: tetex:xorg-x11-libs,expat,fontconfig,freetype2,libjpeg,libpng,ghostscript-x11,xaw3d,gd,dialog,ed
+Ignore: yast2-country:yast2-trans-stats
+Ignore: libgcc:glibc-32bit
+Ignore: libstdc++:glibc-32bit
+Ignore: susehelp:susehelp_lang,suse_help_viewer
+Ignore: mailx:smtp_daemon
+Ignore: cron:smtp_daemon
+Ignore: hotplug:syslog
+Ignore: pcmcia:syslog
+Ignore: avalon-logkit:servlet
+Ignore: jython:servlet
+Ignore: ispell:ispell_dictionary,ispell_english_dictionary
+Ignore: aspell:aspel_dictionary,aspell_dictionary
+Ignore: smartlink-softmodem:kernel,kernel-nongpl
+Ignore: OpenOffice_org-de:myspell-german-dictionary
+Ignore: mediawiki:php-session,php-gettext,php-zlib,php-mysql,mod_php_any
+Ignore: squirrelmail:mod_php_any,php-session,php-gettext,php-iconv,php-mbstring,php-openssl
+
+Ignore: simias:mono(log4net)
+Ignore: zmd:mono(log4net)
+Ignore: horde:mod_php_any,php-gettext,php-mcrypt,php-imap,php-pear-log,php-pear,php-session,php
+Ignore: xerces-j2:xml-commons-apis,xml-commons-resolver
+Ignore: xdg-menu:desktop-data
+Ignore: nessus-libraries:nessus-core
+Ignore: evolution:yelp
+Ignore: mono-tools:mono(gconf-sharp),mono(glade-sharp),mono(gnome-sharp),mono(gtkhtml-sharp),mono(atk-sharp),mono(gdk-sharp),mono(glib-sharp),mono(gtk-sharp),mono(pango-sharp)
+Ignore: gecko-sharp2:mono(glib-sharp),mono(gtk-sharp)
+Ignore: vcdimager:libcdio.so.6,libcdio.so.6(CDIO_6),libiso9660.so.4,libiso9660.so.4(ISO9660_4)
+Ignore: libcdio:libcddb.so.2
+Ignore: gnome-libs:libgnomeui
+Ignore: nautilus:gnome-themes
+Ignore: gnome-panel:gnome-themes
+Ignore: gnome-panel:tomboy
+
+%ifnarch s390 s390x ppc ia64
+Substitute: java2-devel-packages java-1_4_2-sun-devel update-alternatives
+%else
+ %ifnarch s390x
+Substitute: java2-devel-packages java-1_4_2-ibm-devel update-alternatives
+ %else
+Substitute: java2-devel-packages java-1_4_2-ibm-devel xorg-x11-libs-32bit update-alternatives
+ %endif
+%endif
+
+Substitute: yast2-devel-packages docbook-xsl-stylesheets doxygen libxslt perl-XML-Writer popt-devel sgml-skel update-desktop-files yast2 yast2-devtools yast2-packagemanager-devel yast2-perl-bindings yast2-testsuite
+
+%ifarch x86_64 ppc64 s390x sparc64
+Substitute: glibc-devel-32bit glibc-devel-32bit glibc-32bit
+%else
+ %ifarch ppc
+Substitute: glibc-devel-32bit glibc-devel-64bit
+ %else
+Substitute: glibc-devel-32bit
+ %endif
+%endif
+
+%ifarch %ix86
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-bigsmp kernel-debug kernel-um kernel-xen kernel-kdump
+%endif
+%ifarch ia64
+Substitute: kernel-binary-packages kernel-default kernel-debug
+%endif
+%ifarch x86_64
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-xen kernel-kdump
+%endif
+%ifarch ppc
+Substitute: kernel-binary-packages kernel-default kernel-kdump kernel-ppc64 kernel-iseries64
+%endif
+%ifarch ppc64
+Substitute: kernel-binary-packages kernel-ppc64 kernel-iseries64
+%endif
+%ifarch s390
+Substitute: kernel-binary-packages kernel-s390
+%endif
+%ifarch s390x
+Substitute: kernel-binary-packages kernel-default
+%endif
+
+Macros:
+%insserv_prereq insserv sed
+%fillup_prereq fillup coreutils
+%suseconfig_fonts_prereq perl aaa_base
+%install_info_prereq info
+%kernel_module_package_buildreq kernel-source kernel-syms
+%kernel_module_package_buildreqs kernel-source kernel-syms
+%suse_version 1010
+%sles_version 10
+%ul_version 0
+%do_profiling 1
+%_vendor suse
diff --git a/configs/sles11.conf b/configs/sles11.conf
new file mode 120000 (symlink)
index 0000000..87e994a
--- /dev/null
@@ -0,0 +1 @@
+sl11.1.conf
\ No newline at end of file
diff --git a/configs/sles8.conf b/configs/sles8.conf
new file mode 100644 (file)
index 0000000..12bbe19
--- /dev/null
@@ -0,0 +1,196 @@
+Repotype: suse
+
+Preinstall: aaa_base acl attr bash db devs diffutils filesystem
+Preinstall: fileutils fillup glibc grep libgcc libxcrypt m4 ncurses
+Preinstall: pam permissions readline rpm sed sh-utils shadow tar
+Preinstall: textutils
+
+Runscripts: aaa_base
+
+VMinstall: util-linux perl
+
+Required: autoconf automake binutils bzip2 cracklib db gcc gdbm gettext
+Required: glibc libtool ncurses pam perl rpm zlib
+
+Support: bind9-utils bison cpio cpp cyrus-sasl e2fsprogs file
+Support: findutils flex gawk gdbm-devel glibc-devel glibc-locale
+Support: gpm groff gzip kbd less libstdc++ make man mktemp modutils
+Support: ncurses-devel net-tools netcfg pam-devel pam-modules
+Support: patch ps rcs sendmail strace syslogd sysvinit texinfo
+Support: timezone unzip util-linux vim zlib-devel
+
+Keep: binutils bzip2 cpp cracklib file findutils fpk gawk gcc
+Keep: gcc-c++ gdbm glibc-devel glibc-locale gnat gnat-runtime
+Keep: gzip libstdc++ make mktemp pam-devel pam-modules patch perl
+Keep: popt rcs shlibs5 timezone
+
+Prefer: xorg-x11-libs libpng fam mozilla mozilla-nss xorg-x11-Mesa
+Prefer: unixODBC libsoup glitz java-1_4_2-sun gnome-panel
+Prefer: desktop-data-SuSE gnome2-SuSE mono-nunit gecko-sharp2
+Prefer: apache2-prefork openmotif-libs ghostscript-mini gtk-sharp
+Prefer: glib-sharp libzypp-zmd-backend mDNSResponder
+
+Prefer: gnome-sharp2:art-sharp2 gnome-sharp:art-sharp
+Prefer: ifolder3:gnome-sharp2 ifolder3:gconf-sharp2
+Prefer: nautilus-ifolder3:gnome-sharp2
+Prefer: gconf-sharp2:glade-sharp2 gconf-sharp:glade-sharp
+Prefer: tomboy:gconf-sharp tomboy:gnome-sharp
+Prefer: zmd:libzypp-zmd-backend
+Prefer: yast2-packagemanager-devel:yast2-packagemanager
+
+Prefer: -libgcc-mainline -libstdc++-mainline -gcc-mainline-c++
+Prefer: -libgcj-mainline -viewperf -compat -compat-openssl097g
+Prefer: -zmd -OpenOffice_org -pam-laus -libgcc-tree-ssa -busybox-links
+Prefer: -crossover-office
+
+Conflict: ghostscript-library:ghostscript-mini
+
+Ignore: aaa_base:aaa_skel,suse-release,logrotate,ash,mingetty,distribution-release
+Ignore: gettext-devel:libgcj,libstdc++-devel
+Ignore: pwdutils:openslp
+Ignore: pam-modules:resmgr
+Ignore: rpm:suse-build-key,build-key
+Ignore: bind-utils:bind-libs
+Ignore: alsa:dialog,pciutils
+Ignore: portmap:syslogd
+Ignore: fontconfig:freetype2
+Ignore: fontconfig-devel:freetype2-devel
+Ignore: xorg-x11-libs:freetype2
+Ignore: xorg-x11:x11-tools,resmgr,xkeyboard-config,xorg-x11-Mesa,libusb,freetype2,libjpeg,libpng
+Ignore: apache2:logrotate
+Ignore: arts:alsa,audiofile,resmgr,libogg,libvorbis
+Ignore: kdelibs3:alsa,arts,pcre,OpenEXR,aspell,cups-libs,mDNSResponder,krb5,libjasper
+Ignore: kdelibs3-devel:libvorbis-devel
+Ignore: kdebase3:kdebase3-ksysguardd,OpenEXR,dbus-1,dbus-1-qt,hal,powersave,openslp,libusb
+Ignore: kdebase3-SuSE:release-notes
+Ignore: jack:alsa,libsndfile
+Ignore: libxml2-devel:readline-devel
+Ignore: gnome-vfs2:gnome-mime-data,desktop-file-utils,cdparanoia,dbus-1,dbus-1-glib,krb5,hal,libsmbclient,fam,file_alteration
+Ignore: libgda:file_alteration
+Ignore: gnutls:lzo,libopencdk
+Ignore: gnutls-devel:lzo-devel,libopencdk-devel
+Ignore: pango:cairo,glitz,libpixman,libpng
+Ignore: pango-devel:cairo-devel
+Ignore: cairo-devel:libpixman-devel
+Ignore: libgnomeprint:libgnomecups
+Ignore: libgnomeprintui:libgnomecups
+Ignore: orbit2:libidl
+Ignore: orbit2-devel:libidl,libidl-devel,indent
+Ignore: qt3:libmng
+Ignore: qt-sql:qt_database_plugin
+Ignore: gtk2:libpng,libtiff
+Ignore: libgnomecanvas-devel:glib-devel
+Ignore: libgnomeui:gnome-icon-theme,shared-mime-info
+Ignore: scrollkeeper:docbook_4,sgml-skel
+Ignore: gnome-desktop:libgnomesu,startup-notification
+Ignore: python-devel:python-tk
+Ignore: gnome-pilot:gnome-panel
+Ignore: gnome-panel:control-center2
+Ignore: gnome-menus:kdebase3
+Ignore: gnome-main-menu:rug
+Ignore: libbonoboui:gnome-desktop
+Ignore: postfix:pcre
+Ignore: docbook_4:iso_ent,sgml-skel,xmlcharent
+Ignore: control-center2:nautilus,evolution-data-server,gnome-menus,gstreamer-plugins,gstreamer,metacity,mozilla-nspr,mozilla,libxklavier,gnome-desktop,startup-notification
+Ignore: docbook-xsl-stylesheets:xmlcharent
+Ignore: liby2util-devel:libstdc++-devel,openssl-devel
+Ignore: yast2:yast2-ncurses,yast2-theme-SuSELinux,perl-Config-Crontab,yast2-xml,SuSEfirewall2
+Ignore: yast2-core:netcat,hwinfo,wireless-tools,sysfsutils
+Ignore: yast2-core-devel:libxcrypt-devel,hwinfo-devel,blocxx-devel,sysfsutils,libstdc++-devel
+Ignore: yast2-packagemanager-devel:rpm-devel,curl-devel,openssl-devel
+Ignore: yast2-devtools:perl-XML-Writer,libxslt,pkgconfig
+Ignore: yast2-installation:yast2-update,yast2-mouse,yast2-country,yast2-bootloader,yast2-packager,yast2-network,yast2-online-update,yast2-users,release-notes,autoyast2-installation
+Ignore: yast2-bootloader:bootloader-theme
+Ignore: yast2-packager:yast2-x11
+Ignore: yast2-x11:sax2-libsax-perl
+Ignore: openslp-devel:openssl-devel
+Ignore: java-1_4_2-sun:xorg-x11-libs
+Ignore: java-1_4_2-sun-devel:xorg-x11-libs
+Ignore: kernel-um:xorg-x11-libs
+Ignore: tetex:xorg-x11-libs,expat,fontconfig,freetype2,libjpeg,libpng,ghostscript-x11,xaw3d,gd,dialog,ed
+Ignore: yast2-country:yast2-trans-stats
+Ignore: libgcc:glibc-32bit
+Ignore: libstdc++:glibc-32bit
+Ignore: susehelp:susehelp_lang,suse_help_viewer
+Ignore: mailx:smtp_daemon
+Ignore: cron:smtp_daemon
+Ignore: hotplug:syslog
+Ignore: pcmcia:syslog
+Ignore: avalon-logkit:servlet
+Ignore: jython:servlet
+Ignore: ispell:ispell_dictionary,ispell_english_dictionary
+Ignore: aspell:aspel_dictionary,aspell_dictionary
+Ignore: smartlink-softmodem:kernel,kernel-nongpl
+Ignore: OpenOffice_org-de:myspell-german-dictionary
+Ignore: mediawiki:php-session,php-gettext,php-zlib,php-mysql,mod_php_any
+Ignore: squirrelmail:mod_php_any,php-session,php-gettext,php-iconv,php-mbstring,php-openssl
+
+Ignore: simias:mono(log4net)
+Ignore: zmd:mono(log4net)
+Ignore: horde:mod_php_any,php-gettext,php-mcrypt,php-imap,php-pear-log,php-pear,php-session,php
+Ignore: xerces-j2:xml-commons-apis,xml-commons-resolver
+Ignore: xdg-menu:desktop-data
+Ignore: nessus-libraries:nessus-core
+Ignore: evolution:yelp
+Ignore: mono-tools:mono(gconf-sharp),mono(glade-sharp),mono(gnome-sharp),mono(gtkhtml-sharp),mono(atk-sharp),mono(gdk-sharp),mono(glib-sharp),mono(gtk-sharp),mono(pango-sharp)
+Ignore: gecko-sharp2:mono(glib-sharp),mono(gtk-sharp)
+Ignore: vcdimager:libcdio.so.6,libcdio.so.6(CDIO_6),libiso9660.so.4,libiso9660.so.4(ISO9660_4)
+Ignore: libcdio:libcddb.so.2
+Ignore: gnome-libs:libgnomeui
+Ignore: nautilus:gnome-themes
+Ignore: gnome-panel:gnome-themes
+Ignore: gnome-panel:tomboy
+
+%ifnarch s390 s390x ia64
+Substitute: java2-devel-packages java2 java2-jre jpackage-utils
+%else
+ %ifarch ia64 s390
+Substitute: java2-devel-packages IBMJava2-SDK jpackage-utils
+ %endif
+ %ifarch s390x
+Substitute: java2-devel-packages IBMJava2-SDK jpackage-utils glibc-32bit baselibs-32bit
+ %endif
+%endif
+
+Substitute: yast2-devel-packages docbook-xsl-stylesheets doxygen libxslt perl-XML-Writer popt-devel sgml-skel update-desktop-files yast2 yast2-devtools yast2-packagemanager-devel yast2-perl-bindings yast2-testsuite
+
+%ifarch x86_64 ppc64 s390x sparc64
+Substitute: glibc-devel-32bit glibc-devel-32bit glibc-32bit baselibs-32bit
+%else
+ %ifarch ppc
+Substitute: glibc-devel-32bit glibc-devel-64bit glibc-64bit
+ %else
+Substitute: glibc-devel-32bit
+ %endif
+%endif
+
+%ifarch %ix86
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-bigsmp kernel-um
+%endif
+%ifarch ia64
+Substitute: kernel-binary-packages kernel-default kernel-sn2 kernel-64k-pagesize
+%endif
+%ifarch x86_64
+Substitute: kernel-binary-packages kernel-default kernel-smp
+%endif
+%ifarch ppc
+Substitute: kernel-binary-packages kernel-default kernel-pmac64_32bit kernel-power3 kernel-smp kernel-iseries64 kernel-pseries64 kernel-pmac64
+%endif
+%ifarch ppc64
+Substitute: kernel-binary-packages kernel-iseries64 kernel-pseries64 kernel-pmac64
+%endif
+%ifarch s390
+Substitute: kernel-binary-packages kernel-s390
+%endif
+%ifarch s390x
+Substitute: kernel-binary-packages kernel-s390x
+%endif
+
+Macros:
+%insserv_prereq aaa_base
+%fillup_prereq fillup fileutils
+%install_info_prereq texinfo
+%suse_version 810
+%sles_version 8
+%ul_version 0
+%_vendor suse
diff --git a/configs/sles9.conf b/configs/sles9.conf
new file mode 100644 (file)
index 0000000..70ea7d6
--- /dev/null
@@ -0,0 +1,203 @@
+Repotype: suse
+
+Preinstall: aaa_base acl attr bash bzip2 coreutils db devs diffutils
+Preinstall: filesystem fillup glibc grep insserv libacl libattr
+Preinstall: libgcc libselinux libxcrypt m4 ncurses pam permissions
+Preinstall: popt pwdutils readline rpm sed tar zlib
+
+Runscripts: aaa_base
+
+VMinstall: util-linux perl
+
+Required: autoconf automake binutils bzip2 db gcc gdbm gettext glibc
+Required: libtool ncurses perl rpm zlib
+
+Support: bind-utils bison cpio cpp cracklib cvs cyrus-sasl e2fsprogs
+Support: file findutils flex gawk gdbm-devel glibc-devel glibc-locale
+Support: gpm groff gzip info kbd less libstdc++ make man mktemp
+Support: module-init-tools ncurses-devel net-tools netcfg
+Support: openldap2-client openssl pam-modules patch procinfo procps
+Support: psmisc rcs strace syslogd sysvinit tcpd texinfo timezone
+Support: unzip util-linux vim zlib-devel
+
+Keep: binutils cpp cracklib file findutils gawk gcc gcc-c++ gdbm
+Keep: glibc-devel glibc-locale gnat gnat-runtime gzip libstdc++
+Keep: libunwind make mktemp pam-devel pam-modules patch perl rcs
+Keep: shlibs5 timezone
+
+Prefer: xorg-x11-libs libpng fam mozilla mozilla-nss xorg-x11-Mesa
+Prefer: unixODBC libsoup glitz java-1_4_2-sun gnome-panel
+Prefer: desktop-data-SuSE gnome2-SuSE mono-nunit gecko-sharp2
+Prefer: apache2-prefork openmotif-libs ghostscript-mini gtk-sharp
+Prefer: glib-sharp libzypp-zmd-backend mDNSResponder
+
+Prefer: gnome-sharp2:art-sharp2 gnome-sharp:art-sharp
+Prefer: ifolder3:gnome-sharp2 ifolder3:gconf-sharp2
+Prefer: nautilus-ifolder3:gnome-sharp2
+Prefer: gconf-sharp2:glade-sharp2 gconf-sharp:glade-sharp
+Prefer: tomboy:gconf-sharp tomboy:gnome-sharp
+Prefer: zmd:libzypp-zmd-backend
+Prefer: yast2-packagemanager-devel:yast2-packagemanager
+
+Prefer: -libgcc-mainline -libstdc++-mainline -gcc-mainline-c++
+Prefer: -libgcj-mainline -viewperf -compat -compat-openssl097g
+Prefer: -zmd -OpenOffice_org -pam-laus -libgcc-tree-ssa -busybox-links
+Prefer: -crossover-office
+
+Conflict: ghostscript-library:ghostscript-mini
+
+Ignore: aaa_base:aaa_skel,suse-release,logrotate,ash,mingetty,distribution-release
+Ignore: gettext-devel:libgcj,libstdc++-devel
+Ignore: pwdutils:openslp
+Ignore: pam-modules:resmgr
+Ignore: rpm:suse-build-key,build-key
+Ignore: bind-utils:bind-libs
+Ignore: alsa:dialog,pciutils
+Ignore: portmap:syslogd
+Ignore: fontconfig:freetype2
+Ignore: fontconfig-devel:freetype2-devel
+Ignore: xorg-x11-libs:freetype2
+Ignore: xorg-x11:x11-tools,resmgr,xkeyboard-config,xorg-x11-Mesa,libusb,freetype2,libjpeg,libpng
+Ignore: apache2:logrotate
+Ignore: arts:alsa,audiofile,resmgr,libogg,libvorbis
+Ignore: kdelibs3:alsa,arts,pcre,OpenEXR,aspell,cups-libs,mDNSResponder,krb5,libjasper
+Ignore: kdelibs3-devel:libvorbis-devel
+Ignore: kdebase3:kdebase3-ksysguardd,OpenEXR,dbus-1,dbus-1-qt,hal,powersave,openslp,libusb
+Ignore: kdebase3-SuSE:release-notes
+Ignore: jack:alsa,libsndfile
+Ignore: libxml2-devel:readline-devel
+Ignore: gnome-vfs2:gnome-mime-data,desktop-file-utils,cdparanoia,dbus-1,dbus-1-glib,krb5,hal,libsmbclient,fam,file_alteration
+Ignore: libgda:file_alteration
+Ignore: gnutls:lzo,libopencdk
+Ignore: gnutls-devel:lzo-devel,libopencdk-devel
+Ignore: pango:cairo,glitz,libpixman,libpng
+Ignore: pango-devel:cairo-devel
+Ignore: cairo-devel:libpixman-devel
+Ignore: libgnomeprint:libgnomecups
+Ignore: libgnomeprintui:libgnomecups
+Ignore: orbit2:libidl
+Ignore: orbit2-devel:libidl,libidl-devel,indent
+Ignore: qt3:libmng
+Ignore: qt-sql:qt_database_plugin
+Ignore: gtk2:libpng,libtiff
+Ignore: libgnomecanvas-devel:glib-devel
+Ignore: libgnomeui:gnome-icon-theme,shared-mime-info
+Ignore: scrollkeeper:docbook_4,sgml-skel
+Ignore: gnome-desktop:libgnomesu,startup-notification
+Ignore: python-devel:python-tk
+Ignore: gnome-pilot:gnome-panel
+Ignore: gnome-panel:control-center2
+Ignore: gnome-menus:kdebase3
+Ignore: gnome-main-menu:rug
+Ignore: libbonoboui:gnome-desktop
+Ignore: postfix:pcre
+Ignore: docbook_4:iso_ent,sgml-skel,xmlcharent
+Ignore: control-center2:nautilus,evolution-data-server,gnome-menus,gstreamer-plugins,gstreamer,metacity,mozilla-nspr,mozilla,libxklavier,gnome-desktop,startup-notification
+Ignore: docbook-xsl-stylesheets:xmlcharent
+Ignore: liby2util-devel:libstdc++-devel,openssl-devel
+Ignore: yast2:yast2-ncurses,yast2-theme-SuSELinux,perl-Config-Crontab,yast2-xml,SuSEfirewall2
+Ignore: yast2-core:netcat,hwinfo,wireless-tools,sysfsutils
+Ignore: yast2-core-devel:libxcrypt-devel,hwinfo-devel,blocxx-devel,sysfsutils,libstdc++-devel
+Ignore: yast2-packagemanager-devel:rpm-devel,curl-devel,openssl-devel
+Ignore: yast2-devtools:perl-XML-Writer,libxslt,pkgconfig
+Ignore: yast2-installation:yast2-update,yast2-mouse,yast2-country,yast2-bootloader,yast2-packager,yast2-network,yast2-online-update,yast2-users,release-notes,autoyast2-installation
+Ignore: yast2-bootloader:bootloader-theme
+Ignore: yast2-packager:yast2-x11
+Ignore: yast2-x11:sax2-libsax-perl
+Ignore: openslp-devel:openssl-devel
+Ignore: java-1_4_2-sun:xorg-x11-libs
+Ignore: java-1_4_2-sun-devel:xorg-x11-libs
+Ignore: kernel-um:xorg-x11-libs
+Ignore: tetex:xorg-x11-libs,expat,fontconfig,freetype2,libjpeg,libpng,ghostscript-x11,xaw3d,gd,dialog,ed
+Ignore: yast2-country:yast2-trans-stats
+Ignore: libgcc:glibc-32bit
+Ignore: libstdc++:glibc-32bit
+Ignore: susehelp:susehelp_lang,suse_help_viewer
+Ignore: mailx:smtp_daemon
+Ignore: cron:smtp_daemon
+Ignore: hotplug:syslog
+Ignore: pcmcia:syslog
+Ignore: avalon-logkit:servlet
+Ignore: jython:servlet
+Ignore: ispell:ispell_dictionary,ispell_english_dictionary
+Ignore: aspell:aspel_dictionary,aspell_dictionary
+Ignore: smartlink-softmodem:kernel,kernel-nongpl
+Ignore: OpenOffice_org-de:myspell-german-dictionary
+Ignore: mediawiki:php-session,php-gettext,php-zlib,php-mysql,mod_php_any
+Ignore: squirrelmail:mod_php_any,php-session,php-gettext,php-iconv,php-mbstring,php-openssl
+
+Ignore: simias:mono(log4net)
+Ignore: zmd:mono(log4net)
+Ignore: horde:mod_php_any,php-gettext,php-mcrypt,php-imap,php-pear-log,php-pear,php-session,php
+Ignore: xerces-j2:xml-commons-apis,xml-commons-resolver
+Ignore: xdg-menu:desktop-data
+Ignore: nessus-libraries:nessus-core
+Ignore: evolution:yelp
+Ignore: mono-tools:mono(gconf-sharp),mono(glade-sharp),mono(gnome-sharp),mono(gtkhtml-sharp),mono(atk-sharp),mono(gdk-sharp),mono(glib-sharp),mono(gtk-sharp),mono(pango-sharp)
+Ignore: gecko-sharp2:mono(glib-sharp),mono(gtk-sharp)
+Ignore: vcdimager:libcdio.so.6,libcdio.so.6(CDIO_6),libiso9660.so.4,libiso9660.so.4(ISO9660_4)
+Ignore: libcdio:libcddb.so.2
+Ignore: gnome-libs:libgnomeui
+Ignore: nautilus:gnome-themes
+Ignore: gnome-panel:gnome-themes
+Ignore: gnome-panel:tomboy
+
+%ifnarch s390 s390x ppc ia64
+Substitute: java2-devel-packages java2 java2-jre jpackage-utils
+%else
+ %ifarch ia64
+Substitute: java2-devel-packages IBMJava2-JRE BEAJava2-JRE BEAJava2-SDK jpackage-utils
+ %endif
+ %ifarch s390 ppc
+Substitute: java2-devel-packages IBMJava2-JRE IBMJava2-SDK jpackage-utils
+ %endif
+ %ifarch s390x
+Substitute: java2-devel-packages IBMJava2-JRE IBMJava2-SDK jpackage-utils XFree86-libs-32bit
+ %endif
+%endif
+
+Substitute: yast2-devel-packages docbook-xsl-stylesheets doxygen libxslt perl-XML-Writer popt-devel sgml-skel update-desktop-files yast2 yast2-devtools yast2-packagemanager-devel yast2-perl-bindings yast2-testsuite
+
+%ifarch x86_64 ppc64 s390x sparc64
+Substitute: glibc-devel-32bit glibc-devel-32bit glibc-32bit
+%else
+ %ifarch ppc
+Substitute: glibc-devel-32bit glibc-devel-64bit glibc-64bit
+ %else
+Substitute: glibc-devel-32bit
+ %endif
+%endif
+
+%ifarch %ix86
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-bigsmp kernel-um
+%endif
+%ifarch ia64
+Substitute: kernel-binary-packages kernel-default kernel-sn2 kernel-64k-pagesize
+%endif
+%ifarch x86_64
+Substitute: kernel-binary-packages kernel-default kernel-smp
+%endif
+%ifarch ppc
+Substitute: kernel-binary-packages kernel-default kernel-pmac64_32bit kernel-power3 kernel-smp kernel-iseries64 kernel-pseries64 kernel-pmac64
+%endif
+%ifarch ppc64
+Substitute: kernel-binary-packages kernel-iseries64 kernel-pseries64 kernel-pmac64
+%endif
+%ifarch s390
+Substitute: kernel-binary-packages kernel-s390
+%endif
+%ifarch s390x
+Substitute: kernel-binary-packages kernel-s390x
+%endif
+
+Macros:
+%insserv_prereq insserv
+%fillup_prereq fillup fileutils
+%suseconfig_fonts_prereq perl aaa_base
+%install_info_prereq info
+%suse_version 910
+%sles_version 9
+%ul_version 0
+%jds_version 0
+%do_profiling 1
+%_vendor suse
diff --git a/configs/ul1.conf b/configs/ul1.conf
new file mode 100644 (file)
index 0000000..a4ca28d
--- /dev/null
@@ -0,0 +1,196 @@
+Repotype: suse
+
+Preinstall: aaa_base acl attr bash db devs diffutils filesystem
+Preinstall: fileutils fillup glibc grep libgcc libxcrypt m4 ncurses
+Preinstall: pam permissions readline rpm sed sh-utils shadow tar
+Preinstall: textutils
+
+Runscripts: aaa_base
+
+VMinstall: util-linux perl
+
+Required: autoconf automake binutils bzip2 cracklib db gcc gdbm gettext
+Required: glibc libtool ncurses pam perl rpm zlib
+
+Support: bind9-utils bison cpio cpp cyrus-sasl e2fsprogs file
+Support: findutils flex gawk gdbm-devel glibc-devel glibc-locale
+Support: gpm groff gzip kbd less libstdc++ make man mktemp modutils
+Support: ncurses-devel net-tools netcfg pam-devel pam-modules
+Support: patch ps rcs sendmail strace syslogd sysvinit texinfo
+Support: timezone unzip util-linux vim zlib-devel
+
+Keep: binutils bzip2 cpp cracklib file findutils fpk gawk gcc
+Keep: gcc-c++ gdbm glibc-devel glibc-locale gnat gnat-runtime
+Keep: gzip libstdc++ make mktemp pam-devel pam-modules patch perl
+Keep: popt rcs shlibs5 timezone
+
+Prefer: xorg-x11-libs libpng fam mozilla mozilla-nss xorg-x11-Mesa
+Prefer: unixODBC libsoup glitz java-1_4_2-sun gnome-panel
+Prefer: desktop-data-SuSE gnome2-SuSE mono-nunit gecko-sharp2
+Prefer: apache2-prefork openmotif-libs ghostscript-mini gtk-sharp
+Prefer: glib-sharp libzypp-zmd-backend mDNSResponder
+
+Prefer: gnome-sharp2:art-sharp2 gnome-sharp:art-sharp
+Prefer: ifolder3:gnome-sharp2 ifolder3:gconf-sharp2
+Prefer: nautilus-ifolder3:gnome-sharp2
+Prefer: gconf-sharp2:glade-sharp2 gconf-sharp:glade-sharp
+Prefer: tomboy:gconf-sharp tomboy:gnome-sharp
+Prefer: zmd:libzypp-zmd-backend
+Prefer: yast2-packagemanager-devel:yast2-packagemanager
+
+Prefer: -libgcc-mainline -libstdc++-mainline -gcc-mainline-c++
+Prefer: -libgcj-mainline -viewperf -compat -compat-openssl097g
+Prefer: -zmd -OpenOffice_org -pam-laus -libgcc-tree-ssa -busybox-links
+Prefer: -crossover-office
+
+Conflict: ghostscript-library:ghostscript-mini
+
+Ignore: aaa_base:aaa_skel,suse-release,logrotate,ash,mingetty,distribution-release
+Ignore: gettext-devel:libgcj,libstdc++-devel
+Ignore: pwdutils:openslp
+Ignore: pam-modules:resmgr
+Ignore: rpm:suse-build-key,build-key
+Ignore: bind-utils:bind-libs
+Ignore: alsa:dialog,pciutils
+Ignore: portmap:syslogd
+Ignore: fontconfig:freetype2
+Ignore: fontconfig-devel:freetype2-devel
+Ignore: xorg-x11-libs:freetype2
+Ignore: xorg-x11:x11-tools,resmgr,xkeyboard-config,xorg-x11-Mesa,libusb,freetype2,libjpeg,libpng
+Ignore: apache2:logrotate
+Ignore: arts:alsa,audiofile,resmgr,libogg,libvorbis
+Ignore: kdelibs3:alsa,arts,pcre,OpenEXR,aspell,cups-libs,mDNSResponder,krb5,libjasper
+Ignore: kdelibs3-devel:libvorbis-devel
+Ignore: kdebase3:kdebase3-ksysguardd,OpenEXR,dbus-1,dbus-1-qt,hal,powersave,openslp,libusb
+Ignore: kdebase3-SuSE:release-notes
+Ignore: jack:alsa,libsndfile
+Ignore: libxml2-devel:readline-devel
+Ignore: gnome-vfs2:gnome-mime-data,desktop-file-utils,cdparanoia,dbus-1,dbus-1-glib,krb5,hal,libsmbclient,fam,file_alteration
+Ignore: libgda:file_alteration
+Ignore: gnutls:lzo,libopencdk
+Ignore: gnutls-devel:lzo-devel,libopencdk-devel
+Ignore: pango:cairo,glitz,libpixman,libpng
+Ignore: pango-devel:cairo-devel
+Ignore: cairo-devel:libpixman-devel
+Ignore: libgnomeprint:libgnomecups
+Ignore: libgnomeprintui:libgnomecups
+Ignore: orbit2:libidl
+Ignore: orbit2-devel:libidl,libidl-devel,indent
+Ignore: qt3:libmng
+Ignore: qt-sql:qt_database_plugin
+Ignore: gtk2:libpng,libtiff
+Ignore: libgnomecanvas-devel:glib-devel
+Ignore: libgnomeui:gnome-icon-theme,shared-mime-info
+Ignore: scrollkeeper:docbook_4,sgml-skel
+Ignore: gnome-desktop:libgnomesu,startup-notification
+Ignore: python-devel:python-tk
+Ignore: gnome-pilot:gnome-panel
+Ignore: gnome-panel:control-center2
+Ignore: gnome-menus:kdebase3
+Ignore: gnome-main-menu:rug
+Ignore: libbonoboui:gnome-desktop
+Ignore: postfix:pcre
+Ignore: docbook_4:iso_ent,sgml-skel,xmlcharent
+Ignore: control-center2:nautilus,evolution-data-server,gnome-menus,gstreamer-plugins,gstreamer,metacity,mozilla-nspr,mozilla,libxklavier,gnome-desktop,startup-notification
+Ignore: docbook-xsl-stylesheets:xmlcharent
+Ignore: liby2util-devel:libstdc++-devel,openssl-devel
+Ignore: yast2:yast2-ncurses,yast2-theme-SuSELinux,perl-Config-Crontab,yast2-xml,SuSEfirewall2
+Ignore: yast2-core:netcat,hwinfo,wireless-tools,sysfsutils
+Ignore: yast2-core-devel:libxcrypt-devel,hwinfo-devel,blocxx-devel,sysfsutils,libstdc++-devel
+Ignore: yast2-packagemanager-devel:rpm-devel,curl-devel,openssl-devel
+Ignore: yast2-devtools:perl-XML-Writer,libxslt,pkgconfig
+Ignore: yast2-installation:yast2-update,yast2-mouse,yast2-country,yast2-bootloader,yast2-packager,yast2-network,yast2-online-update,yast2-users,release-notes,autoyast2-installation
+Ignore: yast2-bootloader:bootloader-theme
+Ignore: yast2-packager:yast2-x11
+Ignore: yast2-x11:sax2-libsax-perl
+Ignore: openslp-devel:openssl-devel
+Ignore: java-1_4_2-sun:xorg-x11-libs
+Ignore: java-1_4_2-sun-devel:xorg-x11-libs
+Ignore: kernel-um:xorg-x11-libs
+Ignore: tetex:xorg-x11-libs,expat,fontconfig,freetype2,libjpeg,libpng,ghostscript-x11,xaw3d,gd,dialog,ed
+Ignore: yast2-country:yast2-trans-stats
+Ignore: libgcc:glibc-32bit
+Ignore: libstdc++:glibc-32bit
+Ignore: susehelp:susehelp_lang,suse_help_viewer
+Ignore: mailx:smtp_daemon
+Ignore: cron:smtp_daemon
+Ignore: hotplug:syslog
+Ignore: pcmcia:syslog
+Ignore: avalon-logkit:servlet
+Ignore: jython:servlet
+Ignore: ispell:ispell_dictionary,ispell_english_dictionary
+Ignore: aspell:aspel_dictionary,aspell_dictionary
+Ignore: smartlink-softmodem:kernel,kernel-nongpl
+Ignore: OpenOffice_org-de:myspell-german-dictionary
+Ignore: mediawiki:php-session,php-gettext,php-zlib,php-mysql,mod_php_any
+Ignore: squirrelmail:mod_php_any,php-session,php-gettext,php-iconv,php-mbstring,php-openssl
+
+Ignore: simias:mono(log4net)
+Ignore: zmd:mono(log4net)
+Ignore: horde:mod_php_any,php-gettext,php-mcrypt,php-imap,php-pear-log,php-pear,php-session,php
+Ignore: xerces-j2:xml-commons-apis,xml-commons-resolver
+Ignore: xdg-menu:desktop-data
+Ignore: nessus-libraries:nessus-core
+Ignore: evolution:yelp
+Ignore: mono-tools:mono(gconf-sharp),mono(glade-sharp),mono(gnome-sharp),mono(gtkhtml-sharp),mono(atk-sharp),mono(gdk-sharp),mono(glib-sharp),mono(gtk-sharp),mono(pango-sharp)
+Ignore: gecko-sharp2:mono(glib-sharp),mono(gtk-sharp)
+Ignore: vcdimager:libcdio.so.6,libcdio.so.6(CDIO_6),libiso9660.so.4,libiso9660.so.4(ISO9660_4)
+Ignore: libcdio:libcddb.so.2
+Ignore: gnome-libs:libgnomeui
+Ignore: nautilus:gnome-themes
+Ignore: gnome-panel:gnome-themes
+Ignore: gnome-panel:tomboy
+
+%ifnarch s390 s390x ia64
+Substitute: java2-devel-packages java2 java2-jre jpackage-utils
+%else
+ %ifarch ia64 s390
+Substitute: java2-devel-packages IBMJava2-SDK jpackage-utils
+ %endif
+ %ifarch s390x
+Substitute: java2-devel-packages IBMJava2-SDK jpackage-utils glibc-32bit baselibs-32bit
+ %endif
+%endif
+
+Substitute: yast2-devel-packages docbook-xsl-stylesheets doxygen libxslt perl-XML-Writer popt-devel sgml-skel update-desktop-files yast2 yast2-devtools yast2-packagemanager-devel yast2-perl-bindings yast2-testsuite
+
+%ifarch x86_64 ppc64 s390x sparc64
+Substitute: glibc-devel-32bit glibc-devel-32bit glibc-32bit baselibs-32bit
+%else
+ %ifarch ppc
+Substitute: glibc-devel-32bit glibc-devel-64bit glibc-64bit
+ %else
+Substitute: glibc-devel-32bit
+ %endif
+%endif
+
+%ifarch %ix86
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-bigsmp kernel-um
+%endif
+%ifarch ia64
+Substitute: kernel-binary-packages kernel-default kernel-sn2 kernel-64k-pagesize
+%endif
+%ifarch x86_64
+Substitute: kernel-binary-packages kernel-default kernel-smp
+%endif
+%ifarch ppc
+Substitute: kernel-binary-packages kernel-default kernel-pmac64_32bit kernel-power3 kernel-smp kernel-iseries64 kernel-pseries64 kernel-pmac64
+%endif
+%ifarch ppc64
+Substitute: kernel-binary-packages kernel-iseries64 kernel-pseries64 kernel-pmac64
+%endif
+%ifarch s390
+Substitute: kernel-binary-packages kernel-s390
+%endif
+%ifarch s390x
+Substitute: kernel-binary-packages kernel-s390x
+%endif
+
+Macros:
+%insserv_prereq aaa_base
+%fillup_prereq fillup fileutils
+%install_info_prereq texinfo
+%suse_version 810
+%sles_version 0
+%ul_version 1
+%_vendor suse
diff --git a/createrepomddeps b/createrepomddeps
new file mode 100755 (executable)
index 0000000..2aa1946
--- /dev/null
@@ -0,0 +1,467 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+  unshift @INC, ($::ENV{'BUILD_DIR'} || '/usr/lib/build');
+}
+
+use strict;
+use XML::Parser;
+use Data::Dumper;
+use Getopt::Long;
+use Build::Rpm;
+use Digest::MD5 qw(md5 md5_hex md5_base64);
+use File::Path qw(mkpath rmtree);
+use File::Basename;
+use LWP::UserAgent;
+use URI;
+Getopt::Long::Configure("no_ignore_case");
+
+my @parent = [];
+my @primaryfiles = ();
+my @packages = ();
+
+my $baseurl; # current url
+
+my $opt_dump;
+my $opt_old;
+my $opt_nosrc;
+my $opt_bc;
+my $cachedir = "/var/cache/build";
+
+my $old_seen = ();
+
+my $repomdparser = {
+  repomd => {
+    data => {
+      _start => \&repomd_handle_data_start,
+      location => {
+       _start => \&repomd_handle_location,
+      },
+    },
+  },
+};
+
+my $primaryparser = {
+  metadata => {
+    'package' => {
+      _start => \&primary_handle_package_start,
+      _end => \&primary_handle_package_end,
+      name => { _text => \&primary_collect_text, _end => \&primary_store_text },
+      arch => { _text => \&primary_collect_text, _end => \&primary_store_text },
+      version => { _start => \&primary_handle_version },
+      'time' => { _start => \&primary_handle_time },
+      format => {
+       'rpm:provides' => { 'rpm:entry' => { _start => \&primary_handle_package_provides }, },
+       'rpm:requires' => { 'rpm:entry' => { _start => \&primary_handle_package_requires }, },
+       'rpm:conflicts' => { 'rpm:entry' => { _start => \&primary_handle_package_conflicts }, },
+       'rpm:obsoletes' => { 'rpm:entry' => { _start => \&primary_handle_package_obsoletes }, },
+       'rpm:buildhost' => { _text => \&primary_collect_text, _end => \&primary_store_text },
+       'rpm:sourcerpm' => { _text => \&primary_collect_text, _end => \&primary_store_text },
+### currently commented out, as we ignore file provides in createrpmdeps
+#      file => {
+#        _start => \&primary_handle_file_start,
+#        _text => \&primary_collect_text,
+#        _end => \&primary_handle_file_end
+#      },
+      },
+      location => { _start => \&primary_handle_package_location },
+    },
+  },
+};
+
+# [ [tag, \%], ... ]
+my @cursor = ();
+
+sub repomd_handle_data_start
+{
+  my $p = shift;
+  my $el = shift;
+
+  my $attr = map_attrs(@_);
+  if($attr->{'type'} ne 'primary') {
+    pop @cursor;
+  }
+}
+
+sub repomd_handle_location
+{
+  my $p = shift;
+  my $el = shift;
+
+  my $attr = map_attrs(@_);
+  if(exists $attr->{'href'}) {
+    push @primaryfiles, { location => $attr->{'href'} };
+  }
+}
+
+sub generic_handle_start
+{
+  my $p = shift;
+  my $el = shift;
+
+  if(exists $cursor[-1]->[1]->{$el})
+  {
+    my $h = $cursor[-1]->[1]->{$el};
+    push @cursor, [$el, $h];
+    if(exists $h->{'_start'}) {
+      &{$h->{'_start'}}($p, $el, @_);
+    }
+  }
+}
+
+sub generic_handle_char
+{
+  my $p = shift;
+  my $text = shift;
+
+  my $h = $cursor[-1]->[1];
+
+  if(exists $h->{'_text'}) {
+    &{$h->{'_text'}}($p, $text);
+  }
+}
+
+sub generic_handle_end
+{
+  my $p = shift;
+  my $el = shift;
+
+  if(!defined $cursor[-1]->[0] || $cursor[-1]->[0] eq $el)
+  {
+    my $h = $cursor[-1]->[1];
+
+    if(exists $h->{'_end'}) {
+      &{$h->{'_end'}}($p, $el);
+    }
+
+    pop @cursor;
+  }
+}
+
+sub map_attrs
+{
+  my %h;
+  while(@_) {
+    my $k = shift;
+    $h{$k} = shift;
+  }
+
+  return \%h;
+}
+
+# expat does not guarantee that character data doesn't get split up
+# between multiple calls
+my $textbuf = '';
+sub primary_collect_text
+{
+  my $p = shift;
+  my $text = shift;
+
+  $textbuf .= $text;
+}
+
+sub primary_store_text
+{
+    my $p = shift;
+    my $el = shift;
+
+    $packages[-1]->{$cursor[-1]->[0]} = $textbuf;
+    $textbuf = '';
+}
+
+sub primary_handle_package_start
+{
+  my $p = shift;
+  my $el = shift;
+
+  my $attr = map_attrs(@_);
+
+  push @packages, { type => $attr->{'type'}, baseurl => $baseurl };
+}
+
+sub primary_handle_package_end
+{
+  my $p = shift;
+  my $el = shift;
+
+  if($opt_bc) {
+      printasbuildcachefile(@packages);
+      shift @packages;
+  } elsif ($opt_old) {
+      foreach my $pkg (@packages) {
+    my $arch = $pkg->{'arch'};
+    $arch = 'src' if $pkg->{'arch'} eq 'nosrc';
+    next if ($arch eq 'src' && $opt_nosrc);
+    if(exists($old_seen->{$pkg->{'name'}}->{$arch})) {
+       my $pv = $old_seen->{$pkg->{'name'}}->{$arch}->{'ver'};
+       my $rv = $pkg->{'ver'}.'-'.$pkg->{'rel'};
+       my $vv = Build::Rpm::verscmp($pv, $rv, 0);
+       if($vv < 0)
+       {
+      print $old_seen->{$pkg->{'name'}}->{$arch}->{'loc'}."\n";
+      $old_seen->{$pkg->{'name'}}->{$arch}->{'ver'} = $pkg->{'ver'}.'-'.$pkg->{'rel'};
+      $old_seen->{$pkg->{'name'}}->{$arch}->{'loc'} = $pkg->{'baseurl'} . $pkg->{'location'};
+       } else {
+      print $pkg->{'baseurl'} . $pkg->{'location'}."\n";
+       }
+    } else {
+       $old_seen->{$pkg->{'name'}}->{$arch}->{'ver'} = $pkg->{'ver'}.'-'.$pkg->{'rel'};
+       $old_seen->{$pkg->{'name'}}->{$arch}->{'loc'} = $pkg->{'baseurl'} . $pkg->{'location'};
+    }
+      }
+      shift @packages;
+  }
+}
+
+sub primary_handle_version
+{
+  my $p = shift;
+  my $el = shift;
+
+  my $attr = map_attrs(@_);
+  $packages[-1]->{'ver'} = $attr->{'ver'};
+  $packages[-1]->{'rel'} = $attr->{'rel'};
+}
+
+sub primary_handle_time
+{
+  my $p = shift;
+  my $el = shift;
+
+  my $attr = map_attrs(@_);
+  $packages[-1]->{'filetime'} = $attr->{'file'};
+  $packages[-1]->{'buildtime'} = $attr->{'build'};
+}
+
+sub primary_handle_package_location
+{
+  my $p = shift;
+  my $el = shift;
+
+  my $attr = map_attrs(@_);
+  $packages[-1]->{'location'} = $attr->{'href'};
+}
+
+sub primary_handle_file_start
+{
+  my $p = shift;
+  my $el = shift;
+
+  my $attr = map_attrs(@_);
+  if(exists $attr->{'type'}) {
+    pop @cursor;
+  }
+}
+
+sub primary_handle_file_end
+{
+  my $p = shift;
+  my $text = shift;
+
+  primary_handle_package_deps('provides', 'name', $textbuf);
+  $textbuf = '';
+}
+
+my %flagmap = (
+  EQ => '=',
+  LE => '<=',
+  GE => '>=',
+  GT => '>',
+  LT => '<',
+  NE => '!=',
+);
+
+sub primary_handle_package_deps
+{
+  my $dep = shift;
+  my $attr = map_attrs(@_);
+
+  if(exists $attr->{'flags'}) {
+    if(!exists($flagmap{$attr->{'flags'}})) {
+      print STDERR "bogus relation: ", $attr->{'flags'}, "\n";
+      return;
+    }
+    $attr->{'flags'} = $flagmap{$attr->{'flags'}};
+  }
+  return if($attr->{'name'} =~ /^rpmlib\(/);
+  push @{$packages[-1]->{$dep}}, $attr;
+
+}
+
+sub primary_handle_package_conflicts
+{
+  shift;shift; primary_handle_package_deps('conflicts', @_);
+}
+
+sub primary_handle_package_obsoletes
+{
+  shift;shift; primary_handle_package_deps('obsoletes', @_);
+}
+
+sub primary_handle_package_requires
+{
+  shift;shift; primary_handle_package_deps('requires', @_);
+}
+sub primary_handle_package_provides
+{
+  shift;shift; primary_handle_package_deps('provides', @_);
+}
+
+sub deps2string
+{
+  return join(' ', map {
+       my $s = $_->{'name'};
+       if(exists $_->{'flags'}) {
+         $s .= ' '.$_->{'flags'}.' ';
+         $s .= $_->{'epoch'}.':' if(exists $_->{'epoch'} && $_->{'epoch'} != 0);
+         $s .= $_->{'ver'};
+         $s .= '-'.$_->{'rel'} if exists $_->{'rel'};
+       }
+       $s
+      } @_);
+}
+
+sub printasbuildcachefile(@)
+{
+  foreach my $pkg (@_) {
+    next if $pkg->{'arch'} eq 'src' || $pkg->{'arch'} eq 'nosrc';
+    my $id = sprintf("%s.%s-%d/%d/%d: ",
+      $pkg->{'name'},
+      $pkg->{'arch'},
+      $pkg->{'buildtime'},
+      $pkg->{'filetime'},
+      0);
+    print "F:".$id. $pkg->{'baseurl'} . $pkg->{'location'} . "\n";
+
+    my $deps = deps2string(@{$pkg->{'provides'}});
+    print "P:$id$deps\n";
+
+    $deps = deps2string(@{$pkg->{'requires'}});
+    print "R:$id$deps\n";
+
+    my $tag = sprintf("%s-%s-%s %s",
+      $pkg->{'name'},
+      $pkg->{'ver'},
+      $pkg->{'rel'},
+#      $pkg->{'rpm:buildhost'},
+      $pkg->{'buildtime'});
+    print "I:$id$tag\n";
+  }
+}
+
+sub getmetadata
+{
+  my $url = $_[0];
+  my $dir = $_[1];
+
+  my $dest = $dir . "repodata";
+  mkpath($dest);
+  system($INC[0].'/download', $dest, $url . "repodata/repomd.xml");
+}
+
+### main
+
+GetOptions (
+    "nosrc"   => \$opt_nosrc,
+    "dump"   => \$opt_dump,
+    "old"   => \$opt_old,
+    "cachedir=s"  => \$cachedir,
+    ) or exit(1);
+
+$opt_bc = 1 unless ($opt_dump || $opt_old);
+
+my $p = new XML::Parser(
+  Handlers => {
+    Start => \&generic_handle_start,
+    End => \&generic_handle_end,
+    Char => \&generic_handle_char
+  });
+
+#my $url = '/mounts/mirror/SuSE/ftp.suse.com/pub/suse/update/10.1/';
+for my $url (@ARGV) {
+  my $dir;
+  if ($url =~ /^zypp:\/\/([^\/]*)\/?/) {
+    use Build::Zypp;
+    my $repo = Build::Zypp::parsecfg($1);
+    die "can't parse $1\n" unless $repo;
+    my $type = $repo->{'type'};
+    if($type eq 'rpm-md') {
+      my $name = $repo->{'name'};
+      $dir = "/var/cache/zypp/raw/$name/";
+      $baseurl = $url;
+      $baseurl .= '/' unless $baseurl =~ /\/$/;
+    } elsif ($type eq 'yast2') {
+      # XXX
+      exec ($INC[0].'/createyastdeps', $url);
+    } else {
+      die "unsupported repo type: $type\n";
+    }
+  } elsif ($url =~ /^http:\/\/([^\/]*)\/?/) {
+    my $repoid = md5_hex($url);
+    $dir = "$cachedir/$repoid/";
+    $baseurl = $url;
+    $baseurl .= '/' unless $baseurl =~ /\/$/;
+    getmetadata($baseurl, $dir);
+  } else {
+    $dir = $url;
+    $dir .= '/' unless $dir =~ /\/$/;
+    $baseurl = $dir;
+  }
+
+  @primaryfiles = ();
+  @cursor = ([undef, $repomdparser]);
+
+  $p->parsefile($dir . 'repodata/repomd.xml');
+
+#  print Dumper(\@primaryfiles);
+
+  foreach my $f (@primaryfiles) {
+    @cursor = ([undef, $primaryparser]);
+
+    my $u = $dir . $f->{'location'};
+    if ($url =~ /^http:\/\/([^\/]*)\/?/) {
+        if (system($INC[0].'/download', $dir . "repodata/", $baseurl . "repodata/" . basename($u))) {
+         die("download failed\n");
+       }
+    }
+    if ($] > 5.007) {
+       require Encode;
+       utf8::downgrade($u);
+    }
+    my $fh;
+    open($fh, '<', $u) or die "Error opening $u: $!\n";
+    if ($u =~ /\.gz$/) {
+       use IO::Uncompress::Gunzip qw($GunzipError);
+       $fh = new IO::Uncompress::Gunzip $fh or die "Error opening $u: $GunzipError\n";
+    }
+    $p->parse($fh);
+    close($fh);
+  }
+}
+
+if ($opt_dump) {
+    print Data::Dumper->Dump([\@packages], ['packages']); # caution: excessive memory consumption!
+}
+
+#if($rpmdepdump) {
+#    my %amap = map { $_ => 1 } @archs;
+#    my $packages = do $rpmdepdump or die $!;
+#
+#    foreach my $pkg (@$packages) {
+#        next if exists $packs{$pkg->{'name'}};
+#        next unless exists $amap{$pkg->{'arch'}};
+#        next if $pkg->{'arch'} eq 'src' || $pkg->{'arch'} eq 'nosrc';
+#        next if $pkg->{'location'} =~ /\.(?:patch|delta)\.rpm$/;
+#
+#        my $pa = $pkg->{'name'}.'.'.$pkg->{'arch'};
+#        $packs{$pkg->{'name'}} = $pa;
+#        $fn{$pa} = $pkg->{'baseurl'}.$pkg->{'location'};
+#        my $r = {};
+#        # flags and version ignored
+#        my @pr = map { $_->{'name'} } @{$pkg->{'provides'}};
+#        my @re = map { $_->{'name'} } @{$pkg->{'requires'}};
+#        $r->{'provides'} = \@pr;
+#        $r->{'requires'} = \@re;
+#        $repo{$pkg->{'name'}} = $r;
+#    }
+#}
diff --git a/createrpmdeps b/createrpmdeps
new file mode 100755 (executable)
index 0000000..c8c796d
--- /dev/null
@@ -0,0 +1,146 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+  unshift @INC, ($::ENV{'BUILD_DIR'} || '/usr/lib/build');
+}
+
+use Build;
+use strict;
+
+######################################################################
+
+my $rpmdepfile = $ARGV[0];
+
+my %tag;
+
+my %oldp;
+my %oldr;
+if (defined($rpmdepfile) && open(F, '<', $rpmdepfile)) {
+  while (<F>) {
+    chomp;
+    if (/^P:([^ ]): /) {
+      $oldp{$1} = $_;
+    } elsif (/^R:([^ ]): /) {
+      $oldr{$1} = $_;
+    }
+  }
+  close F;
+}
+
+my $redo = 1;
+foreach my $dir (@ARGV) {
+  $redo = 0;
+  my @known;
+  my %known2fn;
+  my %known2path;
+  my %fnsize2id;
+  my $cmd = "find $dir -follow -type f \\( -name \"*.rpm\" -o -name \"*.deb\" \\) -a ! -name \"*src.rpm\" -printf '\%T@/\%s/\%i \%p\\n'";
+  open(F, '-|', $cmd) or next;
+  while (<F>) {
+    chomp;
+    next unless /^([\d\.]+\/\d+\/\d+) (.*)$/;
+    my $id = $1;
+    my $path = $2;
+    # new find added a fraction part to %T@, ignore it
+    $id =~ s/^(\d+)\.\d+/$1/;
+    next unless $path =~ /\.(?:rpm|deb)$/;
+    my $fn = $path;
+    $fn =~ s/.*\///;
+    next if $fn =~ /\.(?:patch|delta)\.rpm$/;
+    my ($r, $arch);
+    if ($fn =~ /^(.*)-[^-]+-[^-]+\.([^\. ]+)\.rpm$/) {
+      $r = $1;
+      $arch = $2;
+    } elsif ($path =~ /^(?:.*\/)?([^\/ ]+)\/([^\/ ]+)\.rpm$/) {
+      #next if $1 eq '.';
+      $r = $2;
+      $arch = $1;
+    } elsif ($fn =~ /^([^_]*)_(?:[^_]*)_([^_]*)\.deb$/) {
+      $r = $1;
+      $arch = $2;
+      $arch = 'noarch' if $arch eq 'all';
+    } else {
+      next;
+    }
+    next if $arch eq 'src' || $arch eq 'nosrc';
+    push @known, "$r.$arch-$id";
+    $known2fn{"$r.$arch-$id"} = $fn;
+    $known2path{"$r.$arch-$id"} = $path;
+    my $size = (split('/', $id))[1];
+    $fnsize2id{"$fn-$size"} = $id;
+  }
+
+  close F;
+
+  my %newp;
+  my %newr;
+  for (@known) {
+    $newp{$_} = $oldp{$_} if $oldp{$_};
+    $newr{$_} = $oldr{$_} if $oldr{$_};
+  }
+
+  my @todo = grep {!($newp{$_} && $newr{$_})} @known;
+  if (@todo) {
+    for my $known (@todo) {
+      my $path = $known2path{$known};
+      if ($path =~ /\.rpm$/) {
+       my %res = Build::Rpm::rpmq($path, 1000, 1001, 1002, 1006, 1022, 1047, 1049, 1048, 1050, 1112, 1113);
+       next unless %res;
+       Build::Rpm::add_flagsvers(\%res, 1047, 1112, 1113);
+       Build::Rpm::add_flagsvers(\%res, 1049, 1048, 1050);
+       my $id = $known;
+       $id =~ s/.*-//;
+       if ($known ne "$res{1000}->[0].$res{1022}->[0]-$id") {
+         $known = "$res{1000}->[0].$res{1022}->[0]-$id";
+         if (!$known2path{$known}) {
+           push @known, $known;
+           $known2path{$known} = $path;
+         }
+       }
+       # rpm3 compatibility: retrofit missing self provides
+       my $name = $res{1000}->[0];
+       if (!@{$res{1047} || []} || $res{1047}->[-1] !~ /^\Q$name\E =/) {
+         my $evr = "$res{1001}->[0]-$res{1002}->[0]";
+         $evr = "$res{1003}->[0]:$evr" if $res{1003} && $res{1003}->[0];
+         push @{$res{1047}}, "$name = $evr";
+       }
+
+       $newp{$known} = "P:$known: ".join(' ', @{$res{1047} || []});
+       $newr{$known} = "R:$known: ".join(' ', @{$res{1049} || []});
+       #$tag{$known} = $res{1000}->[0]."-".$res{1001}->[0]."-".$res{1002}->[0]." ".$res{1007}->[0]."-".$res{1006}->[0];
+       $tag{$known} = $res{1000}->[0]."-".$res{1001}->[0]."-".$res{1002}->[0]." ".$res{1006}->[0];
+      } else {
+       my %res = Build::Deb::debq($path);
+       next unless %res;
+       my ($dn, $da) = ($res{'PACKAGE'}, $res{'ARCHITECTURE'});
+       $da = 'noarch' if $da eq 'all';
+       my $id = $known;
+       $id =~ s/.*-//;
+       if ($known ne "$dn.$da-$id") {
+         $known = "$dn.$da-$id";
+         if (!$known2path{$known}) {
+           push @known, $known;
+           $known2path{$known} = $path;
+         }
+       }
+       my @provides = split(',\s*', $res{'PROVIDES'} || '');
+       my @depends = split(',\s*', $res{'DEPENDS'} || '');
+       my @predepends = split(',\s*', $res{'PRE-DEPENDS'} || '');
+       s/\s.*// for @provides;   #for now
+       s/\s.*// for @depends;    #for now
+       s/\s.*// for @predepends; #for now
+       push @depends, @predepends;
+       push @provides, $res{'PACKAGE'};
+       $newp{$known} = "P:$known: ".join(' ', @provides);
+       $newr{$known} = "R:$known: ".join(' ', @depends);
+      }
+    }
+  }
+  @known = grep {$newp{$_} && $newr{$_}} @known;
+  for (@known) {
+    print "F:$_: $known2path{$_}\n";
+    print "$newp{$_}\n";
+    print "$newr{$_}\n";
+    print "I:$_: $tag{$_}\n" if exists $tag{$_};
+  }
+}
diff --git a/createyastdeps b/createyastdeps
new file mode 100755 (executable)
index 0000000..a17bd74
--- /dev/null
@@ -0,0 +1,104 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+  unshift @INC, ($::ENV{'BUILD_DIR'} || '/usr/lib/build');
+}
+
+use Build;
+use Build::Susetags;
+use strict;
+
+sub print_pkg($)
+{
+  my $pkg = shift;
+
+  return if $pkg->{'arch'} eq 'src' || $pkg->{'arch'} eq 'nosrc';
+  my $id = sprintf("%s.%s-%d/%d/%d: ",
+    $pkg->{'name'},
+    $pkg->{'arch'},
+    $pkg->{'buildtime'},
+    0,
+    0);
+  print sprintf('F:%s%ssuse/%s/%s',$id,$pkg->{'baseurl'},
+    $pkg->{'arch'}, $pkg->{'location'}), "\n";
+
+  print "P:$id".$pkg->{'provides'}."\n";
+  print "R:$id".$pkg->{'requires'}."\n";
+
+  my $tag = sprintf("%s-%s-%s %s",
+    $pkg->{'name'},
+    $pkg->{'version'},
+    $pkg->{'release'},
+#    $pkg->{'rpm:buildhost'},
+    $pkg->{'buildtime'});
+  print "I:$id$tag\n";
+}
+
+sub callback
+{
+  my ($pkg, $url) = @_;
+  $pkg->{'provides'} = [] unless exists $pkg->{'provides'};
+  # add self provides (rpm3 misses that)
+  my $n = $pkg->{'name'};
+  if(substr($pkg->{'arch'}, -3) ne 'src' && !scalar grep(/^\Q$n\E( =.*)?$/,@{$pkg->{'provides'}}))
+  {
+    push @{$pkg->{'provides'}}, sprintf("%s = %s-%s", $pkg->{'name'}, $pkg->{'version'}, $pkg->{'release'});
+  }
+  $pkg->{'provides'} = join(' ', @{$pkg->{'provides'}});
+  $pkg->{'requires'} = join(' ', @{$pkg->{'requires'}}) if $pkg->{'requires'};
+  $pkg->{'baseurl'} = $url;
+  my @data = split(' ', $pkg->{'location'});
+  # multi cd support hack
+  my $num = $data[0];
+  if($pkg->{'baseurl'} =~ /1\/$/ && $num ne 0) {
+    $pkg->{'baseurl'} =~ s/1\/$/$num\//;
+  }
+  $pkg->{'location'} = $data[1];
+
+  print_pkg($pkg);
+
+  return 0;
+}
+
+for my $url (@ARGV) {
+  my $dir;
+  if ($url =~ /^zypp:\/\/([^\/]*)\/?/) {
+    use Build::Zypp;
+    my $repo = Build::Zypp::parsecfg($1);
+    die "can't parse $1\n" unless $repo;
+    die "only yast2 repos supported\n" unless $repo->{'type'} eq 'yast2';
+    my $name = $repo->{'name'};
+    $dir = "/var/cache/zypp/raw/$name/";
+  } else {
+    $dir = $url;
+  }
+
+# a really fucked up system
+#  if (-e $url."/yast/order") {
+#    if(open(F, '<', $url."/yast/order")) {
+#      my $found_products;
+#      while(<F>) {
+#        chomp;
+#        my ($a, $b) = split(/ /);
+#        $a =~ s/^\///;
+#        if(-e $url.$a)
+#        {
+#          push @ARGV, $url.$a;
+#          $found_products = 1;
+#          print STDERR "$url -> $url$a\n";
+#        }
+#      }
+#      close(F);
+#      next if $found_products;
+#    }
+#  }
+  # XXX: location is actually defined in content file
+  my $packages = $dir.'/suse/setup/descr/packages';
+  
+  $url .= '/' unless $url =~ /\/$/;
+
+  my @order = ();
+  my $pkgs = Build::Susetags::parse($packages,
+    { 'Loc' => 'location', 'Prv' => 'provides', 'Req' => 'requires', 'Tim' => 'buildtime' },
+    { cb => \&callback, data => $url });
+}
diff --git a/debtransform b/debtransform
new file mode 100755 (executable)
index 0000000..8f6e862
--- /dev/null
@@ -0,0 +1,306 @@
+#!/usr/bin/perl -w
+
+use strict;
+use Digest::MD5;
+
+sub parsedsc {
+  my ($fn) = @_;
+  my @control;
+  local *F;
+  open(F, '<', $fn) || die("$fn: $!\n");
+  @control = <F>;
+  close F;
+  chomp @control;
+  splice(@control, 0, 3) if @control > 3 && $control[0] =~ /^-----BEGIN/;
+  my @seq = ();
+  my %tag;
+  while (@control) {
+    my $c = shift @control;
+    last if $c eq '';   # new paragraph
+    my ($tag, $data) = split(':', $c, 2);
+    next unless defined $data;
+    push @seq, $tag;
+    $tag = uc($tag);
+    while (@control && $control[0] =~ /^\s/) {
+      $data .= "\n".substr(shift @control, 1);
+    }
+    $data =~ s/^\s+//s;
+    $data =~ s/\s+$//s;
+    $tag{$tag} = $data;
+  }
+  $tag{'__seq'} = \@seq;
+  return \%tag;
+}
+
+sub writedsc {
+  my ($fn, $tags) = @_;
+  open(F, '>', $fn) || die("$fn: $!\n");
+  my @seq = @{$tags->{'__seq'} || []};
+  my %seq = map {uc($_) => 1} @seq;
+  for (sort keys %$tags) {
+    push @seq, ucfirst(lc($_)) unless $seq{$_};
+  }
+  for my $seq (@seq) {
+    my $ucseq = uc($seq);
+    my $d = $tags->{$ucseq};
+    next unless defined $d;
+    $d =~ s/\n/\n /sg;
+    print F "$seq: $d\n";
+  }
+  print F "\n";
+  close F;
+}
+
+sub listtar {
+  my ($tar) = @_;
+  local *F;
+  my @c;
+  open(F, '-|', 'tar', '--numeric-owner', '-tvf', $tar) || die("tar: $!\n");
+  while(<F>) {
+    next unless /^([-dlbcp])(.........)\s+\d+\/\d+\s+(\S+) \d\d\d\d-\d\d-\d\d \d\d:\d\d(?::\d\d)? (.*)$/;
+    my ($type, $mode, $size, $name) = ($1, $2, $3, $4);
+    next if $type eq 'd';
+    die("debian tar contains link: $name\n") if $type eq 'l';
+    die("debian tar contains unexpected file type: $name\n") if $type ne '-';
+    $name =~ s/^\.\///;
+    $name =~ s/^debian\///;
+    push @c, {'name' => $name, 'size' => $size};
+  }
+  close(F) || die("tar: $!\n");
+  return @c;
+}
+
+sub dotar {
+  my ($tar, $tardir, $origin, @c) = @_;
+  local *F;
+  open(F, '-|', 'tar', '-xOf', $tar) || die("tar: $!\n");
+  for my $c (@c) {
+    my $s = $c->{'size'};
+    my $file = '';
+    while ($s > 0) {
+      my $l = sysread(F, $file, $s, length($file));
+      die("tar read error\n") unless $l;
+      $s -= $l;
+    }
+    next if $origin && $origin->{$c->{'name'}} ne $tar;
+    my @file = split("\n", $file);
+    print DIFF "--- $tardir.orig/debian/$c->{'name'}\n";
+    print DIFF "+++ $tardir/debian/$c->{'name'}\n";
+    next unless @file;
+    print DIFF "\@\@ -0,0 +1,".scalar(@file)." \@\@\n";
+    print DIFF "+$_\n" for @file;
+  }
+  close(F);
+}
+
+sub dofile {
+  my ($file, $tardir, $dfile) = @_;
+  local *F;
+  open(F, '<', $file) || die("$file: $!\n");
+  my @file = <F>;
+  close F;
+  chomp(@file);
+  print DIFF "--- $tardir.orig/$dfile\n";
+  print DIFF "+++ $tardir/$dfile\n";
+  return unless @file;
+  print DIFF "\@\@ -0,0 +1,".scalar(@file)." \@\@\n";
+  print DIFF "+$_\n" for @file;
+}
+
+sub doseries {
+  my ($series, $tardir) = @_;
+  my $dir = $series;
+  $dir =~ s/[^\/]+$//;
+  $dir =~ s/\/+$//;
+  $dir = '.' if $dir eq '';
+  local *F;
+  open(F, '<', $series) || die("$series: $!\n");
+  my @series = <F>;
+  close F;
+  chomp(@series);
+  for my $patch (@series) {
+    $patch =~ s/(^|\s+)#.*//;
+    next if $patch =~ /^\s*$/;
+    my $level = 1;
+    $level = $1 if $patch =~ /\s.*-p\s*(\d+)/;
+    $patch =~ s/\s.*//;
+    open(F, '<', "$dir/$patch") || die("$dir/$patch: $!\n");
+    while(<F>) {
+      chomp;
+      if ((/^--- ./ || /^\+\+\+ ./) && !/^... \/dev\/null/) {
+       my $start = substr($_, 0, 4);
+       $_ = substr($_, 4);
+       my $l = $level;
+       while ($l > 0) {
+         last unless s/.*?\///;
+         $l--;
+       }
+       if ($start eq '--- ') {
+         print DIFF "$start$tardir.orig/$_\n";
+       } else {
+         print DIFF "$start$tardir/$_\n";
+       }
+       next;
+      }
+      print DIFF "$_\n";
+    }
+    close F;
+  }
+}
+
+sub addfile {
+  my ($file) = @_;
+  my $base = $file;
+  $base =~ s/.*\///;
+  local *F;
+  open(F, '<', $file) || die("$file: $!\n");
+  my $size = -s F;
+  my $ctx = Digest::MD5->new;
+  $ctx->addfile(*F);
+  close F;
+  my $md5 = $ctx->hexdigest();
+  return "$md5 $size $base";
+}
+
+my $changelog;
+
+if (@ARGV > 1 && $ARGV[0] eq '--changelog') {
+  shift @ARGV;
+  $changelog = shift @ARGV;
+}
+die("usage: debtransform [--changelog <changelog>] <srcdir> <dscfile> <outdir>\n") unless @ARGV == 3;
+
+my $dir = $ARGV[0];
+my $dsc = $ARGV[1];
+my $out = $ARGV[2];
+
+die("$out: $!\n") unless -d $out;
+
+my $tags = parsedsc($dsc);
+
+opendir(D, $dir) || die("$dir: $!\n");
+my @dir = grep {$_ ne '.' && $_ ne '..'} readdir(D);
+closedir(D);
+my %dir = map {$_ => 1} @dir;
+
+my $tarfile = $tags->{'DEBTRANSFORM-TAR'};
+my @debtarfiles;
+if ($tags->{'DEBTRANSFORM-FILES-TAR'}) {
+  @debtarfiles = split(' ', $tags->{'DEBTRANSFORM-FILES-TAR'});
+}
+
+if (!$tarfile || !@debtarfiles) {
+  my @tars = grep {/\.tar(?:\.gz|\.bz2)?$/} @dir;
+  my @debtars = grep {/^debian\.tar(?:\.gz|\.bz2)?$/} @tars;
+  if (!$tarfile) {
+    @tars = grep {!/^debian\.tar(?:\.gz|\.bz2)?$/} @tars;
+    if (@debtarfiles) {
+      my %debtarfiles = map {$_ => 1} @debtarfiles;
+      @tars = grep {!$debtarfiles{$_}} @tars;
+    }
+    die("package contains no tar file\n") unless @tars;
+    die("package contains more than one tar file: @tars\n") if @tars > 1;
+    $tarfile = $tars[0];
+  }
+  if (@debtars && !exists($tags->{'DEBTRANSFORM-FILES-TAR'})) {
+    die("package contains more than one debian tar file\n") if @debtars > 1;
+    @debtarfiles = ($debtars[0]);
+  }
+}
+
+my $name = $tags->{'SOURCE'};
+die("dsc file contains no source\n") unless defined($name);
+my $version = $tags->{'VERSION'};
+die("dsc file contains no version\n") unless defined($version);
+$version =~ s/^\d+://; # no epoch in version, please
+
+# transform 
+my $tmptar;
+if ($tarfile =~ /\.tar\.bz2/) {
+    my $old = $tarfile;
+    $tarfile =~ s/\.tar\.bz2/\.tar\.gz/;
+    $tmptar = "$out/$tarfile";
+    print "converting $old to $tarfile\n";
+    system( ( "debtransformbz2", "$old", "$tmptar" )) == 0 || die("cannot transform .tar.bz2 to .tar.gz");
+}
+if ($tarfile =~ /\.zip/) {
+    my $old = $tarfile;
+    $tarfile =~ s/\.zip/\.tar\.gz/;
+    $tmptar = "$out/$tarfile";
+    print "converting $old to $tarfile\n";
+    system( ( "debtransformzip", "$old", "$tmptar" )) == 0 || die("cannot transform .zip to .tar.gz");
+}
+
+my $tardir = $tarfile;
+$tardir =~ s/\.orig\.tar/\.tar/;
+$tardir =~ s/\.tar.*?$//;
+
+my @files;
+my $v = $version;
+$v =~ s/-[^-]*$//;
+$tarfile =~ /.*(\.tar.*?)$/;
+my $ntarfile = "${name}_$v.orig$1";
+if( $tmptar ) {
+  link("$tmptar", "$out/$ntarfile") || die("link $dir/$tarfile $out/$ntarfile: $!\n");
+  unlink("$tmptar");
+} else {
+  link("$dir/$tarfile", "$out/$ntarfile") || die("link $dir/$tarfile $out/$ntarfile: $!\n");
+}
+push @files, addfile("$out/$ntarfile");
+
+open(DIFF, '>', "$out/${name}_$version.diff") || die("$out/${name}_$version.diff: $!\n");
+
+undef $changelog if $dir{'debian.changelog'};
+
+my %debtarorigin;
+my %debtarcontent;
+for my $debtarfile (@debtarfiles) {
+  my @c = listtar("$dir/$debtarfile");
+  $debtarcontent{$debtarfile} = \@c;
+  for (@c) {
+    die("debian tar and directory both contain '$_->{'name'}'\n") if $dir{"debian.$_->{'name'}"};
+    undef $changelog if $_->{'name'} eq 'changelog';
+    $debtarorigin{$_->{'name'}} = "$dir/$debtarfile";
+  }
+}
+
+dofile($changelog, $tardir, 'debian/changelog') if defined $changelog;
+
+for my $debtarfile (@debtarfiles) {
+  dotar("$dir/$debtarfile", $tardir, \%debtarorigin, @{$debtarcontent{$debtarfile} });
+}
+
+for my $file (grep {/^debian\./} @dir) {
+  next if $file eq 'debian.series';
+  next if $file =~ /\.tar$/;
+  next if $file =~ /\.tar\./;
+  dofile("$dir/$file", $tardir, 'debian/'.substr($file, 7));
+}
+
+if ($tags->{'DEBTRANSFORM-SERIES'}) {
+  doseries("$dir/$tags->{'DEBTRANSFORM-SERIES'}", $tardir);
+} elsif ($dir{"debian.series"}) {
+  doseries("$dir/debian.series", $tardir);
+} elsif ($dir{"patches.series"}) {
+  doseries("$dir/patches.series", $tardir);
+}
+
+close(DIFF);
+
+if (! -s "$out/${name}_$version.diff") {
+  unlink("$out/${name}_$version.diff");
+} else {
+  system('gzip', '-9', "$out/${name}_$version.diff");
+  if (-f "$out/${name}_$version.diff.gz") {
+    push @files, addfile("$out/${name}_$version.diff.gz");
+  } else {
+    push @files, addfile("$out/${name}_$version.diff");
+  }
+}
+
+$tags->{'FILES'} = "\n".join("\n", @files);
+delete $tags->{'DEBTRANSFORM-SERIES'};
+delete $tags->{'DEBTRANSFORM-TAR'};
+delete $tags->{'DEBTRANSFORM-FILES-TAR'};
+writedsc("$out/${name}_$version.dsc", $tags);
+exit(0);
diff --git a/debtransformbz2 b/debtransformbz2
new file mode 100755 (executable)
index 0000000..01c1e9d
--- /dev/null
@@ -0,0 +1,11 @@
+#! /bin/bash
+
+if test $# -ne 2; then
+    exit 1
+fi
+
+bz="$1"
+tar="$2"
+
+bzcat "$bz" | gzip -f - >"$tar" || exit 1
+exit 0
diff --git a/debtransformzip b/debtransformzip
new file mode 100755 (executable)
index 0000000..2054c12
--- /dev/null
@@ -0,0 +1,14 @@
+#! /bin/bash
+
+if test $# -ne 2; then
+    exit 1
+fi
+
+zip="$1"
+tar="$2"
+
+tmp=$(mktemp -d)
+unzip -q -d "$tmp" -- "$zip" || exit 1
+( cd "$tmp" && tar czO * ) >"$tar" || exit 1
+rm -r "$tmp"
+exit 0
diff --git a/download b/download
new file mode 100755 (executable)
index 0000000..8b75ebf
--- /dev/null
+++ b/download
@@ -0,0 +1,48 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+  unshift @INC, ($::ENV{'BUILD_DIR'} || '/usr/lib/build');
+}
+
+use LWP::UserAgent;
+use URI;
+use File::Path;
+use File::Basename;
+
+use strict;
+
+die "USAGE: $0 DIR URLS..." unless $#ARGV >= 1;
+
+my $dir = shift @ARGV;
+
+my $ua = LWP::UserAgent->new(
+  agent => "openSUSE build script",
+  env_proxy => 1,
+  timeout => 42);
+
+for my $url (@ARGV) {
+  if ($url =~ /^zypp:\/\/([^\/]*)\/?/) {
+    use Build::Zypp;
+    my $repo = Build::Zypp::parsecfg($1);
+    die "can't parse $1\n" unless $repo;
+    die "missing url in repo ".$repo->{'name'}."\n" unless exists $repo->{'baseurl'};
+    my $u = $repo->{'baseurl'};
+    $u .= '/' unless substr($u, -1, 1) eq '/';
+    $url =~ s/^zypp:\/\/[^\/]*\/*//;
+    $url = URI->new($u.$url)
+  } else {
+    $url = URI->new($url);
+  }
+  my $dest = "$dir/".basename($url->path);
+  unlink($dest);       # just in case
+  my $retry = 3;
+  while ($retry--) {
+    my $res = $ua->mirror($url, $dest);
+    last if $res->is_success;
+    # if it's a redirect we probably got a bad mirror and should just retry
+    die "reqesting $url failed: ".$res->status_line."\n" unless $retry && $res->previous;
+    warn "retrying $url\n";
+  }
+}
+
+# vim:sw=2
diff --git a/expanddeps b/expanddeps
new file mode 100755 (executable)
index 0000000..554c1e8
--- /dev/null
@@ -0,0 +1,266 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+  unshift @INC, ($::ENV{'BUILD_DIR'} || '/usr/lib/build');
+}
+
+use strict;
+
+use Build;
+
+my ($dist, $rpmdeps, $archs, $configdir, $useusedforbuild);
+
+while (@ARGV)  {
+  if ($ARGV[0] eq '--dist') {
+    shift @ARGV;
+    $dist = shift @ARGV;
+    next;
+  }
+  if ($ARGV[0] eq '--depfile') {
+    shift @ARGV;
+    $rpmdeps = shift @ARGV;
+    next;
+  }
+  if ($ARGV[0] eq '--archpath') {
+    shift @ARGV;
+    $archs = shift @ARGV;
+    next;
+  }
+  if ($ARGV[0] eq '--configdir') {
+    shift @ARGV;
+    $configdir = shift @ARGV;
+    next;
+  }
+  if ($ARGV[0] eq '--useusedforbuild') {
+    shift @ARGV;
+    $useusedforbuild = 1;
+    next;
+  }
+  if ($ARGV[0] eq '--define') {
+    shift @ARGV;
+    my $def = shift @ARGV;
+    Build::define($def);
+    next;
+  }
+  if ($ARGV[0] eq '--with') {
+    shift @ARGV;
+    my $def = shift @ARGV;
+    Build::define("_with_$def --with-$def");
+    next;
+  }
+  if ($ARGV[0] eq '--without') {
+    shift @ARGV;
+    my $def = shift @ARGV;
+    Build::define("_without_$def --without-$def");
+    next;
+  }
+  last;
+}
+$configdir = '.' unless defined $configdir;
+$archs = '' unless defined $archs;
+die("you must specfiy a depfile!\n") unless defined $rpmdeps;
+
+my @extradeps = grep {!/\.(?:spec|dsc|kiwi)$/} @ARGV;
+my @specs = grep {/\.(?:spec|dsc|kiwi)$/} @ARGV;
+die("can only work with at most one spec\n") if @specs > 1;
+my $spec = $specs[0];
+
+my @archs = split(':', $archs);
+push @archs, 'noarch' unless grep {$_ eq 'noarch'} @archs;
+
+my (%fn, %prov, %req);
+
+my %packs;
+my %repo;
+my %ids;
+
+my %packs_arch;
+my %packs_done;
+open(F, '<', $rpmdeps) || die("$rpmdeps: $!\n");
+# WARNING: the following code assumes that the 'I' tag comes last
+my ($pkgF, $pkgP, $pkgR);
+while(<F>) {
+  chomp;
+  if (/^F:(.*?)-\d+\/\d+\/\d+: (.*)$/) {
+    $pkgF = $2;
+    next if $fn{$1};
+    $fn{$1} = $2;
+    my $pack = $1;
+    $pack =~ /^(.*)\.([^\.]+)$/ or die;
+    push @{$packs_arch{$2}}, $1;
+  } elsif (/^P:(.*?)-\d+\/\d+\/\d+: (.*)$/) {
+    $pkgP = $2;
+    next if $prov{$1};
+    $prov{$1} = $2;
+  } elsif (/^R:(.*?)-\d+\/\d+\/\d+: (.*)$/) {
+    $pkgR = $2;
+    next if $req{$1};
+    $req{$1} = $2;
+  } elsif (/^I:(.*?)-\d+\/\d+\/\d+: (.*)$/) {
+    if ($ids{$1} && !$packs_done{$1} && defined($pkgF) && defined($pkgP) && defined($pkgR)) {
+      my $i = $1;
+      my $oldid = $ids{$1};
+      my $newid = $2;
+      if (Build::Rpm::verscmp($oldid, $newid) < 0) {
+        $ids{$i}  = $newid;
+        $fn{$i}   = $pkgF;
+        $prov{$i} = $pkgP;
+        $req{$i}  = $pkgR;
+      }
+    } else {
+      next if $ids{$1};
+      $ids{$1} = $2;
+    }
+    undef $pkgF;
+    undef $pkgP;
+    undef $pkgR;
+  } elsif ($_ eq 'D:') {
+    %packs_done = %ids;
+  }
+}
+close F;
+
+for my $arch (@archs) {
+  $packs{$_} ||= "$_.$arch" for @{$packs_arch{$arch} || []};
+}
+
+# XXX: move to separate tool
+if (!defined($dist) || $dist eq '') {
+  my $rpmarch = (grep {$fn{"rpm.$_"}} @archs)[0];
+  if (!$rpmarch) {
+    $dist = 'default';
+  } else {
+    my $rpmfn = $fn{"rpm.$rpmarch"};
+    if ($rpmfn =~ /^[a-z]+:\/\//) {
+      require File::Temp;
+      my $tmpdir = File::Temp::tempdir('CLEANUP' => 1);
+      $rpmfn =~ s/.*\//$tmpdir\// unless system("$INC[0]/download", $tmpdir, $rpmfn);
+    }
+    my $rpmdist = '';
+    if ($rpmfn =~ /^\// && -e $rpmfn) {
+      my %res = Build::Rpm::rpmq($rpmfn, 1010);
+      $rpmdist = $res{1010}->[0] || '';
+    }
+    $dist = Build::dist_canon($rpmdist, $archs[0]);
+  }
+  print STDERR "Warning: distribution not specified, assuming '$dist' (see $configdir).\n";
+}
+
+my $cf = Build::read_config_dist($dist, $archs[0], $configdir);
+$cf->{'warnings'} = 1;
+
+my $dofileprovides = %{$cf->{'fileprovides'}};
+
+for my $pack (keys %packs) {
+  my $r = {};
+  my (@s, $s, @pr, @re);
+  @s = split(' ', $prov{$packs{$pack}});
+  while (@s) {
+    $s = shift @s;
+    next if !$dofileprovides && $s =~ /^\//;
+    if ($s =~ /^rpmlib\(/) {
+      splice(@s, 0, 2);
+      next;
+    }
+    push @pr, $s;
+    splice(@s, 0, 2) if @s && $s[0] =~ /^[<=>]/;
+  }
+  @s = split(' ', $req{$packs{$pack}});
+  while (@s) {
+    $s = shift @s;
+    next if !$dofileprovides && $s =~ /^\//;
+    if ($s =~ /^rpmlib\(/) {
+      splice(@s, 0, 2);
+      next;
+    }
+    push @re, $s;
+    splice(@s, 0, 2) if @s && $s[0] =~ /^[<=>]/;
+  }
+  $r->{'provides'} = \@pr;
+  $r->{'requires'} = \@re;
+  $repo{$pack} = $r;
+}
+
+
+#######################################################################
+
+sub print_rpmlist
+{
+  for (@_) {
+    print "$_ $fn{$packs{$_}}\n";
+    print "rpmid: $_:$ids{$packs{$_}}\n" if exists $ids{$packs{$_}};
+  }
+  print "preinstall: @{$cf->{'preinstall'} || []}\n";
+  print "vminstall: @{$cf->{'vminstall'} || []}\n";
+  print "cbpreinstall: @{$cf->{'cbpreinstall'} || []}\n"; # preinstall if is_emulator_arch
+  print "cbinstall: @{$cf->{'cbinstall'} || []}\n";       # install if is_emulator_arch
+  print "runscripts: @{$cf->{'runscripts'} || []}\n";
+  print "dist: $dist\n" if defined $dist;
+}
+
+if ($useusedforbuild) {
+  die("Need a specfile/dscfile for --usedforbuild\n") unless defined $spec;
+  local *F;
+  open(F, '<', $spec) || die("$spec: $!\n");
+  my @usedforbuild;
+  my @buildrequires;
+  while(<F>) {
+    chomp;
+    if (/^#\s*usedforbuild\s*(.*)$/) {
+      push @usedforbuild, split(' ', $1);
+    }
+    if (/^buildrequires:\s*(.*)$/i) {
+      push @buildrequires, split(' ', $1);
+    }
+  }
+  close F;
+  @usedforbuild = @buildrequires unless @usedforbuild;
+  @usedforbuild = Build::unify(@usedforbuild) if @usedforbuild;
+  my @errors;
+  for (@usedforbuild) {
+    push @errors, "package $_ not found" unless $packs{$_} && $fn{$packs{$_}};
+  }
+  if (@errors) {
+    print STDERR "expansion error\n";
+    print STDERR "  $_\n" for @errors;
+    exit(1);
+  }
+  print_rpmlist(@usedforbuild);
+  exit(0);
+}
+
+#######################################################################
+
+my ($packname, $packvers, $subpacks, @packdeps);
+$subpacks = [];
+
+if ($spec) {
+  my $d;
+  if ($spec =~ /\.kiwi$/) {
+    # just set up kiwi root for now
+    $d = {
+      'deps' => [ 'kiwi', 'zypper', 'createrepo', 'squashfs' ],
+      'subpacks' => [],
+    };
+  } else {
+    $d = Build::parse($cf, $spec);
+  }
+  $packname = $d->{'name'};
+  $packvers = $d->{'version'};
+  $subpacks = $d->{'subpacks'};
+  @packdeps = @{$d->{'deps'} || []};
+}
+
+Build::readdeps($cf, undef, \%repo);
+
+#######################################################################
+
+my @bdeps = Build::get_build($cf, $subpacks, @packdeps, @extradeps);
+
+if (!shift @bdeps) {
+  print STDERR "expansion error\n";
+  print STDERR "  $_\n" for @bdeps;
+  exit(1);
+}
+
+print_rpmlist(@bdeps);
diff --git a/extractbuild b/extractbuild
new file mode 100755 (executable)
index 0000000..5b5da86
--- /dev/null
@@ -0,0 +1,101 @@
+#!/usr/bin/perl -w
+
+use strict;
+
+# buffer size for reading
+my $bufsize = 4*1024*1024;
+
+my ($opt_skip, $opt_disk, $opt_input, $opt_verbose);
+
+while (@ARGV)  {
+  if ($ARGV[0] eq '--skip') {
+    shift @ARGV;
+    $opt_skip = shift @ARGV;
+    next;
+  }
+  if ($ARGV[0] eq '--disk') {
+    shift @ARGV;
+    $opt_disk = shift @ARGV;
+    next;
+  }
+  if ($ARGV[0] eq '--input') {
+    shift @ARGV;
+    $opt_input = shift @ARGV;
+    next;
+  }
+  if ($ARGV[0] eq '--verbose' || $ARGV[0] eq '-v') {
+    shift @ARGV;
+    $opt_verbose = 1;
+    next;
+  }
+  last;
+}
+
+die "need to specify disk image\n" unless $opt_disk;
+
+open(F, '<', $opt_disk) || die "$opt_disk: $!\n";
+
+if($opt_input) {
+  open(S, '<', $opt_input) || die "$opt_input: $!\n";
+} else {
+  open(S, '<&STDIN') || die "can't dup stdin: $!\n";
+}
+
+# skip build status
+if($opt_skip) {
+  seek(S, $opt_skip, 0) || die "$!\n";
+}
+
+while(<S>) {
+  chomp;
+  last unless length $_;
+  my ($file, $filesize, $blksize, @blocks) = split(/ /);
+  if($#blocks == -1) {
+    die "invalid input\n";
+  }
+  $filesize = int($filesize);
+  $blksize = int($blksize);
+  die "invalid block size" unless ($blksize > 0 && $blksize <= $bufsize);
+  my $maxblocks = int($bufsize/$blksize);
+  $file =~ s/.*\///; # ensure basename, also stops directory traversal
+  $file =~ s/[^[:print:]]/_/g; # no binary junk in file names
+  print "$file\n" if $opt_verbose;
+  open (O, '>', $file) or die "$file: $!";
+  for my $block (@blocks) {
+    my ($block, $end) = split(/-/, $block);
+    $block = int($block);
+
+    if($block == 0) { # a hole!
+      seek(O, $blksize, 1);
+      $filesize -= $blksize;
+      next;
+    }
+
+    $end = $block unless $end;
+    $end = int($end);
+    seek(F, $block*$blksize, 0) || die "$file: seek: $!\n";
+    while($block <= $end && $filesize) {
+      my $size;
+      if($end == $block) {
+       $size = $blksize;
+       ++$block;
+      } elsif($maxblocks >= $end-$block) {
+       $size = ($end-$block)*$blksize;
+       $block += $end-$block;
+      } else {
+       $size = $maxblocks*$blksize;
+       $block += $maxblocks;
+      }
+      $size = $filesize if $size > $filesize;
+      my $buf;
+      if((sysread(F, $buf, $size) || 0) != $size) {
+       die "$file: read: $!\n";
+      }
+      $filesize -= $size;
+      print O $buf;
+    }
+  }
+  close O;
+  # sanity check
+  die "$file: invalid file size ($filesize byes left)\n" if $filesize != 0;
+}
diff --git a/getbinaryid b/getbinaryid
new file mode 100755 (executable)
index 0000000..55c57f6
--- /dev/null
@@ -0,0 +1,57 @@
+#!/usr/bin/perl
+
+BEGIN {
+  unshift @INC, ($::ENV{'BUILD_DIR'} || '/usr/lib/build');
+}
+
+use Build;
+use strict;
+
+my $createmeta;
+my $manifest;
+
+while (@ARGV) {
+  if ($ARGV[0] eq '--createmeta')
+    {
+      shift @ARGV;
+      $createmeta = 1;
+      next;
+    }
+  if ($ARGV[0] eq '--manifest')
+    {
+      shift @ARGV;
+      $manifest = shift @ARGV;
+      next;
+    }
+  last;
+}
+
+my @files;
+if ($manifest) {
+  if ($manifest eq '-') {
+    @files = <STDIN>;
+  } else {
+    local *F;
+    open(F, '<', $manifest) || die("$manifest: $!\n");
+    @files = <F>;
+    close F;
+  }
+  chomp @files;
+}
+push @files, @ARGV;
+
+for my $file (@files) {
+  my $sig = Build::queryhdrmd5($file);
+  die("$file: no signature available\n") unless $sig;
+  if ($createmeta) {
+    local *F;
+    my $mf = $file;
+    $mf =~ s/\.[^\.]*$//;
+    $mf .= ".meta";
+    open(F, '>', $mf) || die("$mf: $!\n");
+    print F "$sig  sigmd5\n";
+    close(F) || die("$mf: $!\n");
+  } else {
+    print "$sig\n";
+  }
+}
diff --git a/getchangetarget b/getchangetarget
new file mode 100755 (executable)
index 0000000..c9e51a1
--- /dev/null
@@ -0,0 +1,35 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+  unshift @INC, ($::ENV{'BUILD_DIR'} || '/usr/lib/build');
+}
+
+use strict;
+
+use Build;
+
+my ($dist, $archs, $configdir);
+
+while (@ARGV)  {
+  if ($ARGV[0] eq '--dist') {
+    shift @ARGV;
+    $dist = shift @ARGV;
+    next;
+  }
+  if ($ARGV[0] eq '--archpath') {
+    shift @ARGV;
+    $archs = shift @ARGV;
+    next;
+  }
+  if ($ARGV[0] eq '--configdir') {
+    shift @ARGV;
+    $configdir = shift @ARGV;
+    next;
+  }
+  last;
+}
+
+die("Usage: getchangetarget --dist <dist> --archpath <archpath> [--configdir <configdir>]\n") if @ARGV;
+
+my $cf = Build::read_config_dist($dist, $archs, $configdir);
+print "$cf->{'target'}\n" if $cf->{'target'};
diff --git a/getmacros b/getmacros
new file mode 100755 (executable)
index 0000000..d15af57
--- /dev/null
+++ b/getmacros
@@ -0,0 +1,33 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+  unshift @INC, ($::ENV{'BUILD_DIR'} || '/usr/lib/build');
+}
+
+use Build;
+use strict;
+
+my ($dist, $configdir, $archs);
+
+while (@ARGV)  {
+  if ($ARGV[0] eq '--dist') {
+    shift @ARGV;
+    $dist = shift @ARGV;
+    next;
+  }
+  if ($ARGV[0] eq '--archpath') {
+    shift @ARGV;
+    $archs = shift @ARGV;
+    next;
+  }
+  if ($ARGV[0] eq '--configdir') {
+    shift @ARGV;
+    $configdir = shift @ARGV;
+    next;
+  }
+  last;
+}
+die("Usage: getmacros --dist <dist> [--configdir <configdir>]\n") if @ARGV;
+my $cf = Build::read_config_dist($dist, $archs, $configdir);
+print $cf->{'rawmacros'} if exists $cf->{'rawmacros'};
+exit(0);
diff --git a/getoptflags b/getoptflags
new file mode 100755 (executable)
index 0000000..8031bf9
--- /dev/null
@@ -0,0 +1,47 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+  unshift @INC, ($::ENV{'BUILD_DIR'} || '/usr/lib/build');
+}
+
+use strict;
+
+use Build;
+
+my ($dist, $archs, $configdir, $debug);
+
+while (@ARGV)  {
+  if ($ARGV[0] eq '--dist') {
+    shift @ARGV;
+    $dist = shift @ARGV;
+    next;
+  }
+  if ($ARGV[0] eq '--archpath') {
+    shift @ARGV;
+    $archs = shift @ARGV;
+    next;
+  }
+  if ($ARGV[0] eq '--configdir') {
+    shift @ARGV;
+    $configdir = shift @ARGV;
+    next;
+  }
+  if ($ARGV[0] eq '--debug') {
+    shift @ARGV;
+    $debug = 1;
+    next;
+  }
+  last;
+}
+
+die("Usage: getoptflags --dist <dist> --archpath <archpath> [--configdir <configdir>]\n") if @ARGV;
+
+my $cf = Build::read_config_dist($dist, $archs, $configdir);
+exit 0 unless $cf->{'optflags'};
+my $all = $cf->{'optflags'}->{'*'};
+$all = defined($all) && $all ne '' ? " $all" : '';
+$all .= " -g" if $debug;
+for (sort keys %{$cf->{'optflags'}}) {
+  next if $_ eq '*';
+  print "optflags: $_ $cf->{'optflags'}->{$_}$all\n";
+}
diff --git a/init_buildsystem b/init_buildsystem
new file mode 100755 (executable)
index 0000000..44da2f0
--- /dev/null
@@ -0,0 +1,1066 @@
+#!/bin/bash
+# Script to create a complete system to build packages in a chroot
+# environment.  This script ensures, that all packages given as
+# parameter are installed. All other packges will be deleted.
+#
+# BUILD_ROOT  here the packages will be installed/deleted
+# BUILD_RPMS  here we get our packages to install
+# BUILD_ARCH  path of the architectures we try
+#
+# (c) 1997-2005 SuSE GmbH Nuernberg, Germany
+
+#
+# needed globals variables
+#
+export SRC
+export YAST_IS_RUNNING="instsys"
+export DEBIAN_FRONTEND=noninteractive
+export DEBIAN_PRIORITY=critical
+export BUILD_DIR=${BUILD_DIR:-/usr/lib/build}
+# need to restore build root owner for non-root builds
+browner=0
+definesnstuff=()
+repos=()
+
+. $BUILD_DIR/common_functions || exit 1
+
+# should RPMs be installed with --force ?
+USE_FORCE=false
+
+BUILD_IS_RUNNING=$BUILD_ROOT/not-ready
+TMPFILE=$BUILD_ROOT/tmpfile
+#buildhost removed so that id can be generated from repo files
+#RPMIDFMT="%{NAME}-%{VERSION}-%{RELEASE} %{BUILDHOST}-%{BUILDTIME}\n"
+RPMIDFMT="%{NAME}-%{VERSION}-%{RELEASE} %{BUILDTIME}\n"
+
+PREPARE_VM=
+USEUSEDFORBUILD=
+LIST_STATE=
+RPMLIST=
+CLEAN_BUILD=
+CREATE_BUILD_BINARIES=
+
+while test -n "$1" ; do
+    case "$1" in
+       --prepare)
+           shift
+           PREPARE_VM=true
+           ;;
+       --create-build-binaries)
+           shift
+           CREATE_BUILD_BINARIES=true
+           ;;
+       --useusedforbuild)
+           shift
+           USEUSEDFORBUILD=--useusedforbuild
+           ;;
+       --list-state)
+           shift
+           LIST_STATE=true
+           ;;
+       --rpmlist)
+           shift
+           RPMLIST=$1
+           shift
+           ;;
+       --define|--with|--without)
+           definesnstuff[${#definesnstuff[@]}]="$1";
+           definesnstuff[${#definesnstuff[@]}]="$2";
+           shift 2
+           ;;
+       --repository|--repo)
+           repos[${#repos[@]}]="$2";
+           shift 2;
+           ;;
+       --clean)
+           CLEAN_BUILD="$1"
+           shift
+       ;;
+       --cachedir)
+           CACHE_DIR="$2"
+           shift 2
+           ;;
+       *)
+           break
+           ;;
+    esac
+done
+PKGS=("$@")
+
+#
+# needed functions
+#
+
+cleanup_and_exit()
+{
+    trap EXIT
+    [ "$BUILD_ROOT" != / ] || chown $browner $BUILD_ROOT
+    # umount so init_buildsystem can be used standalone
+# XXX: use stat -f /dev/pts/ -c %T  to check whether it's mounted and not suppress errors then?
+    umount -n $BUILD_ROOT/proc/sys/fs/binfmt_misc 2> /dev/null || true
+    umount -n $BUILD_ROOT/proc 2> /dev/null || true
+    umount -n $BUILD_ROOT/dev/pts 2> /dev/null || true
+    umount -n $BUILD_ROOT/mnt 2> /dev/null || true
+    exit ${1:-0}
+}
+
+clean_build_root()
+{
+       test -n "$BUILD_ROOT" && {
+           umount -n $BUILD_ROOT/proc/sys/fs/binfmt_misc 2> /dev/null || true
+           umount -n $BUILD_ROOT/proc 2> /dev/null || true
+           umount -n $BUILD_ROOT/dev/pts 2> /dev/null || true
+           umount -n $BUILD_ROOT/mnt 2> /dev/null || true
+           rm -rf -- $BUILD_ROOT/*
+           rm -rf -- $BUILD_ROOT/.build
+           rm -rf -- $BUILD_ROOT/.root
+           rm -rf -- $BUILD_ROOT/.init_b_cache
+           mkdir -p $BUILD_ROOT/proc
+           mkdir -p $BUILD_ROOT/dev/pts
+           if [ "$UID" = '0' ]; then
+                   mount -n -tproc none $BUILD_ROOT/proc
+                   mount -n -tdevpts none $BUILD_ROOT/dev/pts
+           fi
+       }
+}
+
+preinstall()
+{
+    check_exit
+    echo "preinstalling $1..."
+    cd $BUILD_ROOT || cleanup_and_exit 1
+    if test -x /usr/bin/bsdtar ; then
+       CPIO="/usr/bin/bsdtar --chroot -o --numeric-owner -x -f-"
+       TAR="/usr/bin/bsdtar --chroot -o --numeric-owner -x"
+    else
+       CPIO="cpio --extract --unconditional --preserve-modification-time --make-directories --no-absolute-filenames --quiet"
+       TAR="tar -x"
+    fi
+    if test -e "$BUILD_ROOT/.init_b_cache/rpms/$1.rpm" ; then
+       PAYLOADDECOMPRESS=cat
+       case `rpm -qp --nodigest --nosignature --qf "%{PAYLOADCOMPRESSOR}\n" "$BUILD_ROOT/.init_b_cache/rpms/$1.rpm"` in
+           lzma) rpm --showrc | grep PayloadIsLzma > /dev/null || PAYLOADDECOMPRESS="lzma -d" ;;
+           xz) rpm --showrc | grep PayloadIsXz > /dev/null || PAYLOADDECOMPRESS="xz -d" ;;
+       esac
+       if test "$PAYLOADDECOMPRESS" = "lzma -d" ; then
+           if ! lzma </dev/null >/dev/null 2>&1 ; then
+               test -f "$BUILD_DIR/lzmadec.sh" && PAYLOADDECOMPRESS="bash $BUILD_DIR/lzmadec.sh"
+           fi
+       fi
+       if test "$PAYLOADDECOMPRESS" = "xz -d" ; then
+           if ! xz </dev/null >/dev/null 2>&1 ; then
+               test -f "$BUILD_DIR/xzdec.sh" && PAYLOADDECOMPRESS="bash $BUILD_DIR/xzdec.sh"
+           fi
+       fi
+       if test "$PAYLOADDECOMPRESS" = cat ; then
+           rpm2cpio "$BUILD_ROOT/.init_b_cache/rpms/$1.rpm" | $CPIO
+       else
+           rpm2cpio "$BUILD_ROOT/.init_b_cache/rpms/$1.rpm" | $PAYLOADDECOMPRESS | $CPIO
+       fi
+       if test -e ".init_b_cache/scripts/$1.run" ; then
+           rpm -qp --nodigest --nosignature --qf "%{PREIN}" "$BUILD_ROOT/.init_b_cache/rpms/$1.rpm" > ".init_b_cache/scripts/$1.pre"
+           rpm -qp --nodigest --nosignature --qf "%{POSTIN}" "$BUILD_ROOT/.init_b_cache/rpms/$1.rpm" > ".init_b_cache/scripts/$1.post"
+           echo -n '(none)' > .init_b_cache/scripts/.none
+           cmp -s ".init_b_cache/scripts/$1.pre" .init_b_cache/scripts/.none && rm -f ".init_b_cache/scripts/$1.pre"
+           cmp -s ".init_b_cache/scripts/$1.post" .init_b_cache/scripts/.none && rm -f ".init_b_cache/scripts/$1.post"
+           rm -f .init_b_cache/scripts/.none
+       fi
+    elif test -e "$BUILD_ROOT/.init_b_cache/rpms/$1.deb" ; then
+       ar x "$BUILD_ROOT/.init_b_cache/rpms/$1.deb" control.tar.gz data.tar.gz
+       mkdir -p .init_b_cache/scripts/control
+       $TAR -C .init_b_cache/scripts/control -z -f control.tar.gz
+       $TAR -z -f data.tar.gz
+       if test -e ".init_b_cache/scripts/$1.run" ; then
+           test -e .init_b_cache/scripts/control/preinst && mv .init_b_cache/scripts/control/preinst ".init_b_cache/scripts/$1.pre"
+           test -e .init_b_cache/scripts/control/postinst && mv .init_b_cache/scripts/control/postinst ".init_b_cache/scripts/$1.post"
+       fi
+       rm -rf .init_b_cache/scripts/control control.tar.gz data.tar.gz
+    else
+       echo "warning: package $1 does not exist"
+    fi
+}
+
+run_pkg_scripts()
+{
+    chroot $BUILD_ROOT /sbin/ldconfig 2>/dev/null
+    for PKG in $PACKAGES_TO_RUNSCRIPTS ; do
+       if test -e "$BUILD_ROOT/.init_b_cache/scripts/$PKG.pre" ; then
+           echo "running $PKG preinstall script"
+           if test -e "$BUILD_ROOT/.init_b_cache/rpms/$PKG.rpm" ; then
+               chroot $BUILD_ROOT sh ".init_b_cache/scripts/$PKG.pre" 0
+           else
+               chroot $BUILD_ROOT ".init_b_cache/scripts/$PKG.pre" install < /dev/null
+           fi
+           rm -f "$BUILD_ROOT/.init_b_cache/scripts/$PKG.pre"
+       fi
+       if test -e "$BUILD_ROOT/.init_b_cache/scripts/$PKG.post" ; then
+           echo "running $PKG postinstall script"
+           if test -e "$BUILD_ROOT/.init_b_cache/rpms/$PKG.rpm" ; then
+               chroot $BUILD_ROOT sh ".init_b_cache/scripts/$PKG.post" 1
+           else
+               chroot $BUILD_ROOT ".init_b_cache/scripts/$PKG.post" configure '' < /dev/null
+           fi
+           rm -f "$BUILD_ROOT/.init_b_cache/scripts/$PKG.post"
+       fi
+       check_exit
+    done
+}
+
+init_db()
+{
+    if test $PSUF = rpm ; then
+       echo initializing rpm db...
+       chroot $BUILD_ROOT rpm --initdb || cleanup_and_exit 1
+       # hack: add nofsync to db config to speed up install
+       mkdir -p $BUILD_ROOT/root
+       echo '%__dbi_perms perms=0644 nofsync' > $BUILD_ROOT/.rpmmacros
+       echo '%__dbi_perms perms=0644 nofsync' > $BUILD_ROOT/root/.rpmmacros
+    else
+       # force dpkg into database to make epoch test work
+       if ! test "$BUILD_ROOT/.init_b_cache/rpms/dpkg.deb" -ef "$BUILD_ROOT/.init_b_cache/dpkg.deb" ; then
+           rm -f $BUILD_ROOT/.init_b_cache/dpkg.deb
+           cp $BUILD_ROOT/.init_b_cache/rpms/dpkg.deb $BUILD_ROOT/.init_b_cache/dpkg.deb || cleanup_and_exit 1
+       fi
+       chroot $BUILD_ROOT dpkg -i --force all .init_b_cache/dpkg.deb >/dev/null 2>&1
+    fi
+}
+
+reorder()
+{
+    test -z "$*" && return
+    rm -f $BUILD_ROOT/.init_b_cache/order.manifest
+    for PKG in "$@" ; do
+       echo "$PKG" >> $BUILD_ROOT/.init_b_cache/order.manifest
+    done
+    $BUILD_DIR/order --dist "$BUILD_DIST" --archpath "$BUILD_ARCH" --configdir $BUILD_DIR/configs --manifest $BUILD_ROOT/.init_b_cache/order.manifest $BUILD_ROOT/.init_b_cache/rpms
+    rm -f $BUILD_ROOT/.init_b_cache/order.manifest
+}
+
+create_devs()
+{
+    local com file mode arg
+
+    mkdir -m 755 -p $BUILD_ROOT/dev/pts
+    test -f $BUILD_ROOT/dev/shm && rm -f $BUILD_ROOT/dev/shm
+    mkdir -m 755 -p $BUILD_ROOT/dev/shm
+    while read com file mode arg ; do
+       rm -f $BUILD_ROOT/dev/$file
+       if test $com = ln ; then
+           ln -s $arg $BUILD_ROOT/dev/$file
+           continue
+       fi
+       $com -m $mode $BUILD_ROOT/dev/$file $arg
+    done << DEVLIST
+       mknod null    666 c 1 3
+       mknod zero    666 c 1 5
+       mknod full    622 c 1 7
+       mknod random  666 c 1 8
+       mknod urandom 644 c 1 9
+       mknod tty     666 c 5 0
+       mknod ptmx    666 c 5 2
+       mknod loop0   640 b 7 0
+       mknod loop1   640 b 7 1
+       mknod loop2   640 b 7 2
+       mknod loop3   640 b 7 3
+       ln    fd      777 /proc/self/fd
+       ln    stdin   777 fd/0
+       ln    stdout  777 fd/1
+       ln    stderr  777 fd/2
+DEVLIST
+}
+
+# check whether the repo list contains a plain "zypp://". Add all
+# enabled zypp repos in this case
+maybe_add_all_zypp_repos()
+{
+    local i j
+    r=()
+    for i in "${repos[@]}"; do
+       if [ "$i" = "zypp://" ]; then
+           while read j; do
+               j="${j#/etc/zypp/repos.d/}"
+               r=("${r[@]}" "zypp://${j%.repo}")
+           done < <(grep -l enabled=1 /etc/zypp/repos.d/*.repo)
+       else
+           r=("${r[@]}" "$i")
+       fi
+    done
+    repos=("${r[@]}")
+}
+
+validate_cache_file()
+{
+    local findonly=''
+    maybe_add_all_zypp_repos
+    if ! test -f $CACHE_FILE || ! test -f $CACHE_FILE.id || \
+       test "${repos[*]} ${BUILD_RPMS//:/ /}" != "$(cat $CACHE_FILE.id 2>/dev/null)"; then
+       rm -f $CACHE_FILE.id
+    else
+       for SRC in "${repos[@]}" ${BUILD_RPMS//:/ /}; do
+           test -n "$SRC" || SRC=.
+           if [ "${SRC#zypp://}" != "$SRC" ]; then
+               SRC="/var/cache/zypp/raw" # XXX can't use name here as we'd need to parse the file
+           fi
+           if test "$SRC" -nt $CACHE_FILE; then
+               rm -f $CACHE_FILE.id
+               break
+           fi
+       done
+    fi
+    if ! test -f $CACHE_FILE.id ; then
+       test -z "$LIST_STATE" && echo initializing $CACHE_FILE ...
+       for SRC in "${repos[@]}" -- ${BUILD_RPMS//:/ /}; do
+           if test "$SRC" = '--' ; then
+               findonly=1
+               continue
+           fi
+           test -z "$SRC" && SRC=`pwd`
+           if [ "${SRC#zypp://}" != "$SRC" ]; then
+               set -- $BUILD_DIR/createrepomddeps "$SRC"
+           elif [ "${SRC#http://}" != "$SRC" -o "${SRC#https://}" != "$SRC" -o "${SRC#ftp://}" != "$SRC" -o "${SRC#ftps://}" != "$SRC" ]; then
+               mkdir -p "$(getcachedir "$SRC")"
+               set -- $BUILD_DIR/createrepomddeps --cachedir="$CACHE_DIR" "$SRC"
+           elif [ ! -e "$SRC" ]; then
+               echo "*** $SRC does not exist" >&2
+               cleanup_and_exit 1
+           elif [ -z "$findonly" -a -e "$SRC"/suse/setup/descr/packages -o -e "$SRC"/suse/setup/descr/packages.gz ]; then
+               set -- $BUILD_DIR/createyastdeps "$SRC"
+           elif [ -z "$findonly" -a -e "$SRC"/repodata/repomd.xml ]; then
+               set -- $BUILD_DIR/createrepomddeps "$SRC"
+           else
+               set -- $BUILD_DIR/createrpmdeps "$SRC"
+           fi
+           echo "$@" >&2
+           "$@" || cleanup_and_exit 1
+           echo D:
+       done > $CACHE_FILE.new
+
+       mv $CACHE_FILE.new $CACHE_FILE
+       echo "${repos[*]} ${BUILD_RPMS//:/ /}" > $CACHE_FILE.id
+    fi
+}
+
+#
+# Detect cross-build (fixed code) and copy qemus for cross-build emulation mode
+# And copy also a static host binary shell to run the init scripts in the target chroot
+#
+copy_qemu()
+{
+    echo "copying qemu"
+    mkdir -p  $BUILD_ROOT/usr/bin $BUILD_ROOT/usr/sbin
+    install -m755 /usr/bin/qemu-* $BUILD_ROOT/usr/bin
+    install -m755 /usr/sbin/qemu-binfmt-conf.sh $BUILD_ROOT/usr/sbin
+    # To initially run the init script, there needs to be also a
+    # static bash to register qemu in this chroot and to start up
+    # /.build/build
+    if [ -n "$PREPARE_VM" ]; then
+       mkdir -p  $BUILD_ROOT/bin
+       install -m755 /bin/bash-static $BUILD_ROOT/bin
+       install -m755 /bin/mount-static $BUILD_ROOT/bin
+    fi
+}
+
+check_binfmt_registered()
+{
+    local arch
+    for arch in arm $EMULATOR_ARCHS; do
+       if test -e /proc/sys/fs/binfmt_misc/$arch; then
+           return 0
+       fi
+    done
+    return 1
+}
+
+fail_exit()
+{
+  cleanup_and_exit 1
+}
+
+# modify $SRC
+downloadpkg()
+{
+    local url="$1"
+    local cachedir
+
+    if [ "${url:0:7}" == "zypp://" ] ; then
+       cachedir="/var/cache/zypp/packages/"
+       SRC="$cachedir${url#zypp://}"
+       mkdir -p "${SRC%/*}" || cleanup_and_exit 1
+    elif [ "${url:0:7}" == "http://" -o "${url:0:8}" == "https://" -o "${url:0:6}" == "ftp://" -o "${url:0:7}" == "ftps://" ] ; then
+       cachedir="$(getcachedir "$url")"
+       local name="$(basename "$url")"
+       SRC="$cachedir/$name"
+    else
+       echo "Invalid url: $url"
+       cleanup_and_exit 1
+    fi
+
+    if [ ! -e "$SRC" ]; then
+       local destdir="$cachedir/tmp"
+       mkdir -p "$destdir"
+       echo "downloading $url ... ";
+       $BUILD_DIR/download "$destdir" "$url" || cleanup_and_exit 1
+       local destfile="$destdir/${url##*/}"
+       if [ ! -e "$destfile" ]; then
+           echo "expected $destfile after download but it's missing" >&2
+           cleanup_and_exit 1
+       fi
+       rpm -K "$destfile" > $destfile.v || { echo "rpm verify failed" >&2; rm -rf "$destdir"; cleanup_and_exit 1; }
+       if grep "NOT OK" $destfile.v; then
+           rm -rf "$destdir"
+           cleanup_and_exit 1
+       fi
+       rm -f "$destfile.v"
+       mv "$destfile" "$SRC" || cleanup_and_exit 1
+    fi
+}
+
+getcachedir()
+{
+    url=$1
+    for repo in "${repos[@]}" ; do
+       if [ "${url:0:${#repo}}" == "$repo" ] ; then
+           read repoid dummy < <(echo -n "$repo" | md5sum)
+           echo "$CACHE_DIR/$repoid"
+           break
+       fi
+    done
+}
+
+get_pkg_filename()
+{
+    local url="$1"
+    local name=$(basename $url)
+    local cachedir=$(getcachedir $url)
+    local destfile="$cachedir/$name"
+    echo $destfile
+}
+
+set_build_arch
+
+trap fail_exit EXIT
+
+if [ "$BUILD_ROOT" = / ]; then
+    read dummy dummy browner dummy < <(ls -ld /)
+fi
+
+if [ -n "$CLEAN_BUILD" ]; then
+    clean_build_root
+fi
+
+#
+# now test if there was an incomplete run
+#
+if test -e $BUILD_IS_RUNNING ; then
+    echo It seems that there was an incomplete setup of $BUILD_ROOT.
+    echo To be sure, we will build it again completely...
+    umount -n $BUILD_ROOT/proc/sys/fs/binfmt_misc 2> /dev/null || true
+    umount -n $BUILD_ROOT/proc 2> /dev/null
+    umount -n $BUILD_ROOT/dev/pts 2> /dev/null
+    umount -n $BUILD_ROOT/mnt 2> /dev/null
+    echo "Your build system is broken!! Shall I execute"
+    echo
+    echo "    rm -rf -- $BUILD_ROOT/*"
+    echo
+    echo "y - yes, cleanup the build root"
+    echo "N - No, abort build (default on enter)"
+    echo "c - Continue anyway with this build root"
+    echo -n "[y/N/c] "
+    read ANSWER
+    case "$ANSWER" in
+       c|C) rm -f $BUILD_IS_RUNNING ;;
+       y|Y) clean_build_root ;;
+       *) cleanup_and_exit 1 ;;
+    esac
+fi
+
+#
+# store that we start to build system
+#
+mkdir -p $BUILD_ROOT
+touch $BUILD_IS_RUNNING
+
+if test -n "$PREPARE_VM" ; then
+    rm -f $BUILD_ROOT/.build/init_buildsystem.data
+fi
+if test -e $BUILD_ROOT/.build/init_buildsystem.data ; then
+    # vm continuation
+    . $BUILD_ROOT/.build/init_buildsystem.data
+    if ! test -e $BUILD_ROOT/.init_b_cache/preinstall_finished ; then
+       # finish preinstall
+       run_pkg_scripts
+       init_db
+       touch $BUILD_ROOT/.init_b_cache/preinstall_finished
+    fi
+else
+    #
+    # now make sure that all the packages are installed.
+    #
+    rm -rf $BUILD_ROOT/.init_b_cache
+    mkdir -p $BUILD_ROOT/.init_b_cache/scripts
+
+    if test -z "$RPMLIST" ; then
+       #
+       # create rpmdeps file
+       #
+       CACHE_FILE=$BUILD_ROOT/.srcfiles.cache
+       validate_cache_file
+
+       #
+       # select and expand packages
+       #
+       RPMLIST=$BUILD_ROOT/.init_b_cache/rpmlist
+       test -z "$LIST_STATE" && echo "expanding package dependencies..."
+       if ! $BUILD_DIR/expanddeps $USEUSEDFORBUILD "${definesnstuff[@]}" --dist "$BUILD_DIST" --depfile "$CACHE_FILE" --archpath "$BUILD_ARCH" --configdir $BUILD_DIR/configs "${PKGS[@]}" > $RPMLIST ; then
+           rm -f $BUILD_IS_RUNNING
+           cleanup_and_exit 1
+       fi
+    fi
+
+    if test -n "$LIST_STATE" ; then
+       rm -f $BUILD_IS_RUNNING
+       while read PKG SRC ; do
+          test "$PKG" = "preinstall:" && continue
+          test "$PKG" = "runscripts:" && continue
+          test "$PKG" = "cbpreinstall:" && continue
+          test "$PKG" = "vminstall:" && continue
+          test "$PKG" = "dist:" && continue
+          test "$PKG" = "rpmid:" && continue
+          echo "${SRC##*/}"
+       done < $BUILD_ROOT/.init_b_cache/rpmlist
+       rm -rf $BUILD_ROOT/.init_b_cache
+       cleanup_and_exit 0
+    fi
+
+    #
+    # copy the QEMU emulator
+    #
+    if check_use_emulator; then
+       copy_qemu
+       if [ -z "$PREPARE_VM" ]; then
+           if ! check_binfmt_registered; then
+               echo "registering binfmt handlers"
+               /usr/sbin/qemu-binfmt-conf.sh
+           fi
+           read mmap_min_addr < /proc/sys/vm/mmap_min_addr
+           if [ "$mmap_min_addr" != 0 ]; then
+               echo "Warning: mmap_min_addr is != 0. If programs fail at mmap this could be the reason"
+           fi
+       fi
+    fi
+
+    PACKAGES_TO_INSTALL=
+    PACKAGES_TO_PREINSTALL=
+    PACKAGES_TO_RUNSCRIPTS=
+    PACKAGES_TO_VMINSTALL=
+    PACKAGES_TO_CBPREINSTALL=
+    PACKAGES_TO_CBINSTALL=
+    RUNSCRIPTS_SEEN=
+    GUESSED_DIST=unknown
+    mkdir -p $BUILD_ROOT/.init_b_cache/rpms
+    while read PKG SRC ; do
+       if test "$PKG" = "preinstall:" ; then
+           PACKAGES_TO_PREINSTALL=$SRC
+           continue
+       fi
+       if test "$PKG" = "vminstall:" ; then
+           PACKAGES_TO_VMINSTALL=$SRC
+           continue
+       fi
+       # these additional preinstall / install values are only set for 
+       # emulated "CrossBuild" setups - thus CB(pre)install
+       if test "$PKG" = "cbpreinstall:" ; then
+           if is_emulator_arch ; then
+               PACKAGES_TO_CBPREINSTALL=$SRC
+           fi
+           continue
+       fi
+       if test "$PKG" = "cbinstall:" ; then
+           if is_emulator_arch ; then
+               PACKAGES_TO_CBINSTALL=$SRC
+           fi
+           continue
+       fi
+       if test "$PKG" = "runscripts:" ; then
+           RUNSCRIPTS_SEEN=true
+           PACKAGES_TO_RUNSCRIPTS=$SRC
+           continue
+       fi
+       if test "$PKG" = "dist:" ; then
+           GUESSED_DIST=$SRC
+           continue
+       fi
+       if test "$PKG" = "rpmid:" ; then
+           echo "${SRC#*:}" > $BUILD_ROOT/.init_b_cache/rpms/${SRC%%:*}.id
+           continue
+       fi
+       if test "$PKG" != "${PKG%:}"; then
+           echo "Warning: ignoring unsupported tag '$PKG'" >&2
+           continue
+       fi
+       if [ "${SRC#/}" = "$SRC" ]; then
+           url="$SRC"
+           case "$url" in
+               zypp://* | http://* | https://* | ftp://* | ftps://*)
+                   downloadpkg "$url"
+                   ;;
+               *)
+                   echo "unsupported url for '$PKG': $url" >&2
+                   cleanup_and_exit 1
+                   ;;
+           esac
+       fi
+       # downloadpkg modified $SRC, so it has a right name for use
+       ln -s "$SRC" "$BUILD_ROOT/.init_b_cache/rpms/$PKG.${SRC##*.}"
+       PACKAGES_TO_INSTALL="$PACKAGES_TO_INSTALL $PKG"
+    done < $RPMLIST
+
+    test -n "$PACKAGES_TO_CBPREINSTALL" && echo "cbpreinstall: $PACKAGES_TO_CBPREINSTALL"
+    test -n "$PACKAGES_TO_CBINSTALL" && echo "cbinstall   : $PACKAGES_TO_CBINSTALL"
+    # compatibility...
+    test -z "$RUNSCRIPTS_SEEN" && PACKAGES_TO_RUNSCRIPTS="$PACKAGES_TO_PREINSTALL"
+
+    echo "$GUESSED_DIST" > $BUILD_ROOT/.guessed_dist
+    test -n "$BUILD_DIST" || BUILD_DIST="$GUESSED_DIST"
+    PSUF=rpm
+    test -L $BUILD_ROOT/.init_b_cache/rpms/rpm.rpm || PSUF=deb
+fi
+
+#
+# now test if there is already a build dir.
+#
+if test ! -f $BUILD_ROOT/var/lib/rpm/packages.rpm -a ! -f $BUILD_ROOT/var/lib/rpm/Packages ; then
+    mkdir -p $BUILD_ROOT/var/lib/rpm || cleanup_and_exit 1
+    mkdir -p $BUILD_ROOT/usr/src/packages/SOURCES || cleanup_and_exit 1
+    mkdir -p $BUILD_ROOT/etc || cleanup_and_exit 1
+    mkdir -p $BUILD_ROOT/proc || cleanup_and_exit 1
+    test -f $BUILD_ROOT/etc/HOSTNAME || hostname -f > $BUILD_ROOT/etc/HOSTNAME
+    if test $PSUF = deb ; then
+       mkdir -p $BUILD_ROOT/var/lib/dpkg
+       mkdir -p $BUILD_ROOT/var/log
+       mkdir -p $BUILD_ROOT/etc/default
+       :> $BUILD_ROOT/var/lib/dpkg/status
+       :> $BUILD_ROOT/var/lib/dpkg/available
+       :> $BUILD_ROOT/var/log/dpkg.log
+       :> $BUILD_ROOT/etc/ld.so.conf
+       :> $BUILD_ROOT/etc/default/rcS
+    fi
+    for PKG in $PACKAGES_TO_RUNSCRIPTS ; do
+       : > $BUILD_ROOT/.init_b_cache/scripts/$PKG.run
+    done
+    for PKG in $PACKAGES_TO_PREINSTALL ; do
+       preinstall ${PKG##*/}
+    done
+    if test -n "$PREPARE_VM" ; then
+       for PKG in $PACKAGES_TO_VMINSTALL ; do
+           preinstall ${PKG##*/}
+       done
+    fi
+    # add cbpreinstall if cross HOST != TARGET
+    for PKG in $PACKAGES_TO_CBPREINSTALL ; do
+        preinstall ${PKG##*/}
+    done
+    if [ -w /root ]; then
+           test -c $BUILD_ROOT/dev/null || create_devs
+    fi
+    test -e $BUILD_ROOT/etc/fstab || touch $BUILD_ROOT/etc/fstab
+    test -e $BUILD_ROOT/etc/ld.so.conf || cp $BUILD_ROOT/etc/ld.so.conf.in $BUILD_ROOT/etc/ld.so.conf
+    if test -z "$PREPARE_VM" ; then
+       run_pkg_scripts
+       init_db
+       touch $BUILD_ROOT/.init_b_cache/preinstall_finished
+    fi
+fi
+
+if test -n "$PREPARE_VM" ; then
+    mkdir -p $BUILD_ROOT/.build
+    echo "copying packages..."
+    for PKG in $PACKAGES_TO_INSTALL ; do
+       rm -f $BUILD_ROOT/.init_b_cache/$PKG.$PSUF
+       cp $BUILD_ROOT/.init_b_cache/rpms/$PKG.$PSUF $BUILD_ROOT/.init_b_cache/$PKG.$PSUF || cleanup_and_exit 1
+       ln -s -f ../$PKG.$PSUF $BUILD_ROOT/.init_b_cache/rpms/$PKG.$PSUF
+       check_exit
+    done
+    # alreadyinstalled check will not work, but we have to live with
+    # that...
+    echo -n 'reordering...'
+    PACKAGES_TO_INSTALL=`reorder $PACKAGES_TO_INSTALL`
+    echo 'done'
+    Q="'\''"
+    echo "PACKAGES_TO_INSTALL='${PACKAGES_TO_INSTALL//"'"/$Q}'" > $BUILD_ROOT/.build/init_buildsystem.data
+    echo "PACKAGES_TO_RUNSCRIPTS='${PACKAGES_TO_RUNSCRIPTS//"'"/$Q}'" >> $BUILD_ROOT/.build/init_buildsystem.data
+    echo "PSUF='$PSUF'" >> $BUILD_ROOT/.build/init_buildsystem.data
+    rm -f $BUILD_IS_RUNNING
+    cleanup_and_exit 0
+fi
+
+mkdir -p $BUILD_ROOT/proc
+mkdir -p $BUILD_ROOT/dev/pts
+mount -n -tproc none $BUILD_ROOT/proc 2>/dev/null || true
+mount -n -tdevpts none $BUILD_ROOT/dev/pts 2>/dev/null || true
+
+#
+# create .build.binaries directory if requested
+#
+rm -rf $BUILD_ROOT/.build.binaries
+if test -n "$CREATE_BUILD_BINARIES" ; then
+    echo "creating .build.binaries directory..."
+    mkdir -p "$BUILD_ROOT/.build.binaries"
+    for PKG in $PACKAGES_TO_INSTALL ; do
+       test -L "$BUILD_ROOT/.init_b_cache/rpms/$PKG.$PSUF" || continue
+       LPKG=`readlink -f "$BUILD_ROOT/.init_b_cache/rpms/$PKG.$PSUF"`
+       ln "$LPKG" "$BUILD_ROOT/.build.binaries/$PKG.$PSUF" 2>/dev/null
+       test -f "$BUILD_ROOT/.build.binaries/$PKG.$PSUF" && continue
+       cp "$LPKG" "$BUILD_ROOT/.build.binaries/$PKG.$PSUF"
+       check_exit
+    done
+fi
+
+#
+# get list and ids of already installed rpms
+#
+mkdir -p $BUILD_ROOT/.init_b_cache/alreadyinstalled
+if test -f $BUILD_ROOT/var/lib/rpm/packages.rpm -o -f $BUILD_ROOT/var/lib/rpm/Packages ; then
+    chroot $BUILD_ROOT rpm -qa --qf "%{NAME} $RPMIDFMT" | (
+       while read pp ii; do
+           echo "$ii" > "$BUILD_ROOT/.init_b_cache/alreadyinstalled/$pp"
+       done
+    )
+fi
+
+#
+# reorder packages (already done in vm continuation)
+#
+if ! test -e $BUILD_ROOT/.build/init_buildsystem.data ; then
+    echo -n 'reordering...'
+    PACKAGES_TO_INSTALL_FIRST=`reorder $PACKAGES_TO_INSTALL_FIRST`
+    PACKAGES_TO_INSTALL=`reorder $PACKAGES_TO_INSTALL`
+    echo 'done'
+fi
+
+rpm_e()
+{
+    chroot $BUILD_ROOT rpm --nodeps -e $PKG 2>&1 | \
+    while read line; do
+       case "$line" in
+
+           r*failed:\ No\ such\ file\ or\ directory) ;;
+           error:\ failed\ to\ stat\ *:\ No\ such\ file\ or\ directory) ;;
+           error:\ *scriptlet\ failed*)
+               echo "$line"
+               echo "re-try deleting $PKG using --noscripts"
+               chroot $BUILD_ROOT rpm --nodeps --noscripts -e $PKG || true
+           ;;
+           *) echo "$line" ;;
+       esac
+    done
+}
+
+#
+# delete all packages we don't want
+#
+mkdir -p $BUILD_ROOT/.init_b_cache/todelete
+for PKG in $BUILD_ROOT/.init_b_cache/alreadyinstalled/* ; do
+    PKG=${PKG##*/}
+    test "$PKG" = "*" && continue
+    ln $BUILD_ROOT/.init_b_cache/alreadyinstalled/$PKG $BUILD_ROOT/.init_b_cache/todelete/$PKG
+done
+for PKG in $PACKAGES_TO_INSTALL_FIRST $PACKAGES_TO_INSTALL $PACKAGES_TO_CBINSTALL ; do
+    rm -f $BUILD_ROOT/.init_b_cache/todelete/$PKG
+done
+for PKG in $BUILD_ROOT/.init_b_cache/todelete/* ; do
+    PKG=${PKG##*/}
+    test "$PKG" = "*" && continue
+    echo "deleting $PKG"
+    rpm_e "$PKG"
+    check_exit
+done
+rm -rf $BUILD_ROOT/.init_b_cache/todelete
+
+rm -rf $BUILD_ROOT/.init_b_cache/preinstalls
+mkdir -p $BUILD_ROOT/.init_b_cache/preinstalls
+for PKG in $PACKAGES_TO_PREINSTALL $PACKAGES_TO_CBPREINSTALL; do
+    touch "$BUILD_ROOT/.init_b_cache/preinstalls/$PKG"
+done
+
+rm -rf $BUILD_ROOT/installed-pkg
+mkdir -p $BUILD_ROOT/installed-pkg
+
+RPMCHECKOPTS=
+RPMCHECKOPTS_HOST=
+# on Fedora 10 rpmbuild is in a separate package so we need something else to
+# detect rpm4
+test -x $BUILD_ROOT/usr/bin/rpmsign && RPMCHECKOPTS="--nodigest --nosignature"
+test -x /usr/bin/rpmsign && RPMCHECKOPTS_HOST="--nodigest --nosignature"
+
+for PKG in $PACKAGES_TO_INSTALL_FIRST RUN_LDCONFIG $PACKAGES_TO_INSTALL $PACKAGES_TO_CBINSTALL; do
+
+    case $PKG in
+      RUN_LDCONFIG)
+       test -x $BUILD_ROOT/sbin/ldconfig && chroot $BUILD_ROOT /sbin/ldconfig 2>&1
+       continue
+      ;;
+    esac
+
+    test -f $BUILD_ROOT/installed-pkg/$PKG && continue
+
+    if test $PSUF = deb ; then
+       # debian world, install deb files
+       test -L $BUILD_ROOT/.init_b_cache/rpms/$PKG.deb || continue
+       if ! test "$BUILD_ROOT/.init_b_cache/rpms/$PKG.deb" -ef "$BUILD_ROOT/.init_b_cache/$PKG.deb" ; then
+           rm -f $BUILD_ROOT/.init_b_cache/$PKG.deb
+           cp $BUILD_ROOT/.init_b_cache/rpms/$PKG.deb $BUILD_ROOT/.init_b_cache/$PKG.deb || cleanup_and_exit 1
+       fi
+       PKGID=`readlink $BUILD_ROOT/.init_b_cache/rpms/$PKG.deb`
+       PKGID="${PKGID##*/}"
+       PKGID="${PKGID%.deb}"
+       echo "installing ${PKGID%_*}"
+       ( chroot $BUILD_ROOT dpkg --install --force all .init_b_cache/$PKG.deb 2>&1 || touch $BUILD_ROOT/exit ) | \
+           perl -ne '$|=1;/^(Configuration file|Installing new config file|Selecting previously deselected|\(Reading database|Unpacking |Setting up|Creating config file|Preparing to replace dpkg)/||/^$/||print'
+       check_exit
+       echo "$PKGID debian" > $BUILD_ROOT/installed-pkg/$PKG
+        # ugly workaround for upstart system. some packages (procps) try
+        # to start a service in their configure phase. As we don't have
+        # a running upstart, we just link the start binary to /bin/true
+       if test -e "$BUILD_ROOT/sbin/start"; then
+           if test "$BUILD_ROOT/sbin/start" -ef "$BUILD_ROOT/sbin/initctl" ; then
+               echo "linking /sbin/start to /bin/true"
+               mv "$BUILD_ROOT/sbin/start" "$BUILD_ROOT/sbin/start.disabled"
+               ln -s "/bin/true" "$BUILD_ROOT/sbin/start"
+           fi
+       fi
+       continue
+    fi
+
+    test -L $BUILD_ROOT/.init_b_cache/rpms/$PKG.rpm || continue
+
+    if test -f $BUILD_ROOT/.init_b_cache/rpms/$PKG.id -a -f $BUILD_ROOT/.init_b_cache/alreadyinstalled/$PKG ; then
+       read PKGID < $BUILD_ROOT/.init_b_cache/rpms/$PKG.id
+       read OLDPKGID < $BUILD_ROOT/.init_b_cache/alreadyinstalled/$PKG
+       if test "$PKGID" = "$OLDPKGID" ; then
+           #echo "keeping ${PKGID%% *}"
+           echo "$PKGID" > $BUILD_ROOT/installed-pkg/$PKG
+           continue
+       fi
+    fi
+
+    PKGID=`rpm -qp --qf "$RPMIDFMT" $RPMCHECKOPTS_HOST $BUILD_ROOT/.init_b_cache/rpms/$PKG.rpm`
+
+    if test -f $BUILD_ROOT/.init_b_cache/alreadyinstalled/$PKG ; then
+       read OLDPKGID < $BUILD_ROOT/.init_b_cache/alreadyinstalled/$PKG
+       if test "$PKGID" != "$OLDPKGID" ; then
+           echo deleting unwanted ${OLDPKGID%% *}
+           rpm_e "$PKG"
+       elif test "$VERIFY_BUILD_SYSTEM" = true ; then
+           chroot $BUILD_ROOT rpm --verify $PKG 2>&1 | tee $TMPFILE
+           if grep ^missing $TMPFILE > /dev/null ; then
+               echo deleting incomplete ${PKGID%% *}
+               rpm_e "$PKG"
+           else
+               #echo "keeping ${PKGID%% *}"
+               echo "$PKGID" > $BUILD_ROOT/installed-pkg/$PKG
+               continue
+           fi
+       else
+           #echo "keeping ${PKGID%% *}"
+           echo "$PKGID" > $BUILD_ROOT/installed-pkg/$PKG
+           continue
+       fi
+       if test -e "$BUILD_ROOT/.init_b_cache/preinstalls/$PKG" ; then
+           preinstall "$PKG"
+           # call for rpm-4.x and not rpm-devel
+           test -z "${PKG##rpm-[0-9]*}" && chroot $BUILD_ROOT rpm --rebuilddb
+           # also exec for exchanged rpm !  naming is rpm-x86-<target>-<ver>
+           test -z "${PKG##rpm-x86-*[0-9]*}" && chroot $BUILD_ROOT rpm --rebuilddb
+       fi
+    fi
+    export ADDITIONAL_PARAMS=
+    if test "$USE_FORCE" = true ; then
+       export ADDITIONAL_PARAMS="$ADDITIONAL_PARAMS --force"
+    fi
+    # work around for cross-build installs, we must not overwrite the running rpm
+    if test "$PKG" = rpm ; then
+       for i in $BUILD_ROOT/.init_b_cache/preinstalls/rpm-x86-* ; do
+           test -e "$i" && ADDITIONAL_PARAMS="$ADDITIONAL_PARAMS --justdb"
+       done
+    fi
+    echo "installing ${PKGID%% *}"
+    if ! test "$BUILD_ROOT/.init_b_cache/rpms/$PKG.rpm" -ef "$BUILD_ROOT/.init_b_cache/$PKG.rpm" ; then
+       rm -f $BUILD_ROOT/.init_b_cache/$PKG.rpm
+       cp $BUILD_ROOT/.init_b_cache/rpms/$PKG.rpm $BUILD_ROOT/.init_b_cache/$PKG.rpm || cleanup_and_exit 1
+    fi
+    ( chroot $BUILD_ROOT rpm --ignorearch --nodeps -U --oldpackage --ignoresize $RPMCHECKOPTS \
+               $ADDITIONAL_PARAMS .init_b_cache/$PKG.rpm 2>&1 || \
+         touch $BUILD_ROOT/exit ) | \
+             grep -v "^warning:.*saved as.*rpmorig$"
+    # delete link so package is only installed once
+    rm -f $BUILD_ROOT/.init_b_cache/$PKG.rpm
+    check_exit
+    echo "$PKGID" > $BUILD_ROOT/installed-pkg/$PKG
+
+done
+
+if test $PSUF = deb ; then
+    echo "configure all installed packages..."
+    # configure all packages after complete installation, not for each package like rpm does
+    # We need to run this twice, because of cyclic dependencies as it does not succeed on most
+    # debian based distros in the first attempt.
+    if ! chroot $BUILD_ROOT dpkg --configure --pending  2>&1; then
+       echo "first configure attempt failed, trying again..."
+       chroot $BUILD_ROOT dpkg --configure --pending  2>&1 || touch $BUILD_ROOT/exit
+    fi
+fi
+
+# devices can vanish if devs got uninstalled
+test -c $BUILD_ROOT/dev/null || create_devs
+
+cd $BUILD_ROOT || cleanup_and_exit 1
+
+#
+# setup /etc/mtab
+#
+rm -f $BUILD_ROOT/etc/mtab
+cp /proc/mounts $BUILD_ROOT/etc/mtab
+chmod 644 $BUILD_ROOT/etc/mtab
+
+#
+# to be sure, path is set correctly, we have to source /etc/profile before
+# starting rpm.
+#
+# XXX
+#rm -f $BUILD_ROOT/bin/rpm.sh
+#cp $BUILD_LIBDIR/lib/rpm.sh $BUILD_ROOT/bin/rpm.sh
+#chmod 755 $BUILD_ROOT/bin/rpm.sh
+#test -f $BUILD_ROOT/bin/rpm -a ! -L $BUILD_ROOT/bin/rpm && \
+#    mv $BUILD_ROOT/bin/rpm $BUILD_ROOT/bin/rpm.bin
+#rm -f $BUILD_ROOT/bin/rpm
+#ln -s rpm.sh $BUILD_ROOT/bin/rpm
+
+#
+# some packages use uname -r to decide which kernel is used to build for.
+# this does not work in autobuild always.  Here is a wrapper script, that
+# gets Version from kernel sources.
+#
+# XXX
+#rm -f $BUILD_ROOT/bin/uname.sh
+#cp -v $BUILD_LIBDIR/lib/uname.sh $BUILD_ROOT/bin/uname.sh
+#chmod 755 $BUILD_ROOT/bin/uname.sh
+#test -f $BUILD_ROOT/bin/uname -a ! -L $BUILD_ROOT/bin/uname && \
+#    mv $BUILD_ROOT/bin/uname $BUILD_ROOT/bin/uname.bin
+#rm -f $BUILD_ROOT/bin/uname
+#ln -s uname.sh $BUILD_ROOT/bin/uname
+
+#
+# some distributions have a /etc/rpmrc or /etc/rpm/macros and some not.
+# make sure, that it is setup correctly.
+#
+# XXX
+#rm -f $BUILD_ROOT/etc/rpmrc
+#if test -e $BUILD_LIBDIR/lib/rpmrc.$BUILD_BASENAME ; then
+#    cp -v $BUILD_LIBDIR/lib/rpmrc.$BUILD_BASENAME $BUILD_ROOT/etc/rpmrc
+#elif test -e $BUILD_LIBDIR/lib/rpmrc ; then
+#    cp -v $BUILD_LIBDIR/lib/rpmrc $BUILD_ROOT/etc/rpmrc
+#fi
+
+# XXX
+#rm -f $BUILD_ROOT/etc/rpm/macros $BUILD_ROOT/etc/rpm/suse_macros
+#mkdir -p $BUILD_ROOT/etc/rpm
+#if test -e $BUILD_LIBDIR/lib/macros.$BUILD_BASENAME ; then
+#    cp -v $BUILD_LIBDIR/lib/macros.$BUILD_BASENAME $BUILD_ROOT/etc/rpm/macros
+#    cp -v $BUILD_LIBDIR/lib/macros.$BUILD_BASENAME $BUILD_ROOT/etc/rpm/suse_macros
+#elif test -e $BUILD_LIBDIR/lib/macros ; then
+#    cp -v $BUILD_LIBDIR/lib/macros $BUILD_ROOT/etc/rpm/macros
+#    cp -v $BUILD_LIBDIR/lib/macros $BUILD_ROOT/etc/rpm/suse_macros
+#fi
+
+#
+# make sure, that our nis is not present in the chroot system
+#
+test -e $BUILD_ROOT/etc/nsswitch.conf && {
+    echo removing nis flags from $BUILD_ROOT/etc/nsswitch.conf...
+    cat $BUILD_ROOT/etc/nsswitch.conf | sed -e"s:nis::g" > \
+       $BUILD_ROOT/etc/nsswitch.conf.tmp
+    mv $BUILD_ROOT/etc/nsswitch.conf.tmp $BUILD_ROOT/etc/nsswitch.conf
+}
+
+#
+# creating some default directories
+for DIR in /usr/share/doc/packages \
+          /usr/X11R6/include/X11/pixmaps \
+          /usr/X11R6/include/X11/bitmaps ; do
+    mkdir -p $BUILD_ROOT/$DIR
+done
+
+for FILE in /var/run/utmp /var/log/wtmp /etc/fstab ; do
+    touch $BUILD_ROOT/$FILE
+done
+
+echo now finalizing build dir...
+CHROOT_RETURN="`chroot $BUILD_ROOT /sbin/ldconfig 2>&1`"
+case "$CHROOT_RETURN" in
+    *warning:*)
+      chroot $BUILD_ROOT /sbin/ldconfig
+      echo
+      echo chroot $BUILD_ROOT /sbin/ldconfig
+      echo
+      echo "$CHROOT_RETURN"
+      echo
+      echo "Problem with ldconfig.  It's better to reinit the build system..."
+      echo
+      cleanup_and_exit 1
+    ;;
+esac
+test -x $BUILD_ROOT/usr/sbin/Check && chroot $BUILD_ROOT /usr/sbin/Check
+
+mkdir -p $BUILD_ROOT/var/adm/packages
+touch $BUILD_ROOT/var/adm/packages
+if test -x $BUILD_ROOT/sbin/SuSEconfig ; then
+    if grep norestarts $BUILD_ROOT/sbin/SuSEconfig > /dev/null ; then
+       chroot $BUILD_ROOT /sbin/SuSEconfig --norestarts --force
+    else
+       chroot $BUILD_ROOT /sbin/SuSEconfig --force
+    fi
+fi
+
+if test -x $BUILD_ROOT/usr/X11R6/bin/switch2mesasoft ; then
+    chroot $BUILD_ROOT /usr/X11R6/bin/switch2mesasoft
+fi
+
+for PROG in /usr/bin/TeX/texhash /usr/bin/texhash ; do
+    test -x $BUILD_ROOT/$PROG && \
+       chroot $BUILD_ROOT bash -c ". /etc/profile ; $PROG"
+done
+
+if test -e $BUILD_ROOT/usr/share/zoneinfo/UTC ; then
+    chroot $BUILD_ROOT zic -l UTC
+fi
+
+test -e $BUILD_ROOT/.build/init_buildsystem.data || HOST=`hostname`
+test -e $BUILD_ROOT/etc/hosts || echo "127.0.0.1 localhost" > $BUILD_ROOT/etc/hosts
+if ! grep -F "127.0.0.1 $HOST" $BUILD_ROOT/etc/hosts > /dev/null ; then
+    # this makes a reverse lookup on 127.0.0.1 return the host name,
+    # which is bad, but 127.0.0.2 does not work on all unix systems
+    echo "127.0.0.1 $HOST" > $BUILD_ROOT/etc/hosts.new
+    test -f $BUILD_ROOT/etc/hosts && cat $BUILD_ROOT/etc/hosts >> $BUILD_ROOT/etc/hosts.new
+    mv $BUILD_ROOT/etc/hosts.new $BUILD_ROOT/etc/hosts
+fi
+
+if test -x $BUILD_ROOT/bin/rpm -a ! -f $BUILD_ROOT/var/lib/rpm/packages.rpm -a ! -f $BUILD_ROOT/var/lib/rpm/Packages ; then
+    echo "initializing rpm db..."
+    chroot $BUILD_ROOT rpm --initdb || cleanup_and_exit 1
+    # create provides index
+    chroot $BUILD_ROOT rpm -q --whatprovides rpm >/dev/null 2>&1
+fi
+
+# create modules.dep in kvm/xen
+# This can not work, until we use the native repository kernel
+#if [ $BUILD_ROOT = "/" -a -x /sbin/depmod ]; then
+#  /sbin/depmod -a
+#fi
+
+rm -f $BUILD_ROOT/.rpmmacros $BUILD_ROOT/root/.rpmmacros
+rm -rf $BUILD_ROOT/.init_b_cache
+rm -f $BUILD_IS_RUNNING
+rm -f $TMPFILE
+
+cleanup_and_exit 0
diff --git a/initscript_qemu_vm b/initscript_qemu_vm
new file mode 100755 (executable)
index 0000000..be8d8b5
--- /dev/null
@@ -0,0 +1,28 @@
+#!/bin/bash-static
+
+# from /usr/sbin/qemu-binfmt-conf.sh
+if [ ! -f /proc/sys ]; then
+  mount-static -n proc -t proc /proc
+fi
+if [ ! -f /proc/sys/fs/binfmt_misc/register ]; then
+  mount-static -n binfmt_misc -t binfmt_misc /proc/sys/fs/binfmt_misc
+fi
+# register arm, ppc, mips
+
+echo   ':arm:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-arm:'             > /proc/sys/fs/binfmt_misc/register
+echo   ':armeb:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x28:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-armeb:'         > /proc/sys/fs/binfmt_misc/register
+
+echo   ':ppc:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x14:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-ppc:'             > /proc/sys/fs/binfmt_misc/register
+
+echo   ':mips:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x08:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-mips:'           > /proc/sys/fs/binfmt_misc/register
+echo   ':mipsel:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x08\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-mipsel:'       > /proc/sys/fs/binfmt_misc/register
+#echo   ':mipsn32:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x08:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-mipsn32:'     > /proc/sys/fs/binfmt_misc/register
+#echo   ':mipsn32el:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x08\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-mipsn32el:' > /proc/sys/fs/binfmt_misc/register
+#echo   ':mips64:M::\x7fELF\x02\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x08:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-mips64:'       > /proc/sys/fs/binfmt_misc/register
+#echo   ':mips64el:M::\x7fELF\x02\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x08\x00:\xff\xff\xff\xff\xff\xff\xff\x00\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-mips64el:'   > /proc/sys/fs/binfmt_misc/register
+
+echo    ':sh4:M::\x7fELF\x01\x01\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x2a\x00:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff\xff:/usr/bin/qemu-sh4:' > /proc/sys/fs/binfmt_misc/register
+echo    ':sh4eb:M::\x7fELF\x01\x02\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02\x00\x2a:\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xfe\xff\xff:/usr/bin/qemu-sh4eb:' > /proc/sys/fs/binfmt_misc/register
+
+#exec /.build/build 
+/bin/bash-static /.build/build
diff --git a/killchroot b/killchroot
new file mode 100755 (executable)
index 0000000..2b71f6c
--- /dev/null
@@ -0,0 +1,88 @@
+#!/usr/bin/perl
+
+my $sig = 15;
+my $verbose = 0;
+my $msg = '';
+my $doit = 1;
+
+while (@ARGV) {
+  if ($ARGV[0] eq '-s' || $ARGV[0] eq '--signal') {
+    die("$ARGV[0]: argument required") unless @ARGV > 1;
+    $sig = $ARGV[1];
+    shift @ARGV;
+    shift @ARGV;
+    next;
+  }
+  if ($ARGV[0] eq '-v' || $ARGV[0] eq '--verbose') {
+    $verbose = 1;
+    shift @ARGV;
+    next;
+  }
+  if ($ARGV[0] eq '-n') {
+    $doit = 0;
+    $verbose = 1;
+    shift @ARGV;
+    next;
+  }
+  if ($ARGV[0] eq '-m' || $ARGV[0] eq '--message') {
+    die("$ARGV[0]: argument required") unless @ARGV > 1;
+    $msg = $ARGV[1];
+    shift @ARGV;
+    shift @ARGV;
+    next;
+  }
+  last;
+}
+
+die("usage: killchroot [-s sig] <rootdir>") unless @ARGV == 1 && $ARGV[0] ne '';
+my $dir = $ARGV[0];
+chdir($dir) || die("$dir: $!\n");
+
+$dir = readlink('/proc/self/cwd');
+die("readlink /proc/self/cwd: $!\n") unless defined $dir;
+
+my %pids;
+my $pid;
+my $path;
+
+opendir(D, "/proc") || die("/proc: $!\n");
+for $pid (readdir(D)) {
+  next unless $pid =~ /^\d+$/;
+  $path = readlink("/proc/$pid/root");
+  next unless defined $path;
+  if ($path =~ /^\Q$dir\E(\/.*)?$/) {
+    $pids{$pid} = 1;
+  }
+  $path = readlink("/proc/$pid/exe");
+  if ($path =~ /^\Q$dir\E(\/.*)?$/) {
+    $pids{$pid} = 1;
+  }
+}
+closedir(D);
+
+my @pids = sort keys %pids;
+exit 0 unless @pids;
+
+print "$msg\n" if $msg ne '';
+
+if ($verbose) {
+  my @pidsv = ();
+  for $pid (@pids) {
+    open(F, "</proc/$pid/cmdline");
+    my $cmd = '';
+    sysread(F, $cmd, 128);
+    close F;
+    $cmd =~ s/\0.*//;
+    #$cmd =~ s/ .*//;
+    push @pidsv, "$pid($cmd)";
+  }
+  if (@pids > 1) {
+    print "sending signal $sig to processes @pidsv\n";
+  } else {
+    print "sending signal $sig to process @pidsv\n";
+  }
+}
+exit 0 unless $doit;
+kill $sig => @pids;
+kill CONT => @pids if $sig eq 9;
+exit 0;
diff --git a/lxc.conf b/lxc.conf
new file mode 100644 (file)
index 0000000..d95924a
--- /dev/null
+++ b/lxc.conf
@@ -0,0 +1,15 @@
+lxc.cgroup.devices.deny = a
+# null
+lxc.cgroup.devices.allow = c 1:3 rw
+# zero
+lxc.cgroup.devices.allow = c 1:5 rw
+# full
+lxc.cgroup.devices.allow = c 1:7 rw
+# random
+lxc.cgroup.devices.allow = c 1:8 rw
+# urandom
+lxc.cgroup.devices.allow = c 1:9 rw
+# tty
+lxc.cgroup.devices.allow = c 5:0 rw
+# ptmx
+lxc.cgroup.devices.allow = c 5:2 rw
diff --git a/mkbaselibs b/mkbaselibs
new file mode 100755 (executable)
index 0000000..e130f2f
--- /dev/null
@@ -0,0 +1,1139 @@
+#!/usr/bin/perl -w
+
+use POSIX;
+use strict;
+use File::Temp qw/tempfile tempdir/;
+
+# See: http://www.rpm.org/max-rpm/s1-rpm-file-format-rpm-file-format.html#S3-RPM-FILE-FORMAT-HEADER-TAG-LISTING
+# cf http://search.cpan.org/~davecross/Parse-RPM-Spec-0.01/lib/Parse/RPM/Spec.pm
+my %STAG = (
+       "NAME"          => 1000,
+       "VERSION"       => 1001,
+       "RELEASE"       => 1002,
+       "EPOCH"         => 1003,
+       "SERIAL"        => 1003,
+       "SUMMARY"       => 1004,
+       "DESCRIPTION"   => 1005,
+       "BUILDTIME"     => 1006,
+       "BUILDHOST"     => 1007,
+       "INSTALLTIME"   => 1008,
+       "SIZE"          => 1009,
+       "DISTRIBUTION"  => 1010,
+       "VENDOR"        => 1011,
+       "GIF"           => 1012,
+       "XPM"           => 1013,
+       "LICENSE"       => 1014,
+       "COPYRIGHT"     => 1014,
+       "PACKAGER"      => 1015,
+       "GROUP"         => 1016,
+       "SOURCE"        => 1018,
+       "PATCH"         => 1019,
+       "URL"           => 1020,
+       "OS"            => 1021,
+       "ARCH"          => 1022,
+       "PREIN"         => 1023,
+       "POSTIN"        => 1024,
+       "PREUN"         => 1025,
+       "POSTUN"        => 1026,
+       "OLDFILENAMES"  => 1027,
+       "FILESIZES"     => 1028,
+       "FILESTATES"    => 1029,
+       "FILEMODES"     => 1030,
+       "FILERDEVS"     => 1033,
+       "FILEMTIMES"    => 1034,
+       "FILEMD5S"      => 1035,
+       "FILELINKTOS"   => 1036,
+       "FILEFLAGS"     => 1037,
+       "FILEUSERNAME"  => 1039,
+       "FILEGROUPNAME" => 1040,
+       "ICON"          => 1043,
+       "SOURCERPM"     => 1044,
+       "FILEVERIFYFLAGS"       => 1045,
+       "ARCHIVESIZE"   => 1046,
+       "PROVIDENAME"   => 1047,
+       "PROVIDES"      => 1047,
+       "REQUIREFLAGS"  => 1048,
+       "REQUIRENAME"   => 1049,
+       "REQUIREVERSION"        => 1050,
+       "NOSOURCE"      => 1051,
+       "NOPATCH"       => 1052,
+       "CONFLICTFLAGS" => 1053,
+       "CONFLICTNAME"  => 1054,
+       "CONFLICTVERSION"       => 1055,
+       "EXCLUDEARCH"   => 1059,
+       "EXCLUDEOS"     => 1060,
+       "EXCLUSIVEARCH" => 1061,
+       "EXCLUSIVEOS"   => 1062,
+       "RPMVERSION"    => 1064,
+       "TRIGGERSCRIPTS"        => 1065,
+       "TRIGGERNAME"   => 1066,
+       "TRIGGERVERSION"        => 1067,
+       "TRIGGERFLAGS"  => 1068,
+       "TRIGGERINDEX"  => 1069,
+       "VERIFYSCRIPT"  => 1079,
+       "CHANGELOGTIME" => 1080,
+       "CHANGELOGNAME" => 1081,
+       "CHANGELOGTEXT" => 1082,
+       "PREINPROG"     => 1085,
+       "POSTINPROG"    => 1086,
+       "PREUNPROG"     => 1087,
+       "POSTUNPROG"    => 1088,
+       "BUILDARCHS"    => 1089,
+       "OBSOLETENAME"  => 1090,
+       "OBSOLETES"     => 1090,
+       "VERIFYSCRIPTPROG"      => 1091,
+       "TRIGGERSCRIPTPROG"     => 1092,
+       "COOKIE"        => 1094,
+       "FILEDEVICES"   => 1095,
+       "FILEINODES"    => 1096,
+       "FILELANGS"     => 1097,
+       "PREFIXES"      => 1098,
+       "INSTPREFIXES"  => 1099,
+       "SOURCEPACKAGE" => 1106,
+       "PROVIDEFLAGS"  => 1112,
+       "PROVIDEVERSION"        => 1113,
+       "OBSOLETEFLAGS" => 1114,
+       "OBSOLETEVERSION"       => 1115,
+       "DIRINDEXES"    => 1116,
+       "BASENAMES"     => 1117,
+       "DIRNAMES"      => 1118,
+       "OPTFLAGS"      => 1122,
+       "DISTURL"       => 1123,
+       "PAYLOADFORMAT" => 1124,
+       "PAYLOADCOMPRESSOR"     => 1125,
+       "PAYLOADFLAGS"  => 1126,
+       "INSTALLCOLOR"  => 1127,
+       "INSTALLTID"    => 1128,
+       "REMOVETID"     => 1129,
+       "RHNPLATFORM"   => 1131,
+       "PLATFORM"      => 1132,
+       "PATCHESNAME"   => 1133,
+       "PATCHESFLAGS"  => 1134,
+       "PATCHESVERSION"        => 1135,
+       "CACHECTIME"    => 1136,
+       "CACHEPKGPATH"  => 1137,
+       "CACHEPKGSIZE"  => 1138,
+       "CACHEPKGMTIME" => 1139,
+       "FILECOLORS"    => 1140,
+       "FILECLASS"     => 1141,
+       "CLASSDICT"     => 1142,
+       "FILEDEPENDSX"  => 1143,
+       "FILEDEPENDSN"  => 1144,
+       "DEPENDSDICT"   => 1145,
+       "SOURCEPKGID"   => 1146,
+       "PRETRANS"      => 1151,
+       "POSTTRANS"     => 1152,
+       "PRETRANSPROG"  => 1153,
+       "POSTTRANSPROG" => 1154,
+       "DISTTAG"       => 1155,
+       "SUGGESTSNAME"  => 1156,
+       "SUGGESTSVERSION"       => 1157,
+       "SUGGESTSFLAGS" => 1158,
+       "ENHANCESNAME"  => 1159,
+       "ENHANCESVERSION"       => 1160,
+       "ENHANCESFLAGS" => 1161,
+       "PRIORITY"      => 1162,
+       "CVSID"         => 1163,
+);
+
+# do not mix numeric tags with symbolic tags.
+# special symbolic tag 'FILENAME' exists.
+
+# This function seems to take a set of tags and populates a global
+# hash-table (%res) with data obtained by doing a binary unpack() on
+# the raw package
+# http://www.rpm.org/max-rpm/s1-rpm-file-format-rpm-file-format.html
+
+sub rpmq_many {
+  my $rpm = shift;
+  my @stags = @_;
+
+  my $need_filenames = grep { $_ eq 'FILENAMES' } @stags;
+  push @stags, 'BASENAMES', 'DIRNAMES', 'DIRINDEXES', 'OLDFILENAMES' if $need_filenames;
+  @stags = grep { $_ ne 'FILENAMES' } @stags if $need_filenames;
+  my %stags = map {0+($STAG{$_} or $_) => $_} @stags;
+
+  my ($magic, $sigtype, $headmagic, $cnt, $cntdata, $lead, $head, $index, $data, $tag, $type, $offset, $count);
+
+  local *RPM;
+  if (ref($rpm) eq 'ARRAY') {
+    ($headmagic, $cnt, $cntdata) = unpack('N@8NN', $rpm->[0]);
+    if ($headmagic != 0x8eade801) {
+      warn("Bad rpm\n");
+      return ();
+    }
+    if (length($rpm->[0]) < 16 + $cnt * 16 + $cntdata) {
+      warn("Bad rpm\n");
+      return ();
+    }
+    $index = substr($rpm->[0], 16, $cnt * 16);
+    $data = substr($rpm->[0], 16 + $cnt * 16, $cntdata);
+  } else {
+    return () unless open(RPM, "<$rpm");
+    if (read(RPM, $lead, 96) != 96) {
+      warn("Bad rpm $rpm\n");
+      close RPM;
+      return ();
+    }
+    ($magic, $sigtype) = unpack('N@78n', $lead);
+    if ($magic != 0xedabeedb || $sigtype != 5) {
+      warn("Bad rpm $rpm\n");
+      close RPM;
+      return ();
+    }
+    if (read(RPM, $head, 16) != 16) {
+      warn("Bad rpm $rpm\n");
+      close RPM;
+      return ();
+    }
+    ($headmagic, $cnt, $cntdata) = unpack('N@8NN', $head);
+    if ($headmagic != 0x8eade801) {
+      warn("Bad rpm $rpm\n");
+      close RPM;
+      return ();
+    }
+    if (read(RPM, $index, $cnt * 16) != $cnt * 16) {
+      warn("Bad rpm $rpm\n");
+      close RPM;
+      return ();
+    }
+    $cntdata = ($cntdata + 7) & ~7;
+    if (read(RPM, $data, $cntdata) != $cntdata) {
+      warn("Bad rpm $rpm\n");
+      close RPM;
+      return ();
+    }
+  }
+
+  my %res = ();
+
+  if (ref($rpm) eq 'ARRAY' && @stags && @$rpm > 1) {
+    my %res2 = &rpmq_many([ $rpm->[1] ], @stags);
+    %res = (%res, %res2);
+    return %res;
+  }
+
+  if (ref($rpm) ne 'ARRAY' && @stags) {
+    if (read(RPM, $head, 16) != 16) {
+      warn("Bad rpm $rpm\n");
+      close RPM;
+      return ();
+    }
+    ($headmagic, $cnt, $cntdata) = unpack('N@8NN', $head);
+    if ($headmagic != 0x8eade801) {
+      warn("Bad rpm $rpm\n");
+      close RPM;
+      return ();
+    }
+    if (read(RPM, $index, $cnt * 16) != $cnt * 16) {
+      warn("Bad rpm $rpm\n");
+      close RPM;
+      return ();
+    }
+    if (read(RPM, $data, $cntdata) != $cntdata) {
+      warn("Bad rpm $rpm\n");
+      close RPM;
+      return ();
+    }
+  }
+  close RPM if ref($rpm) ne 'ARRAY';
+
+  return %res unless @stags;   # nothing to do
+
+  while($cnt-- > 0) {
+    ($tag, $type, $offset, $count, $index) = unpack('N4a*', $index);
+    $tag = 0+$tag;
+    if ($stags{$tag}) {
+      eval {
+       my $otag = $stags{$tag};
+       if ($type == 0) {
+         $res{$otag} = [ '' ];
+       } elsif ($type == 1) {
+         $res{$otag} = [ unpack("\@${offset}c$count", $data) ];
+       } elsif ($type == 2) {
+         $res{$otag} = [ unpack("\@${offset}c$count", $data) ];
+       } elsif ($type == 3) {
+         $res{$otag} = [ unpack("\@${offset}n$count", $data) ];
+       } elsif ($type == 4) {
+         $res{$otag} = [ unpack("\@${offset}N$count", $data) ];
+       } elsif ($type == 5) {
+         $res{$otag} = [ undef ];
+       } elsif ($type == 6) {
+         $res{$otag} = [ unpack("\@${offset}Z*", $data) ];
+       } elsif ($type == 7) {
+         $res{$otag} = [ unpack("\@${offset}a$count", $data) ];
+       } elsif ($type == 8 || $type == 9) {
+         my $d = unpack("\@${offset}a*", $data);
+         my @res = split("\0", $d, $count + 1);
+         $res{$otag} = [ splice @res, 0, $count ];
+       } else {
+         $res{$otag} = [ undef ];
+       }
+      };
+      if ($@) {
+       warn("Bad rpm $rpm: $@\n");
+       return ();
+      }
+    }
+  }
+
+  if ($need_filenames) {
+    if ($res{'OLDFILENAMES'}) {
+      $res{'FILENAMES'} = [ @{$res{'OLDFILENAMES'}} ];
+    } else {
+      my $i = 0;
+      $res{'FILENAMES'} = [ map {"$res{'DIRNAMES'}->[$res{'DIRINDEXES'}->[$i++]]$_"} @{$res{'BASENAMES'}} ];
+    }
+  }
+  return %res;
+}
+
+sub rpmq_add_flagsvers {
+  my $res = shift;
+  my $name = shift;
+  my $flags = shift;
+  my $vers = shift;
+
+  return unless $res;
+  my @flags = @{$res->{$flags} || []};
+  my @vers = @{$res->{$vers} || []};
+  for (@{$res->{$name}}) {
+    if (@flags && ($flags[0] & 0xe) && @vers) {
+      $_ .= ' ';
+      $_ .= '<' if $flags[0] & 2;
+      $_ .= '>' if $flags[0] & 4;
+      $_ .= '=' if $flags[0] & 8;
+      $_ .= " $vers[0]";
+    }
+    shift @flags;
+    shift @vers;
+  }
+}
+
+my @preamble = qw{
+  Name Version Release Epoch Summary Copyright License Distribution
+  Disturl Vendor Group Packager Url Icon Prefixes
+};
+
+my $rpm;
+my $arch;
+
+my $config = '';
+
+my $targettype;
+my $targetarch;
+my $prefix;
+my $extension;
+my $configdir;
+my $targetname;
+my $legacyversion;
+
+my @baselib;
+my @config;
+
+my @provides;
+my @obsoletes;
+my @requires;
+my @prerequires;
+my @conflicts;
+my @recommends;
+my @supplements;
+my @suggests;
+
+my @prein;
+my @postin;
+my @preun;
+my @postun;
+my $autoreqprov;
+
+my $verbose;
+my %target_matched;
+my @filesystem;
+
+# Used for each package by
+sub parse_config {
+  my $target = shift;
+  my $pkgname = shift;
+  my $pkgver = shift;
+
+  my $pkghasmatched;
+
+  my $pkgmatches = 1;
+  $prefix = '';
+  $legacyversion = '';
+  $extension = '';
+  $configdir = '';
+  $targetname = '';
+  ($targetarch, $targettype) = split(':', $target, 2);
+  @baselib = ();
+  @config = ();
+  @provides = ();
+  @obsoletes = ();
+  @requires = ();
+  @recommends = ();
+  @supplements = ();
+  @suggests = ();
+  @prerequires = ();
+  @conflicts = ();
+  @prein = ();
+  @postin = ();
+  @preun = ();
+  @postun = ();
+  $autoreqprov = 'on';
+  my $match1 = '';
+
+  for (split("\n", $config)) {
+    s/^\s+//;
+    s/\s+$//;
+    next if $_ eq '' || $_ =~ /^#/;
+
+    s/\<targettype\>/$targettype/g;
+    s/\<targetarch\>/$targetarch/g;
+    s/\<name\>/$pkgname/g;
+    s/\<version\>/$pkgver/g;
+    s/\<prefix\>/$prefix/g;
+    s/\<extension\>/$extension/g;
+    s/\<configdir\>/$configdir/g;
+    s/\<match1\>/$match1/g;
+
+    if (/^arch\s+/) {
+      next unless s/^arch\s+\Q$arch\E\s+//;
+    }
+    next if /^targets\s+/;
+    if (/\s+package\s+[-+_a-zA-Z0-9]+$/) {
+      $pkgmatches = 0; # XXX: hack
+    }
+    if (/\s+package\s+\/[-+_a-zA-Z0-9]+\/$/) {
+      $pkgmatches = 0; # XXX: hack
+    }
+    if (/^targettype\s+/) {
+      next unless s/^targettype\s+\Q$targettype\E\s+//;
+    }
+    if (/^targetarch\s+/) {
+      next unless s/^targetarch\s+\Q$targetarch\E\s+//;
+    }
+    if (/^prefix\s+(.*?)$/) { $prefix = $1; next; }
+    if (/^legacyversion\s+(.*?)$/) { $legacyversion = $1; next; }
+    if (/^extension\s+(.*?)$/) { $extension = $1; next; }
+    if (/^configdir\s+(.*?)$/) { $configdir= $1; next; }
+    if (/^targetname\s+(.*?)$/) { $targetname = $1; next; }
+
+    $_ = "baselib $_" if /^[\+\-\"]/;
+    $_ = "package $_" if /^[-+_a-zA-Z0-9]+$/;
+    if (/^package\s+\/(.*?)\/$/) {
+      my $pm = $1;
+      $pkgmatches = $pkgname =~ /$pm/;
+      $match1 = $1 if defined $1;
+      $pkghasmatched |= $pkgmatches if $pkgname =~ /-debuginfo$/ && $target_matched{$target};
+      next;
+    }
+    if (/^package\s+(.*?)$/) {
+      $pkgmatches = $1 eq $pkgname;
+      $pkghasmatched |= $pkgmatches;
+      next;
+    }
+    next unless $pkgmatches;
+    return 0 if $_ eq 'block!';
+    if (/^provides\s+(.*?)$/) { push @provides, $1; next; }
+    if (/^requires\s+(.*?)$/) { push @requires, $1; next; }
+    if (/^recommends\s+(.*?)$/) { push @recommends, $1; next; }
+    if (/^supplements\s+(.*?)$/) { push @supplements, $1; next; }
+    if (/^suggests\s+(.*?)$/) { push @suggests, $1; next; }
+    if (/^prereq\s+(.*?)$/) { push @prerequires, $1; next; }
+    if (/^obsoletes\s+(.*?)$/) { push @obsoletes, $1; next; }
+    if (/^conflicts\s+(.*?)$/) { push @conflicts, $1; next; }
+    if (/^baselib\s+(.*?)$/) { push @baselib, $1; next; }
+    if (/^config\s+(.*?)$/) { push @config, $1; next; }
+    if (/^pre(in)?\s+(.*?)$/) { push @prein, $2; next; }
+    if (/^post(in)?\s+(.*?)$/) { push @postin, $2; next; }
+    if (/^preun\s+(.*?)$/) { push @preun, $1; next; }
+    if (/^postun\s+(.*?)$/) { push @preun, $1; next; }
+    if (/^autoreqprov\s+(.*?)$/) {$autoreqprov = $1; next; }
+    die("bad line: $_\n");
+  }
+  return $pkghasmatched;
+}
+
+sub read_config {
+  my $cfname = shift;
+  local *F;
+  open(F, "<$cfname") || die("$cfname: $!\n");
+  my @cf = <F>;
+  close F;
+  $config .= join('', @cf);
+  $config .= "\npackage __does_not_match__\n";
+}
+
+sub get_targets {
+  my $architecture = shift;
+  my $conf = shift;
+  my %targets;
+  for (split("\n", $conf)) {
+    if (/^arch\s+/) {
+      next unless s/^arch\s+\Q$architecture\E\s+//;
+    }
+    if (/^targets\s+(.*?)$/) {
+      $targets{$_} = 1 for split(' ', $1);
+    }
+  }
+  my @targets = sort keys %targets;
+  return @targets;
+}
+
+# Packages listed in config file
+sub get_pkgnames {
+  my %rpms;
+  for (split("\n", $config)) {
+    if (/^(.*\s+)?package\s+([-+_a-zA-Z0-9]+)\s*$/) {  # eg : arch ppc package libnuma-devel
+      $rpms{$2} = 1;
+    } elsif (/^\s*([-+_a-zA-Z0-9]+)\s*$/) { # eg: readline-devel
+      $rpms{$1} = 1;
+    }
+  }
+  return sort keys %rpms;
+}
+
+# Packages listed in config file - debian variant (can have "." in package names)
+sub get_debpkgnames {
+  my %debs;
+  for (split("\n", $config)) {
+    if (/^(.*\s+)?package\s+([-+_a-zA-Z0-9.]+)\s*$/) {  # eg : arch ppc package libnuma-devel
+      $debs{$2} = 1;
+    } elsif (/^\s*([-+_a-zA-Z0-9.]+)\s*$/) { # eg: readline-devel
+      $debs{$1} = 1;
+    }
+  }
+  return sort keys %debs;
+}
+
+sub handle_rpms {
+ for $rpm (@_) {
+
+  my @stags = map {uc($_)} @preamble;
+  push @stags, 'DESCRIPTION';
+  push @stags, 'FILENAMES', 'FILEMODES', 'FILEUSERNAME', 'FILEGROUPNAME', 'FILEFLAGS', 'FILEVERIFYFLAGS';
+  push @stags, 'CHANGELOGTIME', 'CHANGELOGNAME', 'CHANGELOGTEXT';
+  push @stags, 'ARCH', 'SOURCERPM', 'RPMVERSION';
+  push @stags, 'BUILDTIME';
+  my %res = rpmq_many($rpm, @stags);
+  die("$rpm: bad rpm\n") unless $res{'NAME'};
+
+  my $rname = $res{'NAME'}->[0];
+  my $sname = $res{'SOURCERPM'}->[0];
+  die("$rpm is a sourcerpm\n") unless $sname;
+  die("bad sourcerpm: $sname\n") unless $sname =~ /^(.*)-([^-]+)-([^-]+)\.(no)?src\.rpm$/;
+  $sname = $1;
+  my $sversion = $2;
+  my $srelease = $3;
+
+  $arch = $res{'ARCH'}->[0];
+  my @targets = get_targets($arch, $config);
+  if (!@targets) {
+    print "no targets for arch $arch, nothing to do\n";
+    exit(0);
+  }
+  for my $target (@targets) {
+
+    next unless parse_config($target, $res{'NAME'}->[0], $res{'VERSION'}->[0]);
+    die("targetname not set\n") unless $targetname;
+    $target_matched{$target} = 1;
+
+    my %ghosts;
+    my @rpmfiles = @{$res{'FILENAMES'}};
+    my @ff = @{$res{'FILEFLAGS'}};
+    for (@rpmfiles) {
+      $ghosts{$_} = 1 if $ff[0] & (1 << 6);
+      shift @ff;
+    }
+    my %files;
+    my %cfiles;
+    my %moves;
+    my %symlinks;
+    for my $r (@baselib) {
+      my $rr = substr($r, 1);
+      if (substr($r, 0, 1) eq '+') {
+       if ($rr =~ /^(.*?)\s*->\s*(.*?)$/) {
+         if (grep {$_ eq $1} @rpmfiles) {
+           $files{$1} = 1;
+           $moves{$1} = $2;
+         }
+       } else {
+         for (grep {/$rr/} @rpmfiles) {
+           $files{$_} = 1;
+           delete $moves{$_};
+         }
+       }
+      } elsif (substr($r, 0, 1) eq '-') {
+       delete $files{$_} for grep {/$rr/} keys %files;
+      } elsif (substr($r, 0, 1) eq '"') {
+       $rr =~ s/\"$//;
+       if ($rr =~ /^(.*?)\s*->\s*(.*?)$/) {
+         $symlinks{$1} = $2;
+       } else {
+         die("bad baselib string rule: $r\n");
+       }
+      } else {
+       die("bad baselib rule: $r\n");
+      }
+    }
+    if ($configdir) {
+      for my $r (@config) {
+       my $rr = substr($r, 1);
+       if (substr($r, 0, 1) eq '+') {
+         $cfiles{$_} = 1 for grep {/$rr/} grep {!$ghosts{$_}} @rpmfiles;
+       } elsif (substr($r, 0, 1) eq '-') {
+         delete $cfiles{$_} for grep {/$rr/} keys %cfiles;
+       } else {
+         die("bad config rule: $r\n");
+       }
+      }
+    }
+    $files{$_} = 1 for keys %cfiles;
+
+    if (!%files) {
+      print "$rname($target): empty filelist, skipping rpm\n";
+      next;
+    }
+
+    my $i = 0;
+    for (@{$res{'FILENAMES'}}) {
+      $files{$_} = $i if $files{$_};
+      $i++;
+    }
+
+    my %cpiodirs;
+    for (keys %files) {
+      next if $cfiles{$_} || $moves{$_};
+      my $fn = $_;
+      next unless $fn =~ s/\/[^\/]+$//;
+      $cpiodirs{$fn} = 1;
+    }
+
+    my %alldirs;
+    for (keys %files) {
+      next if $cfiles{$_};
+      my $fn = $_;
+      if ($moves{$fn}) {
+       $fn = $moves{$fn};
+       next unless $fn =~ s/\/[^\/]+$//;
+       $alldirs{$fn} = 1;
+      } else {
+       next unless $fn =~ s/\/[^\/]+$//;
+       $alldirs{"$prefix$fn"} = 1;
+      }
+    }
+    $alldirs{$_} = 1 for keys %symlinks;
+    $alldirs{$configdir} = 1 if %cfiles;
+    my $ad;
+    for $ad (keys %alldirs) {
+      $alldirs{$ad} = 1 while $ad =~ s/\/[^\/]+$//;
+    }
+    for (keys %files) {
+      next if $cfiles{$_};
+      my $fn = $_;
+      if ($moves{$fn}) {
+       delete $alldirs{$moves{$fn}};
+      } else {
+       delete $alldirs{"$prefix$fn"};
+      }
+    }
+    $ad = $prefix;
+    delete $alldirs{$ad};
+    delete $alldirs{$ad} while $ad =~ s/\/[^\/]+$//;
+    delete $alldirs{$_} for @filesystem;
+
+    print "$rname($target): writing specfile...\n";
+    my ($fh, $specfile) = tempfile(SUFFIX => ".spec");
+    open(SPEC, ">&=", $fh) || die("open: $!\n");
+    for my $p (@preamble) {
+      my $pt = uc($p);
+      next unless $res{$pt};
+      my $d = $res{$pt}->[0];
+      $d =~ s/%/%%/g;
+      if ($p eq 'Name') {
+       print SPEC "Name: $sname\n";
+       next;
+      }
+      if ($p eq 'Version') {
+       print SPEC "Version: $sversion\n";
+       next;
+      }
+      if ($p eq 'Release') {
+       print SPEC "Release: $srelease\n";
+       next;
+      }
+      if ($p eq 'Disturl') {
+       print SPEC "%define disturl $d\n";
+       next;
+      }
+      print SPEC "$p: $d\n";
+    }
+    print SPEC "Source: $rpm\n";
+    print SPEC "NoSource: 0\n" if $res{'SOURCERPM'}->[0] =~ /\.nosrc\.rpm$/;
+    print SPEC "BuildRoot: %{_tmppath}/baselibs-%{name}-%{version}-build\n";
+    print SPEC "%define _target_cpu $targetarch\n";
+    print SPEC "%define __os_install_post %{nil}\n";
+    print SPEC "%description\nUnneeded main package. Ignore.\n\n";
+    print SPEC "%package -n $targetname\n";
+    for my $p (@preamble) {
+      next if $p eq 'Name' || $p eq 'Disturl';
+      my $pt = uc($p);
+      next unless $res{$pt};
+      my $d = $res{$pt}->[0];
+      $d =~ s/%/%%/g;
+      if ($pt eq 'VERSION' && $legacyversion) {
+       $d = $legacyversion;
+      } elsif ($pt eq 'RELEASE' && $legacyversion) {
+       my @bt = localtime($res{'BUILDTIME'}->[0]);
+       $bt[5] += 1900;
+       $bt[4] += 1;
+       $d = sprintf("%04d%02d%02d%02d%02d\n", @bt[5,4,3,2,1]);
+      }
+      print SPEC "$p: $d\n";
+    }
+    print SPEC "Autoreqprov: $autoreqprov\n";
+
+    for my $ar ([\@provides, 'provides'],
+               [\@prerequires, 'prereq'],
+               [\@requires, 'requires'],
+               [\@recommends, 'recommends'],
+               [\@supplements, 'supplements'],
+               [\@obsoletes, 'obsoletes'],
+               [\@conflicts, 'conflicts']) {
+       my @a = @{$ar->[0]};
+       my @na = ();
+       for (@a) {
+         if (substr($_, 0, 1) eq '"') {
+           die("bad $ar->[1] rule: $_\n") unless /^\"(.*)\"$/;
+           push @na, $1;
+         } elsif (substr($_, 0, 1) eq '-') {
+           my $ra = substr($_, 1);
+           @na = grep {!/$ra/} @na;
+         } else {
+           die("bad $ar->[1] rule: $_\n");
+         }
+       }
+      print SPEC ucfirst($ar->[1]).": $_\n" for @na;
+    }
+    my $cpiopre = '';
+    $cpiopre = './' if $res{'RPMVERSION'}->[0] !~ /^3/;
+    my $d = $res{'DESCRIPTION'}->[0];
+    $d =~ s/%/%%/g;
+    if ($legacyversion) {
+      $d = "This rpm was re-packaged from $res{'NAME'}->[0]-$res{'VERSION'}->[0]-$res{'RELEASE'}->[0]\n\n$d";
+    }
+    print SPEC "\n%description -n $targetname\n";
+    print SPEC "$d\n";
+    print SPEC "%prep\n";
+    print SPEC "%build\n";
+    print SPEC "%install\n";
+    print SPEC "rm -rf \$RPM_BUILD_ROOT\n";
+    print SPEC "mkdir \$RPM_BUILD_ROOT\n";
+    print SPEC "cd \$RPM_BUILD_ROOT\n";
+    my @cfl = grep {!$cfiles{$_} && !$moves{$_}} sort keys %files;
+    if (@cfl) {
+      if ($prefix ne '') {
+       print SPEC "mkdir -p \$RPM_BUILD_ROOT$prefix\n";
+       print SPEC "pushd \$RPM_BUILD_ROOT$prefix\n";
+      }
+      print SPEC "cat <<EOFL >.filelist\n";
+      print SPEC "$_\n" for map {$cpiopre.substr($_, 1)} @cfl;
+      print SPEC "EOFL\n";
+      print SPEC "mkdir -p \$RPM_BUILD_ROOT$prefix$_\n" for sort keys %cpiodirs;
+      print SPEC "rpm2cpio $rpm | cpio -i -d -v -E .filelist\n";
+      print SPEC "rm .filelist\n";
+      if (%ghosts) {
+       for my $fn (grep {$ghosts{$_}} @cfl) {
+         my $fnm = $fn;
+         $fnm = '.' unless $fnm =~ s/\/[^\/]+$//;
+         print SPEC "mkdir -p \$RPM_BUILD_ROOT$prefix$fnm\n";
+         print SPEC "touch \$RPM_BUILD_ROOT$prefix$fn\n";
+       }
+      }
+      if ($prefix ne '') {
+       print SPEC "popd\n";
+      }
+    }
+    if (%cfiles || %moves) {
+      print SPEC "mkdir -p .cfiles\n";
+      print SPEC "pushd .cfiles\n";
+      print SPEC "cat <<EOFL >.filelist\n";
+      print SPEC "$_\n" for map {$cpiopre.substr($_, 1)} grep {$cfiles{$_} || $moves{$_}} sort keys %files;
+      print SPEC "EOFL\n";
+      print SPEC "rpm2cpio $rpm | cpio -i -d -v -E .filelist\n";
+      print SPEC "popd\n";
+      if (%cfiles) {
+       print SPEC "mkdir -p \$RPM_BUILD_ROOT$configdir\n";
+       print SPEC "mv .cfiles$_ \$RPM_BUILD_ROOT$configdir\n" for sort keys %cfiles;
+      }
+      for my $fn (sort keys %moves) {
+       my $fnm = $moves{$fn};
+       $fnm = '.' unless $fnm =~ s/\/[^\/]+$//;
+       print SPEC "mkdir -p \$RPM_BUILD_ROOT$fnm\n";
+       print SPEC "mv .cfiles$fn \$RPM_BUILD_ROOT$moves{$fn}\n";
+      }
+      print SPEC "rm -rf .cfiles\n";
+    }
+    for my $fn (sort keys %symlinks) {
+      my $fnm = $fn;
+      $fnm = '.' unless $fnm =~ s/\/[^\/]+$//;
+      print SPEC "mkdir -p \$RPM_BUILD_ROOT$fnm\n";
+      print SPEC "ln -s $symlinks{$fn} \$RPM_BUILD_ROOT$fn\n";
+    }
+    if ($prefix ne '' && grep {/\.so.*$/} @cfl) {
+      @postin = () if @postin == 1 && $postin[0] =~ /^\"-p.*ldconfig/;
+      unshift @postin, "\"/sbin/ldconfig -r $prefix\"";
+    }
+
+    if (@prein) {
+      print SPEC "%pre -n $targetname";
+      print SPEC $prein[0] =~ /^\"-p/ ? " " : "\n";
+      for (@prein) {
+       die("bad prein rule: $_\n") unless /^\"(.*)\"$/;
+       print SPEC "$1\n";
+      }
+    }
+    if (@postin) {
+      print SPEC "%post -n $targetname";
+      print SPEC $postin[0] =~ /^\"-p/ ? " " : "\n";
+      for (@postin) {
+       die("bad postin rule: $_\n") unless /^\"(.*)\"$/;
+       print SPEC "$1\n";
+      }
+    }
+    if (@preun) {
+      print SPEC "%preun -n $targetname";
+      print SPEC $preun[0] =~ /^\"-p/ ? " " : "\n";
+      for (@preun) {
+       die("bad preun rule: $_\n") unless /^\"(.*)\"$/;
+       print SPEC "$1\n";
+      }
+    }
+    if (@postun) {
+      print SPEC "%postun -n $targetname";
+      print SPEC $postun[0] =~ /^\"-p/ ? " " : "\n";
+      for (@postun) {
+       die("bad postun rule: $_\n") unless /^\"(.*)\"$/;
+       print SPEC "$1\n";
+      }
+    }
+
+    print SPEC "\n%clean\n";
+    print SPEC "\nrm -rf \$RPM_BUILD_ROOT\n\n";
+    print SPEC "%files -n $targetname\n";
+    for my $file (sort keys %alldirs) {
+      print SPEC "%dir %attr(0755,root,root) $file\n";
+    }
+    for my $file (keys %files) {
+      my $fi = $files{$file};
+      my $fm = $res{'FILEMODES'}->[$fi];
+      my $fv = $res{'FILEVERIFYFLAGS'}->[$fi];
+      my $ff = $res{'FILEFLAGS'}->[$fi];
+      if (POSIX::S_ISDIR($fm)) {
+       print SPEC "%dir ";
+      }
+      if ($ff & ((1 << 3) | (1 << 4))) {
+       print SPEC "%config(missingok noreplace) ";
+      } elsif ($ff & (1 << 3)) {
+       print SPEC "%config(missingok) ";
+      } elsif ($ff & (1 << 4)) {
+       print SPEC "%config(noreplace) ";
+      } elsif ($ff & (1 << 0)) {
+       print SPEC "%config ";
+      }
+      print SPEC "%doc " if $ff & (1 << 1);
+      print SPEC "%ghost " if $ff & (1 << 6);
+      print SPEC "%license " if $ff & (1 << 7);
+      print SPEC "%readme " if $ff & (1 << 8);
+      if ($fv != 4294967295) {
+       print SPEC "%verify(";
+       if ($fv & 2147483648) {
+         print SPEC "not ";
+         $fv ^= 4294967295;
+       }
+       print SPEC "md5 " if $fv & (1 << 0);
+       print SPEC "size " if $fv & (1 << 1);
+       print SPEC "link " if $fv & (1 << 2);
+       print SPEC "user " if $fv & (1 << 3);
+       print SPEC "group " if $fv & (1 << 4);
+       print SPEC "mtime " if $fv & (1 << 5);
+       print SPEC "mode " if $fv & (1 << 6);
+       print SPEC "rdev " if $fv & (1 << 7);
+       print SPEC ") ";
+      }
+      #sigh, no POSIX::S_ISLNK ...
+      if (($fm & 0170000) == 0120000) {
+       printf SPEC "%%attr(-,%s,%s) ", $res{'FILEUSERNAME'}->[$fi], $res{'FILEGROUPNAME'}->[$fi];
+      } else {
+       printf SPEC "%%attr(%03o,%s,%s) ", $fm & 07777, $res{'FILEUSERNAME'}->[$fi], $res{'FILEGROUPNAME'}->[$fi];
+      }
+      if ($cfiles{$file}) {
+       my $fn = $file;
+       $fn =~ s/.*\///;
+       print SPEC "$configdir/$fn\n";
+      } else {
+       if ($moves{$file}) {
+         print SPEC "$moves{$file}\n";
+       } else {
+         print SPEC "$prefix$file\n";
+       }
+      }
+    }
+    for (keys %symlinks) {
+      printf SPEC "%%attr(-,root,root) $_\n";
+    }
+
+    if ($res{'CHANGELOGTEXT'}) {
+      print SPEC "\n%changelog -n $targetname\n";
+      my @ct = @{$res{'CHANGELOGTIME'}};
+      my @cn = @{$res{'CHANGELOGNAME'}};
+      my @wdays = qw{Sun Mon Tue Wed Thu Fri Sat};
+      my @months = qw{Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec};
+      for my $cc (@{$res{'CHANGELOGTEXT'}}) {
+       my @lt = localtime($ct[0]);
+       my $cc2 = $cc;
+       my $cn2 = $cn[0];
+       $cc2 =~ s/%/%%/g;
+       $cn2 =~ s/%/%%/g;
+       printf SPEC "* %s %s %02d %04d %s\n%s\n", $wdays[$lt[6]], $months[$lt[4]], $lt[3], 1900 + $lt[5], $cn2, $cc2;
+       shift @ct;
+       shift @cn;
+      }
+    }
+
+    close(SPEC) || die("$specfile: $!\n");
+    print "$rname($target): running build...\n";
+    if (system("rpmbuild -bb $specfile".($verbose ? '' : '>/dev/null 2>&1'))) {
+      print "rpmbuild failed: $?\n";
+      print "re-running in verbose mode:\n";
+      system("rpmbuild -bb $specfile 2>&1");
+      exit(1);
+    }
+    unlink($specfile);
+  }
+ }
+}
+
+################################################################
+
+sub handle_debs {
+
+  eval {
+    require Parse::DebControl;
+  };
+  if ($@){
+    print "mkbaselibs needs the perl module Parse::DebControl\n".
+      "Error. baselibs-deb.conf specified but mkbaselibs can't run\n".
+       "Please ensure that 'osc meta prjconf' contains the following line:\n".
+         "  Support: libparse-debcontrol-perl\n";
+    return;
+  };
+
+
+  # for each deb:
+  #  look in the config file to see if we should be doing anything
+  #
+  #  Unpack the deb control data using dpkg-deb
+  #  for each target
+  #   Unpack the deb control data *and* file data using dpkg-deb
+  #   process the config file for this package modifying control and moving files
+  #   repackage the target deb
+
+  for my $deb (@_) {
+    # http://www.debian.org/doc/debian-policy/ch-controlfields.html#s-binarycontrolfiles
+    # unpack the outer loop control file - this gives us eg: the arch
+    my $base = tempdir() || die("tempdir: $!\n");
+    system "dpkg -e $deb  ${base}/DEBIAN" || die "dpkg -e failed on $deb";
+    my $controlParser = new Parse::DebControl;
+    $controlParser->DEBUG();
+    my $keys = $controlParser->parse_file("${base}/DEBIAN/control");
+#    print Dumper($keys);
+    # DebControl supports multiple paragraphs of control data but
+    # debian/control in a .deb only has one (whereas a debian/control
+    # in a build root contains many)
+    # So extract the ref to the first one.
+    my %control = %{@{$keys}[0]};
+
+    # Validate this is a binary deb and get the control data
+    my $d_name = $control{'Package'};
+    my $d_version = $control{'Version'};
+
+    $arch = $control{'Architecture'};  # set global $arch
+
+    # examine the
+    #   arch <arch> targets <target_arch>[:<target_type>] [<target_arch>[:<target_type>]...]
+    # line and get a list of target_arch-es
+    my @targets = get_targets($arch, $config);
+    if (!@targets) {
+      print "no targets for arch $arch, nothing to do\n";
+      return; # there may be more debs to handle
+    }
+
+    for my $target (@targets) {
+      next unless parse_config($target, $d_name, $d_version);
+      die("targetname not set\n") unless $targetname;  # set in the global_conf
+      $target_matched{$target} = 1;
+
+      my $baseTarget = "${base}/$target";
+      # Unpack a .deb to work on. We have to do this each time as we
+      # manipulate the unpacked files.
+      system "mkdir ${base}/$target";
+      system "dpkg -e $deb  ${baseTarget}/DEBIAN" || die "dpkg -e failed on $deb";
+      # Note that extracting to $prefix does the clever move to /lib-x86/ or whatever
+      system "dpkg -x $deb  ${baseTarget}/$prefix" || die "dpkg -x failed on $deb";
+
+      # Reset the control data
+      $keys = $controlParser->parse_file("${baseTarget}/DEBIAN/control");
+      %control = %{@{$keys}[0]};
+
+      # Force the architecture
+      $control{'Architecture'} = $targetarch;
+
+      # Currently this script does not manipulate any files
+      # If needed they are all unpacked in ${baseTarget}
+
+      # we don't need a dsc/spec file.. all done by just moving files around
+      # and running dpkg -b ${base} $NEW_DEB
+      #
+      # my $dscfile = "/usr/src/packages/DSCS/mkbaselibs$$.dsc";
+
+      print "$d_name($target): writing dscfile...\n";
+      # We can Use Parse::DebControl write_file to create the new control file
+      # just modify tags in there
+
+      # We'll use requires -> Depends:
+      map s/^"(.*)"$/$1/, @requires;  # remove leading/trailing "s
+      $control{"Depends"} = @requires ? join(", ", @requires) : "";  # join array if exists or reset it to ""
+
+      map s/^"(.*)"$/$1/, @prerequires;
+      $control{"Pre-Depends"} = @prerequires ? join(", ", @prerequires) : "";
+
+      map s/^"(.*)"$/$1/, @provides;
+      $control{"Provides"} = @provides ? join(", ", @provides) : "";
+
+      map s/^"(.*)"$/$1/, @recommends;
+      $control{"Recommends"} = @recommends ? join(", ", @recommends) : "";
+
+      map s/^"(.*)"$/$1/, @suggests;
+      $control{"Suggests"} = @suggests ? join(", ", @suggests) : "";
+
+      map s/^"(.*)"$/$1/, @obsoletes;
+      $control{"Replaces"} = @obsoletes ? join(", ", @obsoletes) : "";
+
+      map s/^"(.*)"$/$1/, @conflicts;
+      $control{"Conflicts"} = @conflicts ? join(", ", @conflicts) : "";
+
+      map s/^"(.*)"$/$1/, @supplements;
+      $control{"Enhances"} = @supplements ? join(", ", @supplements) : "";
+
+
+      # Tidy up the various control files.
+      # the md5sums are regenerated by dpkg-deb when building
+      foreach my $c_file qw(conffiles postinst  postrm  preinst  prerm) {
+       unlink "${baseTarget}/DEBIAN/$c_file";
+      }
+      # Create them if needed
+      if (@prein) {
+       map s/^"(.*)"$/$1/, @prein;  # remove leading/trailing "s
+       open(my $SCRIPT, ">${baseTarget}/DEBIAN/preinst");
+       print $SCRIPT join("\n", @prein) ;
+       chmod(0755, $SCRIPT);
+       close($SCRIPT);
+      }
+      if (@postin) {
+       map s/^"(.*)"$/$1/, @postin;
+       open(my $SCRIPT, ">${baseTarget}/DEBIAN/postinst");
+       print $SCRIPT join("\n", @postin) ;
+       chmod(0755, $SCRIPT);
+       close($SCRIPT);
+      }
+      if (@preun) {
+       map s/^"(.*)"$/$1/, @preun;
+       open(my $SCRIPT, ">${baseTarget}/DEBIAN/prerm");
+       print $SCRIPT join("\n", @preun) ;
+       chmod(0755, $SCRIPT);
+       close($SCRIPT);
+      }
+      if (@postun) {
+       map s/^"(.*)"$/$1/, @postun;
+       open(my $SCRIPT, ">${baseTarget}/DEBIAN/postrm");
+       print $SCRIPT join("\n", @postun) ;
+       chmod(0755, $SCRIPT);
+       close($SCRIPT);
+      }
+
+      # Don't forget to rename the package - or it will replace/uninstall the /-based one
+      $control{"Package"} = "${d_name}-${targettype}";
+
+      $controlParser->write_file("${baseTarget}/DEBIAN/control", \%control, {clobberFile => 1, addNewline=>1 } );
+      system "dpkg -b ${baseTarget} /usr/src/packages/DEBS/${d_name}-${targettype}_${d_version}_${targetarch}.deb" || die "dpkg -b failed on $deb";
+      system "rm -rf ${baseTarget}";
+    }
+    system "rm -rf ${base}";
+  }
+}
+
+# args is a list of full pathnames to rpm/deb files
+die("Usage: mkbaselibs <rpms>\n") unless @ARGV;
+
+if ($ARGV[0] eq '-v') {
+  $verbose = 1;
+  shift @ARGV;
+}
+while ($ARGV[0] eq '-c') {
+  shift @ARGV;
+  read_config($ARGV[0]);
+  shift @ARGV;
+}
+
+my %goodpkgs = map {$_ => 1} get_pkgnames();  # These are packages named in the config file
+my @pkgs = @ARGV;
+my @rpms;
+my @debugrpms;
+for my $rpm (@pkgs) {
+  my $rpmn = $rpm;
+  unless (-f $rpm) {
+    warn ("$rpm does not exist, skipping\n");
+    next;
+  }
+  next if $rpm =~ /\.(no)?src\.rpm$/;  # ignore source rpms
+  next if $rpm =~ /\.spm$/;
+  $rpmn =~ s/.*\///;   # Remove leading path info
+  $rpmn =~ s/-[^-]+-[^-]+\.[^\.]+\.rpm$/\.rpm/; # remove all version info
+  $rpmn =~ s/\.rpm$//; # remove extension
+  push @rpms, $rpm if $goodpkgs{$rpmn};
+  if ($rpmn =~ s/-debuginfo$//) {
+      push @debugrpms, $rpm if $goodpkgs{$rpmn};
+  }
+}
+for (@rpms) {
+    die("$_: need absolute path to package\n") unless /^\//;
+}
+
+my %debs_to_process = map {$_ => 1} get_debpkgnames();  # These are packages named in the config file
+my @debs;
+for my $deb (@pkgs) {
+  my $debn = $deb;
+  next unless $debn =~ /\.deb$/;
+  $debn =~ s/.*\///;   # Remove leading path info
+  $debn =~ s/_[^_]+_[^_]+\.deb$//; # remove all version info and extension
+  push @debs, $deb if $debs_to_process{$debn};
+  print "ignoring $deb as $debn not in baselibs.conf\n" if !$debs_to_process{$debn};
+}
+for (@debs) {
+    die("$_: need absolute path to package\n") unless /^\//;
+}
+
+exit 0 unless @rpms or @debs;
+
+if (@rpms) {
+    @filesystem = split("\n", `rpm -ql filesystem 2>/dev/null`);
+    die("filesystem rpm is not installed\n") unless @filesystem;
+
+    handle_rpms(@rpms);
+    handle_rpms(@debugrpms);
+}
+
+if (@debs) {
+    handle_debs(@debs);
+}
diff --git a/mkdrpms b/mkdrpms
new file mode 100755 (executable)
index 0000000..756c625
--- /dev/null
+++ b/mkdrpms
@@ -0,0 +1,99 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+  unshift @INC, ($::ENV{'BUILD_DIR'} || '/usr/lib/build');
+}
+
+use Build;
+use strict;
+
+my $limit = 80; # throw away deltas bigger than this percentage of the reference
+my %oldpkgs;
+
+sub query
+{
+    my $file = shift;
+    return undef if $file =~ /\.(?:patch|delta)\.rpm$/; # XXX: rpmtags?
+    my %res = Build::Rpm::rpmq($file, qw/NAME VERSION RELEASE ARCH SOURCERPM NOSOURCE NOPATCH 1124/);
+    return undef unless %res;
+    return undef if $res{'1124'}->[0] && $res{'1124'}->[0] eq 'drpm';
+    my $arch;
+    if ($res{'SOURCERPM'}->[0]) {
+       $arch = $res{'ARCH'}->[0];
+    } else {
+#      if ($res{'NOSOURCE'}->[0] || $res{'NOPATCH'}->[0]) {
+#          $arch = 'nosrc';
+#      } else {
+#          $arch = 'src';
+#      }
+       return undef;
+    }
+    return { name => $res{'NAME'}->[0], file => $file, version => $res{'VERSION'}->[0], release => $res{'RELEASE'}->[0], arch => $arch};
+}
+
+while (@ARGV) {
+  if ($ARGV[0] eq '--limit') {
+    shift @ARGV || die "--limit needs an argument\n";
+    $limit = shift @ARGV;
+    next;
+  }
+  last;
+}
+
+my $prevbuild = shift @ARGV || die "USAGE: $0 <oldpkgdir> <directories...>";
+my @prevbuild = ($prevbuild);
+my $i = 1;
+while (-e $prevbuild.$i) {
+    push @prevbuild, $prevbuild.$i;
+    ++$i;
+}
+for my $dir (@prevbuild) {
+    for my $file (glob $dir.'/*.rpm') {
+       my $q = query($file);
+       next unless $q;
+       my $n = $q->{'name'}.'.'.$q->{'arch'};
+       push @{$oldpkgs{$n}}, $q;
+    }
+}
+
+my $sysret = 0;
+for my $dir (@ARGV) {
+    for my $file (glob $dir.'/*.rpm') {
+       my $q = query($file);
+       next unless $q;
+       my $n = $q->{'name'}.'.'.$q->{'arch'};
+       next unless exists $oldpkgs{$n};
+       for my $old (@{$oldpkgs{$n}}) {
+           my $v = $old->{'version'};
+           my $r = $old->{'release'};
+           if ($v eq $q->{'version'} && $r eq $q->{'release'}) {
+               # skip if same version and release
+               next;
+           }
+           $v .= '_'.$q->{'version'} unless $v eq $q->{'version'};
+           $r .= '_'.$q->{'release'} unless $r eq $q->{'release'};
+           my $on = $old->{'file'};
+           my $nn = $q->{'file'};
+           my $dn = sprintf("%s-%s-%s.%s.drpm", $q->{'name'}, $v, $r, $q->{'arch'});
+           print "$dn ... ";
+           $dn = $dir.'/'.$dn;
+           my $ret = system('makedeltarpm', $on, $nn, $dn);
+           if ($ret || ! -e $dn) {
+               print "FAILED\n";
+               $sysret = 1;
+           } else {
+               my $ns = (stat($dn))[7] || 1;
+               my $os = (stat($file))[7] || 1;
+               my $factor = int($ns / $os * 100);
+               if ($factor > $limit) {
+                   print "too big ($factor%), removed\n";
+                   unlink $dn;
+               } else {
+                   print "ok ($factor%)\n";
+               }
+           }
+       }
+    }
+}
+
+exit $sysret;
diff --git a/order b/order
new file mode 100755 (executable)
index 0000000..8e30670
--- /dev/null
+++ b/order
@@ -0,0 +1,76 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+  unshift @INC, ($::ENV{'BUILD_DIR'} || '/usr/lib/build');
+}
+
+use Build;
+use strict;
+
+my ($dist, $archs, $configdir, $manifest);
+
+
+while (@ARGV)  {
+  if ($ARGV[0] eq '--dist') {
+    shift @ARGV;
+    $dist = shift @ARGV;
+    next;
+  }
+  if ($ARGV[0] eq '--archpath') {
+    shift @ARGV;
+    $archs = shift @ARGV;
+    next;
+  }
+  if ($ARGV[0] eq '--configdir') {
+    shift @ARGV;
+    $configdir = shift @ARGV;
+    next;
+  }
+  if (@ARGV && $ARGV[0] eq '--manifest') {
+    shift @ARGV;
+    $manifest = shift @ARGV;
+    next;
+  }
+  last;
+}
+
+die("usage: order [--manifest manifest] cachedir [packages...]\n") unless @ARGV;
+my $cachedir = shift @ARGV;
+
+my @p;
+if ($manifest) {
+  if ($manifest eq '-') {
+    @p = <STDIN>;
+  } else {
+    local *F;
+    open(F, '<', $manifest) || die("$manifest: $!\n");
+    @p = <F>;
+    close F;
+  }
+  chomp @p;
+}
+
+push @p, @ARGV;
+
+my $config = Build::read_config_dist($dist, $archs, $configdir);
+
+my %deps;
+my %bins;
+
+for my $p (@p) {
+  my $q;
+  for my $suf ('rpm', 'deb') {
+    next unless -f "$cachedir/$p.$suf";
+    $q = Build::query("$cachedir/$p.$suf", 'filelist' => 1, 'alldeps' => 1);
+    die("bad binary: $p.$suf\n") unless $q;
+    push @{$q->{'provides'}}, @{$q->{'filelist'}} if $suf eq 'rpm' && $q->{'filelist'};
+    delete $q->{'filelist'};
+    last;
+  }
+  die("binary not found: $p\n") unless $q;
+  $deps{$p} = $q;
+}
+
+Build::readdeps($config, undef, \%deps);
+@p = Build::order($config, @p);
+print "@p\n";
diff --git a/packaging/Makefile b/packaging/Makefile
new file mode 100644 (file)
index 0000000..a7b3549
--- /dev/null
@@ -0,0 +1,6 @@
+PKG_NAME := build
+SPECFILE = $(addsuffix .spec, $(PKG_NAME))
+YAMLFILE = $(addsuffix .yaml, $(PKG_NAME))
+
+include /usr/share/packaging-tools/Makefile.common
+
diff --git a/packaging/build.changes b/packaging/build.changes
new file mode 100644 (file)
index 0000000..322616f
--- /dev/null
@@ -0,0 +1,20 @@
+* Wed Jan 19 2011 Jian-feng Ding <jian-feng.ding@intel.com> - 2011.01.10a
+- Update to 2011.01.10 snapshot, with three extra commits
+  git HEAD: 585759875f7d225b6fc8f3e76cdffe955825dab4
+
+* Wed Dec 01 2010 Fathi Boudra <fathi.boudra@nokia.com> - 2010.11.24
+- Update to 2010.11.24: add workaround for Ubuntu 10 builds (BMC#10713)
+
+* Tue Aug 10 2010 Jian-feng Ding <jian-feng.ding@intel.com> 2010.08.04
+- Update to 2010.08.04 snapshot
+
+* Fri Apr 16 2010 Yi Yang <yi.y.yang@intel.com> - 2010.04.15
+- Update to 2010.04.15
+
+* Fri Jan 15 2010 Anas Nashif <anas.nashif@intel.com> - 2010.01.13
+- Update to  2010.01.13 snapshot
+- Added moblin config file
+
+
+* Mon Aug 10 2009 Anas Nashif <anas.nashif@intel.com> - 2009.07.27
+- Update to 2009.07.27 snapshot
diff --git a/packaging/build.dsc b/packaging/build.dsc
new file mode 100644 (file)
index 0000000..37a696a
--- /dev/null
@@ -0,0 +1,8 @@
+Format: 1.0
+Source: build
+Version: 2011.01.10a-1
+Binary: build
+Maintainer: Jian-feng Ding <jian-feng.ding@intel.com>
+Architecture: all
+Standards-Version: 3.8.0
+Build-Depends: debhelper (>= 7)
diff --git a/packaging/build.manifest b/packaging/build.manifest
new file mode 100644 (file)
index 0000000..017d22d
--- /dev/null
@@ -0,0 +1,5 @@
+<manifest>
+ <request>
+    <domain name="_"/>
+ </request>
+</manifest>
diff --git a/packaging/build.spec b/packaging/build.spec
new file mode 100644 (file)
index 0000000..b9e0f11
--- /dev/null
@@ -0,0 +1,78 @@
+#
+# spec file for package build (Version 2010.03.10)
+#
+# Copyright (c) 2010 SUSE LINUX Products GmbH, Nuernberg, Germany.
+#
+# All modifications and additions to the file contributed by third parties
+# remain the property of their copyright owners, unless otherwise agreed
+# upon. The license for this file, and modifications and additions to the
+# file, is the same license as for the pristine package itself (unless the
+# license for the pristine package is not an Open Source License, in which
+# case the license is the MIT License). An "Open Source License" is a
+# license that conforms to the Open Source Definition (Version 1.9)
+# published by the Open Source Initiative.
+
+# Please submit bugfixes or comments via http://bugs.opensuse.org/
+#
+
+# norootforbuild
+
+Name:           build
+License:        GPLv2+
+Group:          Development/Tools/Building
+AutoReqProv:    on
+Summary:        A Script to Build SUSE Linux RPMs
+Version:        2011.01.10a
+Release:        1
+# osc rm build-*tar.bz2
+# REVISION=$(svn info https://forgesvn1.novell.com/svn/opensuse/trunk/buildservice/src/build | sed -ne "/Revision: /s///p")
+# VERSION="$(date +"%Y.%m.%d").r$REVISION"
+# svn export -r$REVISION https://forgesvn1.novell.com/svn/opensuse/trunk/buildservice/src/build build-$VERSION
+# tar cjvf build-$VERSION.tar.bz2 build-$VERSION
+# rm -rf build-$VERSION
+# osc add build-$VERSION.tar.bz2
+# # There's several occurences of "Version: something" in this file,
+# # two of them valid, so we need to be picky in the match.
+# sed --in-place build.spec -e"/\(Version:\?[[:space:]]\+\)\([0-9]\{4\}\.[0-9][0-9]\.[0-9][0-9]\.r[0-9]\+\)/s,,\1$VERSION,"
+# osc build build.spec
+# osc ci
+# osc submitreq create -m"current svn snapshot." openSUSE:Tools build openSUSE:Factory
+Source:         build-%{version}.tar.gz
+Source1:        tizen-1.0.conf
+Source1001: packaging/build.manifest 
+BuildRoot:      %{_tmppath}/%{name}-%{version}-build
+BuildArch:      noarch
+# Manual requires to avoid hard require to bash-static
+AutoReqProv:    off
+# Keep the following dependencies in sync with obs-worker package
+Requires:       bash
+Requires:       perl
+Requires:       perl-TimeDate
+Requires:       binutils
+Requires:       tar
+
+%description
+This package provides a script for building RPMs for SUSE Linux in a
+chroot environment.
+
+%prep
+%setup -q
+
+%build
+cp %{SOURCE1001} .
+
+%install
+make DESTDIR=$RPM_BUILD_ROOT install
+install %{SOURCE1} %{buildroot}%{_prefix}/lib/build/configs
+cd %{buildroot}%{_prefix}/lib/build/configs/
+ln -s tizen-1.0.conf default.conf
+
+%files
+%manifest build.manifest
+%defattr(-,root,root)
+%doc README
+%{_bindir}/build
+%{_bindir}/buildvc
+%{_bindir}/unrpm
+%{_prefix}/lib/build
+%{_mandir}/man1/build.1*
diff --git a/packaging/debian.changelog b/packaging/debian.changelog
new file mode 100644 (file)
index 0000000..380ad28
--- /dev/null
@@ -0,0 +1,173 @@
+build (2011.01.10a) unstable; urgency=low
+
+  * Update to 2011.01.10 snapshot, with three extra commits
+    git HEAD: 585759875f7d225b6fc8f3e76cdffe955825dab4
+
+ -- Jian-feng Ding <jian-feng.ding@intel.com>  Wed, 10 Jan 2011 14:03:54 +0200
+
+build (2010.11.24-1) unstable; urgency=low
+
+  * New upstream release: 2010.11.24
+    - add workaround for Ubuntu 10 builds.
+
+ -- Fathi Boudra <fathi.boudra@nokia.com>  Wed, 01 Dec 2010 11:47:49 +0200
+
+build (2010.08.04) unstable; urgency=low
+
+  * Update to 2010.08.04 git snapshot
+
+ -- Jian-feng Ding <jian-feng.ding@intel.com>  Tue, 10 Aug 2010 14:03:54 +0200
+
+build (2010.04.15) unstable; urgency=low
+
+  * Update to current git trunk
+    - Support remote repos
+
+ -- Adrian Schroeter <adrian@suse.de>  Tue, 02 Feb 2010 10:03:54 +0200
+
+build (2010.02.02-1) unstable; urgency=low
+
+  * Update to current git trunk
+    - Support new kiwi 4.1 schema files
+
+ -- Adrian Schroeter <adrian@suse.de>  Tue, 02 Feb 2010 10:03:54 +0200
+
+build (2009.09.23-1) unstable; urgency=low
+
+  * Update to current svn trunk
+
+ -- Michael Schroeder <mls@suse.de>  Wed, 23 Sep 2009 12:03:54 +0200
+
+build (2009.04.20-1) unstable; urgency=low
+
+  * Update to current svn trunk
+
+ -- Adrian Schroeter <adrian@suse.de>  Mon, 20 Feb 2009 08:27:13 +0200
+
+build (2009.02.20-1) unstable; urgency=low
+
+  * Fix kvm support together with Alexander
+  * Support for new disturl containing a complete pointer to build
+    service instance resource
+  * add support for package compare to allow Build Service to drop
+    same packages after build
+  * image repack support from Christoph
+
+ -- Adrian Schroeter <adrian@suse.de>  Fri, 20 Feb 2009 08:27:13 +0200
+
+build (2007.09.14-1) unstable; urgency=low
+
+  * update to 2173:
+    - add sl10.3 config [#310089]
+    - also look for BuildRequires in subpackage definitions [#305568]
+    - allow removal of more config parameters
+
+ -- Michael Schroeder <mls@suse.de>  Fri, 14 Sep 2007 18:27:13 +0200
+
+build (2007.08.02-1) unstable; urgency=low
+
+  * update to 1902:
+    - support 'order' config option
+    - support 'patterntype' config option
+    - new setdeps() method
+    - support for flexible query options
+    - support 'description' query
+    - fix bug in changelog2spec time cutoff
+    - make debtransform understand Debtransform-Tar/Debtransform-Files-Tar/
+      Debtransform-Series
+    - fix bug in substitutedeps
+
+ -- Michael Schroeder <mls@suse.de>  Thu, 2 Aug 2007 15:58:48 +0200
+
+build (2007.06.13-1) unstable; urgency=low
+
+  * update to 1727:
+    - implement rpm installation order calculation in perl
+    - make substitute code modify requires, too
+    - add filelist query support
+    - add prereq parsing support
+    - speed up version comparison a bit
+
+ -- Michael Schroeder <mls@suse.de>  Wed, 13 Jun 2007 17:18:17 +0100
+
+build (2007.05.10-1) unstable; urgency=low
+
+  * update to 1653:
+    - add _vendor to configs
+    - fix deban dependency compare
+    - allow not operator in configs
+    - fix build from source rpms
+
+ -- Michael Schroeder <mls@suse.de>  Thu, 10 May 2007 20:02:29 +0100
+
+build (2007.04.12-1) unstable; urgency=low
+
+  * update to 1575:
+    - add --root to rpm call in rpm to work around a bug in rpm [#255720]
+
+ -- Michael Schroeder <mls@suse.de>  Thu, 12 Apr 2007 16:22:51 +0100
+
+build (2007.04.05-1) unstable; urgency=low
+
+  * update to 1561:
+    - support architecture dependand requires in dsc files
+    - support "global" definitions for rpm
+    - support vminstall config option
+
+ -- Michael Schroeder <mls@suse.de>  Thu, 5 Apr 2007 16:01:51 +0100
+
+build (2007.03.12-1) unstable; urgency=low
+
+  * update to r1419:
+    - fix buildroot in debtransform call
+    - obey version numbers when expanding
+
+ -- Michael Schroeder <mls@suse.de>  Mon, 12 Mar 2007 15:42:48 +0100
+
+build (2007.03.02-1) unstable; urgency=low
+
+  * update
+    - transform suse changes file to rpm specfile format
+    - improved debian support
+
+ -- Michael Schroeder <mls@suse.de>  Fri, 2 Mar 2007 21:22:41 +0100
+
+build (2007.01.26-1) unstable; urgency=low
+
+  * update to r1114
+    - re-add the lost unrpm script
+    - make exclarch an array
+    - remount root rw in xen case, needed if root is not reiserfs
+    - add repotype/runscripts options
+    - remove devs in sl10.1/10.2
+    - fix boolean test to make "00" false like rpm does
+    - add rpm_verscmp for version comparison
+    - runscripts
+    - macro blocks
+    - read_config_dist
+    - useful xen exit status
+    - add --kill
+    - update 10.2 config
+    - extend spec/dsc parser
+    - fixed two bugs in the specfile parser
+
+ -- Peter Poeml <poeml@suse.de>  Fri, 26 Jan 2007 14:15:22 +0100
+
+build (2006.10.5-1) unstable; urgency=low
+
+  * update for fixed XEN build
+
+ -- Michael Schroeder <mls@suse.de>  Thu, 5 Oct 2006 10:58:42 +0200
+
+build (2006.8.10-1) unstable; urgency=low
+
+  * update for fixed XEN build and proc mounting
+
+ -- Adrian Schroeter <adrian@suse.de>  Thu, 10 Aug 2006 12:01:08 +0200
+
+build (2006.6.14-1) unstable; urgency=low
+
+  * Initial release based on build-2006.6.14-5.1.src.rpm
+
+ -- Rene Engelhard <rengelhard@suse.de>  Thu, 22 Jun 2006 12:01:08 +0200
+
diff --git a/packaging/debian.tar.gz b/packaging/debian.tar.gz
new file mode 100644 (file)
index 0000000..0b09336
Binary files /dev/null and b/packaging/debian.tar.gz differ
diff --git a/packaging/tizen-1.0.conf b/packaging/tizen-1.0.conf
new file mode 100644 (file)
index 0000000..0d8fd21
--- /dev/null
@@ -0,0 +1,216 @@
+%ifarch %arm
+########################
+# preselect rpm targets  
+# more ifs for _repository possible as needed  
+#########################  
+%ifarch armv5el
+Changetarget: armv5tel-tizen-linux
+%define _gnu gnueabi
+%endif
+%ifarch armv7el
+Changetarget: armv7l-tizen-linux
+%define _gnu gnueabi
+%endif
+
+%endif
+
+Patterntype: rpm-md
+Support: build build-compare
+Support: rpmlint-Moblin
+Release: <CI_CNT>.<B_CNT>
+
+Preinstall: acl attr bash bzip2 coreutils diffutils lua db4
+Preinstall: filesystem glibc glibc-common  libacl libattr
+Preinstall: libgcc   pam nss nspr libcap
+Preinstall: popt readline rpm sed tar zlib
+Preinstall: rpm-libs sqlite  ncurses-libs
+Preinstall: elfutils-libelf  perl-libs
+Preinstall: bzip2-libs  libstdc++ setup
+Preinstall: kernel-headers glibc-headers file-libs
+Preinstall: nss-softokn-freebl xz-libs
+
+#Runscripts: setup
+
+VMinstall: util-linux-ng perl
+
+Required: binutils  gcc glibc  rpm rpm-build libtool
+
+Support: cpio gcc-c++  perl-libs perl  net-tools findutils
+Support: file findutils  zlib bzip2 info
+Support: gzip  xz-lzma-compat ncurses-libs
+Support: make  patch sed  gawk tar grep coreutils pkgconfig  autoconf automake
+Support: unzip  groff shadow-utils 
+Support: m4 file-libs tzdata tizen-rpm-config tizen-release
+
+Keep: binutils cpp  cracklib file findutils gawk gcc  gcc-ada gcc-c++
+Keep: gdbm  gzip libada libunwind  glibc-devel pcre xz-lzma-compat
+Keep:  make   pam-modules shadow-utils gmp libcap
+Keep: patch rcs rpm-build  nss nspr elfutils python grep   libgcc gcc-c++ 
+
+
+Prefer: libgnome-keyring
+Prefer: libtool-ltdl
+Prefer: db4-cxx
+Prefer: libtdb
+Prefer: db4
+Prefer: xulrunner
+Prefer: readline
+Prefer: xz-lzma-compat
+Prefer: mutter-devel
+Prefer: perl-Archive-Tar
+Prefer: util-linux-ng
+Prefer: kernel-netbook
+Prefer: mesa-dri-i965-driver
+Prefer: GConf2
+Prefer: w3m
+Prefer: nspr nspr-devel nss nss-devel
+
+Prefer: generic-logos
+Prefer: text-www-browser:lynx
+Prefer: docbook-utils:lynx
+Prefer: kdepim:pinentry-qt
+Prefer: syslogd sysklogd
+
+Prefer: -libgcc-mainline -libstdc++-mainline -gcc-mainline-c++
+Prefer: -libgcj-mainline -viewperf -compat -compat-openssl097g
+Prefer: -zmd -OpenOffice_org -pam-laus -libgcc-tree-ssa -busybox-links
+Prefer: -crossover-office
+
+Conflict: ghostscript-library:ghostscript-mini
+
+
+Ignore: libzypp:gnupg
+Ignore: WebKit:libproxy
+Ignore: gvfs:gnome-disk-utility
+Ignore: moblin-installer:system-config-date
+Ignore: libproxy:xulrunner
+Ignore: system-config-date:authconfig
+Ignore: authconfig:pam,usermode,python
+Ignore: moblin-firstboot:system-config-date
+Ignore: SDL:mkinitrd
+Ignore: SDL:kernel,kernel-netbook,kern-ivi
+Ignore: pulseaudio:kernel
+Ignore: alsa-lib:kernel,kernel-netbook,kern-ivi
+Ignore: alsa-plugins:kernel,kernel-netbook,kern-ivi
+Ignore: gst-plugins-good:kernel,kernel-netbook,kernel-ivi
+Ignore: libzypp:expect
+Ignore: gtk2:moblin-icon-theme
+Ignore: brasero:moblin-menus
+Ignore: udev:moblin-udev-rules
+Ignore: pulseaudio:rtkit
+Ignore: rpm:libcap
+Ignore: rpm-libs:libcap
+Ignore: mutter-moblin:moblin-panel-applications,moblin-panel-myzone,moblin-panel-pasteboard,moblin-panel-people,moblin-panel-status,moblin-web-browser-panel,moblin-panel-media,zenity
+Ignore: db4:util-linux-ng
+Ignore: fuse-sshfs:fastinit
+Ignore: dhcp:fastinit
+
+Ignore: libgnomeprint22:fastinit
+Ignore: gvfs:fastinit
+Ignore: moblin-ux-settings:mutter,mutter-moblin,mojito,gnome-vfs2,nautilus,moblin-gtk-engine
+Ignore: mutter-moblin:clutter-gtk,zenity
+Ignore: gnome-desktop:gnome-user-docs
+Ignore: gnome-settings-daemon:gnome-control-center
+Ignore: avahi:fastinit
+Ignore: fastinit:udev
+Ignore: udev:fastinit
+Ignore: PackageKit:udev
+Ignore: cvs:vim-minimal
+Ignore: bluez:fastinit
+Ignore: aspell:aspell-en
+Ignore: moblin-installer:squashfs-tools
+Ignore: fuse:kernel
+Ignore: fuse:fastinit
+Ignore: fastinit:module-init-tools
+Ignore: hwdata:module-init-tools
+Ignore: gzip:less
+Ignore: xmlto:text-www-browser 
+Ignore: docbook-utils:text-www-browser 
+Ignore: gtk2:hicolor-icon-theme
+Ignore: docbook-dtds:openjade
+Ignore: xmlto:passivetex
+Ignore: GConf-dbus:openldap
+Ignore: perl:rsyslog,tcsh,logrotate
+Ignore: rpm:curl,crontabs,logrotate
+Ignore: texinfo-tex:tetex
+Ignore: xorg-x11-server:hal-info
+Ignore: gcc:libgomp
+Ignore: autoconf:imake
+Ignore: ConsoleKit:dbus,dbus-devel
+Ignore: fastinit:kernel,udev,ethtool,mingetty
+Ignore: tetex:tetex-fonts,desktop-file-utils
+Ignore: pam:glib2
+
+Ignore: util-linux-ng:ConsoleKit-libs
+Ignore: gettext-devel:libgcj,libstdc++-devel
+Ignore: pam-modules:resmgr
+Ignore: bind-utils:bind-libs
+Ignore: alsa:dialog,pciutils
+Ignore: portmap:syslogd
+Ignore: fontconfig:freetype2
+Ignore: fontconfig-devel:freetype2-devel
+Ignore: xorg-x11-libs:freetype2
+Ignore: xorg-x11:x11-tools,resmgr,xkeyboard-config,xorg-x11-Mesa,libusb,freetype2,libjpeg,libpng
+Ignore: arts:alsa,audiofile,resmgr,libogg,libvorbis
+Ignore: libxml2-devel:readline-devel
+Ignore: gnome-vfs2:gnome-mime-data,desktop-file-utils,cdparanoia,dbus-1,dbus-1-glib,krb5,hal,libsmbclient,fam,file_alteration
+Ignore: libgda:file_alteration
+Ignore: gnutls:lzo,libopencdk
+Ignore: libgnomecanvas-devel:glib-devel
+Ignore: libgnomeui:gnome-icon-theme,shared-mime-info
+Ignore: gnome-pilot:gnome-panel
+Ignore: postfix:pcre
+Ignore: docbook_4:iso_ent,sgml-skel,xmlcharent
+Ignore: docbook-xsl-stylesheets:xmlcharent
+Ignore: tetex:xorg-x11-libs,expat,fontconfig,freetype2,libjpeg,libpng,ghostscript-x11,xaw3d,gd,dialog,ed
+Ignore: mailx:smtp_daemon
+Ignore: cron:smtp_daemon
+
+
+
+%define  __global_cflags        -O2 -g -pipe -Wall  -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4
+
+Optflags: i386 %{__global_cflags} -m32 -march=i386 -mtune=generic -fasynchronous-unwind-tables
+Optflags: i486 %{__global_cflags} -m32 -march=i486 -fasynchronous-unwind-tables
+Optflags: i586 %{__global_cflags} -m32 -march=core2 -mssse3  -mtune=atom -mfpmath=sse -fasynchronous-unwind-tables
+Optflags: i686 %{__global_cflags} -m32 -march=core2 -mssse3  -mtune=atom  -mfpmath=sse -fasynchronous-unwind-tables
+Optflags: armv5tel %{__global_cflags}   -fmessage-length=0 -march=armv5te -mlittle-endian  
+Optflags: armv6l %{__global_cflags}  -fmessage-length=0 -march=armv6 -mlittle-endian  -mfpu=vfp -mfloat-abi=softfp -D__SOFTFP__  
+Optflags: armv7l %{__global_cflags}  -fmessage-length=0 -march=armv7-a -mtune=cortex-a8 -mlittle-endian  -mfpu=vfpv3 -mfloat-abi=softfp -D__SOFTFP__  
+
+
+Macros:
+%moblin_version 2
+%tizen_version 1
+%moblin 2.2
+%tizen 1.0 
+%opensuse_bs 1
+%vendor TIZEN
+%_vendor tizen
+%_default_patch_fuzz   2
+
+# python main version
+%py_ver         %(echo `python -c "import sys; print sys.version[:3]"`)
+
+# directories
+%py_prefix      %(echo `python -c "import sys; print sys.prefix"`)
+%py_libdir      %{py_prefix}/lib/python%{py_ver}
+%py_incdir      /usr/include/python%{py_ver}
+%py_sitedir     %{py_libdir}/site-packages
+%py_dyndir      %{py_libdir}/lib-dynload
+
+# pure python modules compilation
+%py_comp        python -c "import compileall; import sys; compileall.compile_dir(sys.argv[1], ddir=sys.argv[1][len('$RPM_BUILD_ROOT'):])"
+%py_ocomp       python -O -c "import compileall; import sys; compileall.compile_dir(sys.argv[1], ddir=sys.argv[1][len('$RPM_BUILD_ROOT'):])"
+
+%ext_info .gz
+%ext_man .gz
+
+%info_add(:-:) test -x /sbin/install-info -a -f %{?2}%{?!2:%{_infodir}}/%{1}%ext_info && /sbin/install-info --info-dir=%{?2}%{?!2:%{_infodir}} %{?2}%{?!2:%{_infodir}}/%{1}%ext_info \
+%{nil}
+
+%info_del(:-:) test -x /sbin/install-info -a ! -f %{?2}%{?!2:%{_infodir}}/%{1}%ext_info && /sbin/install-info --quiet --delete --info-dir=%{?2}%{?!2:%{_infodir}} %{?2}%{?!2:%{_infodir}}/%{1}%ext_info \
+%{nil}
+
+
+%_smp_mflags -j4
diff --git a/signdummy b/signdummy
new file mode 100755 (executable)
index 0000000..4951454
--- /dev/null
+++ b/signdummy
@@ -0,0 +1,39 @@
+#!/usr/bin/perl
+
+# simple "sign" replacement that does nothing but
+# write a 2048 byte file with a fixed signature.
+# sign is used in kiwi builds to sign repositories
+
+my $mode;
+
+while (@ARGV) {
+  if ($ARGV[0] =~ /^-([cdr])$/) {
+    $mode = $1;
+    shift @ARGV;
+    next;
+  }
+  if ($ARGV[0] eq '--') {
+    shift @ARGV;
+    last;
+  }
+  if ($ARGV[0] =~ /^-/) {
+    die("unsupported option $ARGV[0]\n");
+  }
+  last;
+}
+die("only detached mode possible\n") if !$mode || $mode ne 'd';
+die("filter mode not supported\n") unless @ARGV;
+
+for my $file (@ARGV) {
+  local *F;
+  open(F, '<', $file) || die("$file: $!\n");
+  my $buf = '';
+  1 while sysread(F, $buf, 16384, length($buf));
+  close(F) || die("$file: $!\n");
+  my $block = "sIGnMe!\n";
+  $block .= sprintf("%08x%08x\n", length($buf), unpack("%32C*", $buf));
+  $block .= "\0" x (2048 - length($block));
+  open(F, '>', "$file.asc") || die("$file.asc: $!\n");
+  (syswrite(F, $block) || 0) == 2048 || die("$file.asc: $!\n");
+  close(F) || die("$file.asc: $!\n");
+}
diff --git a/spec2changelog b/spec2changelog
new file mode 100755 (executable)
index 0000000..4ac2b0a
--- /dev/null
@@ -0,0 +1,79 @@
+#!/usr/bin/perl
+#
+# Tiny perl script that parses a .spec file (STDIN), extracts
+# its %changelog entries and prints (STDOUT) them in the
+# format of a .changes file, ordered.
+#
+# Usage: cat foo.spec | spec2changes.pl > foo.changes
+#
+# Copyright 2009 by Pascal Bleser <pascal.bleser@opensuse.org>
+# This script is licensed under the GNU General Public License version 2
+# http://www.gnu.org/licenses/gpl-2.0.html
+#
+
+use warnings;
+use strict;
+use Date::Language;
+use POSIX qw(strftime setlocale LC_ALL);
+
+# make sure date printed in correct locale
+$ENV{'TZ'} = 'UTC';
+setlocale(LC_ALL, 'C');
+
+my $sep = "-" x 67;
+my @days   = qw{Mon Tue Wed Thu Fri Sat Sun};
+my @months = qw{Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec};
+
+#----------------------------------------------------------------------
+#
+my %dh = map { $_ => 1 } @days;
+my %mh = map { $_ => 1 } @months;
+
+my $date_parser = Date::Language->new('English');
+
+my %items = ();
+my $current_block = undef;
+my $time = undef;
+while (<>) {
+    if (/^%changelog/ .. eof()) {
+        next if /^%/;
+        next if /^\s*#/;
+
+        chomp;
+        s/\s+$//;
+
+        if (/^\*\s+(([A-Z][a-z]{2})\s+([A-Z][a-z]{2})\s+\d{1,2}\s+\d{4})(\s+(.*)\s*)$/ and exists $dh{$2} and exists $mh{$3}) {
+            $items{$time} = $current_block if defined $current_block and defined $time;
+            $time = $date_parser->str2time($1);
+            $current_block = [];
+            $_ = $4;
+        } elsif (/^\*/) {
+            warn("not matching a headline: \"$_\"\n");
+        }
+        push(@$current_block, $_);
+    }
+}
+$items{$time} = $current_block if defined $current_block and defined $time;
+
+foreach my $time (sort { $b <=> $a } (keys(%items))) {
+    print $sep, "\n";
+    my $item = $items{$time};
+    my $head = shift(@$item);
+    $head =~ s/^\s+//;
+    $head =~ s/^\-\s+//;
+    if ($head =~ m/^(.+?)\s*<(.+?\@.+?\..+?)>(\s*.*)$/) {
+        $head = $2;
+    } elsif ($head =~ m/^<(.+?\@.+?\..+?)>(\s*.*)$/) {
+        $head = $1;
+    }
+    if ($head =~ m/^\s*-\s*(.+)$/) {
+        $head = $1;
+    }
+
+    print strftime("%a %b %e %H:%M:%S %Z %Y", localtime($time)), " - ", $head, "\n";
+    my $first = shift(@$item);
+    print "\n" unless defined($first) && ($first eq '');
+    print $first, "\n";
+    print join("\n", @$item), "\n" if @$item;
+    print "\n";
+}
diff --git a/spec_add_patch b/spec_add_patch
new file mode 100755 (executable)
index 0000000..5f81824
--- /dev/null
@@ -0,0 +1,133 @@
+#!/usr/bin/perl -w
+# vim:sw=4:et
+# Author: Dirk Mueller
+
+use strict;
+
+my $diffname = $ARGV[0];
+my $specname = $ARGV[1];
+
+if (!defined($diffname) || ! -f $diffname) {
+
+    print "$0: <diffname>\n";
+    exit 1;
+}
+
+sub find_specfile()
+{
+    opendir(D, ".");
+    my @specs = grep { /\.spec$/ } readdir(D);
+    closedir(D);
+
+    # choose the one with the shortest name (heuristic)
+    $specname = ( sort { length($a) - length($b) } @specs)[0];
+
+}
+
+if (!defined($specname) || ! -f $specname) {
+    &find_specfile();
+}
+
+
+open(S, '<', $specname) or die;
+
+my $ifdef_level = 0;
+my $in_prep = 0;
+my $in_global = 1;
+my $last_patch_in_prep_index = 0;
+my $last_patch_in_global_index = 0;
+my $already_found_patch = 0;
+my @c = ();
+my $index = 0;
+
+# first read the specfile, parse useful information
+while(<S>)
+{
+
+    if(/^\s*%\s*endif/) {
+        $ifdef_level--;
+        $last_patch_in_prep_index = $index if ($in_prep && $ifdef_level == 0);
+    }
+    die if ($ifdef_level < 0);
+    $ifdef_level++ if(/^\s*%\s*if/);
+
+    if ($ifdef_level == 0 && !$in_prep && $in_global
+        && /^\%(?:prep|build|install|package|description|doc)/) {
+        $in_global = 0;
+    }
+
+    if (!$in_prep && /^%prep/i) {
+        $in_prep = 1;
+        die if ($in_global);
+    }
+
+    if ($in_prep
+        && /^%setup\b/) {
+        $last_patch_in_prep_index = $index;
+    }
+
+    if ($in_prep
+        && /^\%(?:build|install|package|description|doc)/) {
+        $in_prep = 0;
+    }
+
+    die if (($in_prep + $in_global) > 1);
+
+    if ($in_global && /^Patch(?:\d+)?:/) {
+        $last_patch_in_global_index = $index;
+    }
+
+    if ($in_global && $ifdef_level == 0 && /^Source(?:\d+)?:/) {
+        $last_patch_in_global_index = $index;
+    }
+
+    if ($in_global && /^Patch.*?:\s+$diffname/) {
+        $already_found_patch = 1;
+    }
+
+    if ($in_prep && $ifdef_level == 0 && /^\%patch/) {
+        $last_patch_in_prep_index = $index;
+    }
+    push(@c, $_);
+    $index++;
+}
+close(S);
+
+exit 0 if ($already_found_patch);
+
+print "Adding patch $diffname to $specname\n";
+
+die if ($ifdef_level > 0);
+die if ($in_global || $in_prep);
+die if ($last_patch_in_prep_index == 0);
+die if ($last_patch_in_global_index == 0);
+
+#print "adding Patch: $diffname to line $last_patch_in_global_index\n";
+#print "adding %patch to line $last_patch_in_prep_index\n";
+
+# determine patch number
+my $patchnum = 0;
+$patchnum = $1+1 if ($c[$last_patch_in_global_index] =~ /Patch(\d+):/);
+$patchnum = 1 if ($c[$last_patch_in_global_index] =~ /Patch:/);
+
+# determine strip level
+my $striplevel = "";
+open(P, '<', $diffname) or die;
+while(<P>) {
+    $striplevel = " -p1" if (m/^--- a/ or m/^--- [^\/]+-\d+\./);
+    last if (/^--- /);
+
+}
+close(P);
+
+
+splice @c, $last_patch_in_prep_index+1, 0, ("\%patch$patchnum$striplevel\n");
+splice @c, $last_patch_in_global_index+1, 0,
+    (sprintf "Patch%s:%s%s\n", $patchnum, ' ' x (10-length($patchnum)), $diffname);
+
+open(O, '>', "$specname.new") or die;
+print O @c;
+close(O);
+
+system("diff", "-u", $specname, "$specname.new");
+rename("$specname.new", $specname);
diff --git a/spectool b/spectool
new file mode 100755 (executable)
index 0000000..1d1dad3
--- /dev/null
+++ b/spectool
@@ -0,0 +1,355 @@
+#!/usr/bin/perl -w
+
+=head1 spectool
+
+spectool - tool to work with rpm spec files
+
+=head1 SYNOPSIS
+
+spectool [options] specfiles...
+
+=head1 OPTIONS
+
+=over 4
+
+=item B<--help>
+
+display help as manpage
+
+=item B<--dist>=I<STRING>
+
+set distribution, e.g. "11.1-i586" or path to config
+
+=item B<--archpath>=I<STRING>
+
+compatible architecture separated by colon, e.g. C<i586:i486:i386>.
+Autotected if missing.
+
+=item B<--configdir>=I<STRING>
+
+path to config files if B<--dist> didn't specify a full path
+
+=item B<--define>=I<STRING>
+
+=item B<--with>=I<STRING>
+
+=item B<--without>=I<STRING>
+
+same meaning as in rpmbuild
+
+=item B<--tag>=I<STRING>
+
+print tag from spec file, e.g. C<version>. Regexp is also possible,
+e.g. C</source[01]/>
+
+=item B<--sources>
+
+print package source files. If a file C<sources> or
+C<I<packagename>.sources> is present verify the checksums against
+that.
+
+=over 4
+
+=item B<--update>
+
+update the checksums
+
+=item B<--download>
+
+download missing sources
+
+=back
+
+=back
+
+=head1 DESCRIPTION
+
+The B<--sources> option allows to manage a sources file in a way
+similar to Fedora. The sources file lists the check sums and file
+names of the binary files specified in the spec file.
+
+B<--sources> without further options compares the check sums of all
+files and prints a report consisting of a character that describes
+the status of the file and the file name. Meaning of the characters
+is as follows:
+
+=over 4
+
+=item B<.> check sum matches
+
+=item B<!> check sum broken
+
+=item B<d> file is missing, checksum known. Can be verified after download
+
+=item B<-> file is missing and checksum unknown
+
+=item B<_> file is present but checksum unknown
+
+=item B<t> text file, will be skipped for check sums
+
+=item B<?> check sum known but not referenced from spec file
+
+=back
+
+Additionally specifying B<--update> recomputes all check sums and
+updates the sources file.
+
+With B<--download> all missing files are downloaded if the spec file
+has an http or ftp url.
+
+=head2 FORMAT OF THE SOURCES FILE
+
+Lines of the form
+<checksum> <whitespace> <filename>
+
+=head2 NAME OF THE SOURCES FILE
+
+A file named C<sources> is preferred if present for compatibility
+with Fedora. It only contains md5 sums. If that file is not present
+the C<.spec> suffix of the spec file is replaced with C<.sources>
+and the this name used as sources file (e.g. C<foo.spec> ->
+C<foo.sources>). In this file sha1 is preferred. Also, the name of
+the algorithm is prepended with colon to the check sum.
+
+=cut
+
+my $builddir;
+
+BEGIN {
+  $builddir = ($::ENV{'BUILD_DIR'} || '/usr/lib/build');
+  unshift @INC, $builddir;
+}
+
+use strict;
+
+use Build;
+use Pod::Usage;
+use Getopt::Long;
+Getopt::Long::Configure("no_ignore_case");
+
+my (@opt_showtag, $opt_sources, $opt_update, $opt_download);
+
+sub parse_depfile;
+
+my ($dist, $rpmdeps, $archs, $configdir, $useusedforbuild);
+
+GetOptions (
+  "help" => sub { pod2usage(-exitstatus => 0, -verbose => 2) },
+
+  "dist=s" => \$dist,
+  "archpath=s" => \$archs,
+  "configdir=s" => \$configdir,
+  "define=s" => sub { Build::define($_[1]) },
+  "with=s" => sub { Build::define("_with_".$_[1]." --with-".$_[1]) },
+  "without=s" => sub { Build::define("_without_".$_[1]." --without-".$_[1]) },
+
+  "tag=s" => \@opt_showtag,
+  "sources" => \$opt_sources,
+  "update" => \$opt_update,
+  "download" => \$opt_download,
+) or pod2usage(1);
+
+pod2usage(1) unless @ARGV;
+
+my @specs = @ARGV;
+
+die "--download must be used together with --sources\n" if ($opt_download && !$opt_sources);
+die "--update must be used together with --sources\n" if ($opt_update && !$opt_sources);
+
+my @archs;
+if (!defined $archs) {
+  use POSIX qw/uname/;
+  my %archmap = qw/x86_64 i686 i686 i586 i586 i486 i486 i386/;
+  my @a = uname();
+  push @archs, $a[4];
+  while(exists $archmap{$archs[-1]}) {
+    push @archs, $archmap{$archs[-1]};
+  }
+} else {
+  @archs = split(':', $archs);
+}
+push @archs, 'noarch' unless grep {$_ eq 'noarch'} @archs;
+
+unless ($dist) {
+    $dist = `rpm -q --qf '%{DISTRIBUTION}' rpm 2>/dev/null`;
+    $dist = Build::dist_canon($dist||'', $archs[0]);
+}
+
+if($dist !~ /\// && !defined $configdir) {
+  if($0 =~ /^\//) {
+    use File::Basename qw/dirname/;
+    $configdir = dirname($0).'/configs';
+    undef $configdir unless -e $configdir.'/sl11.3.conf';
+  } else {
+    $configdir = $builddir.'/configs';
+    undef $configdir unless -e $configdir.'/sl11.3.conf';
+  }
+  if(!defined $configdir) {
+    print STDERR "please specify config dir\n";
+  }
+}
+
+#######################################################################
+
+# param: array to fill, spec file
+# return: file name
+sub read_sources_digests($$)
+{
+  my $files = shift;
+  my $spec = shift;
+  my $srcfile = 'sources';
+  if (! -r $srcfile) {
+    $srcfile = $spec;
+    $srcfile =~ s/spec$/sources/;
+  }
+  if (open (F, '<', $srcfile)) {
+    while(<F>) {
+      chomp;
+      my ($sum, $file) = split(/ +/, $_, 2);
+      $files->{$file} = $sum;
+    }
+    close F;
+  }
+  return $srcfile;
+}
+
+# param: file, oldsum
+# return: newsum or undef if match
+sub check_sum($$)
+{
+  my $file = shift;
+  my $oldsum = shift || 'sha1:';
+  my $sum;
+  my $type = 'md5:';
+  if($oldsum =~ /^(\S+:)/) {
+    $type = $1;
+  } else {
+    $oldsum = $type.$oldsum;
+  }
+  if ($type eq 'md5:') {
+    $sum = $type.`md5sum $file` || die "md5sum failed\n";
+  } elsif ($type eq 'sha1:') {
+    $sum = $type.`sha1sum $file` || die "sha1sum failed\n";
+  } else {
+    die "unsupported digest type '$type'\n";
+  }
+  $sum =~ s/ .*//s;
+  if($sum ne $oldsum) {
+    return $sum;
+  }
+  return undef;
+}
+
+#######################################################################
+
+for my $spec (@specs) {
+  my $cf = Build::read_config_dist($dist, $archs[0], $configdir);
+  my $parsed = Build::parse($cf, $spec);
+
+  if (!defined $parsed) {
+    die "can't parse $spec\n";
+  }
+
+  for my $tag (@opt_showtag) {
+    if($tag =~ /^\/(.+)\/$/) {
+      my $expr = $1;
+      for my $t (keys %$parsed) {
+        if ($t =~ $expr) {
+          push @opt_showtag, $t;
+        }
+      }
+    } else {
+      if(exists $parsed->{lc $tag}) {
+        print $tag, ": ";
+        my $v = $parsed->{lc $tag};
+        $v = join(' ', @$v) if (ref $v eq 'ARRAY');
+        print $v, "\n";
+      } else {
+        print STDERR "$tag does not exist\n";
+      }
+    }
+  }
+
+  if ($opt_sources) {
+    my $files = {};
+    my $srcfile = read_sources_digests($files, $spec);
+    if ($opt_download) {
+      for my $t (keys %$parsed) {
+        next unless ($t =~ /^(?:source|patch)\d*/);
+        my $url = $parsed->{$t};
+        next unless $url =~ /^(?:https?|ftp):\/\//;
+        my $file = $url;
+        $file =~ s/.*\///;
+        next if -e $file;
+        print "Downloading $file...\n";
+        if(system('curl', '-f', '-L', '-#', '-o', $file, $url) != 0) {
+          # let's see if the file was recompressed
+          if($url =~ s/\.bz2$/.gz/ && $file =~ s/\.bz2$/.gz/
+            && system('curl', '-f', '-L', '-#', '-o', $file, $url) == 0) {
+            if(system('bznew', $file) == 0) {
+              print STDERR "Used $file and recompressed to bz2 instead\n";
+            } else {
+              unlink $file;
+            }
+          } else {
+            print STDERR "Downloading $file failed\n";
+          }
+        }
+      }
+    }
+    if ($opt_update) {
+      my $changed;
+      for my $t (keys %$parsed) {
+        next unless ($t =~ /^(?:source|patch)\d*/);
+        my $file = $parsed->{$t};
+        $file =~ s/.*\///;
+        next unless -B $file;
+        my $sum = check_sum($file, ($files->{$file} || ($srcfile eq 'sources'?'md5:':'sha1:')));
+        if($sum) {
+          print STDERR "update $file\n";
+          $files->{$file} = $sum;
+          $changed = 1;
+        }
+      }
+      if($changed) {
+        if(open(F, '>', $srcfile)) {
+          for my $file (keys %$files) {
+            $files->{$file} =~ s/^md5:// if $srcfile eq 'sources';
+            print F $files->{$file}, ' ', $file, "\n";
+          }
+          close F;
+        }
+      }
+    } else {
+      for my $t (keys %$parsed) {
+        next unless ($t =~ /^(?:source|patch)\d*/);
+        my $file = $parsed->{$t};
+        $file =~ s/.*\///;
+        if (!exists $files->{$file}) {
+          if (! -e $file) {
+            print '- ';
+          } elsif (-B $file) {
+            print '_ ';
+          } else {
+            print 't ';
+          }
+        } elsif (! -e $file) {
+            print 'd ';
+            delete $files->{$file};
+        } else {
+          my $sum = check_sum($file, $files->{$file});
+          if($sum) {
+            print '! ';
+          } else {
+            print '. ';
+          }
+          delete $files->{$file};
+        }
+        print $parsed->{$t}, "\n";
+      }
+      for my $file (keys %$files) {
+        print "? $file\n";
+      }
+    }
+  }
+}
diff --git a/substitutedeps b/substitutedeps
new file mode 100755 (executable)
index 0000000..626550e
--- /dev/null
@@ -0,0 +1,273 @@
+#!/usr/bin/perl -w
+
+BEGIN {
+  unshift @INC, ($::ENV{'BUILD_DIR'} || '/usr/lib/build');
+}
+
+use strict;
+
+use Build;
+
+sub expand {
+  my ($config, $str) = @_;
+  my @xspec;
+  my %cf = %$config;
+  $cf{'save_expanded'} = 1;
+  Build::Rpm::parse(\%cf, [ "$str" ], \@xspec);
+  return @xspec && ref($xspec[0]) ? $xspec[0]->[1] : '';
+}
+
+my ($dist, $buildroot, $rpmdeps, $archs, $configdir, $release, $changelog);
+
+while (@ARGV)  {
+  if ($ARGV[0] eq '--root') {
+    shift @ARGV;
+    $buildroot = shift @ARGV;
+    next;
+  }
+  if ($ARGV[0] eq '--dist') {
+    shift @ARGV;
+    $dist = shift @ARGV;
+    next;
+  }
+  if ($ARGV[0] eq '--archpath') {
+    shift @ARGV;
+    $archs = shift @ARGV;
+    next;
+  }
+  if ($ARGV[0] eq '--configdir') {
+    shift @ARGV;
+    $configdir = shift @ARGV;
+    next;
+  }
+  if ($ARGV[0] eq '--release') {
+    shift @ARGV;
+    $release = shift @ARGV;
+    next;
+  }
+  if ($ARGV[0] eq '--changelog') {
+    shift @ARGV;
+    $changelog = shift @ARGV;
+    next;
+  }
+  last;
+}
+die("Usage: substitutedeps --dist <dist> --archpath <archpath> [--configdir <configdir>] <specin> <specout>\n") unless @ARGV == 2;
+my $spec = $ARGV[0];
+my $specdir = $spec;
+$specdir =~ s/[^\/]*$//;
+$specdir = "./" if $specdir eq '';
+
+my $newspec = $ARGV[1];
+
+my $cf = Build::read_config_dist($dist, $archs, $configdir);
+$cf->{'warnings'} = 1;
+
+#######################################################################
+
+my $xspec = [];
+my $d = Build::parse($cf, $spec, $xspec) || {};
+my @sdeps = @{$d->{'deps'} || []};
+my @neg = map {substr($_, 1)} grep {/^-/} @{$d->{'deps'} || []};
+my %neg = map {$_ => 1} @neg;
+@sdeps = grep {!$neg{$_}} @sdeps;
+@sdeps = Build::do_subst($cf, @sdeps);
+@sdeps = grep {!$neg{$_}} @sdeps;
+my %sdeps = map {$_ => 1} @sdeps;
+
+open(F, '>', $newspec) || die("$newspec: $!\n");
+
+my $used;
+my $inchangelog = 0;
+my $mainpkg = '';
+my $pkg;
+
+for my $l (@$xspec) {
+  $used = 1;
+  if (ref($l)) {
+    if (!defined($l->[1])) {
+      $used = 0;
+      $l = $l->[0];
+    } else {
+      $l = $l->[1];
+    }
+  }
+
+  if ($inchangelog) {
+    $inchangelog = 0 if $l =~ /^\s*%[^%]/;
+    next if $inchangelog;
+  }
+  if ($changelog && ($l =~ /\s*\%changelog\b/)) {
+    $inchangelog = 1;
+    next;
+  }
+
+  if ($l =~ /^Name\s*:\s*(\S+)/i) {
+    $pkg = $mainpkg = $1 unless $mainpkg;
+  }
+  if ($l =~ /^\s*%package\s+(-n\s+)?(\S+)/) {
+    if ($1) {
+      $pkg = $2;
+    } else {
+      $pkg = "$mainpkg-$2";
+    }
+  }
+
+  if ($l =~ /^Release:/i) {
+    my $oldl = $l;
+    if (defined $release) {
+      if (!($l =~ s/<RELEASE\d*>/$release/g)) {
+       if ($l =~ /<(?:CI_CNT|B_CNT)>/) {
+         # XXX: should pass ci_cnt/b_cnt instead
+         if ($release =~ /(\d+)\.(\d+)$/) {
+           my ($ci, $b) = ($1, $2);
+           $l =~ s/<CI_CNT>/$ci/;
+           $l =~ s/<B_CNT>/$b/;
+         } elsif ($release =~ /(\d+)$/) {
+           my $b = $1;
+           $b = '0' if $l =~ s/<CI_CNT>/$b/;
+           $l =~ s/<B_CNT>/$b/;
+         }
+       } else {
+         $l =~ s/^(Release:\s*).*/$1$release/i;
+       }
+      }
+    } else {
+      # remove macros, as rpm doesn't like them
+      $l =~ s/<RELEASE\d*>/0/;
+      $l =~ s/<CI_CNT>/0/;
+      $l =~ s/<B_CNT>/0/;
+    }
+    # this is to be compatible to legacy autobuild.
+    # you can specify a releaseprg in the project configuration,
+    # if your package contains this file it is executed and its
+    # output is used as a release.
+    # use only if you really must.
+    if ($cf->{'releaseprg'} && -f "$specdir$cf->{'releaseprg'}") {
+      my $newl = $l;
+      $newl =~ s/^Release:\s*//;
+      $oldl =~ s/^Release:\s*//;
+      my $project = expand($cf, "%?_project") || 'BUILD_BASENAME';
+      my $arch = expand($cf, "%?_target_cpu") || 'noarch';
+      $::ENV{'BUILD_OLDRELEASE'} = $oldl;
+      my @nl;
+      my $interpreter = "/bin/bash";
+      if (open(RP, '<', "$specdir$cf->{'releaseprg'}")) {
+       @nl = <RP>;
+       close RP;
+       if (@nl && $nl[0] =~ /^#!\s*(\S*)/) {
+         $interpreter = $1;
+       }
+      }
+      if ($buildroot) {
+       my $sd = $specdir;
+       $sd =~ s/^\Q$buildroot\E//;
+       open(RP, "-|", 'chroot', $buildroot, $interpreter, "$sd$cf->{'releaseprg'}", $project, $newl, $pkg, $arch) || die("$cf->{'releaseprg'}: $!\n");
+      } else {
+       open(RP, "-|", $interpreter, "$specdir$cf->{'releaseprg'}", $project, $newl, $pkg, $arch) || die("$cf->{'releaseprg'}: $!\n");
+      }
+      @nl = grep {$_ ne ''} <RP>;
+      if (!close(RP)) {
+       warn("$cf->{'releaseprg'} failed: $?\n");
+      }
+      # and another compatibility hack: if the prg returns pkg:<package>,
+      # the release of the package will be used. yuck...
+      if (@nl && $nl[0] =~ s/^pkg://) {
+       my $relpkg = $nl[0];
+       chomp $relpkg;
+       if ($buildroot) {
+         open(RP, "-|", 'chroot', $buildroot, 'rpm', '-q', '--qf', '%{RELEASE}', $relpkg) || die("rpm: $!\n");
+       } else {
+         open(RP, "-|", 'rpm', '-q', '--qf', '%{RELEASE}', $relpkg) || die("rpm: $!\n");
+       }
+       @nl = grep {$_ ne ''} <RP>;
+       if (!close(RP)) {
+         warn("rpm package query of '$relpkg' failed: $?\n");
+       }
+      }
+      if ($nl[0]) {
+       chomp $nl[0];
+       $l =~ s/^(Release:\s*).*/$1$nl[0]/i;
+       if (defined $release) {
+         if (!($l =~ s/<RELEASE\d*>/$release/g)) {
+           if ($l =~ /<(?:CI_CNT|B_CNT)>/) {
+             # XXX: should pass ci_cnt/b_cnt instead
+             if ($release =~ /(\d+)\.(\d+)$/) {
+               my ($ci, $b) = ($1, $2);
+               $l =~ s/<CI_CNT>/$ci/;
+               $l =~ s/<B_CNT>/$b/;
+             } elsif ($release =~ /(\d+)$/) {
+               my $b = $1;
+               $l =~ s/<B_CNT>/$b/ unless $l =~ s/<CI_CNT>/$b/;
+             }
+           }
+         }
+       }
+      }
+    }
+    # all compat stuff done. we return to your scheduled program
+  }
+
+  if (!$used || ($l !~ /^(?:Build)?Requires:/i)) {
+    print F "$l\n";
+    next;
+  }
+  if ($l =~ /%\(/) {
+    # too hard for us
+    print F "$l\n";
+    next;
+  }
+
+  my $isbuildrequires = 0;
+  $isbuildrequires = 1 if $l =~ /^BuildRequires:/i;
+  my $r = $l;
+  $r =~ s/^[^:]*:\s*//;
+  my @deps = $r =~ /([^\s\[,]+)(\s+[<=>]+\s+[^\s\[,]+)?[\s,]*/g;
+  my @ndeps = ();
+  my $replace = 0;
+  my @f2 = Build::do_subst_vers($cf, @deps);
+  my %f2 = @f2;
+  if ($isbuildrequires) {
+    delete $f2{$_} for @neg;
+    delete $f2{$_} for grep {/^-/} keys %f2;
+  }
+  while (@deps) {
+    my ($pack, $vers) = splice(@deps, 0, 2);
+    $vers = '' unless defined $vers;
+    if (($isbuildrequires && $sdeps{$pack}) || exists($f2{$pack})) {
+      push @ndeps, "$pack$vers";
+      delete $f2{$pack};
+    } else {
+      $replace = 1;
+    }
+  }
+  if (%f2) {
+    while (@f2) {
+      my ($pack, $vers) = splice(@f2, 0, 2);
+      next unless exists $f2{$pack};
+      $vers = '' unless defined $vers;
+      push @ndeps, "$pack$vers";
+    }
+    $replace = 1
+  }
+  if ($replace) {
+    $l =~ /^(.*?:\s*)/;
+    print F $1.join(' ', @ndeps)."\n" if @ndeps;
+  } else {
+    print F "$l\n";
+  }
+}
+
+if ($changelog) {
+  print F "%changelog\n";
+  if (open(CF, '<', $changelog)) {
+    while(<CF>) {
+      print F $_;
+    }
+    close CF;
+  }
+}
+
+close(F) || die("close: $!\n");
+
+exit(0);
diff --git a/t/dist b/t/dist
new file mode 100755 (executable)
index 0000000..889d182
--- /dev/null
+++ b/t/dist
@@ -0,0 +1,19 @@
+#!/usr/bin/perl -w
+
+use strict;
+use Test::More tests => 9;
+use Build;
+
+sub d {
+  Build::dist_canon($_[0], $_[1]||'i586');
+}
+
+is(d("UnitedLinux 1.0 (x86-64)"),       "ul1-x86_64");
+is(d("SuSE SLES-8 (ia64)"),             "sles8-ia64");
+is(d("SuSE Linux 8.2 (x86-64)"),        "8.2-x86_64");
+is(d("SuSE SLES-9 (x86-64)"),           "sles9-x86_64");
+is(d("SUSE Linux 10.1 (PPC64)"),        "10.1-ppc64");
+is(d("SUSE Linux Enterprise 10 (PPC)"), "sles10-ppc");
+is(d("openSUSE 10.3 (X86-64)"),         "10.3-x86_64");
+is(d("SUSE Linux Enterprise 11"),       "sles11-i386");
+is(d("openSUSE 11.3"),                  "11.3-i386");
diff --git a/test/Fedora_11.conf b/test/Fedora_11.conf
new file mode 100644 (file)
index 0000000..1f4dac1
--- /dev/null
@@ -0,0 +1,305 @@
+%define _project Fedora:11
+
+### from Fedora:11
+%define _repository standard
+
+Preinstall: acl attr bash bzip2 coreutils device-mapper-libs diffutils
+Preinstall: filesystem glibc grep libacl libattr
+Preinstall: libgcc m4 ncurses pam nss nspr
+Preinstall: popt readline ncurses-libs rpm sed tar zlib
+Preinstall: rpm-libs pcre info libselinux sqlite 
+Preinstall: elfutils-libelf findutils neon openssl krb5-libs
+Preinstall: e2fsprogs-libs expat bzip2-libs libstdc++ setup libsepol
+Preinstall: perl-libs policycoreutils libcap db4 file-libs lua
+Preinstall: shadow-utils chkconfig nss-softokn-freebl util-linux-ng
+
+Runscripts: setup
+
+VMinstall: perl device-mapper
+
+Required: autoconf automake binutils bzip2 gcc gdbm gettext glibc
+Required: libtool ncurses nss-softokn-freebl perl rpm zlib rpm-build
+
+Support: bind-libs bind-utils bison cpio cpp cracklib cvs
+Support: e2fsprogs file findutils flex gawk gdbm-devel gettext-devel
+Support: glibc-devel gpm groff gzip info less
+Support: make man module-init-tools
+Support: ncurses-devel net-tools openssl
+Support: patch procinfo procps psmisc rcs strace
+Support: texinfo unzip util-linux-ng zlib-devel vim-enhanced
+Support: initscripts bzip2-devel shadow-utils
+
+Keep: binutils cpp cracklib file findutils gawk gcc gcc-ada gcc-c++
+Keep: gdbm glibc-devel gzip libada libstdc++ libunwind
+Keep: libunwind-devel make  pam-devel pam-modules shadow-utils
+Keep: patch nss-softokn-freebl perl rcs rpm-build ncurses-libs nss nspr
+
+Prefer: xorg-x11-libs libpng fam mozilla mozilla-nss xorg-x11-Mesa
+Prefer: unixODBC libsoup glitz java-1_4_2-sun gnome-panel
+Prefer: desktop-data-SuSE gnome2-SuSE mono-nunit gecko-sharp2
+Prefer: apache2-prefork openmotif-libs ghostscript-mini gtk-sharp
+Prefer: glib-sharp libzypp-zmd-backend mDNSResponder
+
+Prefer: gnome-sharp2:art-sharp2 gnome-sharp:art-sharp
+Prefer: ifolder3:gnome-sharp2 ifolder3:gconf-sharp2
+Prefer: nautilus-ifolder3:gnome-sharp2
+Prefer: gconf-sharp2:glade-sharp2 gconf-sharp:glade-sharp
+Prefer: tomboy:gconf-sharp tomboy:gnome-sharp
+Prefer: zmd:libzypp-zmd-backend
+Prefer: yast2-packagemanager-devel:yast2-packagemanager
+Prefer: initscripts:syslog-ng
+Prefer: generic-logos
+Prefer: text-www-browser:lynx
+Prefer: docbook-utils:lynx
+Prefer: kdepim:pinentry-qt
+Prefer: syslogd sysklogd
+Prefer: kernel
+
+Prefer: -libgcc-mainline -libstdc++-mainline -gcc-mainline-c++
+Prefer: -libgcj-mainline -viewperf -compat -compat-openssl097g
+Prefer: -zmd -OpenOffice_org -pam-laus -libgcc-tree-ssa -busybox-links
+Prefer: -crossover-office
+
+Conflict: ghostscript-library:ghostscript-mini
+
+Ignore: initscripts:kernel,udev,ethtool,mingetty
+Ignore: tetex:tetex-fonts,desktop-file-utils
+Ignore: pam:glib2
+Ignore: libraw1394:kernel
+
+Ignore: gettext-devel:libgcj,libstdc++-devel,libgcj_bc.so.1
+Ignore: pam-modules:resmgr
+Ignore: rpm:suse-build-key,build-key
+Ignore: bind-utils:bind-libs
+Ignore: alsa:dialog,pciutils
+Ignore: portmap:syslogd
+Ignore: fontconfig:freetype2
+Ignore: fontconfig-devel:freetype2-devel
+Ignore: xorg-x11-libs:freetype2
+Ignore: xorg-x11:x11-tools,resmgr,xkeyboard-config,xorg-x11-Mesa,libusb,freetype2,libjpeg,libpng
+Ignore: apache2:logrotate
+Ignore: arts:alsa,audiofile,resmgr,libogg,libvorbis
+Ignore: kdelibs3:alsa,arts,pcre,OpenEXR,aspell,cups-libs,mDNSResponder,krb5,libjasper
+Ignore: kdelibs3-devel:libvorbis-devel
+Ignore: kdebase3:kdebase3-ksysguardd,OpenEXR,dbus-1,dbus-1-qt,hal,powersave,openslp,libusb
+Ignore: kdebase3-SuSE:release-notes
+Ignore: jack:alsa,libsndfile
+Ignore: libxml2-devel:readline-devel
+Ignore: gnome-vfs2:gnome-mime-data,desktop-file-utils,cdparanoia,dbus-1,dbus-1-glib,krb5,hal,libsmbclient,fam,file_alteration
+Ignore: libgda:file_alteration
+Ignore: gnutls:lzo,libopencdk
+Ignore: gnutls-devel:lzo-devel,libopencdk-devel
+Ignore: pango:cairo,glitz,libpixman,libpng
+Ignore: pango-devel:cairo-devel
+Ignore: cairo-devel:libpixman-devel
+Ignore: libgnomeprint:libgnomecups
+Ignore: libgnomeprintui:libgnomecups
+Ignore: orbit2:libidl
+Ignore: orbit2-devel:libidl,libidl-devel,indent
+Ignore: qt3:libmng
+Ignore: qt-sql:qt_database_plugin
+Ignore: gtk2:libpng,libtiff
+Ignore: libgnomecanvas-devel:glib-devel
+Ignore: libgnomeui:gnome-icon-theme,shared-mime-info
+Ignore: scrollkeeper:docbook_4,sgml-skel
+Ignore: gnome-desktop:libgnomesu,startup-notification
+Ignore: python-devel:python-tk
+Ignore: gnome-pilot:gnome-panel
+Ignore: gnome-panel:control-center2
+Ignore: gnome-menus:kdebase3
+Ignore: gnome-main-menu:rug
+Ignore: libbonoboui:gnome-desktop
+Ignore: postfix:pcre
+Ignore: docbook_4:iso_ent,sgml-skel,xmlcharent
+Ignore: control-center2:nautilus,evolution-data-server,gnome-menus,gstreamer-plugins,gstreamer,metacity,mozilla-nspr,mozilla,libxklavier,gnome-desktop,startup-notification
+Ignore: docbook-xsl-stylesheets:xmlcharent
+Ignore: liby2util-devel:libstdc++-devel,openssl-devel
+Ignore: yast2:yast2-ncurses,yast2-theme-SuSELinux,perl-Config-Crontab,yast2-xml,SuSEfirewall2
+Ignore: yast2-core:netcat,hwinfo,wireless-tools,sysfsutils
+Ignore: yast2-core-devel:libxcrypt-devel,hwinfo-devel,blocxx-devel,sysfsutils,libstdc++-devel
+Ignore: yast2-packagemanager-devel:rpm-devel,curl-devel,openssl-devel
+Ignore: yast2-devtools:perl-XML-Writer,libxslt,pkgconfig
+Ignore: yast2-installation:yast2-update,yast2-mouse,yast2-country,yast2-bootloader,yast2-packager,yast2-network,yast2-online-update,yast2-users,release-notes,autoyast2-installation
+Ignore: yast2-bootloader:bootloader-theme
+Ignore: yast2-packager:yast2-x11
+Ignore: yast2-x11:sax2-libsax-perl
+Ignore: openslp-devel:openssl-devel
+Ignore: java-1_4_2-sun:xorg-x11-libs
+Ignore: java-1_4_2-sun-devel:xorg-x11-libs
+Ignore: kernel-um:xorg-x11-libs
+Ignore: tetex:xorg-x11-libs,expat,fontconfig,freetype2,libjpeg,libpng,ghostscript-x11,xaw3d,gd,dialog,ed
+Ignore: yast2-country:yast2-trans-stats
+Ignore: libgcc:glibc-32bit
+Ignore: libstdc++:glibc-32bit
+Ignore: susehelp:susehelp_lang,suse_help_viewer
+Ignore: mailx:smtp_daemon
+Ignore: cron:smtp_daemon
+Ignore: hotplug:syslog
+Ignore: pcmcia:syslog
+Ignore: avalon-logkit:servlet
+Ignore: jython:servlet
+Ignore: ispell:ispell_dictionary,ispell_english_dictionary
+Ignore: aspell:aspel_dictionary,aspell_dictionary
+Ignore: smartlink-softmodem:kernel,kernel-nongpl
+Ignore: OpenOffice_org-de:myspell-german-dictionary
+Ignore: mediawiki:php-session,php-gettext,php-zlib,php-mysql,mod_php_any
+Ignore: squirrelmail:mod_php_any,php-session,php-gettext,php-iconv,php-mbstring,php-openssl
+Ignore: phonon:phonon-backend
+Ignore: phonon:phonon-backend(x86-32)
+Ignore: phonon:phonon-backend(x86-64)
+
+Ignore: simias:mono(log4net)
+Ignore: zmd:mono(log4net)
+Ignore: horde:mod_php_any,php-gettext,php-mcrypt,php-imap,php-pear-log,php-pear,php-session,php
+Ignore: xerces-j2:xml-commons-apis,xml-commons-resolver
+Ignore: xdg-menu:desktop-data
+Ignore: nessus-libraries:nessus-core
+Ignore: evolution:yelp
+Ignore: mono-tools:mono(gconf-sharp),mono(glade-sharp),mono(gnome-sharp),mono(gtkhtml-sharp),mono(atk-sharp),mono(gdk-sharp),mono(glib-sharp),mono(gtk-sharp),mono(pango-sharp)
+Ignore: gecko-sharp2:mono(glib-sharp),mono(gtk-sharp)
+Ignore: vcdimager:libcdio.so.6,libcdio.so.6(CDIO_6),libiso9660.so.4,libiso9660.so.4(ISO9660_4)
+Ignore: libcdio:libcddb.so.2
+Ignore: gnome-libs:libgnomeui
+Ignore: nautilus:gnome-themes
+Ignore: gnome-panel:gnome-themes
+Ignore: gnome-panel:tomboy
+
+%ifarch %arm
+# workaround for broken Fedora arm distro
+#Ignore: bind-libs:libcrypto.so.6
+#Ignore: bind-utils:libcrypto.so.6
+%endif
+
+%ifnarch s390 s390x ppc ia64
+Substitute: java2-devel-packages java-1_4_2-sun-devel
+%else
+ %ifnarch s390x
+Substitute: java2-devel-packages java-1_4_2-ibm-devel
+ %else
+Substitute: java2-devel-packages java-1_4_2-ibm-devel xorg-x11-libs-32bit
+ %endif
+%endif
+
+#
+# Bugfix broken dependencies
+#
+Substitute: python python redhat-rpm-config
+
+#
+# SUSE compatibilities
+#
+Substitute: alsa alsa-lib
+Substitute: alsa-devel alsa-lib-devel
+Substitute: docbook-toys docbook-utils
+Substitute: expat expat expat-devel
+Substitute: gtkdoc gtk-doc
+Substitute: db db4
+Substitute: db-devel db4-devel
+Substitute: dbus-1 dbus
+Substitute: dbus-1-devel dbus-devel
+Substitute: dbus-1-glib dbus-glib
+Substitute: dbus-1-python dbus-python
+Substitute: dbus-1-mono dbus-sharp
+Substitute: gtk-devel gtk+-devel 
+Substitute: te_latex tetex-latex
+Substitute: xorg-x11-devel  xorg-x11-proto-devel xorg-x11-xtrans-devel
+Substitute: krb5 krb5-libs
+Substitute: libsigc++2-devel libsigc++20-devel 
+Substitute: libXerces-c-devel  xerces-c-devel
+Substitute: libgphoto2-devel gphoto2-devel
+Substitute: libredland-devel redland-devel
+Substitute: libraptor-devel raptor-devel
+Substitute: librasqal-devel rasqal-devel
+Substitute: openldap2 openldap
+Substitute: openldap2-devel openldap-devel
+Substitute: pulseaudio-devel pulseaudio-libs-devel
+Substitute: xorg-x11-Mesa-devel mesa-libGL-devel
+Substitute: ImageMagick-Magick++-devel ImageMagick-c++-devel
+Substitute: ImageMagick-Magick++ ImageMagick-c++
+Substitute: pyxml PyXML
+
+Substitute: Mesa mesa-libGL
+Substitute: Mesa-devel mesa-libGL-devel
+Substitute: freetype2 freetype
+Substitute: freetype2-devel freetype-devel
+Substitute: liblcms-devel lcms-devel
+Substitute: libqt4-devel qt-devel
+Substitute: kdelibs4-devel kdelibs-devel
+
+Prefer: -Glide3-libGL
+Prefer: wxGTK-media:GConf2
+
+Substitute: yast2-devel-packages docbook-xsl-stylesheets doxygen libxslt perl-XML-Writer popt-devel sgml-skel update-desktop-files yast2 yast2-devtools yast2-packagemanager-devel yast2-perl-bindings yast2-testsuite
+
+%ifarch x86_64 ppc64 s390x sparc64
+Substitute: glibc-devel-32bit glibc-devel-32bit glibc-32bit
+%else
+ %ifarch ppc
+Substitute: glibc-devel-32bit glibc-devel-64bit
+ %else
+Substitute: glibc-devel-32bit
+ %endif
+%endif
+
+%ifarch %ix86
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-bigsmp kernel-debug kernel-um kernel-xen kernel-kdump
+%endif
+%ifarch ia64
+Substitute: kernel-binary-packages kernel-default kernel-debug
+%endif
+%ifarch x86_64
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-xen kernel-kdump
+%endif
+%ifarch ppc
+Substitute: kernel-binary-packages kernel-default kernel-kdump kernel-ppc64 kernel-iseries64
+%endif
+%ifarch ppc64
+Substitute: kernel-binary-packages kernel-ppc64 kernel-iseries64
+%endif
+%ifarch s390
+Substitute: kernel-binary-packages kernel-s390
+%endif
+%ifarch s390x
+Substitute: kernel-binary-packages kernel-default
+%endif
+
+#
+# experimentel, testing for mc
+#
+Substitute: sgml-skel sgml-common
+Substitute: docbook-xsl-stylesheets docbook-style-xsl
+
+Substitute: libelf elfutils-libelf
+
+%define fedora_version 11
+
+
+Macros:
+%vendor obs://build.opensuse.org/Fedora:11
+%_project Fedora:11
+
+%distribution Fedora:11
+%_project Fedora:11
+
+### from Fedora:11
+%_repository standard
+%opensuse_bs 1
+%fedora_version 11
+%_vendor redhat
+
+#From fedora buildsys-macros package
+%fedora 11
+%dist .fc11
+%fc11 1
+
+%kernel_module_package_buildreqs kernel-devel
+
+%ext_info .gz
+%ext_man .gz
+
+%info_add(:-:) test -x /sbin/install-info -a -f %{?2}%{?!2:%{_infodir}}/%{1}%ext_info && /sbin/install-info --info-dir=%{?2}%{?!2:%{_infodir}} %{?2}%{?!2:%{_infodir}}/%{1}%ext_info \
+%{nil}
+
+%info_del(:-:) test -x /sbin/install-info -a ! -f %{?2}%{?!2:%{_infodir}}/%{1}%ext_info && /sbin/install-info --quiet --delete --info-dir=%{?2}%{?!2:%{_infodir}} %{?2}%{?!2:%{_infodir}}/%{1}%ext_info \
+%{nil}
+
diff --git a/test/Fedora_12.conf b/test/Fedora_12.conf
new file mode 100644 (file)
index 0000000..f0fe9a1
--- /dev/null
@@ -0,0 +1,311 @@
+%define _project Fedora:12
+
+### from Fedora:12
+%define _repository standard
+
+Preinstall: acl attr bash bzip2 coreutils device-mapper-libs diffutils
+Preinstall: filesystem glibc grep libacl libattr
+Preinstall: libgcc m4 ncurses pam nss nspr
+Preinstall: popt readline ncurses-libs rpm sed tar zlib
+Preinstall: rpm-libs pcre info libselinux sqlite 
+Preinstall: elfutils-libelf findutils openssl krb5-libs
+Preinstall: e2fsprogs-libs expat bzip2-libs libstdc++ setup libsepol
+Preinstall: perl-libs libcap db4 file-libs lua
+Preinstall: shadow-utils chkconfig util-linux-ng
+Preinstall: xz-libs nss-util libblkid libuuid
+Preinstall: nss-softokn-freebl nss-softokn
+
+#Runscripts: setup
+
+VMinstall: perl device-mapper
+
+Required: autoconf automake binutils bzip2 gcc gdbm gettext glibc
+Required: libtool ncurses nss-softokn-freebl perl rpm zlib rpm-build
+
+Support: bind-libs bind-utils bison cpp cracklib cvs cpio
+Support: e2fsprogs file findutils flex gawk gdbm-devel gettext-devel
+Support: glibc-devel gpm groff gzip info less
+Support: make man module-init-tools
+Support: ncurses-devel net-tools openssl
+Support: patch procinfo procps psmisc rcs strace
+Support: texinfo unzip util-linux-ng zlib-devel vim-enhanced
+Support: initscripts bzip2-devel shadow-utils
+
+Keep: binutils cpp cracklib file findutils gawk gcc gcc-ada gcc-c++
+Keep: gdbm glibc-devel gzip libada libstdc++ libunwind
+Keep: libunwind-devel make  pam-devel pam-modules shadow-utils
+Keep: patch nss-softokn-freebl perl rcs rpm-build ncurses-libs nss nspr
+
+Prefer: xorg-x11-libs libpng fam mozilla mozilla-nss xorg-x11-Mesa
+Prefer: unixODBC libsoup glitz java-1_4_2-sun gnome-panel
+Prefer: desktop-data-SuSE gnome2-SuSE mono-nunit gecko-sharp2
+Prefer: apache2-prefork openmotif-libs ghostscript-mini gtk-sharp
+Prefer: glib-sharp libzypp-zmd-backend mDNSResponder
+
+Prefer: gnome-sharp2:art-sharp2 gnome-sharp:art-sharp
+Prefer: ifolder3:gnome-sharp2 ifolder3:gconf-sharp2
+Prefer: nautilus-ifolder3:gnome-sharp2
+Prefer: gconf-sharp2:glade-sharp2 gconf-sharp:glade-sharp
+Prefer: tomboy:gconf-sharp tomboy:gnome-sharp
+Prefer: zmd:libzypp-zmd-backend
+Prefer: yast2-packagemanager-devel:yast2-packagemanager
+Prefer: initscripts:syslog-ng
+Prefer: generic-logos
+Prefer: text-www-browser:lynx
+Prefer: docbook-utils:lynx
+Prefer: kdepim:pinentry-qt
+Prefer: syslogd sysklogd
+Prefer: kernel
+
+Prefer: -libgcc-mainline -libstdc++-mainline -gcc-mainline-c++
+Prefer: -libgcj-mainline -viewperf -compat -compat-openssl097g
+Prefer: -zmd -OpenOffice_org -pam-laus -libgcc-tree-ssa -busybox-links
+Prefer: -crossover-office
+Prefer: -xz-lzma-compat
+
+Conflict: ghostscript-library:ghostscript-mini
+
+Ignore: initscripts:kernel,udev,ethtool,mingetty,glib2
+Ignore: tetex:tetex-fonts,desktop-file-utils
+Ignore: pam:glib2
+Ignore: libraw1394:kernel
+Ignore: qt-x11:phonon-backend
+Ignore: qt-x11:phonon-backend(x86-32)
+Ignore: qt-x11:phonon-backend(x86-64)
+
+Ignore: gettext-devel:libgcj,libstdc++-devel,libgcj_bc.so.1
+Ignore: pam-modules:resmgr
+Ignore: rpm:suse-build-key,build-key
+Ignore: bind-utils:bind-libs
+Ignore: alsa:dialog,pciutils
+Ignore: portmap:syslogd
+Ignore: fontconfig:freetype2
+Ignore: fontconfig-devel:freetype2-devel
+Ignore: xorg-x11-libs:freetype2
+Ignore: xorg-x11:x11-tools,resmgr,xkeyboard-config,xorg-x11-Mesa,libusb,freetype2,libjpeg,libpng
+Ignore: apache2:logrotate
+Ignore: arts:alsa,audiofile,resmgr,libogg,libvorbis
+Ignore: kdelibs3:alsa,arts,pcre,OpenEXR,aspell,cups-libs,mDNSResponder,krb5,libjasper
+Ignore: kdelibs3-devel:libvorbis-devel
+Ignore: kdebase3:kdebase3-ksysguardd,OpenEXR,dbus-1,dbus-1-qt,hal,powersave,openslp,libusb
+Ignore: kdebase3-SuSE:release-notes
+Ignore: jack:alsa,libsndfile
+Ignore: libxml2-devel:readline-devel
+Ignore: gnome-vfs2:gnome-mime-data,desktop-file-utils,cdparanoia,dbus-1,dbus-1-glib,krb5,hal,libsmbclient,fam,file_alteration
+Ignore: libgda:file_alteration
+Ignore: gnutls:lzo,libopencdk
+Ignore: gnutls-devel:lzo-devel,libopencdk-devel
+Ignore: pango:cairo,glitz,libpixman,libpng
+Ignore: pango-devel:cairo-devel
+Ignore: cairo-devel:libpixman-devel
+Ignore: libgnomeprint:libgnomecups
+Ignore: libgnomeprintui:libgnomecups
+Ignore: orbit2:libidl
+Ignore: orbit2-devel:libidl,libidl-devel,indent
+Ignore: qt3:libmng
+Ignore: qt-sql:qt_database_plugin
+Ignore: gtk2:libpng,libtiff
+Ignore: libgnomecanvas-devel:glib-devel
+Ignore: libgnomeui:gnome-icon-theme,shared-mime-info
+Ignore: scrollkeeper:docbook_4,sgml-skel
+Ignore: gnome-desktop:libgnomesu,startup-notification
+Ignore: python-devel:python-tk
+Ignore: gnome-pilot:gnome-panel
+Ignore: gnome-panel:control-center2
+Ignore: gnome-menus:kdebase3
+Ignore: gnome-main-menu:rug
+Ignore: libbonoboui:gnome-desktop
+Ignore: postfix:pcre
+Ignore: docbook_4:iso_ent,sgml-skel,xmlcharent
+Ignore: control-center2:nautilus,evolution-data-server,gnome-menus,gstreamer-plugins,gstreamer,metacity,mozilla-nspr,mozilla,libxklavier,gnome-desktop,startup-notification
+Ignore: docbook-xsl-stylesheets:xmlcharent
+Ignore: liby2util-devel:libstdc++-devel,openssl-devel
+Ignore: yast2:yast2-ncurses,yast2-theme-SuSELinux,perl-Config-Crontab,yast2-xml,SuSEfirewall2
+Ignore: yast2-core:netcat,hwinfo,wireless-tools,sysfsutils
+Ignore: yast2-core-devel:libxcrypt-devel,hwinfo-devel,blocxx-devel,sysfsutils,libstdc++-devel
+Ignore: yast2-packagemanager-devel:rpm-devel,curl-devel,openssl-devel
+Ignore: yast2-devtools:perl-XML-Writer,libxslt,pkgconfig
+Ignore: yast2-installation:yast2-update,yast2-mouse,yast2-country,yast2-bootloader,yast2-packager,yast2-network,yast2-online-update,yast2-users,release-notes,autoyast2-installation
+Ignore: yast2-bootloader:bootloader-theme
+Ignore: yast2-packager:yast2-x11
+Ignore: yast2-x11:sax2-libsax-perl
+Ignore: openslp-devel:openssl-devel
+Ignore: java-1_4_2-sun:xorg-x11-libs
+Ignore: java-1_4_2-sun-devel:xorg-x11-libs
+Ignore: kernel-um:xorg-x11-libs
+Ignore: tetex:xorg-x11-libs,expat,fontconfig,freetype2,libjpeg,libpng,ghostscript-x11,xaw3d,gd,dialog,ed
+Ignore: yast2-country:yast2-trans-stats
+Ignore: libgcc:glibc-32bit
+Ignore: libstdc++:glibc-32bit
+Ignore: susehelp:susehelp_lang,suse_help_viewer
+Ignore: mailx:smtp_daemon
+Ignore: cron:smtp_daemon
+Ignore: hotplug:syslog
+Ignore: pcmcia:syslog
+Ignore: avalon-logkit:servlet
+Ignore: jython:servlet
+Ignore: ispell:ispell_dictionary,ispell_english_dictionary
+Ignore: aspell:aspel_dictionary,aspell_dictionary
+Ignore: smartlink-softmodem:kernel,kernel-nongpl
+Ignore: OpenOffice_org-de:myspell-german-dictionary
+Ignore: mediawiki:php-session,php-gettext,php-zlib,php-mysql,mod_php_any
+Ignore: squirrelmail:mod_php_any,php-session,php-gettext,php-iconv,php-mbstring,php-openssl
+Ignore: phonon:phonon-backend
+Ignore: phonon:phonon-backend(x86-32)
+Ignore: phonon:phonon-backend(x86-64)
+
+Ignore: simias:mono(log4net)
+Ignore: zmd:mono(log4net)
+Ignore: horde:mod_php_any,php-gettext,php-mcrypt,php-imap,php-pear-log,php-pear,php-session,php
+Ignore: xerces-j2:xml-commons-apis,xml-commons-resolver
+Ignore: xdg-menu:desktop-data
+Ignore: nessus-libraries:nessus-core
+Ignore: evolution:yelp
+Ignore: mono-tools:mono(gconf-sharp),mono(glade-sharp),mono(gnome-sharp),mono(gtkhtml-sharp),mono(atk-sharp),mono(gdk-sharp),mono(glib-sharp),mono(gtk-sharp),mono(pango-sharp)
+Ignore: gecko-sharp2:mono(glib-sharp),mono(gtk-sharp)
+Ignore: vcdimager:libcdio.so.6,libcdio.so.6(CDIO_6),libiso9660.so.4,libiso9660.so.4(ISO9660_4)
+Ignore: libcdio:libcddb.so.2
+Ignore: gnome-libs:libgnomeui
+Ignore: nautilus:gnome-themes
+Ignore: gnome-panel:gnome-themes
+Ignore: gnome-panel:tomboy
+
+%ifarch %arm
+# workaround for broken Fedora arm distro
+#Ignore: bind-libs:libcrypto.so.6
+#Ignore: bind-utils:libcrypto.so.6
+%endif
+
+%ifnarch s390 s390x ppc ia64
+Substitute: java2-devel-packages java-1_4_2-sun-devel
+%else
+ %ifnarch s390x
+Substitute: java2-devel-packages java-1_4_2-ibm-devel
+ %else
+Substitute: java2-devel-packages java-1_4_2-ibm-devel xorg-x11-libs-32bit
+ %endif
+%endif
+
+#
+# Bugfix broken dependencies
+#
+Substitute: python python redhat-rpm-config
+
+#
+# SUSE compatibilities
+#
+Substitute: alsa alsa-lib
+Substitute: alsa-devel alsa-lib-devel
+Substitute: docbook-toys docbook-utils
+Substitute: expat expat expat-devel
+Substitute: gtkdoc gtk-doc
+Substitute: db db4
+Substitute: db-devel db4-devel
+Substitute: dbus-1 dbus
+Substitute: dbus-1-devel dbus-devel
+Substitute: dbus-1-glib dbus-glib
+Substitute: dbus-1-python dbus-python
+Substitute: dbus-1-mono dbus-sharp
+Substitute: gtk-devel gtk+-devel 
+Substitute: te_latex tetex-latex
+Substitute: xorg-x11-devel  xorg-x11-proto-devel xorg-x11-xtrans-devel
+Substitute: krb5 krb5-libs
+Substitute: libsigc++2-devel libsigc++20-devel 
+Substitute: libXerces-c-devel  xerces-c-devel
+Substitute: libgphoto2-devel gphoto2-devel
+Substitute: libredland-devel redland-devel
+Substitute: libraptor-devel raptor-devel
+Substitute: librasqal-devel rasqal-devel
+Substitute: openldap2 openldap
+Substitute: openldap2-devel openldap-devel
+Substitute: pulseaudio-devel pulseaudio-libs-devel
+Substitute: xorg-x11-Mesa-devel mesa-libGL-devel
+Substitute: ImageMagick-Magick++-devel ImageMagick-c++-devel
+Substitute: ImageMagick-Magick++ ImageMagick-c++
+Substitute: pyxml PyXML
+
+Substitute: Mesa mesa-libGL
+Substitute: Mesa-devel mesa-libGL-devel
+Substitute: freetype2 freetype
+Substitute: freetype2-devel freetype-devel
+Substitute: liblcms-devel lcms-devel
+Substitute: libqt4-devel qt-devel
+Substitute: kdelibs4-devel kdelibs-devel
+
+Prefer: -Glide3-libGL
+Prefer: wxGTK-media:GConf2
+
+Substitute: yast2-devel-packages docbook-xsl-stylesheets doxygen libxslt perl-XML-Writer popt-devel sgml-skel update-desktop-files yast2 yast2-devtools yast2-packagemanager-devel yast2-perl-bindings yast2-testsuite
+
+%ifarch x86_64 ppc64 s390x sparc64
+Substitute: glibc-devel-32bit glibc-devel-32bit glibc-32bit
+%else
+ %ifarch ppc
+Substitute: glibc-devel-32bit glibc-devel-64bit
+ %else
+Substitute: glibc-devel-32bit
+ %endif
+%endif
+
+%ifarch %ix86
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-bigsmp kernel-debug kernel-um kernel-xen kernel-kdump
+%endif
+%ifarch ia64
+Substitute: kernel-binary-packages kernel-default kernel-debug
+%endif
+%ifarch x86_64
+Substitute: kernel-binary-packages kernel-default kernel-smp kernel-xen kernel-kdump
+%endif
+%ifarch ppc
+Substitute: kernel-binary-packages kernel-default kernel-kdump kernel-ppc64 kernel-iseries64
+%endif
+%ifarch ppc64
+Substitute: kernel-binary-packages kernel-ppc64 kernel-iseries64
+%endif
+%ifarch s390
+Substitute: kernel-binary-packages kernel-s390
+%endif
+%ifarch s390x
+Substitute: kernel-binary-packages kernel-default
+%endif
+
+#
+# experimentel, testing for mc
+#
+Substitute: sgml-skel sgml-common
+Substitute: docbook-xsl-stylesheets docbook-style-xsl
+
+Substitute: libelf elfutils-libelf
+
+%define fedora_version 12
+
+
+Macros:
+%vendor obs://build.opensuse.org/Fedora:12
+%_project Fedora:12
+
+%distribution Fedora:12
+%_project Fedora:12
+
+### from Fedora:12
+%_repository standard
+%opensuse_bs 1
+%fedora_version 12
+%_vendor redhat
+
+#From fedora buildsys-macros package
+%fedora 12
+%dist .fc12
+%fc12 1
+
+%kernel_module_package_buildreqs kernel-devel
+
+%ext_info .gz
+%ext_man .gz
+
+%info_add(:-:) test -x /sbin/install-info -a -f %{?2}%{?!2:%{_infodir}}/%{1}%ext_info && /sbin/install-info --info-dir=%{?2}%{?!2:%{_infodir}} %{?2}%{?!2:%{_infodir}}/%{1}%ext_info \
+%{nil}
+
+%info_del(:-:) test -x /sbin/install-info -a ! -f %{?2}%{?!2:%{_infodir}}/%{1}%ext_info && /sbin/install-info --quiet --delete --info-dir=%{?2}%{?!2:%{_infodir}} %{?2}%{?!2:%{_infodir}}/%{1}%ext_info \
+%{nil}
+
diff --git a/test/baselibs.conf b/test/baselibs.conf
new file mode 100644 (file)
index 0000000..c0e9a7c
--- /dev/null
@@ -0,0 +1 @@
+libdummy1
diff --git a/test/common b/test/common
new file mode 100644 (file)
index 0000000..f21a403
--- /dev/null
@@ -0,0 +1,100 @@
+#!/bin/bash
+# common functions for build script testing
+# Copyright (C) 2009 SUSE LINUX Products GmbH
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# version 2 as published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+
+set -e
+. ${0%/*}/config
+if [ -e ${0%/*}/config.local ]; then
+       . ${0%/*}/config.local
+fi
+
+#if [ ! -e "$build_vm_img" ]; then
+#      sudo dd if=/dev/zero of="$build_vm_img" bs=512 count=0 seek=$((build_vm_image_size*2*1024))
+#fi
+#if [ ! -e "$build_vm_swap" ]; then
+#      sudo dd if=/dev/zero of="$build_vm_swap" bs=512 count=0 seek=$((build_vm_swap_size*2*1024))
+#fi
+
+die()
+{
+       test -z "$1" || echo "$*" >&2
+       exit 1
+}
+
+fail()
+{
+       echo FAILED
+       test -z "$1" || echo "$*"
+       exit 2
+}
+
+skip()
+{
+       echo skipped
+       test -z "$1" || echo "$*"
+       exit 3
+}
+
+build_args=()
+repos=()
+repo()
+{
+       local dir
+       eval dir="\"\$repo_$1\""
+       [ -n "$dir" ] || die "repo $1 not defined, try adding repo_$1=/path/to/repo to config.local"
+       test -d "$dir" || skip
+       repos[${#repos[@]}]="--repository";
+       repos[${#repos[@]}]="$dir";
+}
+
+linux32=
+arch32bit()
+{
+       local hostarch=`uname -m`
+       case "$hostarch" in
+               x86_64) linux32=linux32 ;;
+               *) skip ;;
+       esac
+}
+
+enable_kvm()
+{
+       test -w /dev/kvm || skip "no kvm support"
+       build_args+=(--kvm)
+       [ -z "$build_vm_img" ] || build_args+=("$build_vm_img")
+       [ -z "$build_vm_swap" ] || build_args+=(--swap "$build_vm_swap")
+       [ -z "$build_vm_mem" ] || build_args+=(--memory "$build_vm_mem")
+}
+
+run_build()
+{
+       for i in "$@"; do
+               if [ "$i" = '--kvm' ]; then
+                       enable_kvm
+               else
+                       build_args+=("$i")
+               fi
+       done
+       set -- $linux32 sudo env \
+               /usr/bin/build \
+               --root "${build_root}" \
+               "${repos[@]}" \
+               "${build_args[@]}"
+       echo "$@"
+       "$@" || fail
+       find $build_root/.build.packages/ -type f -name '*.rpm' -print0 | xargs --no-run-if-empty -0 rpm -K || fail
+}
diff --git a/test/config b/test/config
new file mode 100644 (file)
index 0000000..22f38d5
--- /dev/null
@@ -0,0 +1,8 @@
+#!/bin/bash
+
+: ${build_root:=/abuild/build-root}
+#: ${build_vm_img:=/abuild/build-root.img}
+#: ${build_vm_swap:=/abuild/build-root.swap}
+: ${build_vm_mem:=256}
+: ${build_vm_image_size:=500}
+: ${build_vm_swap_size:=100}
diff --git a/test/libdummy1.spec b/test/libdummy1.spec
new file mode 100644 (file)
index 0000000..6748229
--- /dev/null
@@ -0,0 +1,28 @@
+Name:          libdummy1
+Version:       0
+Release:       0
+Group:         None
+Summary:       Dummy
+License:       GPL
+BuildRoot:     %_tmppath/%name-%version-build
+
+%build
+gcc --version
+echo "int dummy(void) {}" | gcc -shared -Wl,-soname=libdummy.so.1 -o libdummy.so.1 -x c -
+%install
+mkdir -p %buildroot%_libdir
+install libdummy.so.1 %buildroot%_libdir
+
+%clean
+rm -rf %buildroot
+
+%description
+target_cpu %_target_cpu
+arch       %_arch
+build_arch %_build_arch
+
+%files
+%defattr(-,root,root)
+%_libdir/libdummy.so.1
+
+%changelog
diff --git a/test/testbuild.11.0-i386 b/test/testbuild.11.0-i386
new file mode 100755 (executable)
index 0000000..97dfd7c
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/bash
+. ${0%/*}/common
+
+arch32bit
+
+repo 11_0_i386
+
+run_build --dist 11.0-i386 \
+       "$@"
diff --git a/test/testbuild.11.0-x86_64 b/test/testbuild.11.0-x86_64
new file mode 100755 (executable)
index 0000000..7e8fea8
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/bash
+. ${0%/*}/common
+
+repo 11_0_x86_64
+
+run_build --dist 11.0-x86_64 \
+       "$@"
diff --git a/test/testbuild.11.1-i386 b/test/testbuild.11.1-i386
new file mode 100755 (executable)
index 0000000..c665992
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/bash
+. ${0%/*}/common
+
+arch32bit
+
+repo 11_1_ftp
+
+run_build --dist 11.1-i386 \
+       "$@"
diff --git a/test/testbuild.11.2-i386 b/test/testbuild.11.2-i386
new file mode 100755 (executable)
index 0000000..ab3f9a2
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/bash
+. ${0%/*}/common
+
+arch32bit
+
+repo 11_2
+
+run_build --dist 11.2-i386 \
+       "$@"
diff --git a/test/testbuild.8.1-i386 b/test/testbuild.8.1-i386
new file mode 100755 (executable)
index 0000000..64b6daa
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/bash
+. ${0%/*}/common
+
+arch32bit
+
+repo 8_1_i386
+
+run_build --dist 8.1-i386 \
+       "$@"
diff --git a/test/testbuild.Fedora11-i386 b/test/testbuild.Fedora11-i386
new file mode 100755 (executable)
index 0000000..d69249c
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/bash
+. ${0%/*}/common
+
+arch32bit
+
+repo fedora11_i386
+
+run_build --dist $PWD/Fedora_11.conf --arch i686 \
+       "$@"
diff --git a/test/testbuild.Fedora11-x86_64 b/test/testbuild.Fedora11-x86_64
new file mode 100755 (executable)
index 0000000..55441c5
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/bash
+. ${0%/*}/common
+
+repo fedora11_x86_64
+
+run_build --dist $PWD/Fedora_11.conf \
+       "$@"
diff --git a/test/testbuild.Fedora12-i386 b/test/testbuild.Fedora12-i386
new file mode 100755 (executable)
index 0000000..e43a055
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/bash
+. ${0%/*}/common
+
+arch32bit
+
+repo fedora12_i386
+
+run_build --dist $PWD/Fedora_12.conf --arch i686 \
+       "$@"
diff --git a/test/testbuild.Fedora12-x86_64 b/test/testbuild.Fedora12-x86_64
new file mode 100755 (executable)
index 0000000..4db3279
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/bash
+. ${0%/*}/common
+
+repo fedora12_x86_64
+
+run_build --dist $PWD/Fedora_12.conf \
+       "$@"
diff --git a/test/testbuild.sles10-i386 b/test/testbuild.sles10-i386
new file mode 100755 (executable)
index 0000000..59108e1
--- /dev/null
@@ -0,0 +1,10 @@
+#!/bin/bash
+. ${0%/*}/common
+
+arch32bit
+
+repo sle10sp2_i386
+repo sle10sp2_sdk_i386
+
+run_build --dist sles10 \
+       "$@"
diff --git a/test/testbuild.sles10-x86_64 b/test/testbuild.sles10-x86_64
new file mode 100755 (executable)
index 0000000..5e29cc9
--- /dev/null
@@ -0,0 +1,8 @@
+#!/bin/bash
+. ${0%/*}/common
+
+repo sle10sp2_x86_64
+repo sle10sp2_sdk_x86_64
+
+run_build --dist sles10 \
+       "$@"
diff --git a/test/testbuild.sles9-i386 b/test/testbuild.sles9-i386
new file mode 100755 (executable)
index 0000000..7e1b7c6
--- /dev/null
@@ -0,0 +1,10 @@
+#!/bin/bash
+. ${0%/*}/common
+
+arch32bit
+
+repo core9_i386
+repo sles9_i386
+
+run_build --dist sles9 \
+       "$@"
diff --git a/unrpm b/unrpm
new file mode 100755 (executable)
index 0000000..e69dafb
--- /dev/null
+++ b/unrpm
@@ -0,0 +1,39 @@
+#!/bin/bash
+
+function Usage () {
+    echo "Usage: $(basename $0) [-vq] rpm-files...";
+    echo "Unpack rpm files in current directory.";
+    exit 1
+}
+
+CPIO_OPTS="--extract --unconditional --preserve-modification-time --make-directories"
+
+FILES=""
+VERBOSE=false
+QUIET=false
+
+for i in $* ; do
+    case "$i" in
+      -v)
+       VERBOSE=true
+       ;;
+      -q)
+       QUIET=true
+       ;;
+      *)
+       FILES="$FILES $i"
+       ;;
+    esac
+done
+
+test "$VERBOSE" = "true" && CPIO_OPTS="$CPIO_OPTS --verbose"
+test "$QUIET" = "true" && CPIO_OPTS="$CPIO_OPTS --quiet"
+
+test -z "$FILES" && Usage
+
+for f in $FILES; do
+    if test "$QUIET" = "false" ; then
+       echo -ne "$f:\t"
+    fi
+    rpm2cpio $f | cpio ${CPIO_OPTS}
+done
diff --git a/vc b/vc
new file mode 100755 (executable)
index 0000000..0bf8018
--- /dev/null
+++ b/vc
@@ -0,0 +1,152 @@
+#!/bin/bash
+# use this script to edit *.changes files
+#
+# based on changelog edit script from xqf
+#
+# Copyright (C) 2002 Ludwig Nussel
+# Copyright (C) 2009 SUSE Linux Products GmbH, Nuernberg, Germany.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
+
+shopt -s nullglob
+
+if [ -z "$mailaddr" ]; then
+       domain=`dnsdomainname`
+       [ -z "$domain" ] && domain=localhost
+       mailaddr="$USER@$domain"
+fi
+
+EDITOR=${EDITOR:-vim}
+date=`LC_ALL=POSIX TZ=UTC date`
+
+if ! which mktemp > /dev/null 2>&1; then
+       echo "mktemp is required for this script to work"
+       exit 1
+fi
+
+while [ -n "$1" ]; do
+       case "$1" in
+               -m)
+                       if [ $just_edit ]; then
+                               echo "You cannot use -m and -e together!"
+                               exit 1
+                       fi
+                       message="$2"
+                       shift 2
+                       ;;
+               -e)
+                       if [ -n "${message}" ]; then
+                               echo "You cannot use -m and -e together!"
+                               exit 1
+                       fi
+                       just_edit=true
+                       shift 1
+                       ;;
+               --help)
+                       echo "Usage: $0 [-m MESSAGE|-e] [filename[.changes]|path [file_with_comment]]"
+                       echo
+                       echo "Will use '$mailaddr' for changelog entries"
+                       echo
+                       echo "Options:"
+                       echo "    -m MESSAGE    add MESSAGE to changes (not open an editor)"
+                       echo "    -e            just open changes (cannot be used with -m)"
+                       exit 0
+                       ;;
+               *) break ;;
+       esac
+done
+
+changelog="$1"
+content="$2"
+pkgpath=
+if [ -n "$changelog" -a -d "$changelog" ]; then
+       pkgpath="$changelog/"
+       changelog=''
+fi
+
+if [ -n "$changelog" ]; then
+       if [ "${changelog%.changes}" = "$changelog" ]; then
+               changelog="$changelog.changes"
+       fi
+else
+       changelog=($pkgpath*.changes)
+       if [ "${#changelog[@]}" -eq 1 ]; then
+               changelog="$changelog"
+       elif [ -n "$changelog" ]; then
+               echo "Choose one of ${changelog[@]}"
+               exit 1
+       fi
+fi
+
+if [ -z "$changelog" ]; then
+       changelog=($pkgpath*.spec)
+       if [ "${#changelog[@]}" -eq 1 ]; then
+               changelog=${changelog%.spec}.changes
+       elif [ -n "$changelog" ]; then
+               echo "Choose one of ${changelog[@]}"
+               exit 1
+       fi
+fi
+
+if [ -z "$changelog" ]; then
+       echo "no .changes and no .spec file found"
+       exit 1
+fi
+
+if [ ! -e "$changelog" ]; then
+       touch $changelog
+fi
+
+tmpfile=`mktemp -q $changelog.vctmp.XXXXXX`
+if [ $? -ne 0 ]; then
+       echo "$0: Can't create temp file, exiting..."
+       exit 1
+fi
+trap "rm -f \"$tmpfile\"" EXIT
+
+set +e
+
+{
+       if [ ! $just_edit ]; then
+               echo "-------------------------------------------------------------------"
+               echo "$date - $mailaddr"
+               echo
+       fi
+       if [ -n "$message" ]; then
+               echo "- $message"
+               echo
+       elif [ -n "$content" ]; then
+               cat "$content"
+               echo
+       elif [ ! $just_edit ]; then
+               echo "- "
+               echo
+       fi
+       cat $changelog
+} >> "$tmpfile"
+
+if [ -z "$message" ]; then
+       set -- `md5sum "$tmpfile"`
+       chksum="$1"
+       $EDITOR +4 "$tmpfile"
+       set -- `md5sum "$tmpfile"`
+       if [ -z "$content" -a "$chksum" == "$1" ]; then
+               echo "no changes made"
+               exit 0
+       fi
+fi
+mode=`stat -c "%a" "$changelog"`
+mv "$tmpfile" "$changelog"
+chmod $mode "$changelog"