improve dependency handling, fix some package makefile bugs
improve dependency handling, fix some package makefile bugs

git-svn-id: svn://svn.openwrt.org/openwrt/branches/buildroot-ng/openwrt@3843 3c298f89-4303-0410-b956-a3cf2f4a3e73

file:a/Makefile -> file:b/Makefile
--- a/Makefile
+++ b/Makefile
@@ -70,10 +70,10 @@
 config-clean:
 	$(MAKE) -C scripts/config clean
 
-package/%:
+package/%: .pkginfo
 	$(MAKE) -C package $(patsubst package/%,%,$@)
 
-target/%:
+target/%: .pkginfo
 	$(MAKE) -C target $(patsubst target/%,%,$@)
 
 toolchain/%:

--- a/package/Makefile
+++ b/package/Makefile
@@ -1,7 +1,7 @@
 # Main makefile for the packages
 include $(TOPDIR)/rules.mk
 include $(TOPDIR)/.config
-include .pkgdeps
+include $(TOPDIR)/.pkgdeps
 
 COMPILE_PACKAGES:=$(patsubst %,%-compile,$(package-y) $(package-m))
 INSTALL_PACKAGES:=$(patsubst %,%-install,$(package-y))
@@ -20,7 +20,7 @@
 	$(MAKE) -C $(patsubst %-clean,%,$@) clean
 
 
-.pkgdeps: $(TOPDIR)/.pkginfo
+$(TOPDIR)/.pkgdeps: $(TOPDIR)/.pkginfo
 	@$(TOPDIR)/scripts/gen_deps.pl < $< > $@ || rm -f $@
 
 all: compile

--- a/package/dropbear/Makefile
+++ b/package/dropbear/Makefile
@@ -25,10 +25,9 @@
 
 define Package/dropbearconvert
 $(call Package/dropbear)
-DEFAULT:=m
 TITLE:=Utility for converting SSH keys
 DESCRIPTION:=Utility for converting SSH keys
-DEPENDS:=zlib
+DEPENDS:=+zlib
 endef
 
 define Build/Configure

--- a/package/iproute2/Makefile
+++ b/package/iproute2/Makefile
@@ -14,25 +14,15 @@
 
 include $(TOPDIR)/package/rules.mk
 
-# define Package/iproute2
-# SECTION:=base
-# CATEGORY:=Network
-# DEFAULT:=n
-# MENU:=1
-# TITLE:=A collection of utilites for controlling TCP/IP networking and Traffic Control
-# endef
-
 define Package/ip
 SECTION:=base
 CATEGORY:=Network
-DEFAULT:=n
 DEPENDS:=iproute2
 TITLE:=A routing control utility
 endef
 
 define Package/tc
 $(call Package/ip)
-# DEPENDS:=kmod-sched
 TITLE:=A traffic control utility
 endef
 

--- a/package/ipsec-tools/Makefile
+++ b/package/ipsec-tools/Makefile
@@ -19,7 +19,7 @@
 define Package/ipsec-tools
 SECTION:=base
 CATEGORY:=Network
-DEFAULT:=y
+DEPENDS:=@LINUX_2_6
 TITLE:=IPsec management tools
 DESCRIPTION:=IPsec management tools
 URL:=http://ipsec-tools.sourceforge.net/

--- a/package/ipset/Makefile
+++ b/package/ipset/Makefile
@@ -17,8 +17,7 @@
 define Package/ipset
 SECTION:=base
 CATEGORY:=Network
-DEFAULT:=y
-DEPENDS:=kmod-iptables-extra
+DEPENDS:=+kmod-iptables-extra
 TITLE:=Netfilter ip sets administration utility
 DESCRIPTION:=Netfilter ip sets administration utility
 URL:=http://ipset.netfilter.org/

--- a/package/nvram/Makefile
+++ b/package/nvram/Makefile
@@ -11,8 +11,7 @@
 
 define Package/nvram
 SECTION:=base
-# CATEGORY:=FIXME
-DEFAULT:=n
+DEPENDS:=@LINUX_2_4_BRCM
 TITLE:=Broadcom config utility
 DESCRIPTION:=control utility for broadcom's 'nvram' config area
 endef

