--- /dev/null
+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;
--- /dev/null
+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;
--- /dev/null
+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/</</g;
+ s/>/>/g;
+ s/&/&/g;
+ s/'/\'/g;
+ s/"/\"/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;
--- /dev/null
+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;
--- /dev/null
+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;
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+
+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'.
--- /dev/null
+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$
--- /dev/null
+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/.*
--- /dev/null
+#!/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"
--- /dev/null
+.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
--- /dev/null
+#!/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
+}
--- /dev/null
+#!/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);
--- /dev/null
+#!/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
+}
--- /dev/null
+#!/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;
+}
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+%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
--- /dev/null
+%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
--- /dev/null
+%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
--- /dev/null
+%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
--- /dev/null
+%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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+sl11.1.conf
\ No newline at end of file
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+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
--- /dev/null
+#!/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;
+# }
+#}
--- /dev/null
+#!/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{$_};
+ }
+}
--- /dev/null
+#!/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 });
+}
--- /dev/null
+#!/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);
--- /dev/null
+#! /bin/bash
+
+if test $# -ne 2; then
+ exit 1
+fi
+
+bz="$1"
+tar="$2"
+
+bzcat "$bz" | gzip -f - >"$tar" || exit 1
+exit 0
--- /dev/null
+#! /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
--- /dev/null
+#!/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
--- /dev/null
+#!/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);
--- /dev/null
+#!/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;
+}
--- /dev/null
+#!/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";
+ }
+}
--- /dev/null
+#!/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'};
--- /dev/null
+#!/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);
--- /dev/null
+#!/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";
+}
--- /dev/null
+#!/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
--- /dev/null
+#!/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
--- /dev/null
+#!/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;
--- /dev/null
+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
--- /dev/null
+#!/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);
+}
--- /dev/null
+#!/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;
--- /dev/null
+#!/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";
--- /dev/null
+PKG_NAME := build
+SPECFILE = $(addsuffix .spec, $(PKG_NAME))
+YAMLFILE = $(addsuffix .yaml, $(PKG_NAME))
+
+include /usr/share/packaging-tools/Makefile.common
+
--- /dev/null
+* 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
--- /dev/null
+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)
--- /dev/null
+<manifest>
+ <request>
+ <domain name="_"/>
+ </request>
+</manifest>
--- /dev/null
+#
+# 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*
--- /dev/null
+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
+
--- /dev/null
+%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
--- /dev/null
+#!/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");
+}
--- /dev/null
+#!/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";
+}
--- /dev/null
+#!/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);
--- /dev/null
+#!/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";
+ }
+ }
+ }
+}
--- /dev/null
+#!/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);
--- /dev/null
+#!/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");
--- /dev/null
+%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}
+
--- /dev/null
+%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}
+
--- /dev/null
+#!/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
+}
--- /dev/null
+#!/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}
--- /dev/null
+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
--- /dev/null
+#!/bin/bash
+. ${0%/*}/common
+
+arch32bit
+
+repo 11_0_i386
+
+run_build --dist 11.0-i386 \
+ "$@"
--- /dev/null
+#!/bin/bash
+. ${0%/*}/common
+
+repo 11_0_x86_64
+
+run_build --dist 11.0-x86_64 \
+ "$@"
--- /dev/null
+#!/bin/bash
+. ${0%/*}/common
+
+arch32bit
+
+repo 11_1_ftp
+
+run_build --dist 11.1-i386 \
+ "$@"
--- /dev/null
+#!/bin/bash
+. ${0%/*}/common
+
+arch32bit
+
+repo 11_2
+
+run_build --dist 11.2-i386 \
+ "$@"
--- /dev/null
+#!/bin/bash
+. ${0%/*}/common
+
+arch32bit
+
+repo 8_1_i386
+
+run_build --dist 8.1-i386 \
+ "$@"
--- /dev/null
+#!/bin/bash
+. ${0%/*}/common
+
+arch32bit
+
+repo fedora11_i386
+
+run_build --dist $PWD/Fedora_11.conf --arch i686 \
+ "$@"
--- /dev/null
+#!/bin/bash
+. ${0%/*}/common
+
+repo fedora11_x86_64
+
+run_build --dist $PWD/Fedora_11.conf \
+ "$@"
--- /dev/null
+#!/bin/bash
+. ${0%/*}/common
+
+arch32bit
+
+repo fedora12_i386
+
+run_build --dist $PWD/Fedora_12.conf --arch i686 \
+ "$@"
--- /dev/null
+#!/bin/bash
+. ${0%/*}/common
+
+repo fedora12_x86_64
+
+run_build --dist $PWD/Fedora_12.conf \
+ "$@"
--- /dev/null
+#!/bin/bash
+. ${0%/*}/common
+
+arch32bit
+
+repo sle10sp2_i386
+repo sle10sp2_sdk_i386
+
+run_build --dist sles10 \
+ "$@"
--- /dev/null
+#!/bin/bash
+. ${0%/*}/common
+
+repo sle10sp2_x86_64
+repo sle10sp2_sdk_x86_64
+
+run_build --dist sles10 \
+ "$@"
--- /dev/null
+#!/bin/bash
+. ${0%/*}/common
+
+arch32bit
+
+repo core9_i386
+repo sles9_i386
+
+run_build --dist sles9 \
+ "$@"
--- /dev/null
+#!/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
--- /dev/null
+#!/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"