From b0e7c7ba79625e2331c4898cc1c2b5f39ea7a651 Mon Sep 17 00:00:00 2001
From: Felix Fietkau <nbd@openwrt.org>
Date: Wed, 1 Oct 2008 21:26:19 +0000
Subject: [PATCH] implement conditional dependencies for menuconfig and build
 deps

SVN-Revision: 12820
---
 package/hostapd/Makefile |  4 ++--
 scripts/feeds            |  1 +
 scripts/metadata.pl      | 25 +++++++++++++++++++++++--
 3 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/package/hostapd/Makefile b/package/hostapd/Makefile
index e9d8a5c2cc..8f8af96b1e 100644
--- a/package/hostapd/Makefile
+++ b/package/hostapd/Makefile
@@ -17,7 +17,7 @@ PKG_SOURCE_URL:=http://hostap.epitest.fi/releases/
 PKG_SOURCE_SUBDIR:=hostapd-$(PKG_VERSION)
 PKG_SOURCE_VERSION:=$(PKG_REV)
 PKG_MD5SUM:=62876f2179f316db0621cc33adf04c19
-PKG_BUILD_DEPENDS:=madwifi mac80211 libnl openssl
+PKG_BUILD_DEPENDS:=PACKAGE_kmod-madwifi:madwifi PACKAGE_kmod-mac80211:mac80211 PACKAGE_kmod-mac80211:libnl
 
 include $(INCLUDE_DIR)/package.mk
 STAMP_CONFIGURED:=$(STAMP_CONFIGURED)_$(call confvar,CONFIG_PACKAGE_kmod-mac80211 CONFIG_PACKAGE_kmod-madwifi CONFIG_PACKAGE_hostapd CONFIG_PACKAGE_hostapd-mini)
@@ -33,7 +33,7 @@ endef
 define Package/hostapd
 $(call Package/hostapd/Default)
   TITLE+= (full)
-  DEPENDS+= +libopenssl
+  DEPENDS+= +PACKAGE_hostapd:libopenssl
 endef
 
 #define Package/hostapd/conffiles
diff --git a/scripts/feeds b/scripts/feeds
index ab765b1ea3..8ec0799f70 100755
--- a/scripts/feeds
+++ b/scripts/feeds
@@ -290,6 +290,7 @@ sub install_package {
 	foreach my $vpkg (@{$srcpackage{$src}}, $pkg) {
 		foreach my $dep (@{$vpkg->{depends}}, @{$vpkg->{builddepends}}) {
 			next if $dep =~ /@/;
+			next if $dep =~ /:/;
 			$dep =~ s/^\+//;
 			install_package($feed, $dep) == 0 or $ret = 1;
 		}
diff --git a/scripts/metadata.pl b/scripts/metadata.pl
index bee3020121..e05cc92c42 100755
--- a/scripts/metadata.pl
+++ b/scripts/metadata.pl
@@ -223,6 +223,7 @@ EOF
 			$flags = $1;
 			$name = $2;
 
+			next if $name =~ /:/;
 			$flags =~ /-/ and $mode = "deselect";
 			$flags =~ /\+/ and $mode = "select";
 			$flags =~ /@/ and $confstr .= "\t$mode $name\n";
@@ -374,8 +375,13 @@ sub mconf_depends($$) {
 		my $m = "depends";
 		$depend =~ s/^([@\+]+)//;
 		my $flags = $1;
+		my $condition;
 		my $vdep;
 
+		if ($depend =~ /^(.+):(.+)$/) {
+			$condition = $1;
+			$depend = $2;
+		}
 		if ($vdep = $package{$depend}->{vdepends}) {
 			$depend = join("||", map { "PACKAGE_".$_ } @$vdep);
 		} else {
@@ -390,6 +396,7 @@ sub mconf_depends($$) {
 				next if $only_dep;
 			};
 			$flags =~ /@/ or $depend = "PACKAGE_$depend";
+			$condition and $depend = "$depend if $condition";
 		}
 		$dep->{$depend} =~ /select/ or $dep->{$depend} = $m;
 	}
@@ -535,6 +542,13 @@ sub gen_package_mk() {
 		my $depline = "";
 		foreach my $deps (@srcdeps) {
 			my $idx;
+			my $condition;
+
+			if ($deps =~ /^(.+):(.+)/) {
+				$condition = $1;
+				$deps = $2;
+			}
+
 			my $pkg_dep = $package{$deps};
 			my @deps;
 
@@ -556,13 +570,20 @@ sub gen_package_mk() {
 					next if $pkg->{src} eq $pkg_dep->{src};
 					next if $dep{$pkg->{src}."->".$idx};
 					next if $dep{$pkg->{src}."->($dep)".$idx};
+					my $depstr;
+
 					if ($pkg_dep->{vdepends}) {
-						$depline .= " \$(if \$(CONFIG_PACKAGE_$dep),\$(curdir)/$idx/compile)";
+						$depstr = "\$(if \$(CONFIG_PACKAGE_$dep),\$(curdir)/$idx/compile)";
 						$dep{$pkg->{src}."->($dep)".$idx} = 1;
 					} else {
-						$depline .= " \$(curdir)/$idx/compile";
+						$depstr = "\$(curdir)/$idx/compile";
 						$dep{$pkg->{src}."->".$idx} = 1;
 					}
+					if ($condition) {
+						$depline .= " \$(if \$(CONFIG_$condition),$depstr)";
+					} else {
+						$depline .= " $depstr";
+					}
 				}
 			}
 		}
-- 
2.30.2