--- a/package/pcmcia-cs/Makefile
+++ b/package/pcmcia-cs/Makefile
@@ -18,8 +18,7 @@
 
 define Package/pcmcia-cs
 SECTION:=base
-# CATEGORY:=FIXME
-DEFAULT:=n
+DEPENDS:=@PCMCIA_SUPPORT
 TITLE:=PCMCIA/Cardbus management utilities
 DESCRIPTION:=PCMCIA/Cardbus management utilities
 URL:=http://pcmcia-cs.sourceforge.net/

--- a/package/ppp/Makefile
+++ b/package/ppp/Makefile
@@ -5,7 +5,7 @@
 PKG_NAME:=ppp
 PKG_VERSION:=2.4.3
 PKG_RELEASE:=7
-PKG_BUILDDEP:=libpcap
+PKG_BUILDDEP:=libpcap linux-atm
 
 PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION)
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
@@ -30,7 +30,7 @@
 define Package/ppp-mod-pppoa
  SECTION:=net
  CATEGORY:=Network
- DEPENDS:=ppp
+ DEPENDS:=ppp +linux-atm
  TITLE:=PPPoA plugin
  DESCRIPTION:=PPPoA (PPP over ATM) plugin for ppp
 endef

--- a/package/robocfg/Makefile
+++ b/package/robocfg/Makefile
@@ -12,8 +12,6 @@
 
 define Package/robocfg
 SECTION:=base
-# CATEGORY:=FIXME
-DEFAULT:=n
 TITLE:=BCM5325E/536x switch configuration utility
 DESCRIPTION:=Broadcom BCM5325E/536x switch configuration utility
 endef

--- a/package/rules.mk
+++ b/package/rules.mk
@@ -132,7 +132,14 @@
 	mkdir -p $$(IDIR_$(1))/CONTROL
 	echo "Package: $(1)" > $$(IDIR_$(1))/CONTROL/control
 	echo "Version: $(VERSION)" >> $$(IDIR_$(1))/CONTROL/control
-	echo "Depends: $$(IDEPEND_$(1))" >> $$(IDIR_$(1))/CONTROL/control
+	( \
+		DEPENDS=; \
+		for depend in $$(IDEPEND_$(1)); do \
+			[ "$$$${depend%%%%%%%%[A-Za-z]*}" = "@" ] && continue; \
+			DEPENDS=$$$${DEPENDS:+$$$$DEPENDS, }$$$${depend##+}; \
+		done; \
+		echo "Depends: $$$$DEPENDS" >> $$(IDIR_$(1))/CONTROL/control; \
+	)
 	echo "Source: $(SOURCE)" >> $$(IDIR_$(1))/CONTROL/control
 	echo "Section: $(SECTION)" >> $$(IDIR_$(1))/CONTROL/control
 	echo "Priority: $(PRIORITY)" >> $$(IDIR_$(1))/CONTROL/control

--- a/package/udev/Makefile
+++ b/package/udev/Makefile
@@ -23,8 +23,7 @@
 
 define Package/udev
 SECTION:=base
-# CATEGORY:=FIXME
-DEFAULT:=n
+DEPENDS:=@LINUX_2_6
 TITLE:=Dynamic device management subsystem
 DESCRIPTION:=udev provides a dynamic device directory containing only the files for \\\
 actually present devices. It creates or removes device node files in \\\

--- a/package/wificonf/Makefile
+++ b/package/wificonf/Makefile
@@ -12,7 +12,7 @@
 define Package/wificonf
 SECTION:=base
 CATEGORY:=Network
-DEFAULT:=y
+DEPENDS:=nvram +wireless-tools
 TITLE:=replacement utility for wlconf
 DESCRIPTION:=Replacement utility for wlconf
 endef

--- a/package/wireless-tools/Makefile
+++ b/package/wireless-tools/Makefile
@@ -42,13 +42,17 @@
 	install -m0755 $(PKG_INSTALL_DIR)/usr/sbin/iw{config,getid,list,priv,spy} $(1)/usr/sbin/
 endef
 
-install-dev: $(PKG_BUILD_DIR)/.built
+define Build/InstallDev
 	mkdir -p $(STAGING_DIR)/usr/{lib,include}
 	$(CP) $(PKG_BUILD_DIR)/libiw.so* $(STAGING_DIR)/usr/lib/
 	ln -sf libiw.so.28 $(STAGING_DIR)/usr/lib/libiw.so
 	$(CP) $(PKG_BUILD_DIR)/{iwlib,wireless}.h $(STAGING_DIR)/usr/include/
+endef
 	
-uninstall-dev:
+define Build/UninstallDev
 	rm -f $(STAGING_DIR)/usr/lib/libiw.*
 	rm -f $(STAGING_DIR)/usr/include/{iwlib,wireless}.h
+endef
 
+$(eval $(call BuildPackage,wireless-tools))
+

--- a/package/zlib/Makefile
+++ b/package/zlib/Makefile
@@ -20,7 +20,6 @@
 define Package/zlib
 SECTION:=base
 CATEGORY:=Libraries
-DEFAULT:=n
 TITLE:=Library implementing the deflate compression method
 DESCRIPTION:=A library implementing the 'deflate' compression method
 URL:=http://www.zlib.net/

--- a/scripts/gen_deps.pl
+++ b/scripts/gen_deps.pl
@@ -5,6 +5,7 @@
 my $src;
 my $makefile;
 my %pkg;
+my %dep;
 
 my $line;
 while ($line = <>) {
@@ -19,8 +20,12 @@
 		$pkg{$name}->{src} = $src;
 	};
 	$line =~ /^(Build-)?Depends: \s*(.+)\s*$/ and do {
-		my @dep = split /,\s*/, $2;
-		$pkg{$name}->{depends} = \@dep;
+		$pkg{$name}->{depends} ||= [];
+		foreach my $v (split /\s+/, $2) {
+			next if $v =~ /^@/;
+			$v =~ s/^\+//;
+			push @{$pkg{$name}->{depends}}, $v;
+		}
 	};
 }
 
