瀏覽代碼

fix path where target requires an upgrade of a dependency preliminary PROXY package support

Michael van Elst 23 年之前
父節點
當前提交
70cab9f130
共有 1 個文件被更改,包括 27 次插入5 次删除
  1. 27 5
      openpkg-tool/openpkg-build.pl

+ 27 - 5
openpkg-tool/openpkg-build.pl

@@ -272,7 +272,8 @@ sub get_installed () {
         push(@{$map{$1}->{"$2-$3"}}, {
             name       => $1,
             version    => (defined $2 ? $2 : '*'),
-            release    => (defined $3 ? $3 : '*')
+            release    => (defined $3 ? $3 : '*'),
+            PROXY      => ($3 =~ /\+PROXY$/)
         });
     }
 
@@ -429,7 +430,7 @@ sub get_index ($$$) {
         die "FATAL: cannot open '$fetch' ($!)\n";
 
     eval {
-        require XML::Simple;
+        require XML::Somple;
     };
     if ($@) {
 
@@ -926,7 +927,7 @@ sub make_dep ($$$$$) {
             print "# rebuilding $target->{name} (dependency)\n";
         } elsif ($env->{zero}) {
             print "# rebuilding $target->{name} (zero)\n";
-        } elsif ($env->{upgrade} && target_newer($target, $env->{installed})) {
+        } elsif (target_newer($target, $env->{installed})) {
             print "# rebuilding $target->{name} (upgrade)\n";
         } elsif (!target_suitable($t, $env->{with})) {
             print "# rebuilding $target->{name} (parameter mismatch)\n";
@@ -936,6 +937,8 @@ sub make_dep ($$$$$) {
         }
         # use options from installed base
         override_options($target->{OPTIONS}, $t->{OPTIONS});
+        # remember this is a rebuild for a proxy package
+        $target->{PROXY} = $t->{PROXY};
         $target->{REBUILD} = 1;
     }
 
@@ -1118,6 +1121,18 @@ sub binary_target ($$) {
     return \%target;
 }
 
+sub find_proxy ($$) {
+    my($t,$bpkg) = @_;
+    my(@l) = `$RPM_NPRIV -ql sudo`;
+    my($link) = (grep { $_ =~ /\/\.prefix-$t->{name}$/ } @l)[0];
+    return unless defined $link;
+    chomp $link;
+    my($prefix) = readlink($link);
+    return unless defined $prefix;
+    $bpkg =~ s/.*\///;
+    return "$prefix/RPM/PKG/$bpkg";
+}
+
 sub make_defines ($$) {
     my($old, $new) = @_;
     my($with);
@@ -1151,7 +1166,7 @@ sub make_defines ($$) {
 
 sub print_list1 ($$$@$) {
     my($list,$c,$uncond,$with,$ignore) = @_;
-    my($spkg,$bpkg);
+    my($spkg,$bpkg,$ppkg);
     my($opt);
     my($cmd1, $cmd2, $mark);
 
@@ -1175,11 +1190,18 @@ sub print_list1 ($$$@$) {
 
             $opt = make_defines($_->{OPTIONS}, $with);
 
+            #
+            # proxy packages are rebuilt from their maste
+            # hierachy
             #
             # someone preferred a binary from the repository
             # just copy it to the local store
             #
-            if (defined $_->{platform}) {
+            if ($_->{PROXY}) {
+                $ppkg = find_proxy($_,$bpkg) or
+                die "FATAL: proxy package ",vsn($_)," does not exist\n";
+                $cmd1 = "$RPM_NPRIV$opt --makeproxy -o $bpkg $ppkg";
+            } elsif (defined $_->{platform}) {
                 $cmd1 = "$CURL -q -s -o $bpkg $spkg";
             } else {
                 $cmd1 = "$RPM_NPRIV$opt --rebuild $spkg";