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

  Server: cvs.openpkg.org                  Name:   Thomas Lotterer
  Root:   /v/openpkg/cvs                   Email:  [EMAIL PROTECTED]
  Module: openpkg-tools                    Date:   20-Feb-2007 23:24:42
  Branch: HEAD                             Handle: 2007022022244200

  Modified files:
    openpkg-tools/cmd       build.pl

  Log:
    make "openpkg build" use "openpkg curl" for downloading indices,
    sources and binaries; add -k option to keep downloaded packages after
    use

  Summary:
    Revision    Changes     Path
    1.41        +48 -20     openpkg-tools/cmd/build.pl
  ____________________________________________________________________________

  patch -p0 <<'@@ .'
  Index: openpkg-tools/cmd/build.pl
  ============================================================================
  $ cvs diff -u -r1.40 -r1.41 build.pl
  --- openpkg-tools/cmd/build.pl        1 Jan 2007 17:45:10 -0000       1.40
  +++ openpkg-tools/cmd/build.pl        20 Feb 2007 22:24:42 -0000      1.41
  @@ -34,7 +34,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_H, $opt_i,
      $opt_D, $opt_p, $opt_q, $opt_s, $opt_S, $opt_X, $opt_M,
  -   $opt_L, $opt_W, $opt_K, $opt_e, $opt_b, $opt_B, $opt_g
  +   $opt_L, $opt_W, $opt_K, $opt_e, $opt_b, $opt_B, $opt_g,
  +   $opt_k
   );
   
   #   global context variables
  @@ -46,7 +47,7 @@
   ##
   
   #   parse command line options
  -my $getopts = 'hR:r:f:uUaAzZP:N:E:H:iD:p:qsSXMLWKebBg';
  +my $getopts = 'hR:r:f:uUaAzZP:N:E:H:iD:p:qsSXMLWKebBgk';
   getopts($getopts);
   
   #   parse configuration script options
  @@ -93,6 +94,7 @@
           " -L                generate list of packages in repository 
depending on target\n" .
           " -W                include dependencies as if all build options are 
enabled\n" .
           " -K                keep temporarily installed packages\n" .
  +        " -k                keep temporarily downloaded packages\n" .
           " -e                rebuild exact version of a package from 
repository\n" .
           " -b                build-time check existing binaries for 
dependencies only\n" .
           " -B                build-time check existing binaries for 
