use pkgddeps to resolve build order.
authorZhang Qiang <qiang.z.zhang@intel.com>
Thu, 8 Nov 2012 16:37:40 +0000 (00:37 +0800)
committerZhang Qiang <qiang.z.zhang@intel.com>
Wed, 14 Nov 2012 05:02:04 +0000 (13:02 +0800)
pkgdeps include indirect dependency and some pre-install
packges defined in build config, so use pkgdeps will make
dependency of packages with more unexpectted circle, pkgddeps
should be used to calculate build order

Change-Id: I952d53c6bd88542b2b6d45c1c37643c431cd806e

depanneur

index 8662847..67df95c 100755 (executable)
--- a/depanneur
+++ b/depanneur
@@ -722,13 +722,21 @@ sub expand_deps {
 
 # get direct dependencies of specified package
 sub get_deps {
-    my $spec = shift;
-    my @bdeps;
-    my @packdeps;
-    my $d = Build::parse($config, $spec);
-
-    @packdeps = @{$d->{'deps'} || []};
-    foreach my $pack (@packdeps) {
+    my $spec  = shift;
+    my @bdeps = ();
+    my @ndeps = ();
+    my @deps  = ();
+    my $d     = Build::parse($config, $spec);
+
+    @deps = @{$d->{'deps'} || []};
+    @ndeps = grep {/^-/} @deps;
+    my %ndeps = map {$_ => 1} @ndeps;
+    @deps = grep {!$ndeps{$_}} @deps;
+    # TBD: Do we need enable this
+    # push @deps, @{$config->{'required'}};
+    @deps = Build::do_subst($config, @deps);
+    foreach my $pack (@deps) {
+        next if !defined($pack);
         my $pkg;
         my $found = 0;
         foreach my $pkg (keys %repo) {
@@ -1390,8 +1398,8 @@ while (! $TERM) {
                 ! (grep $_ eq $name, @skipped) &&
                 ! (grep $_ eq $name, @running))
             {
-                next if (! exists $pkgdeps{$name});
-                my @bdeps = @{$pkgdeps{$name}};
+                next if (! exists $pkgddeps{$name});
+                my @bdeps = @{$pkgddeps{$name}};
                 my $add = 1;
                 foreach my $depp (@bdeps) {
                     if ((! grep($_ eq $depp, @skipped)) &&