OpenPKG CVS Repository
  http://cvs.openpkg.org/
  ____________________________________________________________________________

  Server: cvs.openpkg.org                  Name:   Ralf S. Engelschall
  Root:   /e/openpkg/cvs                   Email:  [EMAIL PROTECTED]
  Module: openpkg-src                      Date:   21-Jan-2003 15:00:29
  Branch: OPENPKG_1_STABLE                 Handle: 2003012114002700

  Modified files:           (Branch: OPENPKG_1_STABLE)
    openpkg-src/openpkg-tool
                            openpkg-build.pl openpkg-index.pl
                            openpkg-tool.spec openpkg.pod

  Log:
    MFC: latest openpkg-tool

  Summary:
    Revision    Changes     Path
    1.39.2.1    +64 -38     openpkg-src/openpkg-tool/openpkg-build.pl
    1.11.2.1    +7  -2      openpkg-src/openpkg-tool/openpkg-index.pl
    1.27.2.4    +2  -2      openpkg-src/openpkg-tool/openpkg-tool.spec
    1.10.2.1    +16 -9      openpkg-src/openpkg-tool/openpkg.pod
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: openpkg-src/openpkg-tool/openpkg-build.pl
  ============================================================================
  $ cvs diff -u -r1.39 -r1.39.2.1 openpkg-build.pl
  --- openpkg-src/openpkg-tool/openpkg-build.pl 16 Jan 2003 14:59:51 -0000      1.39
  +++ openpkg-src/openpkg-tool/openpkg-build.pl 21 Jan 2003 14:00:27 -0000      
