consider virtual dependencies (generated by using PROVIDES:=) when generating the...
authorFelix Fietkau <nbd@openwrt.org>
Tue, 10 Jun 2008 21:10:02 +0000 (21:10 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Tue, 10 Jun 2008 21:10:02 +0000 (21:10 +0000)
SVN-Revision: 11428

scripts/metadata.pl

index 09947d8..50d636a 100755 (executable)
@@ -495,6 +495,7 @@ EOF
 sub gen_package_mk() {
        my %conf;
        my %dep;
+       my %done;
        my $line;
 
        parse_package_metadata($ARGV[0]) or exit 1;
@@ -503,6 +504,9 @@ sub gen_package_mk() {
                my $pkg = $package{$name};
 
                next if defined $pkg->{vdepends};
+               next if $done{$pkg->{src}};
+               $done{$pkg->{src}} = 1;
+
                if ($ENV{SDK}) {
                        $conf{$pkg->{src}} or do {
                                $config = 'm';
@@ -518,23 +522,37 @@ sub gen_package_mk() {
 
                my $hasdeps = 0;
                my $depline = "";
-               foreach my $dep (@{$pkg->{depends}}, @{$pkg->{builddepends}}) {
-                       next if $dep =~ /@/;
-                       $dep =~ s/\+//;
+               foreach my $deps (@{$pkg->{depends}}, @{$pkg->{builddepends}}) {
+                       next if $deps =~ /@/;
+                       $deps =~ s/\+//;
                        my $idx;
-                       my $pkg_dep = $package{$dep};
-                       next if defined $pkg_dep->{vdepends};
+                       my $pkg_dep = $package{$deps};
+                       my @deps;
 
-                       if (defined $pkg_dep->{src}) {
-                               ($pkg->{src} ne $pkg_dep->{src}) and $idx = $pkg_dep->{subdir}.$pkg_dep->{src};
-                       } elsif (defined($srcpackage{$dep})) {
-                               $idx = $subdir{$dep}.$dep;
+                       if ($pkg_dep->{vdepends}) {
+                               @deps = @{$pkg_dep->{vdepends}};
+                       } else {
+                               @deps = ($deps);
                        }
-                       undef $idx if $idx =~ /^(kernel)|(base-files)$/;
-                       if ($idx) {
-                               next if $dep{$pkg->{src}."->".$idx};
-                               $depline .= " \$(curdir)/$idx/compile";
-                               $dep{$pkg->{src}."->".$idx} = 1;
+
+                       foreach my $dep (@deps) {
+                               $pkg_dep = $package{$deps};
+                               if (defined $pkg_dep->{src}) {
+                                       ($pkg->{src} ne $pkg_dep->{src}) and $idx = $pkg_dep->{subdir}.$pkg_dep->{src};
+                               } elsif (defined($srcpackage{$dep})) {
+                                       $idx = $subdir{$dep}.$dep;
+                               }
+                               undef $idx if $idx =~ /^(kernel)|(base-files)$/;
+                               if ($idx) {
+                                       next if $dep{$pkg->{src}."->".$idx};
+                                       next if $pkg->{src} eq $pkg_dep->{src};
+                                       if ($pkg_dep->{vdepends}) {
+                                               $depline .= " \$(if \$(CONFIG_PACKAGE_$dep),\$(curdir)/$idx/compile)";
+                                       } else {
+                                               $depline .= " \$(curdir)/$idx/compile";
+                                               $dep{$pkg->{src}."->".$idx} = 1;
+                                       }
+                               }
                        }
                }
                if ($depline) {