diff --git a/openpkg-tool/openpkg-build.pl b/openpkg-tool/openpkg-build.pl index 5606c00351..7f4b43778a 100644 --- a/openpkg-tool/openpkg-build.pl +++ b/openpkg-tool/openpkg-build.pl @@ -515,8 +515,9 @@ sub get_installed () { # compute reverse dependency map # # -sub get_revdep ($$) { - my($env, $i) = @_; +sub get_revdep ($) { + my($env) = @_; + my($i) = $env->{'installed'}; my($r) = $env->{'repository'}; my($pkg, %dep, %dlist, %rev); my(@vers,$t,$t1,$t2,$with,$name,$vmap); @@ -548,9 +549,9 @@ sub get_revdep ($$) { %d = unique_map($d,$k); # resolve package unless (exists $pkg{$pkg}) { - ($t2,$old) = dep2target({ name => $pkg }, $env); + ($t2,$old) = dep2target({ name => $pkg }, $env, 1); $t2 = undef if $old; - $pkg{$pkg} = undef; + $pkg{$pkg} = $t2; } $t2 = $pkg{$pkg}; next unless $t2; @@ -558,7 +559,7 @@ sub get_revdep ($$) { next if $_ eq 'OpenPKG'; # resolve target unless (exists $name{$_}) { - ($t1,$old) = dep2target($d{$_}, $env); + ($t1,$old) = dep2target($d{$_}, $env, 0); $name{$_} = $t1 ? $t1->{name} : $_; } $name = $name{$_}; @@ -1615,8 +1616,8 @@ sub depend_option ($$$) { # # locate target for a dependency # -sub dep2target ($$) { - my($dep, $env) = @_; +sub dep2target ($$$) { + my($dep, $env, $source) = @_; my($name,$op,@vers); my($i,$r,$b,$cond,$version); my($t,$tdef,$why); @@ -1654,11 +1655,11 @@ sub dep2target ($$) { if ($i && (@vers = get_versions($i, $cond))) { foreach (@vers) { $t = $i->{$_}->[0]; - next unless $t && + next unless $t; get_with($t); if (target_suitable($t, $env->{with}, 0)) { $tdef = $t; - unless ($env->{upgrade} || $env->{zero}) { + unless ($env->{upgrade} || $env->{zero} || $source) { return ($t, 1); } } @@ -1685,7 +1686,7 @@ sub dep2target ($$) { if (!$tdef || ( ($why = target_better($env, $t, $env->{installed})) && $why ne 'new' - )) { + ) || $source) { return ($t, 0); } } @@ -1795,7 +1796,7 @@ sub make_dep ($$$$$$$) { # old index misses a OpenPKG provider in the index... skip it next if $_ eq 'OpenPKG'; - ($t,$old) = dep2target($d{$_}, $env); + ($t,$old) = dep2target($d{$_}, $env, 0); if ($t) { if ($old) { print "# $target->{name} uses ".vsn($t)." for $_\n"; @@ -1864,7 +1865,7 @@ sub make_dep ($$$$$$$) { if (!$env->{quick} && $target->{name} ne 'openpkg' ) { unless ($env->{revdep}) { - $env->{revdep} = get_revdep($env, $env->{installed}); + $env->{revdep} = get_revdep($env); } foreach $t (@{$env->{revdep}->{$target->{name}}}) { @@ -2021,7 +2022,7 @@ sub build_deps ($$) { # cache reverse dependencies # unless ($env->{revdep}) { - $env->{revdep} = get_revdep($env, $env->{repository}); + $env->{revdep} = get_revdep($env); } #