1.39.2.1
  @@ -33,8 +33,8 @@
       $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 $opt_q $opt_s $opt_S $opt_X $opt_M $opt_L
  -    $opt_W/;
  -my $getopts = 'R:r:f:uUaAzZP:N:E:iD:p:qsSXMLW';
  +    $opt_W $opt_K/;
  +my $getopts = 'R:r:f:uUaAzZP:N:E:iD:p:qsSXMLWK';
   getopts($getopts);
   
   ##########################################################################
  @@ -150,7 +150,7 @@
   
   ##########################################################################
   
  -my($RPM,$RPM_PRIV,$RPM_NPRIV,$CURL,$PROG);
  +my($RPM,$CURL,$PROG);
   
   $RPM = $opt_R || $env{''}->{'R'} || '@l_prefix@/bin/rpm';
   $RPM = (`which $RPM` =~ m{^(/.*)})[0];
  @@ -163,14 +163,26 @@
       }
   }
   
  -$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 cmd ($$) {
  +    my($w,$s) = @_;
  +    if (!defined $w) {
  +        return $s;
  +    } elsif ($w =~ /^-(.*)/) {
  +        return "$1 '$s'";
  +    } else {
  +        return "$w $s";
  +    }
  +}
  +sub priv  ($) { cmd($opt_P,$_[0]); }
  +sub npriv ($) { cmd($opt_N,$_[0]); }
  +sub run   ($) { my($c) = cmd($opt_N,$_[0]); `$c` }
  +
   sub version_cmp ($$) {
       my($a,$b) = @_;
       my(@a,@b,$c);
  @@ -243,7 +255,7 @@
   {
       my($c,@q,@g);
   
  -    $c = `$RPM_NPRIV --eval '%{_rpmdir} %{_rpmfilename} %{_target_os} 
%{_target_cpu} %{_target_platform} %{_prefix}'`;
  +    $c = run("$RPM --eval '%{_rpmdir} %{_rpmfilename} %{_target_os} %{_target_cpu} 
%{_prefix}'");
       chomp($c);
       (@q) = split(/\s+/,$c);
   
  @@ -251,14 +263,14 @@
       $q[1] =~ s/%{ARCH}/$q[3]/;
   
   
  -    $c = `$RPM_NPRIV --showrc`;
  +    $c = run("$RPM --showrc");
       @g = $c =~ /\%\{l_tool_locate\s+([^\s\}]+)/g;
   
       return {
           rpmdir   => $q[0],
           template => $q[1],
  -        platform => $q[4],
  -        prefix   => $q[5],
  +        platform => '',
  +        prefix   => $q[4],
           optreg   => '(?:'.join('|', map { "\Qwith_$_\E" } @g).')'
           };
   }
  @@ -266,16 +278,13 @@
   sub get_release () {
       my($rel,$url);
   
  -    ($rel) =`$RPM_NPRIV -qi openpkg` =~ /Version:\s*(\S+)/m;
  -
  +    ($rel) = run("$RPM -qi openpkg") =~ /Version:\s*(\S+)/m;
       if ($rel =~ /^\d+$/) {
           print "# $PROG current($rel)\n";
  -        print "# using '$RPM_NPRIV' (build) and '$RPM_PRIV' (install)\n";
           $url = "ftp://ftp.openpkg.org/current/";;
       } elsif ($rel =~ /^(\d+\.\d+)/) {
           $rel = $1;
           print "# $PROG release($rel)\n";
  -        print "# using '$RPM_NPRIV' (build) and '$RPM_PRIV' (install)\n";
           $url = "ftp://ftp.openpkg.org/release/$rel/";;
       } else {
           die "FATAL: don't know how to handle this release\n";
  @@ -416,7 +425,7 @@
   #
   sub get_installed () {
       my(%map);
  -    my(@l) = `$RPM_NPRIV --provides -qa`;
  +    my(@l) = run("$RPM --provides -qa");
       my($p);
       my($nam,$val,%options);
   
  @@ -548,9 +557,9 @@
           $opt = $t->{OPTIONS};
       } else {
           if (defined $fn) {
  -            @l = `$RPM_NPRIV -qi -p $fn`;
  +            @l = run("$RPM -qi -p $fn");
           } else {
  -            @l = `$RPM_NPRIV -qi $t->{name}`;
  +            @l = run("$RPM -qi $t->{name}");
           }
           $opt = parse_options(\@l);
           $t->{OPTIONS} = $opt if $env;
  @@ -633,8 +642,14 @@
       return \@out;
   }
   
  -sub simple_text_parser ($$$$) {
  -    my($fh,$url,$with,$map) = @_;
  +sub goodpf ($$) {
  +    my($l,$p) = @_;
  +    return 1 if $l eq '';
  +    return $l =~ /(?:^|\s)\Q$p\E(?:\s|$)/;
  +}
  +
  +sub simple_text_parser ($$$$$) {
  +    my($fh,$url,$with,$map,$pfmatch) = @_;
       my(@include);
   
       my($section);
  @@ -671,8 +686,12 @@
               @nosource  = ();
           }
   
  -        if (!(defined $href) && /<Repository.*?href="([^"]*)"/) {
  -            push(@include, $1);
  +        if (!(defined $href) &&
  +            /<Repository.*?href="([^"]*)"(?:\s*platform="([^"]*)")?/
  +            ) {
  +            if (goodpf($2,$pfmatch)) {
  +                push(@include, $1)
  +            }
               next;
           }
   
  @@ -809,8 +828,8 @@
       return \@include;
   }
   
  -sub xml_parser ($$$$) {
  -    my($fh, $url, $with, $map) = @_;
  +sub xml_parser ($$$$$) {
  +    my($fh, $url, $with, $map,$pfmatch) = @_;
       my(@include);
   
       my($xml,$desc,$sub);
  @@ -885,7 +904,11 @@
       }
   
       if ($sub) {
  -        @include = map { $_->{href} } @$sub;
  +        @include = map {
  +            goodpf($_->{platform},$pfmatch)
  +            ? ( $_->{href} )
  +            : ( )
  +        } @$sub;
       }
   
       return \@include;
  @@ -929,8 +952,8 @@
   # fetch index from file or URL
   # recursively fetch sub-indexes
   #
  -sub get_index ($$$$) {
  -    my($url,$fn,$with,$noxml) = @_;
  +sub get_index ($$$$$) {
  +    my($url,$fn,$with,$noxml,$pfmatch) = @_;
       my(%map,$include);
   
       open_index($url,$fn);
  @@ -943,9 +966,9 @@
       }
   
       if ($noxml) {
  -        $include = simple_text_parser(\*RFH, $url, $with, \%map);
  +        $include = simple_text_parser(\*RFH, $url, $with, \%map, $pfmatch);
       } else {
  -        $include = xml_parser(\*RFH, $url, $with, \%map);
  +        $include = xml_parser(\*RFH, $url, $with, \%map, $pfmatch);
       }
   
       close(RFH)
  @@ -958,7 +981,7 @@
       foreach (@$include) {
           my($submap);
           my($suburl,$subfn) = relurl($url,$fn,$_);
  -        $submap = get_index($suburl,$subfn,$with,$noxml);
  +        $submap = get_index($suburl,$subfn,$with,$noxml,$pfmatch);
           while (my($name,$vmap) = each %$submap) {
               while (my($vs,$recs) = each %$vmap) {
                   push @{$map{$name}->{$vs}}, @$recs;
  @@ -1522,7 +1545,7 @@
       }
   
       %keep = map { $_ => 1 } @keeps;
  -    @bonly = grep {
  +    @bonly = reverse grep {
                  !$keep{$_} && !$env->{installed}->{$_->{name}}->{vs($_)};
                } @targets;
   
  @@ -1628,7 +1651,7 @@
   #
   sub find_proxy ($$) {
       my($t,$bpkg) = @_;
  -    my(@l) = `$RPM_NPRIV -ql $t->{name}`;
  +    my(@l) = run("$RPM -ql $t->{name}");
       my($link) = (grep { $_ =~ /\/\.prefix-$t->{name}$/ } @l)[0];
       return unless defined $link;
       chomp $link;
  @@ -1727,13 +1750,15 @@
                   #
                   # rpm doesn't support additional parameters to the
                   # mkproxy script
  -                # $cmd1 = "$RPM_NPRIV$opt --makeproxy $ppkg -- -o $bpkg";
  +                # $cmd1 = npriv("$RPM$opt --makeproxy $ppkg -- -o $bpkg");
                   #
  -                $cmd1 = "( cd $c->{rpmdir} && $RPM_NPRIV$opt --makeproxy $ppkg )";
  +                $cmd1 = "( cd $c->{rpmdir} && ".
  +                        npriv("$RPM$opt --makeproxy $ppkg").
  +                        " )";
               } elsif (defined $_->{prefix}) {
  -                $cmd1 = "$CURL -q -s -o $bpkg $spkg";
  +                $cmd1 = npriv("$CURL -q -s -o $bpkg $spkg");
               } else {
  -                $cmd1 = "$RPM_NPRIV$opt --rebuild $spkg";
  +                $cmd1 = npriv("$RPM$opt --rebuild $spkg");
               }
           }
   
  @@ -1743,7 +1768,7 @@
           # files
           #
           $opt = $_->{REBUILD} ? ' --force' : '';
  -        $cmd2 = "$RPM_PRIV$opt -Uvh $bpkg";
  +        $cmd2 = priv("$RPM$opt -Uvh $bpkg");
   
           if ($ignore) {
               $cmd2 = "$cmd1 && \\\n$cmd2" if defined $cmd1;
  @@ -1770,7 +1795,7 @@
   
       foreach (@$list) {
           $pkg = "$_->{name}-$_->{version}-$_->{release}";
  -        print "$RPM_PRIV -e $pkg\n";
  +        print priv("$RPM -e $pkg\n");
       }
   }
   
  @@ -1910,7 +1935,8 @@
                       $url.'00INDEX.rdf',
                       $opt_f,
                       ($opt_W ? undef : \%with),
  -                    $opt_X);
  +                    $opt_X,
  +                    $config->{platform});
   
   $env = {
       config     => $config,
  @@ -1953,7 +1979,7 @@
           }
   
           print_list1($list,$config,$opt_a || $opt_u || $opt_U,\%with,$opt_i);
  -        print_list2($bonly,$config);
  +        print_list2($bonly,$config) unless $opt_K;
       }
   }
   
  @@ .
  patch -p0 <<'@@ .'
  Index: openpkg-src/openpkg-tool/openpkg-index.pl
  ============================================================================
  $ cvs diff -u -r1.11 -r1.11.2.1 openpkg-index.pl
  --- openpkg-src/openpkg-tool/openpkg-index.pl 14 Jan 2003 12:00:55 -0000      1.11
  +++ openpkg-src/openpkg-tool/openpkg-index.pl 21 Jan 2003 14:00:27 -0000      
1.11.2.1
  @@ -683,6 +683,10 @@
       my($q,$pipe,%a);
       my($t,$v);
   
  +    unless (defined $platform) {
  +        die "FATAL: indexing binary package '$fn' requires -p option\n";
  +    }
  +
       $q = <<EOFEOF;
   Name %{Name}
   Version %{Version}
  @@ -753,7 +757,9 @@
       if ($a{'SigMD5'} eq '(unknown type)') {
           delete $a{'SigMD5'};
       }
  -    $a{'Platform'} = "$a{'Arch'}-$platform-$a{'Os'}";
  +    if (defined $platform) {
  +        $a{'Platform'} = $platform;
  +    }
       $a{'PreReq'} =~ s/^rpmlib\(.*$//mg;
       $a{'Description'} = [ $a{'Description'} ];
   
  @@ -924,7 +930,6 @@
   }
   
   $opt_r = 'OpenPKG-CURRENT/Source/' unless defined $opt_r;
  -$opt_p = 'unknown' unless defined $opt_p;
   
   if (defined $opt_o) {
       $tmpo = $opt_o . '.tmp';
  @@ .
  patch -p0 <<'@@ .'
  Index: openpkg-src/openpkg-tool/openpkg-tool.spec
  ============================================================================
  $ cvs diff -u -r1.27.2.3 -r1.27.2.4 openpkg-tool.spec
  --- openpkg-src/openpkg-tool/openpkg-tool.spec        20 Jan 2003 12:38:45 -0000     
 1.27.2.3
  +++ openpkg-src/openpkg-tool/openpkg-tool.spec        21 Jan 2003 14:00:27 -0000     
 1.27.2.4
  @@ -32,8 +32,8 @@
   Distribution: OpenPKG [PLUS]
   Group:        Bootstrapping
   License:      GPL
  -Version:      1.20030120
  -Release:      1.20030120
  +Version:      1.20030121
  +Release:      1.20030121
   
   #   list of sources
   Source0:      openpkg.sh
  @@ .
  patch -p0 <<'@@ .'
  Index: openpkg-src/openpkg-tool/openpkg.pod
  ============================================================================
  $ cvs diff -u -r1.10 -r1.10.2.1 openpkg.pod
  --- openpkg-src/openpkg-tool/openpkg.pod      15 Jan 2003 12:15:46 -0000      1.10
  +++ openpkg-src/openpkg-tool/openpkg.pod      21 Jan 2003 14:00:27 -0000      
1.10.2.1
  @@ -63,6 +63,7 @@
   [B<-L>]
   [B<-W>]
   [B<-X>]
  +[B<-K>]
   [B<-P> I<priv-cmd>]
   [B<-N> I<non-priv-cmd>]
   [B<-p> I<platform>]
  @@ -97,12 +98,9 @@
   
   =item B<-p> I<platform>
   
  -B<openpkg index> adds a platform attribute for binary RPMs. The
  -attribute is built as I<%{arch}>C<->I<platform>C<->I<%{os}> where
  -I<%{arch}> and I<%{os}> are taken from the RPM header and I<platform> is
  -the value of the B<-p> option. The default value is "C<unknown>". This
  -must be used to distinguish between platforms that support the same
  -Architecture and OS name like various Linux distributions.
  +B<openpkg index> adds a platform attribute for binary RPMs. This
  +must be unique to correctly identify a specific architecture, OS
  +and build environment.
   
   =item B<-C> I<cache.db>
   
  @@ -275,20 +273,29 @@
   Ignore an installed XML parser module but use the internal
   simple text parser instead.
   
  +=item B<-K>
  +
  +Keep packages that were installed temporarily during the build process.
  +
   =item B<-P> I<priv-cmd>
   
   Command prefix to use for install commands that require elevated
  -privileges. The most common tool for this is sudo(8).
  +privileges. The most common tool for this is sudo(8). If I<priv-cmd>
  +starts with a dash it will be run without the dash and the command
  +line it should execute is passed as a single quoted string.
   
   =item B<-N> I<non-priv-cmd>
   
   Command prefix to use for install commands that do not require elevated
  -privileges. The most common tool for this is sudo(8).
  +privileges. The most common tool for this is sudo(8). If I<priv-cmd>
  +starts with a dash it will be run without the dash and the command
  +line it should execute is passed as a single quoted string.
   
   =item B<-p> I<platform>
   
   The platform string that is matched against the index for binary
  -packages. Default is to use the I<%{_target_platform}> variable.
  +packages. Default is an empty string so that no binary packages
  +are matched.
   
   =item B<-D>I<var>=I<val>
   
  @@ .
______________________________________________________________________
The OpenPKG Project                                    www.openpkg.org
CVS Repository Commit List                     [EMAIL PROTECTED]

Reply via email to