|
|
@@ -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";
|