OpenPKG CVS Repository http://cvs.openpkg.org/ ____________________________________________________________________________
Server: cvs.openpkg.org Name: Michael van Elst Root: /e/openpkg/cvs Email: [EMAIL PROTECTED] Module: openpkg-re Date: 21-Nov-2002 17:06:31 Branch: HEAD Handle: 2002112116063100 Modified files: openpkg-re openpkg-build Log: support for using binary packages option p selects platfrom different from local rpm target_platform Summary: Revision Changes Path 1.46 +69 -38 openpkg-re/openpkg-build ____________________________________________________________________________ Index: openpkg-re/openpkg-build ============================================================ $ cvs diff -u -r1.45 -r1.46 openpkg-build --- openpkg-re/openpkg-build 21 Nov 2002 14:27:44 -0000 1.45 +++ openpkg-re/openpkg-build 21 Nov 2002 16:06:31 -0000 1.46 @@ -30,7 +30,7 @@ $|=1; # autoflush use strict; -use vars qw/$opt_R $opt_r $opt_f $opt_u $opt_U $opt_a $opt_A $opt_z $opt_Z $opt_P $opt_N $opt_E $opt_i $opt_D/; +use vars qw/$opt_R $opt_r $opt_f $opt_u $opt_U $opt_a $opt_A $opt_z $opt_Z $opt_P $opt_N $opt_E $opt_i $opt_D $opt_p/; ########################################################################## @@ -101,8 +101,8 @@ close(FH); } -getopts('R:r:f:uUaAzZP:N:E:iD:'); -die "usage: $0 [-R rpm] [-r repository] [-f index.rdf] [-uUzZEi] [-P priv-cmd] [-N non-priv-cmd] [-Dwith ...] [-Ename ...] ( [-aA] | patternlist )\n" +getopts('R:r:f:uUaAzZP:N:E:iD:p:'); +die "usage: $0 [-R rpm] [-r repository] [-f index.rdf] [-uUzZEi] [-P priv-cmd] [-N non-priv-cmd] [-p platform] [-Dwith ...] [-Ename ...] ( [-aA] | patternlist )\n" unless $#ARGV >= 0 || ($#ARGV == -1 && ($opt_a || $opt_A)); ########################################################################## @@ -141,7 +141,7 @@ ########################################################################## -my($RPM,$RPM_PRIV,$RPM_NPRIV,$PROG); +my($RPM,$RPM_PRIV,$RPM_NPRIV,$CURL,$PROG); $RPM = $opt_R || $env{''}->{opt}->{'R'} || 'rpm'; $RPM = (`which $RPM` =~ m{^(/.*)})[0]; @@ -156,6 +156,10 @@ $RPM_PRIV = ($opt_P ? $opt_P." ".$RPM : $RPM); $RPM_NPRIV = ($opt_N ? $opt_N." ".$RPM : $RPM); +$CURL = $RPM; +$CURL =~ s/bin\/rpm$/lib\/openpkg\/curl/ + or die "FATAL: cannot deduce curl path from $RPM\n"; + ($PROG) = $0 =~ /(?:.*\/)?(.*)/; sub version_cmp ($$) { @@ -225,7 +229,7 @@ { my($c,@q); - $c = `$RPM_NPRIV --eval '%{_rpmdir} %{_rpmfilename} %{_target_os} %{_target_cpu}'`; + $c = `$RPM_NPRIV --eval '%{_rpmdir} %{_rpmfilename} %{_target_os} %{_target_cpu} %{_target_platform} %{_prefix}'`; chomp($c); (@q) = split(/\s+/,$c); @@ -234,7 +238,9 @@ return { rpmdir => $q[0], - template => $q[1] + template => $q[1], + platform => $q[4], + prefix => $q[5] }; } @@ -383,7 +389,7 @@ sub get_index ($$$) { my($url,$fn,$with) = @_; my($ua,$req,$res,$rdf); - my($bzip2,$curl,$path); + my($bzip2,$path); my(%map,@include); my($fetch); @@ -397,17 +403,12 @@ or die "FATAL: $bzip2 not found\n"; if ($fetch =~ /^\w+:/) { # looks like URL scheme - $curl = $RPM; - $curl =~ s/bin\/rpm$/lib\/openpkg\/curl/ - or die "FATAL: cannot deduce curl path from $RPM\n"; - -x $curl - or die "FATAL: $curl not found\n"; print "# curling index $fetch\n"; if ($fetch =~ /\.bz2$/) { - $path = "$curl -q -s -o - \"$fetch\" | $bzip2 -dc |"; + $path = "$CURL -q -s -o - \"$fetch\" | $bzip2 -dc |"; } else { - $path = "$curl -q -s -o - \"$fetch\" |"; + $path = "$CURL -q -s -o - \"$fetch\" |"; } } else { print "# reading index file $fn\n"; @@ -498,7 +499,7 @@ $release = $body; } elsif ($tag eq 'Platform') { $platform = $body; - } elsif ($tag eq 'Prefix') { + } elsif ($tag eq 'Prefixes') { $prefix = $body; } elsif ($tag eq 'rdf:li') { if ($section eq 'prereq') { @@ -603,7 +604,7 @@ version => $version, release => $release, platform => $_->{'Platform'}->[0], - prefix => $_->{'Prefix'}->[0], + prefix => $_->{'Prefixes'}->[0], depends => ( $_->{'BuildPreReq'}->[0]->{'rdf:bag'}->[0]->{'rdf:li'} || [] ), @@ -624,7 +625,8 @@ } } - close(RFH); + close(RFH) + or die "FATAL: an I/O error occured\n"; # # cannot do real recursions on file handles, so we simply append @@ -659,34 +661,47 @@ # sub chose_source ($$@) { my($env, $name, $vmap, @vers) = @_; - my(@recs,$rec); + my(@recs,@nrecs,$rec); return unless @vers; - @recs = grep { !defined $_->{'platform'} } - map { @{$vmap->{$_}} } - @vers; + @recs = grep { + $env->{sourceonly} ? ( + !(defined $_->{'platform'}) + ) : ( + !(defined $_->{'platform'}) || ( + defined $_->{'prefix'} && + $_->{'platform'} eq $env->{config}->{platform} && + $_->{'prefix'} eq $env->{config}->{prefix} + ) + ) + } map { @{$vmap->{$_}} } @vers; return unless @recs; if (scalar(@recs) > 1) { + @nrecs = grep { + $env->{built}->{$_->{name}} || + $env->{installed}->{$_->{name}} + } @recs; + @recs = @nrecs if @nrecs; + } - $rec = undef; - foreach (@recs) { - if ($env->{built}->{$_->{name}} || - $env->{installed}->{$_->{name}}) { - $rec = $_; - } - } + if (scalar(@recs) > 1 && !$env->{sourceonly}) { + @nrecs = grep { + defined $_->{'platform'} + } @recs; + @recs = @nrecs if @nrecs; + } - unless (defined $rec) { - print "# ambigous sources for $name\n"; - my($i) = 0; - foreach (@recs) { - print "# $i: ".vsn($_)."\n"; - $i++; - } - die "ERROR: ambigous dependency\n"; + if (scalar(@recs) > 1) { + + print "# ambigous sources for $name\n"; + my($i) = 0; + foreach (@recs) { + print "# $i: ".vsn($_)." = $_->{href}\n"; + $i++; } + die "ERROR: ambigous dependency\n"; } else { if ($env->{upgrade}) { @@ -1151,7 +1166,12 @@ !target_suitable(binary_target($_, $bpkg),$with)) { $opt = make_defines($_->{OPTIONS}, $with); - $cmd1 = "$RPM_NPRIV$opt --rebuild $spkg"; + + if (defined $_->{platform}) { + $cmd1 = "$CURL -q -s -o $bpkg $spkg"; + } else { + $cmd1 = "$RPM_NPRIV$opt --rebuild $spkg"; + } } # @@ -1209,6 +1229,10 @@ $config = get_config(); +if (defined $opt_p) { + $config->{platform} = $opt_p; +} + if (defined $opt_r) { $url = $opt_r; $url .= '/' unless $url =~ /\/$/; @@ -1230,6 +1254,7 @@ $repository = get_index($url.'00INDEX.rdf',$opt_f,\%with); ($list,$bonly) = build_list($pattern, { + config => $config, installed => $installed, repository => $repository, built => {}, @@ -1237,7 +1262,13 @@ with => \%with, exclude => \%exclude, upgrade => ($opt_a || $opt_U), - zero => ($opt_z || $opt_Z) + zero => ($opt_z || $opt_Z), + sourceonly => ( + $opt_u || + $opt_U || + $opt_z || + $opt_Z || + scalar(%with) > 0 ) }); die "FATAL: cannot find package\n" unless defined $list; ______________________________________________________________________ The OpenPKG Project www.openpkg.org CVS Repository Commit List [EMAIL PROTECTED]