diff --git a/Build.pm b/Build.pm new file mode 100644 index 000000000..bc33e07da --- /dev/null +++ b/Build.pm @@ -0,0 +1,981 @@ + +package Build; + +our $expand_dbg; + +use strict; + +my $std_macros = q{ +%define ix86 i386 i486 i586 i686 athlon +%define arm armv4l armv4b armv5l armv5b armv5tel armv5teb +%define arml armv4l armv5l armv5tel +%define armb armv4b armv5b armv5teb +}; + +sub unify { + my %h = map {$_ => 1} @_; + return grep(delete($h{$_}), @_); +} + +sub read_config { + my ($arch, $cfile) = @_; + return undef unless !defined($cfile) || -e $cfile; + my @macros = split("\n", $std_macros); + push @macros, "%define _target_cpu $arch"; + push @macros, "%define _target_os linux"; + my $config = {'macros' => \@macros}; + my (@spec); + read_spec($config, $cfile, \@spec) if $cfile; + $config->{'preinstall'} = []; + $config->{'required'} = []; + $config->{'support'} = []; + $config->{'keep'} = []; + $config->{'prefer'} = []; + $config->{'ignore'} = []; + $config->{'conflict'} = []; + $config->{'substitute'} = {}; + my $inmacro = 0; + for my $l (@spec) { + if ($inmacro) { + push @macros, ref($l) ? $l->[0] : $l; + next; + } + $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:') { + $inmacro = 1; + next; + } + if ($l0 eq 'preinstall:' || $l0 eq 'required:' || $l0 eq 'support:' || $l0 eq 'keep:' || $l0 eq 'prefer:' || $l0 eq 'ignore:' || $l0 eq 'conflict:') { + push @{$config->{substr($l0, 0, -1)}}, @l; + } elsif ($l0 eq 'substitute:') { + next unless @l; + $ll = shift @l; + push @{$config->{'substitute'}->{$ll}}, @l; + } elsif ($l0 !~ /^[#%]/) { + warn("unknown keyword in config: $l0\n"); + } + } + for my $l (qw{preinstall required support keep}) { + $config->{$l} = [ unify(@{$config->{$l}}) ]; + } + for my $l (keys %{$config->{'substitute'}}) { + $config->{'substitute'}->{$l} = [ unify(@{$config->{'substitute'}->{$l}}) ]; + } + $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; + $config->{'type'} = (grep {$_ eq 'rpm'} @{$config->{'preinstall'} || []}) ? 'spec' : 'dsc'; + 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}; + if ($subst->{$d}) { + unshift @deps, @{$subst->{$d}}; + push @res, $d if grep {$_ eq $d} @{$subst->{$d}}; + } else { + push @res, $d; + } + $done{$d} = 1; + } + return @res; +} + +sub get_build { + my ($config, $subpacks, @deps) = @_; + my @ndeps = grep {/^-/} @deps; + my %keep = map {$_ => 1} $config->{'keep'}; + 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); + return @deps; +} + +sub get_deps { + my ($config, $subpacks, @deps) = @_; + my @ndeps = grep {/^-/} @deps; + my %keep = map {$_ => 1} $config->{'keep'}; + 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); + 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 readrpmdeps { + my ($config, $pkgidp, @depfiles) = @_; + + my %provides = (); + my %requires = (); + local *F; + my %prov; + for my $depfile (@depfiles) { + if (ref($depfile) eq 'HASH') { + for my $rr (keys %$depfile) { + $prov{$rr} = $depfile->{$rr}->{'provides'}; + $requires{$rr} = $depfile->{$rr}->{'requires'}; + } + next; + } + open(F, "<$depfile") || die("$depfile: $!\n"); + while() { + my @s = split(' ', $_); + my $s = shift @s; + my @ss; + while (@s) { + if ($s[0] =~ /^\//) { + shift @s; + next; + } + if ($s[0] =~ /^rpmlib\(/) { + shift @s; + shift @s; + shift @s; + next; + } + push @ss, shift @s; + if (@s && $s[0] =~ /^[<=>]/) { + shift @s; + shift @s; + } + } + my %ss; + @ss = grep {!$ss{$_}++} @ss; + if ($s =~ s/^P:(.*):$/$1/) { + my $pkgid = $s; + $s =~ s/-[^-]+-[^-]+-[^-]+$//; + $prov{$s} = \@ss; + $pkgidp->{$s} = $pkgid if $pkgidp; + } elsif ($s =~ s/^R:(.*):$/$1/) { + my $pkgid = $s; + $s =~ s/-[^-]+-[^-]+-[^-]+$//; + $requires{$s} = \@ss; + $pkgidp->{$s} = $pkgid if $pkgidp; + } + } + close F; + } + for my $p (keys %prov) { + push @{$provides{$_}}, $p for unify(@{$prov{$p}}); + } + $config->{'providesh'} = \%provides; + $config->{'requiresh'} = \%requires; +} + +sub forgetrpmdeps { + my $config; + delete $config->{'providesh'}; + delete $config->{'requiresh'}; +} + +sub expand { + my ($config, @p) = @_; + + my $conflicts = $config->{'conflicth'}; + my $prefer = $config->{'preferh'}; + my $ignore = $config->{'ignoreh'}; + + my $provides = $config->{'providesh'}; + my $requires = $config->{'requiresh'}; + + my %xignore = map {substr($_, 1) => 1} grep {/^-/} @p; + @p = grep {!/^-/} @p; + + my %p = map {$_ => 1} grep {$requires->{$_}} @p; + + my %aconflicts; + for my $p (keys %p) { + $aconflicts{$_} = 1 for @{$conflicts->{$p} || []}; + } + + while (@p) { + my $didsomething = 0; + my @error = (); + my @uerror = (); + my @usolve = (); + for my $p (splice @p) { + for my $r (@{$requires->{$p} || [$p]}) { + next if $ignore->{"$p:$r"} || $xignore{"$p:$r"}; + next if $ignore->{$r} || $xignore{$r}; + my @q = @{$provides->{$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) { + return undef, "nothing provides $r"; + } else { + return undef, "nothing provides $r needed by $p"; + } + } + if (@q > 1 && grep {$conflicts->{$_}} @q) { + # delay this one as some conflict later on might + # clear things up + push @p, $p unless @p && $p[-1] eq $p; + print "undecided about $p:$r: @q\n" if $expand_dbg; + if ($r ne $p) { + push @uerror, "have choice for $r needed by $p: @q"; + } else { + push @uerror, "have choice for $r: @q"; + } + push @usolve, @q; + push @usolve, map {"$p:$_"} @q; + 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) { + if ($r ne $p) { + push @error, "have choice for $r needed by $p: @q"; + } else { + push @error, "have choice for $r: @q"; + } + push @p, $p unless @p && $p[-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]} || []}; + $didsomething = 1; + @error = (); + } + } + if (!$didsomething && @error) { + return undef, @error; + } + if (!$didsomething && @usolve) { + # only conflicts left + print "looking at conflicts: @usolve\n" if $expand_dbg; + @usolve = grep {$prefer->{$_}} @usolve; + if (@usolve > 1) { + my %usolve = map {$_ => 1} @usolve; + @usolve = (grep {$usolve{$_}} @{$config->{'prefer'}})[0]; + } + if (@usolve) { + $usolve[0] =~ s/:.*//; + push @p, $usolve[0]; + print "added $usolve[0]\n" if $expand_dbg; + $p{$usolve[0]} = 1; + $aconflicts{$_} = 1 for @{$conflicts->{$usolve[0]} || []}; + next; + } + return undef, @uerror; + } + } + return 1, (sort keys %p); +} + +sub add_all_providers { + my ($config, @p) = @_; + my $provides = $config->{'providesh'}; + my $requires = $config->{'requiresh'}; + my %a; + for my $p (@p) { + for my $r (@{$requires->{$p} || [$p]}) { + $a{$_} = 1 for @{$provides->{$r} || []}; + } + } + push @p, keys %a; + return unify(@p); +} + +########################################################################### + +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 = !$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 &&= $v2; + } elsif ($expr =~ /^\|\|/) { + return ($v, $expr) if $lev > 1; + ($v2, $expr) = expr(substr($expr, 2), 1); + return undef unless defined $v2; + $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 =~ /^ 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 read_spec { + my ($config, $specfile, $xspec) = @_; + + my $packname; + my $packvers; + my @subpacks; + my @packdeps; + my $hasnfb; + my %macros; + + 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"); + return (undef, "open: $!", undef); + } + my @macros = @{$config->{'macros'}}; + my $skip = 0; + my $main_preamble = 1; + my $inspec = 0; + while (1) { + my $line; + if (@macros) { + $line = pop @macros; + } elsif ($specdata) { + $inspec = 1; + last unless @$specdata; + $line = shift @$specdata; + } else { + $inspec = 1; + $line = ; + last unless defined $line; + chomp $line; + } + push @$xspec, $line if $inspec && $xspec; + if ($line =~ /^#\s*neededforbuild\s*(\S.*)$/) { + next if $hasnfb; + $hasnfb = $1; + next; + } + if ($line =~ /^\s*#/) { + next unless $line =~ /^#!BuildIgnore/; + } + my $expandedline = ''; + if (!$skip) { + my $tries = 0; + while ($line =~ /^(.*?)%(\{([^\}]+)\}|[0-9a-zA-Z_]+|%|\()(.*?)$/) { + if ($tries++ > 1000) { + $line = 'MACRO'; + last; + } + $expandedline .= $1; + $line = $4; + my $macname = defined($3) ? $3 : $2; + my $mactest = 0; + if ($macname =~ /^\!\?/ || $macname =~ /^\?\!/) { + $mactest = -1; + } elsif ($macname =~ /^\?/) { + $mactest = 1; + } + $macname =~ s/^[\!\?]+//; + my $macalt; + ($macname, $macalt) = split(':', $macname, 2); + if ($macname eq '%') { + $expandedline .= '%'; + next; + } elsif ($macname eq '(') { + $line = 'MACRO'; + last; + } elsif ($macname eq 'define') { + 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 (exists($macros{$macname})) { + if (!defined($macros{$macname})) { + $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 .= "%$2"; + } + } + } + $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; + next; + } + + if ($line =~ /^\s*%ifarch(.*)$/) { + my $arch = $macros{'_target_cpu'} || 'unknown'; + my @archs = grep {$_ eq $arch} split(/\s+/, $1); + $skip = 1 if !@archs; + next; + } + if ($line =~ /^\s*%ifnarch(.*)$/) { + my $arch = $macros{'_target_cpu'} || 'unknown'; + my @archs = grep {$_ eq $arch} split(/\s+/, $1); + $skip = 1 if @archs; + next; + } + if ($line =~ /^\s*%ifos(.*)$/) { + my $os = $macros{'_target_os'} || 'unknown'; + my @oss = grep {$_ eq $os} split(/\s+/, $1); + $skip = 1 if !@oss; + next; + } + if ($line =~ /^\s*%ifnos(.*)$/) { + my $os = $macros{'_target_os'} || 'unknown'; + my @oss = grep {$_ eq $os} split(/\s+/, $1); + $skip = 1 if @oss; + next; + } + if ($line =~ /^\s*%if(.*)$/) { + my ($v, $r) = expr($1); + $v = 0 if $v && $v eq '\"\"'; + $skip = 1 unless $v; + next; + } + if ($main_preamble && ($line =~ /^Name:\s*(\S+)/i)) { + $packname = $1; + $macros{'name'} = $packname; + } + if ($main_preamble && ($line =~ /^Version:\s*(\S+)/i)) { + $packvers = $1; + $macros{'version'} = $packvers; + } + if ($main_preamble && ($line =~ /^(BuildRequires|BuildConflicts|\#\!BuildIgnore):\s*(\S.*)$/i)) { + my $what = $1; + my $deps = $2; + my @deps = $deps =~ /([^\s\[\(,]+)(\s+[<=>]+\s+[^\s\[,]+)?(\s+\[[^\]]+\])?[\s,]*/g; + if (defined($hasnfb)) { + next unless $xspec; + if ((grep {$_ eq 'glibc' || $_ eq 'rpm' || $_ eq 'gcc' || $_ eq 'bash'} @deps) > 2) { + # ignore old generetad BuildRequire lines. + $xspec->[-1] = [ $xspec->[-1], undef ]; + } + next; + } + 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; + } + push @ndeps, $pack; + } + $replace = 1 if grep {/^-/} @ndeps; + if ($what ne 'BuildRequires') { + push @packdeps, map {"-$_"} @ndeps; + next; + } + push @packdeps, @ndeps; + next unless $xspec && $inspec; + if ($replace) { + my @cndeps = grep {!/^-/} @ndeps; + if (@cndeps) { + $xspec->[-1] = [ $xspec->[-1], "BuildRequires: ".join(' ', @cndeps) ]; + } else { + $xspec->[-1] = [ $xspec->[-1], '']; + } + } + next; + } + + if ($line =~ /^\s*%package\s+(-n\s+)?(\S+)/) { + if ($1) { + push @subpacks, $2; + } else { + push @subpacks, "$packname-$2" if defined $packname; + } + } + + if ($line =~ /^\s*%(package|prep|build|install|check|clean|preun|postun|pretrans|posttrans|pre|post|files|changelog|description|triggerpostun|triggerun|triggerin|trigger|verifyscript)/) { + $main_preamble = 0; + } + } + close SPEC unless ref $specfile; + if (defined($hasnfb)) { + if (!@packdeps) { + @packdeps = split(' ', $hasnfb); + } + } + unshift @subpacks, $packname; + return ($packname, $packvers, \@subpacks, @packdeps); +} + +########################################################################### + +sub read_dsc { + my ($bconf, $fn) = @_; + local *F; + open(F, '<', $fn) || return (); + my @control = ; + 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') { + my @d = split(/,\s*/, $data); + s/\s.*// for @d; + push @deps, @d; + } elsif ($tag eq 'BUILD-CONFLICTS' || $tag eq 'BUILD-IGNORE') { + my @d = split(/,\s*/, $data); + s/\s.*// for @d; + push @deps, map {"-$_"} @d; + } + } + return ($name, $version, undef, @deps); +} + +########################################################################### + +sub rpmq { + my $rpm = shift; + my @stags = @_; + my %stags = map {0+$_ => $_} @stags; + + my ($magic, $sigtype, $headmagic, $cnt, $cntdata, $lead, $head, $index, $data, $tag, $type, $offset, $count); + + local *RPM; + 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; + 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 (); + } + 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; + my %res = (); + 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 (); + } + } + } + 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 $have_zlib; +eval { + require Compress::Zlib; + $have_zlib = 1; +}; + +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 *F; + if (ref($fn) eq 'GLOB') { + *F = $fn; + } elsif (!open(F, '<', $fn)) { + warn("$fn: $!\n"); + return (); + } + my $data = ''; + sysread(F, $data, 4096); + if (length($data) < 8+60) { + warn("$fn: not a debian package\n"); + close F unless ref $fn; + return (); + } + if (substr($data, 0, 8+16) ne "!\ndebian-binary ") { + close F 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(F, $data, $r < 4096 ? 4096 : $r, length($data)) || 0) < $r) { + warn("$fn: unexpected EOF\n"); + close F 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 F unless ref $fn; + return (); + } + $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("$fn: unexpected EOF\n"); + close F unless ref $fn; + return (); + } + } + close F; + $data = substr($data, 60, $len); + 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; + } + return %res; +} + +1; diff --git a/README b/README new file mode 100644 index 000000000..da404f4df --- /dev/null +++ b/README @@ -0,0 +1,21 @@ + +This script is used for building SuSE Linux RPMs in +a clean and safe chroot'ed build environment. + +At first you need to copy your SuSE Linux CDs into a +path reachable by the build script, for example /home/suse-8.2-i386. + +If you have a DVD Drive and the SuSE Linux DVD, you can mount it +and use this as the source for the RPMs. + +To build an RPM, change into the directory with the sources +and the SPEC file. Then start the build script: +env BUILD_RPMS=/home/suse-8.2-i386/suse build + +If this was successful you can find the binary and source RPMs below +/var/tmp/build-root/usr/src/packages/ + +Note: Depending on which package you want to build, you'll need +a few hundred megabytes for the build in /var/tmp/build-root. + +For more information on using build, see 'man build'. diff --git a/baselibs.conf b/baselibs.conf new file mode 100644 index 000000000..72dc7ceca --- /dev/null +++ b/baselibs.conf @@ -0,0 +1,629 @@ +# do not add a package without a comment + +# +# core runtime packages +# +glibc + post "-p "/sbin/ldconfig -n /%_lib"" + targettype x86 +/etc/ld.so.conf + targettype x86 "/lib/ld-linux.so.2 -> /lib/ld-linux.so.2" + targettype x86 obsoletes "baselibs-x86" + prereq -glibc-x86 + +glibc-locale + +/usr/lib(64)?/gconv/gconv-modules + targettype x86 -/usr/lib(64)?/gconv/gconv-modules +readline +ncurses + targettype x86 provides "baselibs-x86:/lib/libncurses.so.5" + +targettype x86 package bash + +^/bin/bash$ + +^/bin/sh$ + prereq -glibc-x86 + +targettype x86 package coreutils + +^/bin/uname$ + prereq -glibc-x86 + +# +# core development packages +# +glibc-devel + +^/usr/include/gnu/stubs-.*\.h$ +glibc-profile +gdb + +/usr/bin/gdbserver -> /usr/bin/gdbserver + +/usr/bin/gdb -> /usr/bin/gdb + # kill package for i586 32bit + targetarch x86_64 block! + prereq -glibc-x86 +strace + +/usr/bin/strace-graph -> /usr/bin/strace-graph + +/usr/bin/strace -> /usr/bin/strace + prereq -glibc-x86 +ltrace + +/usr/bin/ltrace -> /usr/bin/ltrace +# +# essential devel packages +# +readline-devel +ncurses-devel + +# +# gcc devel and runtime libs +libgcj + # see bugzilla #144113 + requires "libgcj" + +/usr/bin/grmiregistry -> /usr/bin/grmiregistry + +/usr/bin/gij -> /usr/bin/gij +libgcj-devel +targettype x86 package libada +targettype x86 package libgcc +targettype x86 package libobjc +targettype x86 package libstdc++ +targettype x86 package compat-libstdc++ +# for gcc4 +gmp + +java-1_4_2-gcj-compat + +.*/(java|rmiregistry|rt\.jar)$ + provides "jre-" + requires "libgcj-" + +# +# libs for old binaries +# +compat + targettype x86 provides "baselibs-x86:/usr/lib/libg++-1.so.2" +# +compat-openssl097g + +# +# postgres requirements: +# +zlib + targettype x86 provides "baselibs-x86:/lib/libz.so.1" +zlib-devel +tcl +perl +python + +# +# mysql requirements: +# +tcpd + +# +# python requirements: +# +bzip2 + targettype x86 provides "baselibs-x86:/usr/lib/libbz2.so.1" +db +gdbm +# +# perl requirements: +# +bzip2 +db +gdbm +gdbm-devel + +# +# heimdal requirements +# +db42 +# +# wine & wine-devel requirements: +# +xorg-x11-Mesa + obsoletes "XFree86-Mesa-" + provides "XFree86-Mesa-" +xorg-x11-Mesa-devel + obsoletes "XFree86-Mesa-devel-" + provides "XFree86-Mesa-devel-" +Mesa + obsoletes "XFree86-Mesa- xorg-x11-Mesa-" + provides "XFree86-Mesa- xorg-x11-Mesa-" +Mesa-devel + obsoletes "XFree86-Mesa-devel- xorg-x11-Mesa-devel-" + provides "XFree86-Mesa-devel- xorg-x11-Mesa-devel-" +xorg-x11-libs + obsoletes "XFree86-compat-libs- XFree86-libs-" + provides "XFree86-compat-libs- XFree86-libs-" + targettype x86 provides "baselibs-x86:/usr/X11R6/lib/libX11.so.6" +xorg-x11-devel + obsoletes "XFree86-devel-" + provides "XFree86-devel-" + requires -xorg-x11- + requires "xorg-x11-libs- = " +libdrm +libdrm-devel +alsa +capi4linux + -/pppd +freeglut +freeglut-devel +libjpeg +libjpeg-devel +liblcms +liblcms-devel +giflib + obsoletes "libungif-" + provides "libungif-" + targettype 32bit provides "libungif.so.4" + targettype 64bit provides "libungif.so.4()(64bit)" +giflib-devel +sane +openssl +openssl-devel + +# +# wine devel requirements +# +bison +flex +gcc +libsmbclient +samba-libs + +# +# libsmbclient requirements: +# +#kerberos implementation switched to krb5 currently +#heimdal-lib +#heimdal-devel + +krb5 + obsoletes "heimdal-lib-" + provides "heimdal-lib-" +krb5-devel + +e2fsprogs +e2fsprogs-devel +openldap2-client +openldap2-devel + requires -openldap2- + requires "openldap2-client- = " + +# +# Needed by MarbleBlast (32bit game on amd64) +# +SDL +SDL-devel + +# Needed by SDL +# +aalib +aalib-devel + +# +# Needed by aalib +# +slang +slang-devel +gpm + + +# +# Needed by openldap2-client +# +cyrus-sasl +cyrus-sasl-devel + +# +# xorg-x11-libs requirements: +# +expat +fontconfig +fontconfig-devel +freetype2 +freetype2-devel + +# +# kdebase3-nsplugin requirements: +# +openmotif-libs +openmotif-devel + requires -openmotif- + requires "openmotif-libs- = " +xorg-x11-libs +kdelibs3 +kdelibs3-arts +glibc +libart_lgpl +qt3 +qt3-devel +fontconfig +freetype2 +expat +libpng +libpng-devel +zlib +fam +cups-libs + +# +# qt3 requirements: +# +libmng + +# +# kdelibs3 requirements: +# +arts +aspell +audiofile +glib2 +libjasper +libogg +libtiff +libtiff-devel +libvorbis +libxml2 +libxml2-devel +libxslt +libxslt-devel +mad +pcre +libidn +jack +OpenEXR + +# +# lkcdutils-netdump-server requirements: +# +popt +glib + +# +# only for SLES +#laus +# +/sbin/auditd -> /sbin/auditd +# +/usr/sbin/aucat -> /usr/sbin/aucat +# +/usr/sbin/audbin -> /usr/sbin/audbin +# +/usr/sbin/aurun64 -> /usr/sbin/aurun +#laus-devel + +# +# http://bugzilla.suse.de/show_bug.cgi?id=34512 +# openal requirements: +# +openal + +# +# eclipse +# +libbonobo +libidl +gnome-vfs2 +gconf2 +orbit2 + +# +# openoffice +# +thinkeramik +thinkeramik-style +startup-notification +evolution-data-server +glitz +libpixman +cairo +curl +neon +libsndfile +mono-core + +/usr/bin/mono -> /usr/bin/mono + +# +# evolution-data-server +# +libgcrypt +libgcrypt-devel +gnutls +gnutls-devel +libgpg-error +libgpg-error-devel +libsoup +libsoup-devel + +# +# gnutls +# +libopencdk +libopencdk-devel +lzo +lzo-devel + + +# MainActor +libavc1394 +libavc1394-devel +# + +# customers with 64bit databases on biarch systems... +libaio +libaio-devel +# http://bugzilla.suse.de/show_bug.cgi?id=41276 +libcap +# also db access libraries and development libs. +unixODBC +unixODBC-devel + requires "unixODBC- = " + +# +# Dinge wo keiner so rischtisch weiss wers braucht... +# +parted +libusb +DirectFB +atk +bind-libs + obsoletes "bind-utils-" + provides "bind-utils-" +binutils +cdparanoia +cracklib +db1 +db40 +esound +file +flac +gettext +glib +glib-devel +gnome-libs +gtk +gtk2 + +/opt/gnome/bin/gdk-pixbuf-query-loaders(-64)? + +/opt/gnome/bin/gtk-query-immodules-2.0(-64)? + prereq "/usr/bin/touch" + post "touch var/adm/SuSEconfig/run-gtk" +imlib +libacl +libattr +libica +libmikmod +libmpeg3 +libtool +libxcrypt +libxml +nss_ldap +orbit + +pango + +/etc/opt/gnome/pango/pango.modules + +/opt/gnome/bin/pango-querymodules(-64)? + prereq "/usr/bin/touch" + post "touch var/adm/SuSEconfig/run-pango" +popt +popt-devel +postgresql-libs +resmgr +#rpm +speex +taglib +termcap + targettype x86 provides "baselibs-x86:/usr/lib/libtermcap.so.2" +tk +utempter +xaw3d +xmms-lib + obsoletes "xmms-" + provides "xmms-" +pciutils +pciutils-devel + requires -pciutils- +libglade +# +# xine-lib +# +xine-lib +libtheora +# +# kraxel +# +libexif + +# +# mono +# +libicu +libicu-devel + +# +# gtk-sharp +# +libgnomeui +libbonoboui +libglade2 +libgnome +gnome-keyring +libgnomecanvas +libgnomeprint +libgnomeprintui +libgnomecups +gnome-themes +gtk-qt-engine +gtk2-engines +librsvg +libgsf +libcroco +# +# iscan +# +libgphoto2 +libieee1284 + +# +# kdebase3 requirements: +# +kdebase3 +kdebase3-khotkeys +libraw1394 +libraw1394-devel + +# +# pam-modules requirements: +# +pam +pam-modules +pam_ldap +pam_krb5 +libselinux +libselinux-devel + +# +# PowerDVD +# +gdk-pixbuf + +# +# PHP4 +# +php4 + +/usr/lib(64)?/php/sce_install + +# used by kdebase3 +dbus-1 +dbus-1-qt3 +hal + +# other dbus +dbus-1-qt +qt + +# used by kdelibs3 +mDNSResponder + +# used by DirectFB +sysfsutils + +# used by various +db42 + +# used by xine-lib +libcdio +libcddb +vcdimager + +# used by kdebase3 +powersave-libs +cpufrequtils + +# novell-ifolder +compat-curl2 + +# nautilus-ifolder +eel +gail +nautilus +newt +sqlite2 +gnome-desktop +gnome-menus +libbeagle + +# build tcl browser plugin +tclplug +# useful for media players +lirc +# for gambas +mysql-shared +SDL_mixer +SDL_mixer-devel +# for krb5 et al +libcom_err +# for mozilla et al +mozilla-nspr +mozilla-nss +# for ltrace +libelf +# for scilab +f2c +# for arcad_eval +libnetpbm +# for banshee +nautilus-cd-burner +gstreamer +gstreamer-plugins +dbus-1-glib +sqlite +libipoddevice +libgtop +gtk-sharp +gtk-sharp2 +gnome-panel +gnome-panel-nld +libwnck +# +# x86 stuff +# +freetype +itcl +libgtkhtml +scim +openmotif21-libs +# Mplayer +libdv +xvid +lame +fribidi +# edirectory +openslp +# qa team +ltp +reaim +# ibm request +libhugetlbfs + +/usr/lib(64)?/libhugetlbfs + +numactl +# pam module included +CASA +# ppc 64bit stuff +arch ppc64 package bind-devel + requires -bind- +arch ppc64 package boost +arch ppc64 package boost-devel +arch ppc64 package libacl-devel +arch ppc64 package libapr-util1 +arch ppc64 package libapr-util1-devel +arch ppc64 package libapr1 +arch ppc64 package libapr1-devel +arch ppc64 package libattr-devel +arch ppc64 package libnotify +arch ppc64 package libnotify-devel +arch ppc64 package recode +arch ppc64 package recode-devel +arch ppc64 package blocxx +arch ppc64 package blocxx-devel +arch ppc64 package gmp-devel +arch ppc64 package gtk2-devel +arch ppc64 package libzio +arch ppc64 package net-snmp +arch ppc64 package net-snmp-devel +arch ppc64 package qt-devel +arch ppc64 package qt-qt3support +arch ppc64 package qt-sql +arch ppc64 package qt-sql-sqlite +arch ppc64 package qt-x11 +arch ppc64 package qt3-devel-doc +arch ppc64 package qt3-devel-tools +arch ppc64 package qt3-mysql +arch ppc64 package qt3-postgresql +arch ppc64 package qt3-unixODBC +arch ppc64 package tcpd-devel + +# ia32el trampoline +targettype x86 package ia32el + +/usr/lib/ia32el + +# IBM request +device-mapper +itrace +# ICAClient +novell-NLDAPsdk +# helix hack +helix-dbus-server diff --git a/baselibs_global.conf b/baselibs_global.conf new file mode 100644 index 000000000..15d997e6e --- /dev/null +++ b/baselibs_global.conf @@ -0,0 +1,30 @@ +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 + +targettype x86 prefix /emul/ia32-linux +configdir /usr/lib/baselibs-/bin +targettype x86 extension -x86 +targettype 32bit extension 32 +targettype 64bit extension 64 + +targetname - + ++.*/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$/ +targettype x86 block! +requires " = " +requires "- = " diff --git a/build b/build new file mode 100755 index 000000000..cf403940a --- /dev/null +++ b/build @@ -0,0 +1,630 @@ +#!/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-2006 SuSE GmbH Nuernberg, Germany + +test -z "$BUILD_ROOT" && BUILD_ROOT=/var/tmp/build-root +test -z "$BUILD_RPMS" && BUILD_RPMS=/media/dvd/suse +test -z "$BUILD_ARCH" && { + BUILD_ARCH=`uname -m` + test i686 = "$BUILD_ARCH" && BUILD_ARCH=i586 +} +export BUILD_ARCH BUILD_ROOT BUILD_RPMS + +export BUILD_DIR=/usr/lib/build +export PATH=$BUILD_DIR:$PATH + +# 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. + + --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 + + --useusedforbuild + Do not expand dependencies but search the specfile for + usedforbuild lines. + + --verify Run verify when initializing the build root + + --extra-packs pack + Also install package 'pack' + + --root rootdir + Use 'rootdir' to setup chroot environment + + --baselibs Create -32bit/-64bit/-x86 rpms for other architectures + +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 +} + +function clean_build_root () { + test -n "$BUILD_ROOT" && { + 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 + rm -rf $BUILD_ROOT/* + } +} + +# +# cleanup_and_exit +# +cleanup_and_exit () { + if test "$1" = 0 -o -z "$1" ; then + exit 0 + else + exit $1 + fi +} + +function create_baselibs { + echo "... creating baselibs" + BRPMS= + for RPM in $BUILD_ROOT$TOPDIR/RPMS/*/*.rpm ; do + BRPMS="$BRPMS ${RPM#$BUILD_ROOT}" + done + BASELIBS_CFG= + if test -e $BUILD_ROOT$TOPDIR/SOURCES/baselibs.conf ; then + BASELIBS_CFG="-c $TOPDIR/SOURCES/baselibs.conf" + fi + if test -f $BUILD_ROOT/usr/lib/build/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 + chroot $BUILD_ROOT /usr/lib/build/mkbaselibs -c /usr/lib/build/baselibs_global.conf $BASELIBS_CFG $BRPMS || cleanup_and_exit 1 + else + # use external version + rm -rf $BUILD_ROOT/.mkbaselibs + mkdir -p $BUILD_ROOT/.mkbaselibs + cp -f $BUILD_DIR/mkbaselibs $BUILD_ROOT/.mkbaselibs + cp -f $BUILD_DIR/baselibs_global.conf $BUILD_ROOT/.mkbaselibs + 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 + chroot $BUILD_ROOT /.mkbaselibs/mkbaselibs -c /.mkbaselibs/baselibs_global.conf $BASELIBS_CFG $BRPMS || cleanup_and_exit 1 + rm -rf $BUILD_ROOT/.mkbaselibs + fi +} + +DO_INIT=true +CLEAN_BUILD=false +SRCDIR= +BUILD_JOBS= +ABUILD_TARGET_ARCH= +CREATE_BASELIBS= +USEUSEDFORBUILD= +XENIMAGE= +XENSWAP= +XENMEMORY= +BUILD_INIT_BUILDSYSTEM=init_buildsystem +RUNNING_IN_XEN= +RPMLIST= +RELEASE= +REASON= +NOROOTFORBUILD= + +if test "$0" = "/.build/build" ; then + BUILD_ROOT=/ + BUILD_DIR=/.build + . $BUILD_DIR/build.data + PATH=$BUILD_DIR:$PATH + RUNNING_IN_XEN=true + if test -n "$XENSWAP" ; then + for i in 1 2 3 4 5 6 7 8 9 10 ; do + test -e "$XENSWAP" && break + test $i = 1 && echo "waiting for $XENSWAP to appear" + echo -n . + sleep 1 + done + test $i = 1 || echo + cp -a "$XENSWAP" /.build/swapdev + fi + umount -l /dev 2>/dev/null + mount -orw -n -tproc none /proc 2>/dev/null + if test -n "$XENSWAP" ; then + rm -f "$XENSWAP" + cp -a /.build/swapdev "$XENSWAP" + swapon -v "$XENSWAP" || exit 1 + fi + set "/.build-srcdir/$SPECFILE" +fi + +while test -n "$1"; do + PARAM="$1" + ARG="$2" + 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 + ;; + *-clean) + CLEAN_BUILD=true + ;; + *-rpms) + BUILD_RPMS="$ARG" + if [ -z "$BUILD_RPMS" ] ; then + echo_help + cleanup_and_exit + fi + shift + ;; + *-arch) + BUILD_ARCH="$ARG" + shift + ;; + *-verify) + export VERIFY_BUILD_SYSTEM=true + ;; + *-target) + ABUILD_TARGET_ARCH="$ARG" + shift + ;; + *-jobs) + BUILD_JOBS="$ARG" + shift + ;; + *-extra*packs|-X) + BUILD_EXTRA_PACKS="$BUILD_EXTRA_PACKS $ARG" + shift + ;; + *-baselibs) + CREATE_BASELIBS=true + ;; + *-root) + BUILD_ROOT="$ARG" + shift + ;; + *-dist) + BUILD_DIST="$ARG" + export BUILD_DIST + shift + ;; + *-xen) + XENIMAGE="$ARG" + shift + ;; + *-xenswap) + XENSWAP="$ARG" + shift + ;; + *-xenmemory) + XENMEMORY="memory=$ARG" + shift + ;; + *-rpmlist) + RPMLIST="--rpmlist $ARG" + BUILD_RPMS= + shift + ;; + *-release) + RELEASE="--release $ARG" + shift + ;; + *-reason) + REASON="$ARG" + shift + ;; + *-norootforbuild) + NOROOTFORBUILD=true + ;; + *-stage) + BUILD_RPM_BUILD_STAGE="$ARG" + shift + ;; + *-useusedforbuild) + USEUSEDFORBUILD="--useusedforbuild" + ;; + ----noarg) + echo "$ARG does not take an argument" + cleanup_and_exit + ;; + -*) + echo Unknown Option "$PARAM". Exit. + cleanup_and_exit 1 + ;; + *) + test -n "$SRCDIR" && usage + SRCDIR="$PARAM" + ;; + esac +done + +test $UID != 0 && { + echo You have to be root to use $0. Exit. + cleanup_and_exit 1 +} + +case $BUILD_ARCH in +i686) BUILD_ARCH="i686:i586:i486:i386" ;; +i586) BUILD_ARCH="i586:i486:i386" ;; +i486) BUILD_ARCH="i486:i386" ;; +x86_64) BUILD_ARCH="x86_64:i686:i586:i486:i386" ;; +esac +if test "$BUILD_ARCH" != "${BUILD_ARCH#i686}" ; then + cpuflags=`grep ^flags /proc/cpuinfo` + cpuflags="$cpuflags " + test "$cpuflags" = "${cpuflags/ cx8 /}" -o "$cpuflags" = "${cpuflags/ cmov /}" && { + echo "Your cpu doesn't support i686 rpms. Exit." + exit 1 + } +fi + +if test "`echo $SRCDIR | cut -c 1`" != "/" ; then + SRCDIR=`pwd`/$SRCDIR +fi + +if test -f $SRCDIR ; then + SPECFILES=`basename $SRCDIR` + SRCDIR=`dirname $SRCDIR` +else + SPECFILES="" + for i in $SRCDIR/*.spec ; do + SPECFILES="$SPECFILES `basename $i`" + done + test -z "$SPECFILES" && { + for i in $SRCDIR/*.src.rpm ; do + SPECFILES="$SPECFILES `basename $i`" + done + } +fi + +test -z "$SPECFILES" && { + echo no spec files and src rpms found in $SRCDIR. exit... + cleanup_and_exit 1 +} + +if test -z "$SRCDIR" -o ! -d "$SRCDIR" ; then + echo Usage: $0 \ + cleanup_and_exit 1 +fi + +if test -d "$BUILD_ROOT" ; then + # check if it is owned by root + test -O "$BUILD_ROOT" || { + echo "BUILD_ROOT=$BUILD_ROOT must be owned by root. Exit..." + cleanup_and_exit 1 + } +else + test "$BUILD_ROOT" != "${BUILD_ROOT%/*}" && mkdir -p "${BUILD_ROOT%/*}" + mkdir $BUILD_ROOT || { + echo "can not create BUILD_ROOT=$BUILD_ROOT. Exit..." + cleanup_and_exit 1 + } +fi + +if test -n "$XENIMAGE" ; then + umount -n $BUILD_ROOT/proc 2> /dev/null + umount -n $BUILD_ROOT/dev/pts 2> /dev/null + umount -t loop $BUILD_ROOT 2>/dev/null + if test "$CLEAN_BUILD" = true ; then + echo "Creating filesystem on $XENIMAGE" + if ! echo y | mkfs -t reiserfs -f $XENIMAGE >/dev/null 2>&1 ; then + if ! echo y | mkfs -t reiserfs -f $XENIMAGE ; then + cleanup_and_exit 1 + fi + fi + fi + mount -oloop $XENIMAGE $BUILD_ROOT || cleanup_and_exit 1 + if test -n "$XENSWAP" ; then + mkswap "$XENSWAP" + fi +fi + +rm -f $BUILD_ROOT/exit + +if test -z "$XENIMAGE" ; then + echo logging output to $BUILD_ROOT/.build.log... + rm -f $BUILD_ROOT/.build.log + touch $BUILD_ROOT/.build.log + exec 1> >(exec -a 'build logging tee' tee -a $BUILD_ROOT/.build.log) 2>&1 +fi + +# +# say hello +# +echo $HOST started \"build $SPECFILES\" at `date`. +echo +test -n "$REASON" && echo "$REASON" +echo Using BUILD_ROOT=$BUILD_ROOT +test -n "$BUILD_RPMS" && echo Using BUILD_RPMS=$BUILD_RPMS +echo Using BUILD_ARCH=$BUILD_ARCH +test -n "$XENIMAGE" && echo "Doing XEN build in $XENIMAGE" +echo + +test "$BUILD_ARCH" = all && BUILD_ARCH= + +cd $SRCDIR + +for SPECFILE in $SPECFILES ; do + # + # first setup building directory... + # + test -s $SPECFILE || { + echo $SPECFILE is empty. This should not happen... + continue + } + + if test "$SPECFILE" != "${SPECFILE%.src.rpm}" ; then + echo processing src rpm `pwd`/$SPECFILE... + TOPDIR=`chroot $BUILD_ROOT rpm --eval '%_topdir'` + rm -rf $BUILD_ROOT$TOPDIR + mkdir -p $BUILD_ROOT$TOPDIR/SOURCES $BUILD_ROOT$TOPDIR/SPECS + rpm -i --nodigest --nosignature --root $BUILD_ROOT $SPECFILE || { + echo "could not install $SPECFILE." + continue + } + rm -rf $BUILD_ROOT/.build-srcdir + mkdir -p $BUILD_ROOT/.build-srcdir + mv $BUILD_ROOT$TOPDIR/SOURCES/* $BUILD_ROOT/.build-srcdir + mv $BUILD_ROOT$TOPDIR/SPECS/* $BUILD_ROOT/.build-srcdir + MYSRCDIR=$BUILD_ROOT/.build-srcdir + cd $MYSRCDIR || cleanup_and_exit 1 + for SPECFILE in *.spec ; do : ; done + else + echo processing specfile `pwd`/$SPECFILE... + MYSRCDIR=$SRCDIR + fi + + ADDITIONAL_PACKS="" + test -n "$BUILD_EXTRA_PACKS" && ADDITIONAL_PACKS="$ADDITIONAL_PACKS $BUILD_EXTRA_PACKS" + test -n "$CREATE_BASELIBS" && ADDITIONAL_PACKS="$ADDITIONAL_PACKS build" + + if test "$CLEAN_BUILD" = true ; then + clean_build_root + DO_INIT=true + fi + + if test -n "$XENIMAGE" ; then + # do fist stage of init_buildsystem + echo init_buildsystem $USEUSEDFORBUILD $RPMLIST $SPECFILE $ADDITIONAL_PACKS ... + init_buildsystem --prepare $USEUSEDFORBUILD $RPMLIST "$MYSRCDIR/$SPECFILE" $ADDITIONAL_PACKS || cleanup_and_exit 1 + # start up xen, rerun ourself + mkdir -p $BUILD_ROOT/.build + cp -a $BUILD_DIR/. $BUILD_ROOT/.build + if ! test $MYSRCDIR = $BUILD_ROOT/.build-srcdir ; then + mkdir $BUILD_ROOT/.build-srcdir + cp -p $MYSRCDIR/* $BUILD_ROOT/.build-srcdir + MYSRCDIR=$BUILD_ROOT/.build-srcdir + fi + echo "SPECFILE='${SPECFILE//\'/\'\\\'\'}'" > $BUILD_ROOT/.build/build.data + echo "BUILD_JOBS='${BUILD_JOBS//\'/\'\\\'\'}'" >> $BUILD_ROOT/.build/build.data + echo "BUILD_ARCH='${BUILD_ARCH//\'/\'\\\'\'}'" >> $BUILD_ROOT/.build/build.data + echo "BUILD_RPMS='${BUILD_RPMS//\'/\'\\\'\'}'" >> $BUILD_ROOT/.build/build.data + echo "CREATE_BASELIBS='$CREATE_BASELIBS'" >> $BUILD_ROOT/.build/build.data + echo "REASON='${REASON//\'/\'\\\'\'}'" >> $BUILD_ROOT/.build/build.data + test -n "$XENSWAP" && echo "XENSWAP='/dev/hda2'" >> $BUILD_ROOT/.build/build.data + umount $BUILD_ROOT + XMROOT=file:$XENIMAGE + XMROOT=${XMROOT/#file:\/dev/phy:} + XMROOT="disk=$XMROOT,hda1,w" + XMSWAP= + if test -n "$XENSWAP" ; then + XMSWAP=file:$XENSWAP + XMSWAP=${XMSWAP/#file:\/dev/phy:} + XMSWAP="disk=$XMSWAP,hda2,w" + fi + xm create -c $BUILD_DIR/xen.conf name="build:${XENIMAGE##*/}" $XENMEMORY $XMROOT $XMSWAP extra="init=/.build/build panic=1" + exit 0 + fi + + if test "$DO_INIT" = true ; then + echo init_buildsystem $USEUSEDFORBUILD $RPMLIST $SPECFILE $ADDITIONAL_PACKS ... + $BUILD_INIT_BUILDSYSTEM $USEUSEDFORBUILD $RPMLIST "$MYSRCDIR/$SPECFILE" $ADDITIONAL_PACKS || cleanup_and_exit 1 + fi + + if test -z "$BUILD_DIST" -a -e "$BUILD_ROOT/.guessed_dist" ; then + BUILD_DIST=`cat $BUILD_ROOT/.guessed_dist` + fi + + if test "$SPECFILE" = "${SPECFILE%.dsc}" ; then + TOPDIR=`chroot $BUILD_ROOT rpm --eval '%_topdir'` + else + TOPDIR=/usr/src/packages + mkdir -p $BUILD_ROOT$TOPDIR + fi + + ln -f -s ${TOPDIR#/} $BUILD_ROOT/.build.packages + + # + # 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 + + # + # check if we want to build with the abuild user + # + BUILD_USER=root + test -n "$NOROOTFORBUILD" && BUILD_USER=abuild + if egrep '^#[ ]*norootforbuild[ ]*$' >/dev/null <$SPECFILE; then + BUILD_USER=abuild + fi + if test $BUILD_USER = abuild ; then + if ! egrep '^abuild:' >/dev/null <$BUILD_ROOT/etc/passwd ; then + echo 'abuild::99:99:Autobuild:/home/abuild:/bin/bash' >>$BUILD_ROOT/etc/passwd + echo 'abuild::99:' >>$BUILD_ROOT/etc/group + mkdir -p $BUILD_ROOT/home/abuild + chown 99:99 $BUILD_ROOT/home/abuild + fi + else + if egrep '^abuild:' >/dev/null <$BUILD_ROOT/etc/passwd ; then + 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 + rm -rf $BUILD_ROOT/home/abuild + fi + fi + + # + # now clean up RPM building directories + # + rm -rf $BUILD_ROOT$TOPDIR + for i in BUILD RPMS/`arch` RPMS/i386 RPMS/noarch SOURCES SPECS SRPMS ; do + mkdir -p $BUILD_ROOT$TOPDIR/$i + test BUILD_USER = abuild && chown 99:99 $BUILD_ROOT$TOPDIR/$i + done + test -e $BUILD_ROOT/exit && cleanup_and_exit + mkdir -p $BUILD_ROOT$TOPDIR/SOURCES + cp -p $MYSRCDIR/* $BUILD_ROOT$TOPDIR/SOURCES/ + test $MYSRCDIR = $BUILD_ROOT/.build-srcdir && rm -rf $MYSRCDIR + + if test "$SPECFILE" = "${SPECFILE%.dsc}" ; then + # do buildrequires/release substitution + substitutedeps $RELEASE --dist "$BUILD_DIST" --archpath "$BUILD_ARCH" --configdir "$BUILD_DIR/configs" "$BUILD_ROOT$TOPDIR/SOURCES/$SPECFILE" "$BUILD_ROOT/.spec.new" || cleanup_and_exit 1 + # extract macros from configuration + getmacros --dist "$BUILD_DIST" --configdir "$BUILD_DIR/configs" > $BUILD_ROOT/root/.rpmmacros + test $BUILD_USER = abuild && cp -p $BUILD_ROOT/root/.rpmmacros $BUILD_ROOT/home/abuild/.rpmmacros + 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: + diff $BUILD_ROOT$TOPDIR/SOURCES/$SPECFILE $BUILD_ROOT/.spec.new + mv $BUILD_ROOT/.spec.new $BUILD_ROOT$TOPDIR/SOURCES/$SPECFILE + else + rm -f $BUILD_ROOT/.spec.new + fi + fi + + if test "$SPECFILE" != "${SPECFILE%.dsc}" ; then + rm -rf $BUILD_ROOT$TOPDIR/BUILD + test $BUILD_USER = abuild && chown 99:99 $BUILD_ROOT$TOPDIR + chroot $BUILD_ROOT su -c "dpkg-source -x $TOPDIR/SOURCES/$SPECFILE $TOPDIR/BUILD" - $BUILD_USER + fi + if test $BUILD_USER = abuild ; then + chown -R 99:99 $BUILD_ROOT$TOPDIR/* + else + chown -R root:root $BUILD_ROOT$TOPDIR/* + fi + 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 ----------------------------------------------------------------- + sync + mount -oro -n -tproc none $BUILD_ROOT/proc 2> /dev/null + mount -n -tdevpts none $BUILD_ROOT/dev/pts 2> /dev/null + + BUILD_SUCCEDED=false + + if test "$SPECFILE" = "${SPECFILE%.dsc}" ; then + test -z "$BUILD_RPM_BUILD_STAGE" && BUILD_RPM_BUILD_STAGE=-ba + + BUILD_PARAMETERS="$BUILD_RPM_BUILD_STAGE" + test -n "$ABUILD_TARGET_ARCH" && BUILD_PARAMETERS="$BUILD_PARAMETERS --target=\"$ABUILD_TARGET_ARCH\"" + test -n "$BUILD_JOBS" && BUILD_PARAMETERS="$BUILD_PARAMETERS --eval \"%define jobs \\\"$BUILD_JOBS\\\"\"" + test root != "$BUILD_USER" && BUILD_PARAMETERS="$BUILD_PARAMETERS --eval \"%define _srcdefattr (-,root,root)\"" + RPMBUILD=rpmbuild + test -x $BUILD_ROOT/usr/lib/rpm/rpmi || RPMBUILD=rpm + chroot $BUILD_ROOT su -c "$RPMBUILD $BUILD_PARAMETERS $TOPDIR/SOURCES/$SPECFILE" - $BUILD_USER < /dev/null && BUILD_SUCCEDED=true + else + chroot $BUILD_ROOT su -c "cd $TOPDIR/BUILD && dpkg-buildpackage -us -uc -rfakeroot" - $BUILD_USER < /dev/null && BUILD_SUCCEDED=true + mkdir -p $BUILD_ROOT/$TOPDIR/DEBS + for DEB in $BUILD_ROOT/$TOPDIR/*.deb ; do + test -e "$DEB" && mv "$DEB" "$BUILD_ROOT/$TOPDIR/DEBS" + done + fi + + umount -n $BUILD_ROOT/proc 2> /dev/null + umount -n $BUILD_ROOT/mnt 2> /dev/null + umount -n $BUILD_ROOT/dev/pts 2> /dev/null + test "$BUILD_SUCCEDED" = true || cleanup_and_exit 1 + test -d "$SRCDIR" && cd "$SRCDIR" +done + +if test -n "$CREATE_BASELIBS" ; then + mount -oro -n -tproc none $BUILD_ROOT/proc 2> /dev/null + create_baselibs + umount -n $BUILD_ROOT/proc 2> /dev/null +fi + +if test -n "$RUNNING_IN_XEN" ; then + cd / + test -n "$XENSWAP" && swapoff "$XENSWAP" + exec >&0 2>&0 # so that the logging tee finishes + sleep 1 # wait till tee terminates + kill -9 -1 # goodbye cruel world + exec /bin/bash -c 'mount -n -o remount,ro / ; halt -f' + halt -f +fi + +cleanup_and_exit 0 diff --git a/build.1 b/build.1 new file mode 100644 index 000000000..5c69f97ac --- /dev/null +++ b/build.1 @@ -0,0 +1,102 @@ +.TH build 1 "(c) 1997-2005 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. +.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 +.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 "\-\-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 --help +Print a short help text. +.TP +.B --verify +verify the files in an existing build system. +.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. "/media/dvd/suse" is the default value which will do +the trick if you have the SuSE Linux DVD mounted. +.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 (1), +.TP +.BR "Maximum RPM": +.I http://www.rpm.org/max-rpm/ diff --git a/configs/debian.conf b/configs/debian.conf new file mode 100644 index 000000000..988f9e64d --- /dev/null +++ b/configs/debian.conf @@ -0,0 +1,176 @@ +Preinstall: bash perl-base sed grep coreutils debianutils +Preinstall: libc6 libncurses5 libacl1 libattr1 +Preinstall: libreadline4 tar gawk dpkg +Preinstall: sysv-rc gzip base-files + +Required: autoconf automake binutils bzip2 gcc gettext libc6 +Required: libtool libncurses5 perl zlib1g dpkg + +Support: build-essential fakeroot +Support: bison cpio cracklib2 cvs login +Support: file findutils flex diff +Support: groff-base gzip info less +Support: make man module-init-tools +Support: net-tools util-linux +Support: patch procps psmisc rcs strace +Support: texinfo unzip vim ncurses-base sysvinit + +Keep: binutils cpp cracklib file findutils gawk gcc gcc-ada gcc-c++ +Keep: gzip libada libstdc++ libunwind +Keep: libunwind-devel libzio make mktemp pam-devel pam-modules +Keep: patch perl rcs timezone + +Prefer: xorg-x11-libs libpng fam mozilla mozilla-nss xorg-x11-Mesa +Prefer: unixODBC libsoup glitz java-1_4_2-sun gnome-panel +Prefer: desktop-data-SuSE gnome2-SuSE mono-nunit gecko-sharp2 +Prefer: apache2-prefork openmotif-libs ghostscript-mini gtk-sharp +Prefer: glib-sharp libzypp-zmd-backend mDNSResponder + +Prefer: gnome-sharp2:art-sharp2 gnome-sharp:art-sharp +Prefer: ifolder3:gnome-sharp2 ifolder3:gconf-sharp2 +Prefer: nautilus-ifolder3:gnome-sharp2 +Prefer: gconf-sharp2:glade-sharp2 gconf-sharp:glade-sharp +Prefer: tomboy:gconf-sharp tomboy:gnome-sharp +Prefer: zmd:libzypp-zmd-backend +Prefer: yast2-packagemanager-devel:yast2-packagemanager + +Prefer: -libgcc-mainline -libstdc++-mainline -gcc-mainline-c++ +Prefer: -libgcj-mainline -viewperf -compat -compat-openssl097g +Prefer: -zmd -OpenOffice_org -pam-laus -libgcc-tree-ssa -busybox-links +Prefer: -crossover-office + +Conflict: ghostscript-library:ghostscript-mini + +Ignore: sysvinit:initscripts + +Ignore: aaa_base:aaa_skel,suse-release,logrotate,ash,mingetty,distribution-release +Ignore: gettext-devel:libgcj,libstdc++-devel +Ignore: pwdutils:openslp +Ignore: pam-modules:resmgr +Ignore: rpm:suse-build-key,build-key +Ignore: bind-utils:bind-libs +Ignore: alsa:dialog,pciutils +Ignore: portmap:syslogd +Ignore: fontconfig:freetype2 +Ignore: fontconfig-devel:freetype2-devel +Ignore: xorg-x11-libs:freetype2 +Ignore: xorg-x11:x11-tools,resmgr,xkeyboard-config,xorg-x11-Mesa,libusb,freetype2,libjpeg,libpng +Ignore: apache2:logrotate +Ignore: arts:alsa,audiofile,resmgr,libogg,libvorbis +Ignore: kdelibs3:alsa,arts,pcre,OpenEXR,aspell,cups-libs,mDNSResponder,krb5,libjasper +Ignore: kdelibs3-devel:libvorbis-devel +Ignore: kdebase3:kdebase3-ksysguardd,OpenEXR,dbus-1,dbus-1-qt,hal,powersave,openslp,libusb +Ignore: kdebase3-SuSE:release-notes +Ignore: jack:alsa,libsndfile +Ignore: libxml2-devel:readline-devel +Ignore: gnome-vfs2:gnome-mime-data,desktop-file-utils,cdparanoia,dbus-1,dbus-1-glib,krb5,hal,libsmbclient,fam,file_alteration +Ignore: libgda:file_alteration +Ignore: gnutls:lzo,libopencdk +Ignore: gnutls-devel:lzo-devel,libopencdk-devel +Ignore: pango:cairo,glitz,libpixman,libpng +Ignore: pango-devel:cairo-devel +Ignore: cairo-devel:libpixman-devel +Ignore: libgnomeprint:libgnomecups +Ignore: libgnomeprintui:libgnomecups +Ignore: orbit2:libidl +Ignore: orbit2-devel:libidl,libidl-devel,indent +Ignore: qt3:libmng +Ignore: qt-sql:qt_database_plugin +Ignore: gtk2:libpng,libtiff +Ignore: libgnomecanvas-devel:glib-devel +Ignore: libgnomeui:gnome-icon-theme,shared-mime-info +Ignore: scrollkeeper:docbook_4,sgml-skel +Ignore: gnome-desktop:libgnomesu,startup-notification +Ignore: python-devel:python-tk +Ignore: gnome-pilot:gnome-panel +Ignore: gnome-panel:control-center2 +Ignore: gnome-menus:kdebase3 +Ignore: gnome-main-menu:rug +Ignore: libbonoboui:gnome-desktop +Ignore: postfix:pcre +Ignore: docbook_4:iso_ent,sgml-skel,xmlcharent +Ignore: control-center2:nautilus,evolution-data-server,gnome-menus,gstreamer-plugins,gstreamer,metacity,mozilla-nspr,mozilla,libxklavier,gnome-desktop,startup-notification +Ignore: docbook-xsl-stylesheets:xmlcharent +Ignore: liby2util-devel:libstdc++-devel,openssl-devel +Ignore: yast2:yast2-ncurses,yast2-theme-SuSELinux,perl-Config-Crontab,yast2-xml,SuSEfirewall2 +Ignore: yast2-core:netcat,hwinfo,wireless-tools,sysfsutils +Ignore: yast2-core-devel:libxcrypt-devel,hwinfo-devel,blocxx-devel,sysfsutils,libstdc++-devel +Ignore: yast2-packagemanager-devel:rpm-devel,curl-devel,openssl-devel +Ignore: yast2-devtools:perl-XML-Writer,libxslt,pkgconfig +Ignore: yast2-installation:yast2-update,yast2-mouse,yast2-country,yast2-bootloader,yast2-packager,yast2-network,yast2-online-update,yast2-users,release-notes,autoyast2-installation +Ignore: yast2-bootloader:bootloader-theme +Ignore: yast2-packager:yast2-x11 +Ignore: yast2-x11:sax2-libsax-perl +Ignore: openslp-devel:openssl-devel +Ignore: java-1_4_2-sun:xorg-x11-libs +Ignore: java-1_4_2-sun-devel:xorg-x11-libs +Ignore: kernel-um:xorg-x11-libs +Ignore: tetex:xorg-x11-libs,expat,fontconfig,freetype2,libjpeg,libpng,ghostscript-x11,xaw3d,gd,dialog,ed +Ignore: yast2-country:yast2-trans-stats +Ignore: susehelp:susehelp_lang,suse_help_viewer +Ignore: mailx:smtp_daemon +Ignore: cron:smtp_daemon +Ignore: hotplug:syslog +Ignore: pcmcia:syslog +Ignore: avalon-logkit:servlet +Ignore: jython:servlet +Ignore: ispell:ispell_dictionary,ispell_english_dictionary +Ignore: aspell:aspel_dictionary,aspell_dictionary +Ignore: smartlink-softmodem:kernel,kernel-nongpl +Ignore: OpenOffice_org-de:myspell-german-dictionary +Ignore: mediawiki:php-session,php-gettext,php-zlib,php-mysql,mod_php_any +Ignore: squirrelmail:mod_php_any,php-session,php-gettext,php-iconv,php-mbstring,php-openssl + +Ignore: simias:mono(log4net) +Ignore: zmd:mono(log4net) +Ignore: horde:mod_php_any,php-gettext,php-mcrypt,php-imap,php-pear-log,php-pear,php-session,php +Ignore: xerces-j2:xml-commons-apis,xml-commons-resolver +Ignore: xdg-menu:desktop-data +Ignore: nessus-libraries:nessus-core +Ignore: evolution:yelp +Ignore: mono-tools:mono(gconf-sharp),mono(glade-sharp),mono(gnome-sharp),mono(gtkhtml-sharp),mono(atk-sharp),mono(gdk-sharp),mono(glib-sharp),mono(gtk-sharp),mono(pango-sharp) +Ignore: gecko-sharp2:mono(glib-sharp),mono(gtk-sharp) +Ignore: vcdimager:libcdio.so.6,libcdio.so.6(CDIO_6),libiso9660.so.4,libiso9660.so.4(ISO9660_4) +Ignore: libcdio:libcddb.so.2 +Ignore: gnome-libs:libgnomeui +Ignore: nautilus:gnome-themes +Ignore: gnome-panel:gnome-themes +Ignore: gnome-panel:tomboy + +Substitute: utempter + +%ifnarch s390 s390x ppc ia64 +Substitute: java2-devel-packages java-1_4_2-sun-devel +%else + %ifnarch s390x +Substitute: java2-devel-packages java-1_4_2-ibm-devel + %else +Substitute: java2-devel-packages java-1_4_2-ibm-devel xorg-x11-libs-32bit + %endif +%endif + +Substitute: yast2-devel-packages docbook-xsl-stylesheets doxygen libxslt perl-XML-Writer popt-devel sgml-skel update-desktop-files yast2 yast2-devtools yast2-packagemanager-devel yast2-perl-bindings yast2-testsuite + +Substitute: glibc-devel-32bit + +%ifarch %ix86 +Substitute: kernel-binary-packages kernel-default kernel-smp kernel-bigsmp kernel-debug kernel-um kernel-xen kernel-kdump +%endif +%ifarch ia64 +Substitute: kernel-binary-packages kernel-default kernel-debug +%endif +%ifarch x86_64 +Substitute: kernel-binary-packages kernel-default kernel-smp kernel-xen kernel-kdump +%endif +%ifarch ppc +Substitute: kernel-binary-packages kernel-default kernel-kdump kernel-ppc64 kernel-iseries64 +%endif +%ifarch ppc64 +Substitute: kernel-binary-packages kernel-ppc64 kernel-iseries64 +%endif +%ifarch s390 +Substitute: kernel-binary-packages kernel-s390 +%enidf +%ifarch s390x +Substitute: kernel-binary-packages kernel-default +%enidf diff --git a/configs/default.conf b/configs/default.conf new file mode 120000 index 000000000..75836d935 --- /dev/null +++ b/configs/default.conf @@ -0,0 +1 @@ +sl10.1.conf \ No newline at end of file diff --git a/configs/sl10.0.conf b/configs/sl10.0.conf new file mode 100644 index 000000000..1c4835fe8 --- /dev/null +++ b/configs/sl10.0.conf @@ -0,0 +1,191 @@ +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 + +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 +%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 + +%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 +%enidf +%ifarch s390x +Substitute: kernel-binary-packages kernel-default +%enidf + +Macros: +%define insserv_prereq insserv sed +%define fillup_prereq fillup coreutils +%define suseconfig_fonts_prereq perl aaa_base +%define install_info_prereq info +%define suse_version 1000 +%define sles_version 0 +%define ul_version 0 +%define do_profiling 1 diff --git a/configs/sl10.1.conf b/configs/sl10.1.conf new file mode 100644 index 000000000..cf9f37547 --- /dev/null +++ b/configs/sl10.1.conf @@ -0,0 +1,191 @@ +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 + +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 +%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 + +%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 +%enidf +%ifarch s390x +Substitute: kernel-binary-packages kernel-default +%enidf + +Macros: +%define insserv_prereq insserv sed devs +%define fillup_prereq fillup coreutils +%define suseconfig_fonts_prereq perl aaa_base +%define install_info_prereq info +%define suse_version 1001 +%define sles_version 0 +%define ul_version 0 +%define do_profiling 1 diff --git a/configs/sl8.1.conf b/configs/sl8.1.conf new file mode 100644 index 000000000..0a48f3fd6 --- /dev/null +++ b/configs/sl8.1.conf @@ -0,0 +1,188 @@ +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 + +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 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 + +%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 +%enidf +%ifarch s390x +Substitute: kernel-binary-packages kernel-default +%enidf + +Macros: +%define insserv_prereq aaa_base +%define fillup_prereq fillup fileutils +%define install_info_prereq texinfo +%define suse_version 810 +%define sles_version 0 +%define ul_version 0 diff --git a/configs/sl8.2.conf b/configs/sl8.2.conf new file mode 100644 index 000000000..1e170bbfc --- /dev/null +++ b/configs/sl8.2.conf @@ -0,0 +1,191 @@ +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 + +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 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 + +%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 +%enidf +%ifarch s390x +Substitute: kernel-binary-packages kernel-default +%enidf + +Macros: +%define insserv_prereq insserv +%define fillup_prereq fillup fileutils +%define suseconfig_fonts_prereq perl aaa_base +%define install_info_prereq info +%define suse_version 820 +%define sles_version 0 +%define ul_version 0 +%define jds_version 0 +%define do_profiling 1 diff --git a/configs/sl9.0.conf b/configs/sl9.0.conf new file mode 100644 index 000000000..01739ec5f --- /dev/null +++ b/configs/sl9.0.conf @@ -0,0 +1,192 @@ +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 + +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 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 + +%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 +%enidf +%ifarch s390x +Substitute: kernel-binary-packages kernel-default +%enidf + +Macros: +%define insserv_prereq insserv +%define fillup_prereq fillup fileutils +%define suseconfig_fonts_prereq perl aaa_base +%define install_info_prereq info +%define suse_version 900 +%define sles_version 0 +%define ul_version 0 +%define jds_version 0 +%define do_profiling 1 diff --git a/configs/sl9.1.conf b/configs/sl9.1.conf new file mode 100644 index 000000000..721df0b86 --- /dev/null +++ b/configs/sl9.1.conf @@ -0,0 +1,192 @@ +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 + +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 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 + +%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 +%enidf +%ifarch s390x +Substitute: kernel-binary-packages kernel-default +%enidf + +Macros: +%define insserv_prereq insserv +%define fillup_prereq fillup fileutils +%define suseconfig_fonts_prereq perl aaa_base +%define install_info_prereq info +%define suse_version 910 +%define sles_version 0 +%define ul_version 0 +%define jds_version 0 +%define do_profiling 1 diff --git a/configs/sl9.2.conf b/configs/sl9.2.conf new file mode 100644 index 000000000..ca1390e9e --- /dev/null +++ b/configs/sl9.2.conf @@ -0,0 +1,191 @@ +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 + +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 +%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 + +%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 +%enidf +%ifarch s390x +Substitute: kernel-binary-packages kernel-default +%enidf + +Macros: +%define insserv_prereq insserv sed devs +%define fillup_prereq fillup coreutils +%define suseconfig_fonts_prereq perl aaa_base +%define install_info_prereq info +%define suse_version 920 +%define sles_version 0 +%define ul_version 0 +%define do_profiling 1 diff --git a/configs/sl9.3.conf b/configs/sl9.3.conf new file mode 100644 index 000000000..1aad68304 --- /dev/null +++ b/configs/sl9.3.conf @@ -0,0 +1,191 @@ +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 + +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 +%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 + +%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 +%enidf +%ifarch s390x +Substitute: kernel-binary-packages kernel-default +%enidf + +Macros: +%define insserv_prereq insserv sed devs +%define fillup_prereq fillup coreutils +%define suseconfig_fonts_prereq perl aaa_base +%define install_info_prereq info +%define suse_version 930 +%define sles_version 0 +%define ul_version 0 +%define do_profiling 1 diff --git a/configs/sles10.conf b/configs/sles10.conf new file mode 100644 index 000000000..8731f5d34 --- /dev/null +++ b/configs/sles10.conf @@ -0,0 +1,191 @@ +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 + +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 +%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 + +%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 +%enidf +%ifarch s390x +Substitute: kernel-binary-packages kernel-default +%enidf + +Macros: +%define insserv_prereq insserv sed +%define fillup_prereq fillup coreutils +%define suseconfig_fonts_prereq perl aaa_base +%define install_info_prereq info +%define suse_version 1001 +%define sles_version 10 +%define ul_version 0 +%define do_profiling 1 diff --git a/configs/sles8.conf b/configs/sles8.conf new file mode 100644 index 000000000..1ccfcb78e --- /dev/null +++ b/configs/sles8.conf @@ -0,0 +1,188 @@ +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 + +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 unitedlinux-release 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 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 + +%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 +%enidf +%ifarch s390x +Substitute: kernel-binary-packages kernel-default +%enidf + +Macros: +%define insserv_prereq aaa_base +%define fillup_prereq fillup fileutils +%define install_info_prereq texinfo +%define suse_version 810 +%define sles_version 8 +%define ul_version 0 diff --git a/configs/sles9.conf b/configs/sles9.conf new file mode 100644 index 000000000..068019542 --- /dev/null +++ b/configs/sles9.conf @@ -0,0 +1,192 @@ +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 + +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 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 + +%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 +%enidf +%ifarch s390x +Substitute: kernel-binary-packages kernel-default +%enidf + +Macros: +%define insserv_prereq insserv +%define fillup_prereq fillup fileutils +%define suseconfig_fonts_prereq perl aaa_base +%define install_info_prereq info +%define suse_version 910 +%define sles_version 9 +%define ul_version 0 +%define jds_version 0 +%define do_profiling 1 diff --git a/configs/ul1.conf b/configs/ul1.conf new file mode 100644 index 000000000..4ede7f0c9 --- /dev/null +++ b/configs/ul1.conf @@ -0,0 +1,188 @@ +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 + +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 unitedlinux-release 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 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 + +%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 +%enidf +%ifarch s390x +Substitute: kernel-binary-packages kernel-default +%enidf + +Macros: +%define insserv_prereq aaa_base +%define fillup_prereq fillup fileutils +%define install_info_prereq texinfo +%define suse_version 810 +%define sles_version 0 +%define ul_version 1 diff --git a/createrpmdeps b/createrpmdeps new file mode 100755 index 000000000..84348d516 --- /dev/null +++ b/createrpmdeps @@ -0,0 +1,204 @@ +#!/usr/bin/perl -w + +BEGIN { + unshift @INC, ($::ENV{'BUILD_DIR'} || '/usr/lib/build'); +} + +use Build; +use strict; + +###################################################################### + +my $rpmdepfile = $ARGV[0]; + +my %oldp; +my %oldr; +if (defined($rpmdepfile) && open(F, '<', $rpmdepfile)) { + while () { + chomp; + if (/^P:([^ ]): /) { + $oldp{$1} = $_; + } elsif (/^R:([^ ]): /) { + $oldr{$1} = $_; + } + } + close F; +} + +my $redo = 1; +while ($redo) { + $redo = 0; + my $packages; + my @known; + my %known2fn; + my %known2path; + my %fnsize2id; + while () { + chomp; + if ($_ eq '') { + # next block; + $redo = 1; + last; + } + if (/\/packages$/) { + $packages = $_; + next; + } + next unless /^(\d+\/\d+\/\d+) (.*)$/; + my $id = $1; + my $path = $2; + 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; + } + + my %newp; + my %newr; + for (@known) { + $newp{$_} = $oldp{$_} if $oldp{$_}; + $newr{$_} = $oldr{$_} if $oldr{$_}; + } + + my @todo = grep {!($newp{$_} && $newr{$_})} @known; + if (@todo && $packages && open(F, '<', $packages)) { + my ($pack, $vers, $rel, $btime, $arch, $loc, $id, $size); + my ($req, $prv); + while () { + chomp; + next unless /^[=+]/; + my ($tag, $data); + if (/^\+(.*)$/) { + $tag = $1; + $data = ''; + while () { + chomp; + last if $_ eq "-$tag"; + $data .= "$_\n"; + } + chop $data; + } else { + ($tag, $data) = split(' ', $_, 2); + $tag = substr($tag, 1); + } + if ($tag eq 'Pkg:') { + if ($pack && $loc && $size) { + my $id = $fnsize2id{"$loc-$size"}; + if ($id && $known2path{"$pack.$arch-$id"}) { + $prv = "$pack = $vers-$rel" unless defined $prv; + $req = '' unless defined $req; + $newp{"$pack.$arch-$id"} = "P:$pack.$arch-$id: $prv"; + $newr{"$pack.$arch-$id"} = "R:$pack.$arch-$id: $req"; + } + } + ($pack, $vers, $rel, $arch) = split(' ', $data); + undef $req; + undef $prv; + undef $btime; + undef $size; + undef $loc; + undef $pack if $arch && ($arch eq 'src' || $arch eq 'nosrc'); + } elsif ($tag eq 'Req:') { + next unless $pack; + $data =~ s/\n/ /gs; + $req = $data; + } elsif ($tag eq 'Prv:') { + next unless $pack; + # add self provides for old rpm versions + $data = "$pack = $vers-$rel\n$data" unless "\n$data" =~ /\n\Q$pack\E =/s; + $data =~ s/\n/ /gs; + $prv = $data; + } elsif ($tag eq 'Tim:') { + $btime = $data; + } elsif ($tag eq 'Loc:') { + my @data = split(' ', $data); + $loc = $data[1]; + } elsif ($tag eq 'Siz:') { + my @data = split(' ', $data); + $size = $data[0]; + } + } + close F; + if ($pack && $loc && $size) { + my $id = $fnsize2id{"$loc-$size"}; + if ($id && $known2path{"$pack.$arch-$id"}) { + $newp{"$pack.$arch-$id"} = "P:$pack.$arch-$id: $prv"; + $newr{"$pack.$arch-$id"} = "R:$pack.$arch-$id: $req"; + } + } + @todo = grep {!($newp{$_} && $newr{$_})} @known; + } + if (@todo) { + for my $known (@todo) { + my $path = $known2path{$known}; + if ($path =~ /\.rpm$/) { + my %res = Build::rpmq($path, 1000, 1022, 1047, 1049, 1048, 1050, 1112, 1113); + next unless %res; + Build::rpmq_add_flagsvers(\%res, 1047, 1112, 1113); + Build::rpmq_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; + } + } + $newp{$known} = "P:$known: ".join(' ', @{$res{1047} || []}); + $newr{$known} = "R:$known: ".join(' ', @{$res{1049} || []}); + } else { + my %res = Build::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"; + } +} diff --git a/debsort b/debsort new file mode 100755 index 000000000..26cfe3323 --- /dev/null +++ b/debsort @@ -0,0 +1,137 @@ +#!/usr/bin/perl -w + +BEGIN { + unshift @INC, ($::ENV{'BUILD_DIR'} || '/usr/lib/build'); +} + +use Build; + +sub sortpacks { + my ($depsp, @packs) = @_; + + my %deps; + my %rdeps; + my %needed; + + # map and unify dependencies, create rdeps and needed + my %known = map {$_ => 1} @packs; + for my $p (@packs) { + if ($basep && $basep->{$p}) { + $deps{$p} = []; + $needed{$p} = 0; + next; + } + my @fdeps = grep {$known{$_}} @{$depsp->{$p} || []}; + my %fdeps = ($p => 1); # no self reference + @fdeps = grep {!$fdeps{$_}++} @fdeps; + $deps{$p} = \@fdeps; + $needed{$p} = @fdeps; + push @{$rdeps{$_}}, $p for @fdeps; + } + undef %known; # free memory + + @packs= sort {$needed{$a} <=> $needed{$b} || $a cmp $b} @packs; + my @good; + my @res; + # the big sort loop + while (@packs) { + @good = grep {$needed{$_} == 0} @packs; + if (@good) { + @packs = grep {$needed{$_}} @packs; + 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} @packs; + $notdone{$_} = 0 for @res; # already did those + my @todo = @packs; + 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, + print STDERR "cycle: ".join(' -> ', @cyc)."\n"; + my $breakv; + if ($buildp) { + my @b = grep {$buildp->{$_}} @cyc; + $breakv = $b[0] if @b; + } + if (!defined($breakv)) { + my @b = @cyc; + @b = sort {$needed{$a} <=> $needed{$b} || $a cmp $b} @b; + $breakv = $b[0]; + } + push @cyc, $cyc[0]; + shift @cyc while $cyc[0] ne $breakv; + print STDERR " breaking with $breakv -> $cyc[1]\n"; + $deps{$breakv} = [ grep {$_ ne $cyc[1]} @{$deps{$breakv}} ]; + $needed{$breakv}--; + } + } + return @res; +} + +sub orderdeb { + my ($cachedir, @debs) = @_; + my %prov; + my %req; + for my $deb (@debs) { + my %q = Build::debq("$cachedir/$deb.deb"); + if (!%q) { + $req{$deb} = []; + push @{$prov{$deb}}, $deb; + next; + } + my @provides = split(',\s*', $q{'PROVIDES'} || ''); + s/\s.*// for @provides; #for now + my @depends = split(',\s*', $q{'DEPENDS'} || ''); + my @predepends = split(',\s*', $q{'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, $q{'PACKAGE'}; + $req{$deb} = \@depends; + push @{$prov{$_}}, $deb for @provides; + } + for my $deb (@debs) { + $req{$deb} = [ map {$prov{$_} ? $prov{$_}->[0] : $_} @{$req{$deb}} ]; + } + return sortpacks(\%req, @debs); +} + +my $cachedir = shift @ARGV; +my @debs = @ARGV; +@debs = orderdeb($cachedir, @debs); +print "@debs\n"; +exit(0); diff --git a/expanddeps b/expanddeps new file mode 100755 index 000000000..b75712f8f --- /dev/null +++ b/expanddeps @@ -0,0 +1,215 @@ +#!/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; + } + last; +} +$configdir = '.' unless defined $configdir; +$archs = '' unless defined $archs; +die("you must specfiy a depfile!\n") unless defined $rpmdeps; + +my @extradeps = grep {!/\.(?:spec|dsc)$/} @ARGV; +my @specs = grep {/\.(?:spec|dsc)$/} @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); + +open(F, '<', $rpmdeps) || die("$rpmdeps: $!\n"); +my %packs_arch; +while() { + chomp; + if (/^F:(.*?)-\d+\/\d+\/\d+: (.*)$/) { + next if $fn{$1}; + $fn{$1} = $2; + my $pack = $1; + $pack =~ /^(.*)\.([^\.]+)$/ or die; + push @{$packs_arch{$2}}, $1; + } elsif (/^P:(.*?)-\d+\/\d+\/\d+: (.*)$/) { + next if $prov{$1}; + $prov{$1} = $2; + } elsif (/^R:(.*?)-\d+\/\d+\/\d+: (.*)$/) { + next if $req{$1}; + $req{$1} = $2; + } +} +close F; + +my %packs; +for my $arch (@archs) { + $packs{$_} ||= "$_.$arch" for @{$packs_arch{$arch} || []}; +} + +if (!defined($dist) || $dist eq '') { + my $rpmarch = (grep {$fn{"rpm.$_"}} @archs)[0]; + if (!$rpmarch) { + $dist = 'default'; + } else { + my $rpmfn = $fn{"rpm.$rpmarch"}; + my $rpmdist = `rpm -qp --nodigest --nosignature --qf '%{DISTRIBUTION}' $rpmfn`; + chomp $rpmdist; + $rpmdist = lc($rpmdist); + $rpmdist =~ s/-/_/g; + my $rpmdista = $rpmdist; + $rpmdista =~ s/.*\(//; + $rpmdista =~ s/\).*//; + $rpmdista =~ s/i[456]86/i386/; + $rpmdist = '' unless $rpmdista =~ /^(i386|x86_64|ia64|ppc|ppc64|s390|s390x)$/; + if ($rpmdist =~ /unitedlinux 1\.0.*/) { + $dist = "ul1-$rpmdista"; + } elsif ($rpmdist =~ /suse sles_(\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"; + } else { + $dist = 'default'; + } + } +} + +my $cdist = $dist; +$cdist =~ s/-.*//; +$cdist = "sl$cdist" if $cdist =~ /^\d/; +my $cf = Build::read_config($archs[0], "$configdir/$cdist.conf"); +if (!$cf) { + $cf = Build::read_config($archs[0], "$configdir/default.conf"); + die("default config not found\n") unless $cf; +} + +####################################################################### + +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() { + 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); + } + for (@usedforbuild) { + print "$_ $fn{$packs{$_}}\n"; + } + print "preinstall: @{$cf->{'preinstall'} || []}\n"; + print "dist: $dist\n" if defined $dist; + exit(0); +} + +####################################################################### + +my ($packname, $packvers, $subpacks, @packdeps); +$subpacks = []; + +if ($spec) { + if ($spec =~ /\.dsc$/) { + ($packname, $packvers, $subpacks, @packdeps) = Build::read_dsc($cf, $spec); + } else { + ($packname, $packvers, $subpacks, @packdeps) = Build::read_spec($cf, $spec); + } +} + +my %repo; +for my $pack (keys %packs) { + my $r = {}; + my (@s, $s, @pr, @re); + @s = split(' ', $prov{$packs{$pack}}); + while (@s) { + $s = shift @s; + next if $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 $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; +} +Build::readrpmdeps($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); +} + +for (@bdeps) { + print "$_ $fn{$packs{$_}}\n"; +} +print "preinstall: @{$cf->{'preinstall'} || []}\n"; +print "dist: $dist\n" if defined $dist; diff --git a/extractbuild b/extractbuild new file mode 100755 index 000000000..115e423e8 --- /dev/null +++ b/extractbuild @@ -0,0 +1,99 @@ +#!/usr/bin/perl + +use strict; + +$ENV{'PATH'} = "/bin:/usr/bin:/sbin:/usr/sbin"; + +$| = 1; + +sub ls { + local *D; + opendir(D, $_[0]) || return (); + my @r = grep {$_ ne '.' && $_ ne '..'} readdir(D); + closedir D; + return @r; +} + +open(F, ') { + chomp; + $l .= $_; + my $q = $l =~ tr/\'/\'/; + if ($q < 2 || ($q - 2) % 3 != 0) { + $l .= "\n"; + next; + } + if ($l =~ /^([a-zA-Z0-9]*)=\'(.*)\'$/s) { + $var = $1; + $val = $2; + $val =~ s/\'\\\'\'/\'/gs; + $vars{$var} = $val; + } + $l = ''; +} +close F; + +my $xenswap = $vars{'XENSWAP'}; +die("need XENSWAP for swapout operation\n") unless $xenswap; +system("umount -l /dev 2>/dev/null"); +die("$xenswap: $!\n") unless -e $xenswap; +open(S, '>', $xenswap) || die("$xenswap: $!\n"); + +my $specfile = $vars{'SPECFILE'}; +die("no specfile/dscfile\n") unless $specfile; +my $topdir = '/usr/src/packages'; +my $psuf = 'deb'; +my @dirs = ($topdir); +if ($specfile =~ /\.spec$/) { + $topdir = `rpm --eval '%_topdir'`; + chomp $topdir; + die("rpm returned no topdir\n") unless $topdir; + die("rpm returned bad topdir\n") unless -d $topdir; + @dirs = map {"$topdir/RPMS/$_"} ls("$topdir/RPMS"); + unshift @dirs, "$topdir/SRPMS"; + $psuf = 'rpm'; +} +my @packs; +for my $dir (@dirs) { + push @packs, map {"$dir/$_"} grep {/$psuf$/} ls($dir); +} +unshift @packs, '/.build.log'; + +my $cpio = ''; +for my $pack (@packs) { + print "$pack\n"; + my @s = stat($pack); + my $n = $pack; + $n =~ s/.*\///; + $n = 'logfile' if $n eq '.build.log'; + die("$pack: $!\n") unless @s; + $cpio .= "07070100000000000081a4000000000000000000000001"; + $cpio .= sprintf("%08x%08x", $s[9], $s[7]); + $cpio .= "00000000000000000000000000000000"; + $cpio .= sprintf("%08x", length($n) + 1); + $cpio .= "00000000"; + $cpio .= "$n\0"; + $cpio .= substr("\0\0\0\0", (length($cpio) & 3)) if length($cpio) & 3; + open(F, '<', $pack) || die("$pack: $!\n"); + my $l = $s[7]; + while ($l) { + my $ll = sysread(F, $cpio, $l > 8192 ? 8192 : $l, length($cpio)); + die("$pack: $!\n") unless $ll; + die if $ll > $l; + $l -= $ll; + if (length($cpio) > 4096) { + (syswrite(S, $cpio, 4096) || 0) == 4096 || die("swap write: $!\n"); + $cpio = substr($cpio, 4096); + } + } + $cpio .= substr("\0\0\0\0", (length($cpio) & 3)) if length($cpio) & 3; +} +$cpio .= "07070100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000b00000000TRAILER!!!\0\0\0\0"; +$cpio .= "\0" x (4096 - length($cpio) % 4096) if length($cpio) % 4096; +while (length($cpio)) { + (syswrite(S, $cpio, 4096) || 0) == 4096 || die("swap write: $!\n"); + $cpio = substr($cpio, 4096); +} +exec('halt -f'); diff --git a/getmacros b/getmacros new file mode 100755 index 000000000..76429b968 --- /dev/null +++ b/getmacros @@ -0,0 +1,39 @@ +#!/usr/bin/perl -w + +use strict; + +my ($dist, $configdir); + +while (@ARGV) { + if ($ARGV[0] eq '--dist') { + shift @ARGV; + $dist = shift @ARGV; + next; + } + if ($ARGV[0] eq '--configdir') { + shift @ARGV; + $configdir = shift @ARGV; + next; + } + last; +} +$configdir = '.' unless defined $configdir; +$dist = '' unless defined $dist; + +die("Usage: getmacros --dist [--configdir ]\n") if !defined($dist) || @ARGV; +local *F; +if ($dist =~ /\//) { + open(F, '<', $dist) || die("$dist: $!\n"); +} else { + $dist =~ s/-.*//; + $dist = "sl$dist" if $dist =~ /^\d/; + open(F, '<', "$configdir/$dist.conf") || open(F, '<', "$configdir/default.conf") || die("config not found\n"); +} +my $inmacro = 0; +while() { + if (!$inmacro) { + $inmacro = 1 if /^\s*macros:/i; + next; + } + print; +} diff --git a/init_buildsystem b/init_buildsystem new file mode 100755 index 000000000..fe53f0668 --- /dev/null +++ b/init_buildsystem @@ -0,0 +1,604 @@ +#!/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} +PROC_IS_MOUNTED= + +# should RPMs be installed with --force ? +USE_FORCE=false + +BUILD_IS_RUNNING=$BUILD_ROOT/not-ready +TMPFILE=$BUILD_ROOT/tmpfile +RPMIDFMT="%{NAME}-%{VERSION}-%{RELEASE} %{BUILDHOST}-%{BUILDTIME}\n" + +PREPARE_XEN= +USEUSEDFORBUILD= +RPMLIST= + +while test -n "$1" ; do + case $1 in + --prepare) + shift + PREPARE_XEN=true + ;; + --useusedforbuild) + shift + USEUSEDFORBUILD=--useusedforbuild + ;; + --rpmlist) + shift + RPMLIST=$1 + shift + ;; + *) + break + ;; + esac +done +PKGS="$*" + +# +# needed functions +# + +function cleanup_and_exit { + test -n "$PROC_IS_MOUNTED" && umount -n $BUILD_ROOT/proc 2>/dev/null + exit ${1:-0} +} + +function clean_build_root () { + test -n "$BUILD_ROOT" && { + 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 + rm -rf $BUILD_ROOT/* + } +} + +function preinstall { + if test -n "$1" ; then + echo "preinstalling $1..." + cd $BUILD_ROOT || cleanup_and_exit 1 + if test -e "$BUILD_ROOT/.init_b_cache/rpms/$1.rpm" ; then + rpm2cpio "$BUILD_ROOT/.init_b_cache/rpms/$1.rpm" | cpio --extract --unconditional --preserve-modification-time --make-directories --no-absolute-filenames --quiet + 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 + else + 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 -xzf control.tar.gz + tar xzf data.tar.gz + 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 + rm -rf .init_b_cache/scripts/control control.tar.gz data.tar.gz + fi + fi + if test -n "$2" ; then + for PKG in $PACKAGES_TO_PREINSTALL ; 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 + done + fi +} + +function init_db { + if test $PSUF = rpm ; then + echo initializing rpm db... + chroot $BUILD_ROOT rpm --initdb || cleanup_and_exit 1 + 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 +} + +function reorder { + REORDER_HAVE= + if test $PSUF = deb ; then + $BUILD_DIR/debsort $BUILD_ROOT/.init_b_cache/rpms "$@" + return + fi + rm -rf $BUILD_ROOT/.reorder + mkdir -p $BUILD_ROOT/.reorder/.db + rpm --initdb --dbpath $BUILD_ROOT/.reorder/.db + for PKG in "$@" ; do + touch $BUILD_ROOT/.reorder/$PKG + test -e $BUILD_ROOT/.init_b_cache/alreadyinstalled/$PKG && continue + test -f $BUILD_ROOT/.init_b_cache/rpms/$PKG.rpm && REORDER_HAVE="$REORDER_HAVE +$PKG.rpm" + done + if test -z "$REORDER_HAVE"; then + rm -rf $BUILD_ROOT/.reorder + echo "$@" + return + fi + # manifest must be at least 96 bytes... + echo "################################################################################################" "$REORDER_HAVE" > $BUILD_ROOT/.reorder/MANIFEST.rpm + bash -c "cd $BUILD_ROOT/.init_b_cache/rpms && rpm -Uvv --dbpath $BUILD_ROOT/.reorder/.db --nosuggest --nodigest --nosignature --ignoresize --force --nodeps --test $BUILD_ROOT/.reorder/MANIFEST.rpm" 2>&1 | sed -n -e 's/-[^- ]*-[^- ]* / /' -e 's/^D: install: \([^ ]*\) .*/\1/p' > $BUILD_ROOT/.reorder/.list + rm -f $BUILD_ROOT/.reorder/MANIFEST.rpm + REORDER_HAVE= + for PKG in `cat $BUILD_ROOT/.reorder/.list`; do + test -e $BUILD_ROOT/.reorder/$PKG || continue + REORDER_HAVE="$REORDER_HAVE $PKG" + rm $BUILD_ROOT/.reorder/$PKG + done + for PKG in "$@" ; do + test -e $BUILD_ROOT/.reorder/$PKG || continue + REORDER_HAVE="$REORDER_HAVE $PKG" + REORDER_MISSED="$REORDER_MISSED $PKG" + rm $BUILD_ROOT/.reorder/$PKG + done + echo $REORDER_HAVE +} + +function create_devs { + local com file mode arg + + mkdir -m 755 -p $BUILD_ROOT/dev/pts + 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 +} + +function validate_cache_file { + test "$BUILD_RPMS" != "$(cat $CACHE_FILE.id 2>/dev/null)" && rm -f $CACHE_FILE.id + test -f $CACHE_FILE || rm -f $CACHE_FILE.id + for SRC in ${BUILD_RPMS//:/ } ; do + test -z "$SRC" && SRC=. + test $SRC -nt $CACHE_FILE && rm -f $CACHE_FILE.id + done + if ! test -f $CACHE_FILE.id ; then + echo initializing $CACHE_FILE with find command... + for SRC in ${BUILD_RPMS//:/ } ; do + test -z "$SRC" && SRC=. + find $SRC -type f -name packages -print -o -follow -type f \( -name "*.rpm" -o -name "*.deb" \) -a ! -name "*src.rpm" -printf '%T@/%s/%i %p\n' + echo + done | createrpmdeps $CACHE_FILE > $CACHE_FILE.new + mv $CACHE_FILE.new $CACHE_FILE + echo "$BUILD_RPMS" > $CACHE_FILE.id + 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 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 -n "[y/N] " + read ANSWER + test "$ANSWER" != y && { + exit + } + clean_build_root +fi + +# +# store that we start to build system +# +mkdir -p $BUILD_ROOT +touch $BUILD_IS_RUNNING + +if test -e $BUILD_ROOT/.build/init_buildsystem.data ; then + # xen continuation + . $BUILD_ROOT/.build/init_buildsystem.data + if ! test -e $BUILD_ROOT/.init_b_cache/preinstall_finished ; then + # finish preinstall + preinstall '' true + 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 + echo "expanding package dependencies..." + if ! expanddeps $USEUSEDFORBUILD --dist "$BUILD_DIST" --depfile "$CACHE_FILE" --archpath "$BUILD_ARCH" --configdir $BUILD_DIR/configs $PKGS > $RPMLIST ; then + cleanup_and_exit 1 + fi + fi + PACKAGES_TO_INSTALL= + 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" = "dist:" ; then + GUESSED_DIST=$SRC + continue + fi + ln -s "$SRC" "$BUILD_ROOT/.init_b_cache/rpms/$PKG.${SRC##*.}" + PACKAGES_TO_INSTALL="$PACKAGES_TO_INSTALL $PKG" + done < $RPMLIST + echo "$GUESSED_DIST" > $BUILD_ROOT/.guessed_dist + PSUF=rpm + test -L $BUILD_ROOT/.init_b_cache/rpms/rpm.rpm || PSUF=deb + if test -n "$PREPARE_XEN" ; then + # add util-linux/binutils/mount to preinstall list + test "$PACKAGES_TO_PREINSTALL" = "${PACKAGES_TO_PREINSTALL/util-linux}" && PACKAGES_TO_PREINSTALL="$PACKAGES_TO_PREINSTALL util-linux" + test $PSUF = deb -a "$PACKAGES_TO_PREINSTALL" = "${PACKAGES_TO_PREINSTALL/binutils}" && PACKAGES_TO_PREINSTALL="$PACKAGES_TO_PREINSTALL binutils" + test $PSUF = deb -a "$PACKAGES_TO_PREINSTALL" = "${PACKAGES_TO_PREINSTALL/mount}" && PACKAGES_TO_PREINSTALL="$PACKAGES_TO_PREINSTALL mount" + fi +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 + 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 + :> $BUILD_ROOT/var/lib/dpkg/status + :> $BUILD_ROOT/var/lib/dpkg/available + :> $BUILD_ROOT/var/log/dpkg.log + :> $BUILD_ROOT/etc/ld.so.conf + fi + for PKG in $PACKAGES_TO_PREINSTALL ; do + preinstall ${PKG##*/} + done + test -c $BUILD_ROOT/dev/null || create_devs + if test -z "$PREPARE_XEN" ; then + preinstall '' true + init_db + touch $BUILD_ROOT/.init_b_cache/preinstall_finished + fi +fi + +if test -n "$PREPARE_XEN" ; then + mkdir -p $BUILD_ROOT/.build + echo "PACKAGES_TO_INSTALL='${PACKAGES_TO_INSTALL//\'/\'\\\'\'}'" > $BUILD_ROOT/.build/init_buildsystem.data + echo "PACKAGES_TO_PREINSTALL='${PACKAGES_TO_PREINSTALL//\'/\'\\\'\'}'" >> $BUILD_ROOT/.build/init_buildsystem.data + echo "PSUF='$PSUF'" >> $BUILD_ROOT/.build/init_buildsystem.data + 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 + done + rm -f $BUILD_IS_RUNNING + exit 0 +fi + +mkdir -p $BUILD_ROOT/proc +mount -n -tproc none $BUILD_ROOT/proc 2> /dev/null +PROC_IS_MOUNTED=true + +test -e $BUILD_ROOT/etc/ld.so.conf || \ + cp $BUILD_ROOT/etc/ld.so.conf.in $BUILD_ROOT/etc/ld.so.conf +chroot $BUILD_ROOT /sbin/ldconfig 2> /dev/null + +# +# 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 +# +echo -n 'reordering...' +REORDER_MISSED= +PACKAGES_TO_INSTALL_FIRST=`reorder $PACKAGES_TO_INSTALL_FIRST` +PACKAGES_TO_INSTALL=`reorder $PACKAGES_TO_INSTALL` +echo 'done' +test -n "$REORDER_MISSED" && echo "WARNING: reorder missed$REORDER_MISSED" + +# +# delete all packages we don't want +# +cp -a $BUILD_ROOT/.init_b_cache/alreadyinstalled $BUILD_ROOT/.init_b_cache/todelete +for PKG in $PACKAGES_TO_INSTALL_FIRST $PACKAGES_TO_INSTALL ; 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 `sed -e 's/ .*//' < $BUILD_ROOT/.init_b_cache/todelete/$PKG` + chroot $BUILD_ROOT rpm --nodeps -e $PKG 2>&1 | \ + grep -v "^r.*failed: No such file or directory" +done +rm -rf $BUILD_ROOT/.init_b_cache/todelete + +rm -rf $BUILD_ROOT/installed-pkg +mkdir -p $BUILD_ROOT/installed-pkg + +RPMCHECKOPTS= +RPMCHECKOPTS_HOST= +test -x $BUILD_ROOT/usr/lib/rpm/rpmi && RPMCHECKOPTS="--nodigest --nosignature" +test -x /usr/lib/rpm/rpmi && RPMCHECKOPTS_HOST="--nodigest --nosignature" + +for PKG in $PACKAGES_TO_INSTALL_FIRST RUN_LDCONFIG $PACKAGES_TO_INSTALL ; 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 -i --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' + test -e $BUILD_ROOT/exit && cleanup_and_exit 1 + echo "$PKGID debian" > $BUILD_ROOT/installed-pkg/$PKG + continue + fi + + test -L $BUILD_ROOT/.init_b_cache/rpms/$PKG.rpm || continue + + 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 + if test "$PKGID" != "`cat $BUILD_ROOT/.init_b_cache/alreadyinstalled/$PKG`" ; then + echo deleting unwanted `sed -e 's/ .*//' < $BUILD_ROOT/.init_b_cache/alreadyinstalled/$PKG` + chroot $BUILD_ROOT rpm --nodeps -e $PKG 2>&1 | \ + grep -v "^r.*failed: No such file or directory" + 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%% *} + chroot $BUILD_ROOT rpm --nodeps -e $PKG 2>&1 | \ + grep -v "^r.*failed: No such file or directory" + 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 + fi + export ADDITIONAL_PARAMS= + if test "$USE_FORCE" = true ; then + export ADDITIONAL_PARAMS="$ADDITIONAL_PARAMS --force" + 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 --nodeps -U --oldpackage --ignoresize $RPMCHECKOPTS \ + $ADDITIONAL_PARAMS .init_b_cache/$PKG.rpm 2>&1 || \ + touch $BUILD_ROOT/exit ) | \ + grep -v "^warning:.*saved as.*rpmorig$" + rm -f $BUILD_ROOT/.init_b_cache/$PKG.rpm + test -e $BUILD_ROOT/exit && cleanup_and_exit 1 + echo "$PKGID" > $BUILD_ROOT/installed-pkg/$PKG +done + +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 -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 + +rm -rf $BUILD_ROOT/.init_b_cache + +rm -f $BUILD_IS_RUNNING + +rm -f $TMPFILE + +cleanup_and_exit 0 diff --git a/mkbaselibs b/mkbaselibs new file mode 100755 index 000000000..769032108 --- /dev/null +++ b/mkbaselibs @@ -0,0 +1,874 @@ +#!/usr/bin/perl -w + +use POSIX; +use strict; + +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, +); + +# do not mix numeric tags with symbolic tags. +# special symbolic tag 'FILENAME' exists. +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 @baselib; +my @config; + +my @provides; +my @obsoletes; +my @requires; +my @prerequires; +my @conflicts; + +my @prein; +my @postin; +my @preun; +my @postun; + +sub parse_config { + my $target = shift; + my $pkgname = shift; + my $pkgver = shift; + + my $pkghasmatched; + + my $pkgmatches = 1; + $prefix = ''; + $extension = ''; + $configdir = ''; + $targetname = ''; + ($targetarch, $targettype) = split(':', $target, 2); + @baselib = (); + @config = (); + @provides = (); + @obsoletes = (); + @requires = (); + @prerequires = (); + @conflicts = (); + @prein = (); + @postin = (); + @preun = (); + @postun = (); + my $match1 = ''; + + for (split("\n", $config)) { + s/^\s+//; + s/\s+$//; + next if $_ eq '' || $_ =~ /^#/; + + s/\/$targettype/g; + s/\/$targetarch/g; + s/\/$pkgname/g; + s/\/$pkgver/g; + s/\/$prefix/g; + s/\/$extension/g; + s/\/$configdir/g; + s/\/$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 (/^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; + 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 (/^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; } + die("bad line: $_\n"); + } + return $pkghasmatched; +} + +sub read_config { + my $cfname = shift; + local *F; + open(F, "<$cfname") || die("$cfname: $!\n"); + my @cf = ; + close F; + $config .= join('', @cf); + $config .= "\npackage __does_not_match__\n"; +} + +sub get_targets { + my %targets; + for (split("\n", $config)) { + if (/^arch\s+/) { + next unless s/^arch\s+\Q$arch\E\s+//; + } + if (/^targets\s+(.*?)$/) { + $targets{$_} = 1 for split(' ', $1); + } + } + my @targets = sort keys %targets; + return @targets; +} + +sub get_pkgnames { + my %rpms; + for (split("\n", $config)) { + if (/^(.*\s+)?package\s+([-+_a-zA-Z0-9]+)\s*$/) { + $rpms{$2} = 1; + } elsif (/^\s*([-+_a-zA-Z0-9]+)\s*$/) { + $rpms{$1} = 1; + } + } + return sort keys %rpms; +} + +my $verbose; + +die("Usage: mkbaselibs \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(); +my @rpms = @ARGV; +for my $rpm (splice @rpms) { + my $rpmn = $rpm; + next if $rpm =~ /\.(no)?src\.rpm$/; + next if $rpm =~ /\.spm$/; + $rpmn =~ s/.*\///; + $rpmn =~ s/-[^-]+-[^-]+\.[^\.]+\.rpm$/\.rpm/; + $rpmn =~ s/\.rpm$//; + push @rpms, $rpm if $goodpkgs{$rpmn}; +} +for (@rpms) { + die("$_: need absolute path to rpm\n") unless /^\//; +} + +exit 0 unless @rpms; + +my @filesystem = split("\n", `rpm -ql filesystem 2>/dev/null`); +die("filesystem rpm is not installed\n") unless @filesystem; + +for $rpm (@rpms) { + + 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'; + 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 =~ /^(.*)-([^-]+)-([^-]+)$/; + $sname = $1; + my $sversion = $2; + my $srelease = $3; + + $arch = $res{'ARCH'}->[0]; + my @targets = get_targets(); + 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; + + 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; + + my $specfile = "/usr/src/packages/SPECS/mkbaselibs$$.spec"; + unlink($specfile); + print "$rname($target): writing specfile...\n"; + open(SPEC, ">$specfile") || die("$specfile: $!\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 "Autoreqprov: on\n"; + 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; + print SPEC "$p: $d\n"; + } + + for my $ar ([\@provides, 'provides'], + [\@prerequires, 'prereq'], + [\@requires, 'requires'], + [\@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; + 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 <.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 <.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); + } +} diff --git a/substitutedeps b/substitutedeps new file mode 100755 index 000000000..a95aef25e --- /dev/null +++ b/substitutedeps @@ -0,0 +1,129 @@ +#!/usr/bin/perl -w + +BEGIN { + unshift @INC, ($::ENV{'BUILD_DIR'} || '/usr/lib/build'); +} + +use strict; + +use Build; + +my ($dist, $rpmdeps, $archs, $configdir, $release); + +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 '--release') { + shift @ARGV; + $release = shift @ARGV; + next; + } + if ($ARGV[0] eq '--configdir') { + shift @ARGV; + $configdir = shift @ARGV; + next; + } + last; +} +$configdir = '.' unless defined $configdir; +$archs = '' unless defined $archs; +$dist = '' unless defined $dist; + +die("Usage: substitutedeps --dist --archpath [--configdir ] \n") unless @ARGV == 2; +my $spec = $ARGV[0]; +my $newspec = $ARGV[1]; + +my @archs = split(':', $archs); +push @archs, 'noarch' unless grep {$_ eq 'noarch'} @archs; + +my $cf; +if ($dist =~ /\//) { + die("$dist: $!\n") unless -e $dist; + $cf = Build::read_config($archs[0], $dist); +} else { + $dist =~ s/-.*//; + $dist = "sl$dist" if $dist =~ /^\d/; + $cf = Build::read_config($archs[0], "$configdir/$dist.conf"); + if (!$cf) { + $cf = Build::read_config($archs[0], "$configdir/default.conf"); + } +} +die("config not found\n") unless $cf; + +####################################################################### + +my ($packname, $packvers, $subpacks, @packdeps); +$subpacks = []; + +my $xspec = []; +($packname, $packvers, $subpacks, @packdeps) = Build::read_spec($cf, $spec, $xspec); +my @sdeps = @packdeps; +my @neg = map {substr($_, 1)} grep {/^-/} @packdeps; +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"); + +for my $l (@$xspec) { + if (!ref($l)) { + $l =~ s/^(Release:\s*).*/$1$release/i if $release; + if ($l !~ /^BuildRequires:/i) { + print F "$l\n"; + next; + } + $l = [$l, $l]; + } else { + if (!defined($l->[1])) { + $l->[0] =~ s/^(Release:\s*).*/$1$release/i if $release; + print F "$l->[0]\n"; + next; + } + $l->[1] =~ s/^(Release:\s*).*/$1$release/i if $release; + if ($l->[1] !~ /^BuildRequires:/i) { + print F "$l->[1]\n"; + next; + } + } + my $r = $l->[1]; + $r =~ s/^[^:]*:\s*//; + my @deps = $r =~ /([^\s\[\(,]+)(\s+[<=>]+\s+[^\s\[,]+)?[\s,]*/g; + my @ndeps = (); + my $replace = 0; + my %f2 = @deps; + my @f2 = Build::do_subst($cf, grep {!/^-/} keys %f2); + %f2 = map {$_ => 1} @f2; + delete $f2{$_} for @neg; + while (@deps) { + my ($pack, $vers) = splice(@deps, 0, 2); + $vers = '' unless defined $vers; + if ($sdeps{$pack}) { + push @ndeps, "$pack$vers"; + delete $f2{$pack}; + } else { + $replace = 1; + } + } + if (%f2) { + push @ndeps, sort keys %f2; + $replace = 1 + } + if ($replace) { + print F "BuildRequires: ".join(' ', @ndeps)."\n" if @ndeps; + } else { + print F "$l->[1]\n"; + } +} +close(F) || die("close: $!\n"); + +exit(0); diff --git a/xen.conf b/xen.conf new file mode 100644 index 000000000..0d8afdbea --- /dev/null +++ b/xen.conf @@ -0,0 +1,35 @@ +# -*- mode: python; -*- +#============================================================================ +# Python configuration setup for 'xm create'. +# This script sets the parameters used when a domain is created using 'xm create'. +# You use a separate script for each domain you want to create, or +# you can set the parameters for the domain on the xm command line. +#============================================================================ + +kernel = "/boot/vmlinuz-xen" +ramdisk = "/boot/initrd-xen" +memory = 64 +# name = "bsbuild01" +# List of which CPUS this domain is allowed to use, default Xen picks +#cpus = "" # leave to Xen to pick +#cpus = "0" # all vcpus run on CPU0 +#cpus = "0-3,5,^1" # run on cpus 0,2,3,5 +#---------------------------------------------------------------------------- +# Define the disk devices you want the domain to have access to, and +# what you want them accessible as. +# Each disk entry is of the form phy:UNAME,DEV,MODE +# where UNAME is the device, DEV is the device name the domain will see, +# and MODE is r for read-only, w for read-write. + +# disk = [ 'file:/tmp/xentest.img,hda1,w' ] + +# Set root device. +root = "/dev/hda1 ro" + +# Sets init=build, reboot on panic +extra = "init=/bin/bash panic=1" + +on_poweroff = 'destroy' +on_reboot = 'destroy' +on_crash = 'destroy' +