OpenPKG CVS Repository http://cvs.openpkg.org/ ____________________________________________________________________________
Server: cvs.openpkg.org Name: Ralf S. Engelschall Root: /e/openpkg/cvs Email: [EMAIL PROTECTED] Module: openpkg-re Date: 14-Nov-2002 10:44:26 Branch: HEAD Handle: 2002111409442500 Modified files: openpkg-re openpkg-build Log: add support for priviledge/non-priviledge environment switching (think about sudo) Summary: Revision Changes Path 1.21 +15 -13 openpkg-re/openpkg-build ____________________________________________________________________________ Index: openpkg-re/openpkg-build ============================================================ $ cvs diff -u -r1.20 -r1.21 openpkg-build --- openpkg-re/openpkg-build 13 Nov 2002 17:30:03 -0000 1.20 +++ openpkg-re/openpkg-build 14 Nov 2002 09:44:25 -0000 1.21 @@ -1,4 +1,4 @@ -#!/usr/bin/perl +#!/usr/opkg/bin/perl ## ## openpkg-build -- create build scripts from package index ## @@ -34,11 +34,11 @@ ########################################################################## use Getopt::Std; -use vars qw/$opt_R $opt_r $opt_f $opt_u $opt_U $opt_a $opt_A $opt_z/; +use vars qw/$opt_R $opt_r $opt_f $opt_u $opt_U $opt_a $opt_A $opt_z $opt_P $opt_N/; if (open(FH, "< $ENV{'HOME'}/.openpkg-build.rc")) { while (<FH>) { - if (my($opt,$val) = /^\-([RfruUaAz])\s*(.*?)\s*$/) { + if (my($opt,$val) = /^\-([RfruUaAzPN])\s*(.*?)\s*$/) { $val = 1 unless defined $val; eval "\$opt_$opt = '$val';"; } else { @@ -49,8 +49,8 @@ close(FH); } -getopts('R:r:f:uUaAz'); -die "usage: $0 [-R rpm] [-r repository] [-f index.rdf] [-uUz] ( [-aA] | pattern ) [with..]\n" +getopts('R:r:f:uUaAzP:N:'); +die "usage: $0 [-R rpm] [-r repository] [-f index.rdf] [-uUz] [-P priv-cmd] [-N non-priv-cmd] ( [-aA] | pattern ) [with..]\n" unless $ARGV[0] =~ /^\S+$/ || $opt_a || $opt_A; ########################################################################## @@ -89,11 +89,13 @@ ########################################################################## -my($RPM,$PROG); +my($RPM,$RPM_PRIV,$RPM_NPRIV,$PROG); $RPM = $opt_R || 'rpm'; $RPM = (`which $RPM` =~ m{^(/.*)})[0]; die "FATAL: cannot locate rpm in path\n" unless $RPM =~ m{^/}; +$RPM_PRIV = ($opt_P ? $opt_P." ".$RPM : $RPM); +$RPM_NPRIV = ($opt_N ? $opt_N." ".$RPM : $RPM); ($PROG) = $0 =~ /(?:.*\/)?(.*)/; sub version_cmp ($$) { @@ -163,7 +165,7 @@ { my($c,@q); - $c = `$RPM --eval '%{_rpmdir} %{_rpmfilename} %{_target_os} %{_target_cpu}'`; + $c = `$RPM_NPRIV --eval '%{_rpmdir} %{_rpmfilename} %{_target_os} %{_target_cpu}'`; chomp($c); (@q) = split(/\s+/,$c); @@ -179,7 +181,7 @@ sub get_release () { my($rel,$url); - ($rel) =`$RPM -qi openpkg` =~ /Version:\s*(\S+)/m; + ($rel) =`$RPM_NPRIV -qi openpkg` =~ /Version:\s*(\S+)/m; if ($rel =~ /^\d+$/) { print "# $PROG current($rel)\n"; @@ -197,7 +199,7 @@ sub get_installed () { my(%map); - my(@l) = `$RPM --provides -qa`; + my(@l) = `$RPM_NPRIV --provides -qa`; foreach (@l) { /^(\S+)\s*(?:=\s*([^\s\-]+)-(\S+))?$/; @@ -265,7 +267,7 @@ sub get_with ($;$) { my($pkg,$fn) = @_; - my(@l) = defined $fn ? `$RPM -qi -p $fn` : `$RPM -qi $pkg`; + my(@l) = defined $fn ? `$RPM_NPRIV -qi -p $fn` : `$RPM_NPRIV -qi $pkg`; my(%with); %with = map { /--define\s*'(\S+)\s+(\S+?)'/ } @l; @@ -917,7 +919,7 @@ !target_suitable(binary_target($_, $bpkg),$with)) { $opt = make_defines($_->{OPTIONS}, $with); - print "$RPM$opt --rebuild $url$spkg || exit 1\n"; + print "$RPM_NPRIV$opt --rebuild $url$spkg || exit 1\n"; } # @@ -926,7 +928,7 @@ # files # $opt = $_->{REBUILD} ? ' --force' : ''; - print "$RPM$opt -Uvh $bpkg\n"; + print "$RPM_PRIV$opt -Uvh $bpkg\n"; } } @@ -936,7 +938,7 @@ foreach (@$list) { $pkg = "$_->{name}-$_->{version}-$_->{release}"; - print "$RPM -e $pkg\n"; + print "$RPM_PRIV -e $pkg\n"; } } ______________________________________________________________________ The OpenPKG Project www.openpkg.org CVS Repository Commit List [EMAIL PROTECTED]