OpenPKG CVS Repository http://cvs.openpkg.org/ ____________________________________________________________________________
Server: cvs.openpkg.org Name: Michael van Elst Root: /e/openpkg/cvs Email: [EMAIL PROTECTED] Module: openpkg-src Date: 15-Jan-2003 13:56:31 Branch: HEAD Handle: 2003011512563100 Modified files: openpkg-src/openpkg-tool openpkg-build.pl Log: dependency list is now recursive and handles vitual dependencies Summary: Revision Changes Path 1.35 +57 -11 openpkg-src/openpkg-tool/openpkg-build.pl ____________________________________________________________________________ patch -p0 <<'@@ .' Index: openpkg-src/openpkg-tool/openpkg-build.pl ============================================================================ $ cvs diff -u -r1.34 -r1.35 openpkg-build.pl --- openpkg-src/openpkg-tool/openpkg-build.pl 15 Jan 2003 12:15:46 -0000 1.34 +++ openpkg-src/openpkg-tool/openpkg-build.pl 15 Jan 2003 12:56:31 -0000 1.35 @@ -401,8 +401,9 @@ # compute list of package names from dependency list # sub depends2pkglist ($) { - my($deps) = @_; - return map { $_->{name} } @$deps; + my($t) = @_; + my(%d) = unique_map($t->{depends}, $t->{keeps}); + return (keys %d); } # @@ -482,8 +483,8 @@ foreach (@vers) { foreach $t (@{$r->{$pkg}->{$_}}) { next unless $i->{$t->{name}}; - next unless $t->{depends}; - foreach (depends2pkglist($t->{depends})) { + next unless $t->{depends} || $t->{keeps}; + foreach (depends2pkglist($t)) { unless ($dep{$_}{$t->{name}}) { $dep{$_}{$t->{name}} = 1; push @{$dlist{$_}}, $t; @@ -1521,17 +1522,62 @@ sub build_deps ($$) { my($pattern, $env) = @_; - my($todo); + my($todo,@list,$list,@out); $todo = search_pattern($pattern, $env); - $env->{revdep} = get_revdep($env, $env->{repository}); + # + # unfold target names into real targets + # + @list = map { + map { + map { + $_->{name} + } @$_ + } values %{$env->{repository}->{$_}} + } @$todo; + + # + # also add target name + # + push @list, @$todo; + + # + # strip duplicates + # + @list = keys %{ { map { $_ => 1 } @list } }; + + # + # cache reverse dependencies + # + unless ($env->{revdep}) { + $env->{revdep} = get_revdep($env, $env->{repository}); + } - return [ map { - $env->{revdep}->{$_} - ? ( @{$env->{revdep}->{$_}} ) - : ( ) - } @$todo ]; + # + # map targets into list of dependency names + # + @list = map { $env->{revdep}->{$_} + ? ( @{$env->{revdep}->{$_}} ) + : ( ) + } @list; + + @out = @list; + + # + # recurse over dependencies + # + foreach (@list) { + + # avoiding cycles + next if $env->{builddeps}->{$_->{name}}; + $env->{builddeps}->{$_->{name}} = 1; + + $list = build_deps($_->{name}, $env); + push @out, @$list; + } + + return \@out; } ####################################################################### @@ . ______________________________________________________________________ The OpenPKG Project www.openpkg.org CVS Repository Commit List [EMAIL PROTECTED]