From 59f2b191722f54423808e1baf70ebc22d26abff0 Mon Sep 17 00:00:00 2001
From: nbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Date: Tue, 10 Jun 2008 21:10:02 +0000
Subject: [PATCH] consider virtual dependencies (generated by using PROVIDES:=)
 when generating the build dependencies (fixes python build dependency errors)

git-svn-id: svn://svn.openwrt.org/openwrt/trunk@11428 3c298f89-4303-0410-b956-a3cf2f4a3e73
---
 scripts/metadata.pl | 46 +++++++++++++++++++++++++++++++--------------
 1 file changed, 32 insertions(+), 14 deletions(-)

diff --git a/scripts/metadata.pl b/scripts/metadata.pl
index 09947d808..50d636a67 100755
--- a/scripts/metadata.pl
+++ b/scripts/metadata.pl
@@ -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) {
-- 
2.20.1