dependencies and target\n" .
  @@ -378,9 +380,10 @@
       $bzip2 =~ s/\/bin\/openpkg rpm$/\/lib\/openpkg\/bzip2/;
       my $curl = $rpm;
       $curl =~ s/\/bin\/openpkg rpm$/\/lib\/openpkg\/curl/;
  +    $curl = "$l_prefix/bin/openpkg curl" if (system("$l_prefix/bin/openpkg 
curl file://$l_prefix/etc/openpkg/platform >/dev/null 2>&1") == 0);
   
       #   expand RPM macros holding information
  -    my $c = run("$rpm --eval '%{_rpmdir} %{_rpmfilename} %{_target_os} 
%{_target_cpu}'");
  +    my $c = run("$rpm --eval '%{_rpmdir} %{_rpmfilename} %{_target_os} 
%{_target_cpu} %{_srcrpmdir}'");
   
       #   parse and post-process information
       chomp($c);
  @@ -400,6 +403,7 @@
           bzip2    => $bzip2,
           curl     => $curl,
           rpmdir   => $q[0],
  +        srcrpmdir=> $q[4],
           template => $q[1],
           platform => '',
           prefix   => $l_prefix,
  @@ -2399,6 +2403,12 @@
       }
   }
   
  +#   compute path to source RPM from rpm config and target data
  +sub target2srcrpm ($$) {
  +    my ($target, $c) = @_;
  +    return 
$c->{srcrpmdir}.'/'.$target->{name}.'-'.$target->{version}.'-'.$target->{release}.'.src.rpm';
  +}
  +
   #   compute path to binary RPM from rpm config and target data
   sub target2rpm ($$) {
       my ($target, $c) = @_;
  @@ -2472,6 +2482,13 @@
       return (glob("$prefix/RPM/PKG/$bpkg"))[0];
   }
   
  +#   indent text to form a block
  +sub indent ($) {
  +    my ($txt) = @_;
  +    $txt =~ s/^/    /gm;
  +    return $txt;
  +}
  +
   #   print commands from package build list
   #   c      -> configuration to derive paths from
   #   uncond -> always do the --rebuild
  @@ -2484,9 +2501,12 @@
       my ($pkg, $spkg, $bpkg, $ppkg);
       my ($opt);
       my ($cmd1, $cmd2, $mark);
  +    my ($cmd3, $srcpkg);
   
       $mark = '::::';
   
  +    my $err;
  +    if ($ignore) { $err = "|| true" } else { $err = "|| exit \$?" };
       foreach (@$list) {
           $pkg = $_->{name};
           $spkg = $_->{href};
  @@ -2494,6 +2514,8 @@
               die "openpkg:build:FATAL: internal error, ",vsn($_)," without 
source URL\n";
           }
           $bpkg = target2rpm($_, $c);
  +        $srcpkg = target2srcrpm($_, $c);
  +        $cmd3 = '';
   
           #   rebuild binary package IF
           #   'unconditional' option
  @@ -2524,36 +2546,37 @@
                           npriv($config->{"mkp"} . " $ppkg").
                           " )";
               } elsif (defined $_->{prefix}) {
  -                $cmd1 = npriv($config->{"curl"} . " -s -o $bpkg $spkg");
  +                $cmd1 = '';
  +                $cmd1 .= npriv($config->{"curl"} . " -# -o $bpkg $spkg 
$err\n");
  +                $cmd3 = npriv("rm -f $bpkg >/dev/null 2>&1 $err\n") unless 
($opt_k);
               } else {
  -                $cmd1 = npriv($config->{"rpm"} . "$opt --rebuild $spkg");
  +                $cmd1 = '';
  +                $cmd1 .= "if test ! -f $srcpkg; then\n";
  +                $cmd1 .= indent(npriv($config->{"curl"} . " -# -o $srcpkg 
$spkg $err\n"));
  +                $cmd1 .= "fi\n";
  +                $cmd1 .= npriv($config->{"rpm"} . "$opt --rebuild $srcpkg 
$err\n");
  +                $cmd1 .= npriv("rm -f $srcpkg >/dev/null 2>&1 $err\n") 
unless ($opt_k);
               }
           }
   
           #   wrap build command with build-time check for existing
           #   binary target
           if (defined($cmd1) && ($allbin || ($usebin && !$_->{GOAL}))) {
  -            $cmd1 = "if test ! -f $bpkg ; then $cmd1 ; fi";
  +            $cmd1 = "if test ! -f $bpkg; then\n".indent($cmd1)."fi\n";
           }
   
           #   if package exist force rpm to copy over new files
           #   better than erasing everything and losing configuration
           #   files
           $opt = ($_->{REBUILD} || ($allbin || ($usebin && !$_->{GOAL}))) ? ' 
--force' : '';
  -        $cmd2 = priv($config->{"rpm"} . "$opt -Uvh $bpkg");
  +        $cmd2 = '';
  +        $cmd2 .= priv($config->{"rpm"} . "$opt -Uvh $bpkg $err\n");
           if ($allbin || ($usebin && !$_->{GOAL})) {
  -            $cmd2 = "if test \".`".$config->{"rpm"}." -q --qf '\%{SIGMD5}' 
$pkg`\" != \".`".$config->{"rpm"}." -qp --qf '\%{SIGMD5}' $bpkg`\"; then $cmd2; 
fi";
  -        }
  -        if ($ignore) {
  -            $cmd2 = "$cmd1 && \\\n$cmd2" if defined $cmd1;
  -        } else {
  -            if (defined $cmd1) {
  -                $cmd2 = "$cmd1 || exit \$?\n$cmd2 || exit \$?"
  -            } else {
  -                $cmd2 = "$cmd2 || exit \$?";
  -            }
  +            $cmd2 = "if test \".`".$config->{"rpm"}." -q --qf '\%{SIGMD5}' 
$pkg`\" != \".`".$config->{"rpm"}." -qp --qf '\%{SIGMD5}' $bpkg`\"; 
then\n".indent($cmd2)."fi\n";
           }
  -        print "echo $mark $spkg $mark\n$cmd2\necho $mark $spkg = \$? 
$mark\n";
  +        $cmd2 = $cmd1.$cmd2 if ($cmd1);
  +        $cmd2 = $cmd2.$cmd3 if ($cmd3);
  +        print "echo $mark $spkg $mark\n".$cmd2."echo $mark $spkg = \$? 
$mark\n";
       }
   }
   
  @@ -2600,6 +2623,7 @@
   [B<-W>]
   [B<-X>]
   [B<-K>]
  +[B<-k>]
   [B<-e>]
   [B<-b>]
   [B<-B>]
  @@ -2688,8 +2712,7 @@
   
   =item B<-i>
   
  -The generated script will ignore errors. However, if a build
  -phase fails the install phase is still skipped.
  +The generated script will ignore run-time errors.
   
   =item B<-q>
   
  @@ -2782,6 +2805,11 @@
   Keep packages that were installed temporarily during the build process.
   Without this option those packages are removed.
   
  +=item B<-k>
  +
  +Keep packages that were downloaded temporarily for installation or building.
  +Without this option those packages are removed.
  +
   =item B<-e>
   
   Rebuild exact version of a package from repository even when you have
  @@ .
______________________________________________________________________
OpenPKG                                             http://openpkg.org
CVS Repository Commit List                     openpkg-cvs@openpkg.org

Reply via email to