@@ -32,8 +37,16 @@
 	my $hasdeps = 0;
 	my $depline = "";
 	foreach my $dep (@{$pkg{$name}->{depends}}) {
+		my $idx;
 	        if (defined $pkg{$dep}->{src} && $pkg{$name}->{src} ne $pkg{$dep}->{src}) {
-			$depline .= " $pkg{$dep}->{src}-compile";
+			$idx = $pkg{$dep}->{src};
+		} elsif (defined $pkg{$dep}) {
+			$idx = $dep;
+		}
+		if ($idx) {
+			next if $dep{$pkg{$name}->{src}."->".$idx};
+			$depline .= " $idx\-compile";
+			$dep{$pkg{$name}->{src}."->".$idx} = 1;
 		}
 	}
 	if ($depline ne "") {

--- a/scripts/gen_menuconfig.pl
+++ b/scripts/gen_menuconfig.pl
@@ -26,7 +26,12 @@
 			print "\t\ttristate \"$title\"\n";
 			print "\t\tdefault ".$pkg->{default}."\n";
 			foreach my $depend (@{$pkg->{depends}}) {
-				print "\t\tdepends PACKAGE_$depend\n";
+				my $m = "depends";
+				$depend =~ s/^([@\+])//;
+				my $flags = $1;
+				$flags =~ /@/ or $depend = "PACKAGE_$depend";
+				$flags =~ /\+/ and $m = "select";
+				print "\t\t$m $depend\n";
 			}
 			print "\t\thelp\n";
 			print $pkg->{description};
@@ -60,7 +65,7 @@
 	$line =~ /^Menu: \s*(.+)\s*$/ and $pkg->{menu} = $1;
 	$line =~ /^Default: \s*(.+)\s*$/ and $pkg->{default} = $1;
 	$line =~ /^Depends: \s*(.+)\s*$/ and do {
-		my @dep = split /,\s*/, $1;
+		my @dep = split /\s+/, $1;
 		$pkg->{depends} = \@dep;
 	};
 	$line =~ /^Category: \s*(.+)\s*$/ and do {

comments