From 4f5ca0bbf1bad27dd962da19c0df9c3b6b6d2040 Mon Sep 17 00:00:00 2001 From: Felix Fietkau Date: Mon, 11 Jun 2007 15:15:00 +0000 Subject: [PATCH] sync whiterussian sdk with kamikaze SVN-Revision: 7567 --- openwrt/package/sdk/files/Makefile | 20 +- openwrt/package/sdk/files/include/depends.mk | 29 + .../package/sdk/files/include/host-build.mk | 53 +- openwrt/package/sdk/files/include/host.mk | 12 +- openwrt/package/sdk/files/include/image.mk | 34 +- .../package/sdk/files/include/netfilter.mk | 130 ---- .../sdk/files/include/package-defaults.mk | 108 ++++ .../sdk/files/include/package-dumpinfo.mk | 38 ++ .../package/sdk/files/include/package-ipkg.mk | 88 +++ openwrt/package/sdk/files/include/package.mk | 385 +++--------- openwrt/package/sdk/files/include/prereq.mk | 2 +- openwrt/package/sdk/files/include/quilt.mk | 109 ++++ openwrt/package/sdk/files/include/scan.mk | 55 ++ openwrt/package/sdk/files/include/shell.sh | 4 + openwrt/package/sdk/files/include/unpack.mk | 61 +- openwrt/package/sdk/files/include/verbose.mk | 10 +- openwrt/package/sdk/files/package/Makefile | 6 +- .../package/sdk/files/scripts/config.guess | 0 openwrt/package/sdk/files/scripts/config.pl | 142 +++++ openwrt/package/sdk/files/scripts/download.pl | 49 +- openwrt/package/sdk/files/scripts/flash.sh | 66 -- openwrt/package/sdk/files/scripts/gen_deps.pl | 101 ---- openwrt/package/sdk/files/scripts/ipkg | 6 +- .../sdk/files/scripts/ipkg-make-index.sh | 0 openwrt/package/sdk/files/scripts/metadata.pl | 569 ++++++++++++++++++ openwrt/package/sdk/files/scripts/rstrip.sh | 24 +- .../package/sdk/files/scripts/timestamp.pl | 5 +- 27 files changed, 1407 insertions(+), 699 deletions(-) create mode 100644 openwrt/package/sdk/files/include/depends.mk delete mode 100644 openwrt/package/sdk/files/include/netfilter.mk create mode 100644 openwrt/package/sdk/files/include/package-defaults.mk create mode 100644 openwrt/package/sdk/files/include/package-dumpinfo.mk create mode 100644 openwrt/package/sdk/files/include/package-ipkg.mk create mode 100644 openwrt/package/sdk/files/include/quilt.mk create mode 100644 openwrt/package/sdk/files/include/scan.mk mode change 100644 => 100755 openwrt/package/sdk/files/scripts/config.guess create mode 100755 openwrt/package/sdk/files/scripts/config.pl delete mode 100644 openwrt/package/sdk/files/scripts/flash.sh delete mode 100755 openwrt/package/sdk/files/scripts/gen_deps.pl mode change 100644 => 100755 openwrt/package/sdk/files/scripts/ipkg-make-index.sh create mode 100755 openwrt/package/sdk/files/scripts/metadata.pl diff --git a/openwrt/package/sdk/files/Makefile b/openwrt/package/sdk/files/Makefile index ba488e380c..0c0944882e 100644 --- a/openwrt/package/sdk/files/Makefile +++ b/openwrt/package/sdk/files/Makefile @@ -17,7 +17,7 @@ # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA # -RELEASE:=Kamikaze +RELEASE:=White Russian #VERSION:=2.0 # uncomment for final release #-------------------------------------------------------------- @@ -32,19 +32,11 @@ export DEVELOPER all: world -.pkginfo: FORCE -ifneq ($(shell ./scripts/timestamp.pl -p .pkginfo package Makefile),.pkginfo) - @echo Collecting package info... - @-for dir in package/*/; do \ - echo Source-Makefile: $${dir}Makefile; \ - $(MAKE) --no-print-dir DUMP=1 -C $$dir 2>&- || true; \ - done > $@ -endif +tmp/.packageinfo: FORCE + mkdir -p tmp/info + $(MAKE) -s -f include/scan.mk SCAN_TARGET="packageinfo" SCAN_DIR="package" SCAN_NAME="package" SCAN_DEPS="$(wildcard package/*/Makefile include/package*.mk include/kernel.mk)" SCAN_EXTRA="" -pkginfo-clean: FORCE - -rm -f .pkginfo .config.in - -package/%: .pkginfo FORCE +package/%: tmp/.packageinfo FORCE $(MAKE) -C package $(patsubst package/%,%,$@) SDK=1 download: FORCE @@ -60,7 +52,7 @@ world: FORCE ) clean: FORCE - rm -rf build_* bin + rm -rf build_* bin tmp/.packageinfo tmp/info distclean: clean rm -rf dl .pkg* diff --git a/openwrt/package/sdk/files/include/depends.mk b/openwrt/package/sdk/files/include/depends.mk new file mode 100644 index 0000000000..1e01d35f81 --- /dev/null +++ b/openwrt/package/sdk/files/include/depends.mk @@ -0,0 +1,29 @@ +# +# Copyright (C) 2007 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# +# define a dependency on a subtree +# parameters: +# 1: directory +# 2: directory dependency +# 3: tempfile for file listings +# 4: find options + +DEP_FINDPARAMS := -type f -not -name ".*" -and -not -path "*.svn*" +define rdep + $(foreach file,$(shell find $(1) $(DEP_FINDPARAMS) -and -not -path "*:*" $(4)), + $(2): $(file) + $(file): ; + ) + + ifneq ($(3),) + ifneq ($$(shell find $(1) $(DEP_FINDPARAMS) $(4) 2>/dev/null | md5s),$(if $(3),$(shell cat $(3) 2>/dev/null))) + $(2): $(3) + endif + + $(3): FORCE + @-find $(1) $(DEP_FINDPARAMS) $(4) 2>/dev/null | md5s > $$@ + endif +endef diff --git a/openwrt/package/sdk/files/include/host-build.mk b/openwrt/package/sdk/files/include/host-build.mk index 0502d7682a..b5c2a2203d 100644 --- a/openwrt/package/sdk/files/include/host-build.mk +++ b/openwrt/package/sdk/files/include/host-build.mk @@ -7,13 +7,19 @@ include $(INCLUDE_DIR)/host.mk include $(INCLUDE_DIR)/unpack.mk +include $(INCLUDE_DIR)/depends.mk +STAMP_PREPARED:=$(PKG_BUILD_DIR)/.prepared_$(shell find ${CURDIR} $(PKG_FILE_DEPEND) $(DEP_FINDPARAMS) | md5s) +STAMP_CONFIGURED:=$(PKG_BUILD_DIR)/.configured +STAMP_BUILT:=$(PKG_BUILD_DIR)/.built + +include $(INCLUDE_DIR)/quilt.mk + +Build/Patch:=$(Build/Patch/Default) ifneq ($(strip $(PKG_UNPACK)),) define Build/Prepare/Default $(PKG_UNPACK) - @if [ -d ./patches ]; then \ - $(PATCH) $(PKG_BUILD_DIR) ./patches; \ - fi + $(Build/Patch) endef endif @@ -69,30 +75,44 @@ ifneq ($(strip $(PKG_SOURCE)),) mkdir -p $(DL_DIR) $(SCRIPT_DIR)/download.pl "$(DL_DIR)" "$(PKG_SOURCE)" "$(PKG_MD5SUM)" $(PKG_SOURCE_URL) - $(PKG_BUILD_DIR)/.prepared: $(DL_DIR)/$(PKG_SOURCE) + $(STAMP_PREPARED): $(DL_DIR)/$(PKG_SOURCE) +endif + +ifneq ($(CONFIG_AUTOREBUILD),) + define HostBuild/Autoclean + $(PKG_BUILD_DIR)/.dep_files: $(STAMP_PREPARED) + $(call rdep,${CURDIR} $(PKG_FILE_DEPEND),$(STAMP_PREPARED)) + $(call rdep,$(PKG_BUILD_DIR),$(STAMP_BUILT),$(PKG_BUILD_DIR)/.dep_files, -and -not -path "/.*" -and -not -path "*/ipkg*") + endef endif define HostBuild - $(PKG_BUILD_DIR)/.prepared: + ifeq ($(DUMP),) + $(call HostBuild/Autoclean) + endif + + $(STAMP_PREPARED): @-rm -rf $(PKG_BUILD_DIR) @mkdir -p $(PKG_BUILD_DIR) $(call Build/Prepare) touch $$@ - $(PKG_BUILD_DIR)/.configured: $(PKG_BUILD_DIR)/.prepared + $(STAMP_CONFIGURED): $(STAMP_PREPARED) $(call Build/Configure) touch $$@ - $(PKG_BUILD_DIR)/.built: $(PKG_BUILD_DIR)/.configured + $(STAMP_BUILT): $(STAMP_CONFIGURED) $(call Build/Compile) + @$(NO_TRACE_MAKE) $(PKG_BUILD_DIR)/.dep_files touch $$@ - $(STAGING_DIR)/stampfiles/.host_$(PKG_NAME)-installed: $(PKG_BUILD_DIR)/.built + $(STAGING_DIR)/stampfiles/.host_$(PKG_NAME)-installed: $(STAMP_BUILT) $(call Build/Install) + mkdir -p $$(shell dirname $$@) touch $$@ ifdef Build/Install - install-targets: $(STAGING_DIR)/stampfiles/.host_$(PKG_NAME)-installed + install: $(STAGING_DIR)/stampfiles/.host_$(PKG_NAME)-installed endif package-clean: FORCE @@ -101,18 +121,11 @@ define HostBuild rm -f $(STAGING_DIR)/stampfiles/.host_$(PKG_NAME)-installed download: - prepare: $(PKG_BUILD_DIR)/.prepared - configure: $(PKG_BUILD_DIR)/.configured - - compile-targets: $(PKG_BUILD_DIR)/.built - compile: compile-targets - - install-targets: - install: install-targets - - clean-targets: + prepare: $(STAMP_PREPARED) + configure: $(STAMP_CONFIGURED) + compile: $(STAMP_BUILT) + install: clean: FORCE - @$(MAKE) clean-targets $(call Build/Clean) rm -rf $(PKG_BUILD_DIR) diff --git a/openwrt/package/sdk/files/include/host.mk b/openwrt/package/sdk/files/include/host.mk index 4a434711c3..833aa83a66 100644 --- a/openwrt/package/sdk/files/include/host.mk +++ b/openwrt/package/sdk/files/include/host.mk @@ -9,6 +9,8 @@ include $(TMP_DIR)/.host.mk export TAR +ifneq ($(__host_inc),1) +__host_inc:=1 $(TMP_DIR)/.host.mk: $(TOPDIR)/include/host.mk @mkdir -p $(TMP_DIR) @( \ @@ -26,9 +28,13 @@ $(TMP_DIR)/.host.mk: $(TOPDIR)/include/host.mk TAR=`which gtar 2>/dev/null`; \ [ -n "$$TAR" -a -x "$$TAR" ] || TAR=`which tar 2>/dev/null`; \ echo "TAR:=$$TAR" >> $@; \ - ZCAT=`which gzcat 2>/dev/null`; \ - [ -n "$$ZCAT" -a -x "$$ZCAT" ] || ZCAT=`which zcat 2>/dev/null`; \ - echo "ZCAT:=$$ZCAT" >> $@; \ echo "BASH:=$(shell which bash)" >> $@; \ ) +endif + +ifeq ($(HOST_OS),Linux) + XARGS:=xargs -r +else + XARGS:=xargs +endif diff --git a/openwrt/package/sdk/files/include/image.mk b/openwrt/package/sdk/files/include/image.mk index 4f638f0260..815f01ba02 100644 --- a/openwrt/package/sdk/files/include/image.mk +++ b/openwrt/package/sdk/files/include/image.mk @@ -7,6 +7,7 @@ include $(INCLUDE_DIR)/prereq.mk include $(INCLUDE_DIR)/kernel.mk +include $(INCLUDE_DIR)/host.mk KDIR:=$(BUILD_DIR)/linux-$(KERNEL)-$(BOARD) ifneq ($(CONFIG_BIG_ENDIAN),y) @@ -17,6 +18,19 @@ JFFS2OPTS := --pad --big-endian --squash SQUASHFS_OPTS := -be endif +define add_jffs2_mark + echo -ne '\xde\xad\xc0\xde' >> $(1) +endef + +# pad to 64k and add jffs2 end-of-filesystem mark +# do this twice to make sure that this works with 128k blocksize as well +define prepare_generic_squashfs + dd if=$(1) of=$(KDIR)/tmpfile.1 bs=64k conv=sync + $(call add_jffs2_mark,$(KDIR)/tmpfile.1) + dd of=$(1) if=$(KDIR)/tmpfile.1 bs=64k conv=sync + $(call add_jffs2_mark,$(1)) +endef + ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),y) ifeq ($(CONFIG_TARGET_ROOTFS_JFFS2),y) define Image/mkfs/jffs2 @@ -25,9 +39,10 @@ ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),y) $(STAGING_DIR)/bin/mkfs.jffs2 $(JFFS2OPTS) -e 0x10000 -o $(KDIR)/root.jffs2-64k -d $(BUILD_DIR)/root $(STAGING_DIR)/bin/mkfs.jffs2 $(JFFS2OPTS) -e 0x20000 -o $(KDIR)/root.jffs2-128k -d $(BUILD_DIR)/root + # add End-of-Filesystem markers - echo -ne '\xde\xad\xc0\xde' >> $(KDIR)/root.jffs2-64k - echo -ne '\xde\xad\xc0\xde' >> $(KDIR)/root.jffs2-128k + $(call add_jffs2_mark,$(KDIR)/root.jffs2-64k) + $(call add_jffs2_mark,$(KDIR)/root.jffs2-128k) $(call Image/Build,jffs2-64k) $(call Image/Build,jffs2-128k) @@ -47,8 +62,11 @@ ifneq ($(CONFIG_TARGET_ROOTFS_INITRAMFS),y) tar -zcf $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-rootfs.tgz --owner=root --group=root -C $(BUILD_DIR)/root/ . endef endif - - +else + define Image/BuildKernel + cp $(KDIR)/vmlinux.elf $(BIN_DIR)/openwrt-$(BOARD)-$(KERNEL)-vmlinux.elf + $(call Image/Build/Initramfs) + endef endif @@ -56,16 +74,16 @@ ifeq ($(CONFIG_TARGET_ROOTFS_EXT2FS),y) E2SIZE=$(shell echo $$(($(CONFIG_TARGET_ROOTFS_FSPART)*1024))) define Image/mkfs/ext2 - $(STAGING_DIR)/bin/genext2fs -U -b $(E2SIZE) -I 1500 -d $(BUILD_DIR)/root/ $(KDIR)/root.ext2 + $(STAGING_DIR)/bin/genext2fs -U -b $(E2SIZE) -I $(CONFIG_TARGET_ROOTFS_MAXINODE) -d $(BUILD_DIR)/root/ $(KDIR)/root.ext2 $(call Image/Build,ext2) endef endif define Image/mkfs/prepare/default - find $(BUILD_DIR)/root -type f -not -perm +0100 -not -name 'ssh_host*' | xargs chmod 0644 - find $(BUILD_DIR)/root -type f -perm +0100 | xargs chmod 0755 - find $(BUILD_DIR)/root -type d | xargs chmod 0755 + find $(BUILD_DIR)/root -type f -not -perm +0100 -not -name 'ssh_host*' | $(XARGS) chmod 0644 + find $(BUILD_DIR)/root -type f -perm +0100 | $(XARGS) chmod 0755 + find $(BUILD_DIR)/root -type d | $(XARGS) chmod 0755 mkdir -p $(BUILD_DIR)/root/tmp chmod 0777 $(BUILD_DIR)/root/tmp endef diff --git a/openwrt/package/sdk/files/include/netfilter.mk b/openwrt/package/sdk/files/include/netfilter.mk deleted file mode 100644 index 94699e572f..0000000000 --- a/openwrt/package/sdk/files/include/netfilter.mk +++ /dev/null @@ -1,130 +0,0 @@ -# -# Copyright (C) 2006 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# -# $Id: netfilter.mk 2411 2005-11-11 03:41:43Z nico $ - -ifeq ($(NF_KMOD),1) -P_V4:=ipv4/netfilter/ -P_XT:=netfilter/ -endif - -IPT_CONNTRACK-m := -IPT_CONNTRACK-$(CONFIG_IP_NF_MATCH_CONNMARK) += $(P_V4)ipt_connmark -IPT_CONNTRACK-$(CONFIG_IP_NF_TARGET_CONNMARK) += $(P_V4)ipt_CONNMARK -IPT_CONNTRACK-$(CONFIG_IP_NF_MATCH_CONNTRACK) += $(P_V4)ipt_conntrack -IPT_CONNTRACK-$(CONFIG_IP_NF_MATCH_HELPER) += $(P_V4)ipt_helper -IPT_CONNTRACK-$(CONFIG_IP_NF_MATCH_STATE) += $(P_V4)ipt_state -IPT_CONNTRACK-$(CONFIG_NETFILTER_XT_MATCH_CONNMARK) += $(P_XT)xt_connmark -IPT_CONNTRACK-$(CONFIG_NETFILTER_XT_TARGET_CONNMARK) += $(P_XT)xt_CONNMARK -IPT_CONNTRACK-$(CONFIG_NETFILTER_XT_MATCH_CONNTRACK) += $(P_XT)xt_conntrack -IPT_CONNTRACK-$(CONFIG_NETFILTER_XT_MATCH_HELPER) += $(P_XT)xt_helper -IPT_CONNTRACK-$(CONFIG_NETFILTER_XT_MATCH_STATE) += $(P_XT)xt_state - - -IPT_EXTRA-m := -IPT_EXTRA-$(CONFIG_IP_NF_MATCH_CONDITION) += $(P_V4)ipt_condition -IPT_EXTRA-$(CONFIG_IP_NF_MATCH_CONNBYTES) += $(P_V4)ipt_connbytes -IPT_EXTRA-$(CONFIG_NETFILTER_XT_MATCH_CONNBYTES) += $(P_XT)xt_connbytes -IPT_EXTRA-$(CONFIG_IP_NF_MATCH_LIMIT) += $(P_V4)ipt_limit -IPT_EXTRA-$(CONFIG_NETFILTER_XT_MATCH_LIMIT) += $(P_XT)xt_limit -IPT_EXTRA-$(CONFIG_IP_NF_TARGET_LOG) += $(P_V4)ipt_LOG -IPT_EXTRA-$(CONFIG_IP_NF_MATCH_MULTIPORT) += $(P_XT)xt_multiport -IPT_EXTRA-$(CONFIG_NETFILTER_XT_MATCH_MULTIPORT) += $(P_XT)xt_multiport -IPT_EXTRA-$(CONFIG_IP_NF_MATCH_OWNER) += $(P_V4)ipt_owner -IPT_EXTRA-$(CONFIG_IP_NF_MATCH_PHYSDEV) += $(P_V4)ipt_physdev -IPT_EXTRA-$(CONFIG_IP_NF_MATCH_PKTTYPE) += $(P_V4)ipt_pkttype -IPT_EXTRA-$(CONFIG_NETFILTER_XT_MATCH_PKTTYPE) += $(P_XT)xt_pkttype -IPT_EXTRA-$(CONFIG_IP_NF_MATCH_QUOTA) += $(P_V4)ipt_quota -IPT_EXTRA-$(CONFIG_IP_NF_MATCH_RECENT) += $(P_V4)ipt_recent -IPT_EXTRA-$(CONFIG_IP_NF_TARGET_REJECT) += $(P_V4)ipt_REJECT -IPT_EXTRA-$(CONFIG_IP_NF_MATCH_STRING) += $(P_V4)ipt_string -IPT_EXTRA-$(CONFIG_NETFILTER_XT_MATCH_STRING) += $(P_XT)xt_string - -IPT_FILTER-m := -IPT_FILTER-$(CONFIG_IP_NF_MATCH_IPP2P) += $(P_V4)ipt_ipp2p -IPT_FILTER-$(CONFIG_IP_NF_MATCH_LAYER7) += $(P_V4)ipt_layer7 - -IPT_IMQ-m := -IPT_IMQ-$(CONFIG_IP_NF_TARGET_IMQ) += $(P_V4)ipt_IMQ - -IPT_IPOPT-m := -IPT_IPOPT-$(CONFIG_IP_NF_MATCH_DSCP) += $(P_V4)ipt_dscp -IPT_IPOPT-$(CONFIG_IP_NF_TARGET_DSCP) += $(P_V4)ipt_DSCP -IPT_IPOPT-$(CONFIG_IP_NF_MATCH_ECN) += $(P_V4)ipt_ecn -IPT_IPOPT-$(CONFIG_IP_NF_TARGET_ECN) += $(P_V4)ipt_ECN -IPT_IPOPT-$(CONFIG_IP_NF_MATCH_LENGTH) += $(P_V4)ipt_length -IPT_IPOPT-$(CONFIG_NETFILTER_XT_MATCH_LENGTH) += $(P_XT)xt_length -IPT_IPOPT-$(CONFIG_IP_NF_MATCH_MAC) += $(P_V4)ipt_mac -IPT_IPOPT-$(CONFIG_NETFILTER_XT_MATCH_MAC) += $(P_XT)xt_mac -IPT_IPOPT-$(CONFIG_IP_NF_MATCH_MARK) += $(P_V4)ipt_mark -IPT_IPOPT-$(CONFIG_NETFILTER_XT_MATCH_MARK) += $(P_XT)xt_mark -IPT_IPOPT-$(CONFIG_IP_NF_TARGET_MARK) += $(P_V4)ipt_MARK -IPT_IPOPT-$(CONFIG_NETFILTER_XT_TARGET_MARK) += $(P_XT)xt_MARK -IPT_IPOPT-$(CONFIG_IP_NF_MATCH_TCPMSS) += $(P_V4)ipt_tcpmss -IPT_IPOPT-$(CONFIG_NETFILTER_XT_MATCH_TCPMSS) += $(P_XT)xt_tcpmss -IPT_IPOPT-$(CONFIG_IP_NF_TARGET_TCPMSS) += $(P_V4)ipt_TCPMSS -IPT_IPOPT-$(CONFIG_IP_NF_MATCH_TOS) += $(P_V4)ipt_tos -IPT_IPOPT-$(CONFIG_IP_NF_MATCH_TIME) += $(P_V4)ipt_time -IPT_IPOPT-$(CONFIG_IP_NF_TARGET_TOS) += $(P_V4)ipt_TOS -IPT_IPOPT-$(CONFIG_IP_NF_MATCH_TTL) += $(P_V4)ipt_ttl -IPT_IPOPT-$(CONFIG_IP_NF_TARGET_TTL) += $(P_V4)ipt_TTL -IPT_IPOPT-$(CONFIG_IP_NF_MATCH_UNCLEAN) += $(P_V4)ipt_unclean - -IPT_IPSEC-m := -IPT_IPSEC-$(CONFIG_IP_NF_MATCH_AH_ESP) += $(P_V4)ipt_ah $(P_V4)ipt_esp -IPT_IPSEC-$(CONFIG_IP_NF_MATCH_AH) += $(P_V4)ipt_ah -IPT_IPSEC-$(CONFIG_NETFILTER_XT_MATCH_ESP) += $(P_XT)xt_esp - -IPT_NAT-m := -ifneq ($(NF_KMOD),1) - IPT_NAT-$(CONFIG_IP_NF_NAT) += $(P_V4)ipt_SNAT $(P_V4)ipt_DNAT -endif -IPT_NAT-$(CONFIG_IP_NF_TARGET_MASQUERADE) += $(P_V4)ipt_MASQUERADE -IPT_NAT-$(CONFIG_IP_NF_TARGET_MIRROR) += $(P_V4)ipt_MIRROR -IPT_NAT-$(CONFIG_IP_NF_TARGET_REDIRECT) += $(P_V4)ipt_REDIRECT -IPT_NAT-$(CONFIG_IP_NF_TARGET_NETMAP) += $(P_V4)ipt_NETMAP - -IPT_NAT_DEFAULT-m := -IPT_NAT_DEFAULT-$(CONFIG_IP_NF_FTP) += $(P_V4)ip_conntrack_ftp -IPT_NAT_DEFAULT-$(CONFIG_IP_NF_NAT_FTP) += $(P_V4)ip_nat_ftp -IPT_NAT_DEFAULT-$(CONFIG_IP_NF_IRC) += $(P_V4)ip_conntrack_irc -IPT_NAT_DEFAULT-$(CONFIG_IP_NF_NAT_IRC) += $(P_V4)ip_nat_irc -IPT_NAT_DEFAULT-$(CONFIG_IP_NF_TFTP) += $(P_V4)ip_conntrack_tftp - -IPT_NAT_EXTRA-m := -IPT_NAT_EXTRA-$(CONFIG_IP_NF_AMANDA) += $(P_V4)ip_conntrack_amanda -IPT_NAT_EXTRA-$(CONFIG_IP_NF_CT_PROTO_GRE) += $(P_V4)ip_conntrack_proto_gre -IPT_NAT_EXTRA-$(CONFIG_IP_NF_NAT_PROTO_GRE) += $(P_V4)ip_nat_proto_gre -IPT_NAT_EXTRA-$(CONFIG_IP_NF_H323) += $(P_V4)ip_conntrack_h323 -IPT_NAT_EXTRA-$(CONFIG_IP_NF_NAT_H323) += $(P_V4)ip_nat_h323 -IPT_NAT_EXTRA-$(CONFIG_IP_NF_MMS) += $(P_V4)ip_conntrack_mms -IPT_NAT_EXTRA-$(CONFIG_IP_NF_NAT_MMS) += $(P_V4)ip_nat_mms -IPT_NAT_EXTRA-$(CONFIG_IP_NF_RTSP) += $(P_V4)ip_conntrack_rtsp -IPT_NAT_EXTRA-$(CONFIG_IP_NF_NAT_RTSP) += $(P_V4)ip_nat_rtsp -IPT_NAT_EXTRA-$(CONFIG_IP_NF_PPTP) += $(P_V4)ip_conntrack_pptp -IPT_NAT_EXTRA-$(CONFIG_IP_NF_SIP) += $(P_V4)ip_conntrack_sip -IPT_NAT_EXTRA-$(CONFIG_IP_NF_NAT_PPTP) += $(P_V4)ip_nat_pptp -IPT_NAT_EXTRA-$(CONFIG_IP_NF_NAT_SIP) += $(P_V4)ip_nat_sip -IPT_NAT_EXTRA-$(CONFIG_IP_NF_NAT_SNMP_BASIC) += $(P_V4)ip_nat_snmp_basic -IPT_NAT_EXTRA-$(CONFIG_IP_NF_SIP) += $(P_V4)ip_conntrack_sip -IPT_NAT_EXTRA-$(CONFIG_IP_NF_NAT_SIP) += $(P_V4)ip_nat_sip - -IPT_QUEUE-m := -IPT_QUEUE-$(CONFIG_IP_NF_QUEUE) += $(P_V4)ip_queue - -IPT_ULOG-m := -IPT_ULOG-$(CONFIG_IP_NF_TARGET_ULOG) += $(P_V4)ipt_ULOG - -IPT_BUILTIN := $(P_V4)ipt_standard -IPT_BUILTIN += $(P_V4)ipt_icmp $(P_V4)ipt_tcp $(P_V4)ipt_udp -IPT_BUILTIN += $(IPT_CONNTRACK-y) -IPT_BUILTIN += $(IPT_EXTRA-y) -IPT_BUILTIN += $(IPT_FILTER-y) -IPT_BUILTIN += $(IPT_IMQ-y) -IPT_BUILTIN += $(IPT_IPOPT-y) -IPT_BUILTIN += $(IPT_IPSEC-y) -IPT_BUILTIN += $(IPT_NAT-y) -IPT_BUILTIN += $(IPT_ULOG-y) diff --git a/openwrt/package/sdk/files/include/package-defaults.mk b/openwrt/package/sdk/files/include/package-defaults.mk new file mode 100644 index 0000000000..16d9ae0027 --- /dev/null +++ b/openwrt/package/sdk/files/include/package-defaults.mk @@ -0,0 +1,108 @@ +# +# Copyright (C) 2006 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +define Package/Default + CONFIGFILE:= + SECTION:=opt + CATEGORY:=Extra packages + DEPENDS:= + PROVIDES:= + EXTRA_DEPENDS:= + MAINTAINER:=OpenWrt Developers Team + SOURCE:=$(patsubst $(TOPDIR)/%,%,${shell pwd}) + ifneq ($(PKG_VERSION),) + ifneq ($(PKG_RELEASE),) + VERSION:=$(PKG_VERSION)-$(PKG_RELEASE) + else + VERSION:=$(PKG_VERSION) + endif + else + VERSION:=$(PKG_RELEASE) + endif + PKGARCH:=$(ARCH) + PRIORITY:=optional + DEFAULT:= + MENU:= + SUBMENU:= + SUBMENUDEP:= + TITLE:= + DESCRIPTION:= +endef + +Build/Patch:=$(Build/Patch/Default) +ifneq ($(strip $(PKG_UNPACK)),) + define Build/Prepare/Default + $(PKG_UNPACK) + $(Build/Patch) + endef +endif + +TARGET_CPPFLAGS:=-I$(STAGING_DIR)/usr/include -I$(STAGING_DIR)/include +TARGET_LDFLAGS:=-L$(STAGING_DIR)/usr/lib -L$(STAGING_DIR)/lib + +CONFIGURE_ARGS = \ + --target=$(GNU_TARGET_NAME) \ + --host=$(GNU_TARGET_NAME) \ + --build=$(GNU_HOST_NAME) \ + --program-prefix="" \ + --program-suffix="" \ + --prefix=/usr \ + --exec-prefix=/usr \ + --bindir=/usr/bin \ + --sbindir=/usr/sbin \ + --libexecdir=/usr/lib \ + --sysconfdir=/etc \ + --datadir=/usr/share \ + --localstatedir=/var \ + --mandir=/usr/man \ + --infodir=/usr/info \ + $(DISABLE_NLS) + +CONFIGURE_VARS = \ + $(TARGET_CONFIGURE_OPTS) \ + CFLAGS="$(TARGET_CFLAGS) $(EXTRA_CFLAGS)" \ + CXXFLAGS="$(TARGET_CFLAGS) $(EXTRA_CFLAGS)" \ + CPPFLAGS="$(TARGET_CPPFLAGS) $(EXTRA_CPPFLAGS)" \ + LDFLAGS="$(TARGET_LDFLAGS)" \ + PKG_CONFIG_PATH="$(STAGING_DIR)/usr/lib/pkgconfig" \ + PKG_CONFIG_LIBDIR="$(STAGING_DIR)/usr/lib/pkgconfig" + +CONFIGURE_PATH = . +CONFIGURE_CMD = ./configure + +define Build/Configure/Default + (cd $(PKG_BUILD_DIR)/$(CONFIGURE_PATH)/$(strip $(3)); \ + if [ -x $(CONFIGURE_CMD) ]; then \ + $(CONFIGURE_VARS) \ + $(2) \ + $(CONFIGURE_CMD) \ + $(CONFIGURE_ARGS) \ + $(1); \ + fi; \ + ) +endef + +MAKE_VARS = \ + CFLAGS="$(TARGET_CFLAGS) $(EXTRA_CFLAGS)" \ + CXXFLAGS="$(TARGET_CFLAGS) $(EXTRA_CFLAGS)" \ + LDFLAGS="$(EXTRA_LDFLAGS) " + +MAKE_FLAGS = \ + $(TARGET_CONFIGURE_OPTS) \ + CROSS="$(TARGET_CROSS)" \ + ARCH="$(ARCH)" + +MAKE_PATH = . + +define Build/Compile/Default + $(MAKE_VARS) \ + $(MAKE) -C $(PKG_BUILD_DIR)/$(MAKE_PATH) \ + $(MAKE_FLAGS) \ + $(1); +endef + + diff --git a/openwrt/package/sdk/files/include/package-dumpinfo.mk b/openwrt/package/sdk/files/include/package-dumpinfo.mk new file mode 100644 index 0000000000..effb8637bd --- /dev/null +++ b/openwrt/package/sdk/files/include/package-dumpinfo.mk @@ -0,0 +1,38 @@ +# +# Copyright (C) 2006 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +ifneq ($(DUMP),) + define Config + preconfig_$$(1) += echo "Preconfig: $(1)"; echo "Preconfig-Type: $(2)"; echo "Preconfig-Default: $(3)"; echo "Preconfig-Label: $(4)"; + endef + + define Dumpinfo + dumpinfo: dumpinfo-$(1) + .SILENT: dumpinfo-$(1) + dumpinfo-$(1): FORCE + @echo "Package: $(1)" ; \ + $(if $(MENU),echo "Menu: $(MENU)";) \ + $(if $(SUBMENU),echo "Submenu: $(SUBMENU)";) \ + $(if $(SUBMENUDEP),echo "Submenu-Depends: $(SUBMENUDEP)";) \ + $(if $(DEFAULT),echo "Default: $(DEFAULT)";) \ + if [ "$$$$PREREQ_CHECK" = 1 ]; then echo "Prereq-Check: 1"; fi; \ + echo "Version: $(VERSION)"; \ + echo "Depends: $(DEPENDS)"; \ + echo "Provides: $(PROVIDES)"; \ + echo "Build-Depends: $(PKG_BUILD_DEPENDS)"; \ + echo "Section: $(SECTION)"; \ + echo "Category: $(CATEGORY)"; \ + echo "Title: $(TITLE)"; \ + echo "Maintainer: $(MAINTAINER)"; \ + echo -n "Description: "; \ + getvar $(call shvar,Package/$(1)/description); \ + $(if $(URL),echo;echo "$(URL)";) \ + echo "@@" ; \ + $$(if $$(Package/$(1)/config),echo "Config: "; getvar $(call shvar,Package/$(1)/config); echo "@@"; ) \ + $$(if $$(preconfig_$(1)),$$(preconfig_$(1)) echo "") + endef +endif diff --git a/openwrt/package/sdk/files/include/package-ipkg.mk b/openwrt/package/sdk/files/include/package-ipkg.mk new file mode 100644 index 0000000000..597f5f87c3 --- /dev/null +++ b/openwrt/package/sdk/files/include/package-ipkg.mk @@ -0,0 +1,88 @@ +# +# Copyright (C) 2006,2007 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +define BuildIPKGVariable + $(call shexport,Package/$(1)/$(2)) + $(1)_COMMANDS += var2file "$(call shvar,Package/$(1)/$(2))" $(2); +endef + +ifeq ($(DUMP),) + define BuildIPKG + IPKG_$(1):=$(PACKAGE_DIR)/$(1)_$(VERSION)_$(PKGARCH).ipk + IDIR_$(1):=$(PKG_BUILD_DIR)/ipkg/$(1) + INFO_$(1):=$(IPKG_STATE_DIR)/info/$(1).list + + ifdef Package/$(1)/install + ifneq ($(CONFIG_PACKAGE_$(1))$(SDK)$(DEVELOPER),) + compile: $$(IPKG_$(1)) + + ifeq ($(CONFIG_PACKAGE_$(1)),y) + install: $$(INFO_$(1)) + endif + else + compile: $(1)-disabled + $(1)-disabled: + @echo "WARNING: skipping $(1) -- package not selected" + endif + endif + + IDEPEND_$(1):=$$(strip $$(DEPENDS)) + + $(eval $(call BuildIPKGVariable,$(1),conffiles)) + $(eval $(call BuildIPKGVariable,$(1),preinst)) + $(eval $(call BuildIPKGVariable,$(1),postinst)) + $(eval $(call BuildIPKGVariable,$(1),prerm)) + $(eval $(call BuildIPKGVariable,$(1),postrm)) + $$(IDIR_$(1))/CONTROL/control: $(PKG_BUILD_DIR)/.version-$(1)_$(VERSION)_$(PKGARCH) + @rm -f $(PACKAGE_DIR)/$(1)_* + mkdir -p $$(IDIR_$(1))/CONTROL + echo "Package: $(1)" > $$(IDIR_$(1))/CONTROL/control + echo "Version: $(VERSION)" >> $$(IDIR_$(1))/CONTROL/control + ( \ + DEPENDS='$(EXTRA_DEPENDS)'; \ + for depend in $$(filter-out @%,$$(IDEPEND_$(1))); do \ + DEPENDS=$$$${DEPENDS:+$$$$DEPENDS, }$$$${depend##+}; \ + done; \ + echo "Depends: $$$$DEPENDS"; \ + echo "Source: $(SOURCE)"; \ + echo "Section: $(SECTION)"; \ + echo "Priority: $(PRIORITY)"; \ + echo "Maintainer: $(MAINTAINER)"; \ + echo "Architecture: $(PKGARCH)"; \ + echo -n "Description: "; getvar $(call shvar,Package/$(1)/description) | sed -e 's,^[[:space:]]*, ,g'; \ + ) >> $$(IDIR_$(1))/CONTROL/control + chmod 644 $$(IDIR_$(1))/CONTROL/control + (cd $$(IDIR_$(1))/CONTROL; \ + $($(1)_COMMANDS) \ + ) + + $$(IPKG_$(1)): $(PKG_BUILD_DIR)/.built $$(IDIR_$(1))/CONTROL/control + $(call Package/$(1)/install,$$(IDIR_$(1))) + mkdir -p $(PACKAGE_DIR) + -find $$(IDIR_$(1)) -name CVS | $(XARGS) rm -rf + -find $$(IDIR_$(1)) -name .svn | $(XARGS) rm -rf + -find $$(IDIR_$(1)) -name '.#*' | $(XARGS) rm -f + $(RSTRIP) $$(IDIR_$(1)) + $(IPKG_BUILD) $$(IDIR_$(1)) $(PACKAGE_DIR) + @[ -f $$(IPKG_$(1)) ] || false + + $$(INFO_$(1)): $$(IPKG_$(1)) + $(IPKG) install $$(IPKG_$(1)) + + $(1)-clean: + rm -f $(PACKAGE_DIR)/$(1)_* + + clean: $(1)-clean + + $(PKG_BUILD_DIR)/.version-$(1)_$(VERSION)_$(PKGARCH): $(STAMP_PREPARED) + -@rm -f $(PKG_BUILD_DIR)/.version-$(1)_* 2>/dev/null + @touch $$@ + + $$(eval $$(call Build/DefaultTargets,$(1))) + + endef +endif diff --git a/openwrt/package/sdk/files/include/package.mk b/openwrt/package/sdk/files/include/package.mk index 7f29e5f9c9..daff3ed0d6 100644 --- a/openwrt/package/sdk/files/include/package.mk +++ b/openwrt/package/sdk/files/include/package.mk @@ -1,116 +1,91 @@ # -# Copyright (C) 2006 OpenWrt.org +# Copyright (C) 2006,2007 OpenWrt.org # # This is free software, licensed under the GNU General Public License v2. # See /LICENSE for more information. # -ifneq ($(DUMP),) - all: dumpinfo -else - all: compile -endif + +all: $(if $(DUMP),dumpinfo,compile) + +PKG_BUILD_DIR ?= $(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION) +PKG_INSTALL_DIR ?= $(PKG_BUILD_DIR)/ipkg-install include $(INCLUDE_DIR)/prereq.mk include $(INCLUDE_DIR)/host.mk include $(INCLUDE_DIR)/unpack.mk +include $(INCLUDE_DIR)/depends.mk + +STAMP_PREPARED:=$(PKG_BUILD_DIR)/.prepared$(if $(DUMP),,_$(shell find ${CURDIR} $(PKG_FILE_DEPEND) $(DEP_FINDPARAMS) | md5s)) +STAMP_CONFIGURED:=$(PKG_BUILD_DIR)/.configured +STAMP_BUILT:=$(PKG_BUILD_DIR)/.built + +include $(INCLUDE_DIR)/quilt.mk +include $(INCLUDE_DIR)/package-defaults.mk +include $(INCLUDE_DIR)/package-dumpinfo.mk +include $(INCLUDE_DIR)/package-ipkg.mk -PKG_CONFIG_PATH:=. export CONFIG_SITE:=$(INCLUDE_DIR)/site/$(REAL_GNU_TARGET_NAME) +ifneq ($(CONFIG_AUTOREBUILD),) + define Build/Autoclean + $(PKG_BUILD_DIR)/.dep_files: $(STAMP_PREPARED) + $(call rdep,${CURDIR} $(PKG_FILE_DEPEND),$(STAMP_PREPARED)) + $(call rdep,$(PKG_BUILD_DIR),$(STAMP_BUILT),$(PKG_BUILD_DIR)/.dep_files, -and -not -path "/.*" -and -not -path "*/ipkg*") + endef +endif + define Build/DefaultTargets - ifeq ($(DUMP),) - ifeq ($(CONFIG_AUTOREBUILD),y) - ifneq ($$(shell $(SCRIPT_DIR)/timestamp.pl -p $(PKG_BUILD_DIR) . $(PKG_FILE_DEPEND)),$(PKG_BUILD_DIR)) - $$(info Forcing package rebuild) - $(PKG_BUILD_DIR)/.prepared: package-clean - endif - endif + ifneq ($(strip $(PKG_SOURCE_URL)),) + download: $(DL_DIR)/$(PKG_SOURCE) + + $(DL_DIR)/$(PKG_SOURCE): + mkdir -p $(DL_DIR) + $(SCRIPT_DIR)/download.pl "$(DL_DIR)" "$(PKG_SOURCE)" "$(PKG_MD5SUM)" $(PKG_SOURCE_URL) + + $(STAMP_PREPARED): $(DL_DIR)/$(PKG_SOURCE) endif - $(PKG_BUILD_DIR)/.prepared: + $(call Build/Autoclean) + + $(STAMP_PREPARED): @-rm -rf $(PKG_BUILD_DIR) @mkdir -p $(PKG_BUILD_DIR) - $(call Build/Prepare) + $(Build/Prepare) touch $$@ - $(PKG_BUILD_DIR)/.configured: $(PKG_BUILD_DIR)/.prepared - $(call Build/Configure) + $(STAMP_CONFIGURED): $(STAMP_PREPARED) + $(Build/Configure) touch $$@ - $(PKG_BUILD_DIR)/.built: $(PKG_BUILD_DIR)/.configured - $(call Build/Compile) + $(STAMP_BUILT): $(STAMP_CONFIGURED) + $(Build/Compile) + @$(NO_TRACE_MAKE) $(PKG_BUILD_DIR)/.dep_files touch $$@ ifdef Build/InstallDev - ifneq ($$(shell $(SCRIPT_DIR)/timestamp.pl -p -x ipkg -x ipkg-install $(STAGING_DIR)/stampfiles/.$(PKG_NAME)-installed $(PKG_BUILD_DIR)),$(STAGING_DIR)/stampfiles/.$(PKG_NAME)-installed) - $(PKG_BUILD_DIR)/.built: package-rebuild - endif - - $(STAGING_DIR)/stampfiles/.$(PKG_NAME)-installed: $(PKG_BUILD_DIR)/.built + compile: $(STAGING_DIR)/stampfiles/.$(PKG_NAME)-installed + $(STAGING_DIR)/stampfiles/.$(PKG_NAME)-installed: $(STAMP_BUILT) mkdir -p $(STAGING_DIR)/stampfiles - $(call Build/InstallDev) + $(Build/InstallDev) touch $$@ - - compile-targets: $(STAGING_DIR)/stampfiles/.$(PKG_NAME)-installed endif - package-clean: FORCE - $(call Build/Clean) - $(call Build/UninstallDev) - -rm -f $(STAGING_DIR)/stampfiles/.$(PKG_NAME)-installed - - package-rebuild: FORCE - @-rm -f $(PKG_BUILD_DIR)/.built - define Build/DefaultTargets endef endef -define Package/Default - CONFIGFILE:= - SECTION:=opt - CATEGORY:=Extra packages - DEPENDS:= - PROVIDES:= - EXTRA_DEPENDS:= - MAINTAINER:=OpenWrt Developers Team - SOURCE:=$(patsubst $(TOPDIR)/%,%,${shell pwd}) - ifneq ($(PKG_VERSION),) - ifneq ($(PKG_RELEASE),) - VERSION:=$(PKG_VERSION)-$(PKG_RELEASE) - else - VERSION:=$(PKG_VERSION) - endif - else - VERSION:=$(PKG_RELEASE) - endif - PKGARCH:=$(ARCH) - PRIORITY:=optional - DEFAULT:= - MENU:= - SUBMENU:= - SUBMENUDEP:= - TITLE:= - DESCRIPTION:= -endef - -define BuildDescription - ifneq ($(DESCRIPTION),) - DESCRIPTION:=$(TITLE)\\ $(DESCRIPTION) - else - DESCRIPTION:=$(TITLE) - endif -endef - -define BuildIPKGVariable - $(call shexport,Package/$(1)/$(2)) - $(1)_COMMANDS += var2file "$(call shvar,Package/$(1)/$(2))" $(2); -endef - define BuildPackage - $(eval $(call Package/Default)) - $(eval $(call Package/$(1))) - $(eval $(call BuildDescription)) + $(eval $(Package/Default)) + $(eval $(Package/$(1))) + +# Support obsolete DESCRIPTION field +ifndef Package/$(1)/description +define Package/$(1)/description +$(TITLE)$(subst \, +,\ $(DESCRIPTION)) +endef +endif +# $(foreach FIELD, TITLE CATEGORY PRIORITY SECTION VERSION, ifeq ($($(FIELD)),) @@ -118,254 +93,36 @@ define BuildPackage endif ) - IPKG_$(1):=$(PACKAGE_DIR)/$(1)_$(VERSION)_$(PKGARCH).ipk - IDIR_$(1):=$(PKG_BUILD_DIR)/ipkg/$(1) - INFO_$(1):=$(IPKG_STATE_DIR)/info/$(1).list - - ifdef Package/$(1)/install - ifeq ($(CONFIG_PACKAGE_$(1)),y) - install-targets: $$(INFO_$(1)) - endif - - ifneq ($(CONFIG_PACKAGE_$(1))$(DEVELOPER)$(SDK),) - compile-targets: $$(IPKG_$(1)) - else - compile-targets: $(1)-disabled - $(1)-disabled: - @echo "WARNING: skipping $(1) -- package not selected" - endif - endif - - ifeq ($(FORCEREBUILD),y) - $$(IPKG_$(1)): FORCE - endif - - IDEPEND_$(1):=$$(strip $$(DEPENDS)) - - ifneq ($(DUMP),) - dumpinfo: dumpinfo-$(1) - dumpinfo-$(1): FORCE - @$$(DUMPINFO_$(call shvar,$(1))) - - DUMPINFO_$(call shvar,$(1)) += \ - echo "Package: $(1)"; - - ifneq ($(MENU),) - DUMPINFO_$(call shvar,$(1)) += \ - echo "Menu: $(MENU)"; - endif - - ifneq ($(SUBMENU),) - DUMPINFO_$(call shvar,$(1)) += \ - echo "Submenu: $(SUBMENU)"; - ifneq ($(SUBMENUDEP),) - DUMPINFO_$(call shvar,$(1)) += \ - echo "Submenu-Depends: $(SUBMENUDEP)"; - endif - endif - - ifneq ($(DEFAULT),) - DUMPINFO_$(call shvar,$(1)) += \ - echo "Default: $(DEFAULT)"; - endif - - $(call shexport,Package/$(1)/description) - - DUMPINFO_$(call shvar,$(1)) += \ - if [ "$$$$PREREQ_CHECK" = 1 ]; then echo "Prereq-Check: 1"; fi; \ - echo "Version: $(VERSION)"; \ - echo "Depends: $$(IDEPEND_$(1))"; \ - echo "Provides: $(PROVIDES)"; \ - echo "Build-Depends: $(PKG_BUILD_DEPENDS)"; \ - echo "Section: $(SECTION)"; \ - echo "Category: $(CATEGORY)"; \ - echo "Title: $(TITLE)"; \ - echo "Maintainer: $(MAINTAINER)"; \ - if isset $(call shvar,Package/$(1)/description); then \ - echo -n "Description: "; \ - getvar $(call shvar,Package/$(1)/description); \ - else \ - echo "Description: $(patsubst \\,\\\\,$(DESCRIPTION))" | perl -ne 's/\\/\n/g, print'; \ - fi; - - ifneq ($(URL),) - DUMPINFO_$(call shvar,$(1)) += \ - echo; \ - echo "$(URL)"; - endif - - DUMPINFO_$(call shvar,$(1)) += \ - echo "@@"; + $(call shexport,Package/$(1)/description) + $(call shexport,Package/$(1)/config) - $(call shexport,Package/$(1)/config) - DUMPINFO_$(call shvar,$(1)) += \ - if isset $(call shvar,Package/$(1)/config); then \ - echo "Config: "; \ - getvar $(call shvar,Package/$(1)/config); \ - echo "@@"; \ - fi; - - endif - - $(eval $(call BuildIPKGVariable,$(1),conffiles)) - $(eval $(call BuildIPKGVariable,$(1),preinst)) - $(eval $(call BuildIPKGVariable,$(1),postinst)) - $(eval $(call BuildIPKGVariable,$(1),prerm)) - $(eval $(call BuildIPKGVariable,$(1),postrm)) - $$(IDIR_$(1))/CONTROL/control: $(PKG_BUILD_DIR)/.version-$(1)_$(VERSION)_$(PKGARCH) - mkdir -p $$(IDIR_$(1))/CONTROL - echo "Package: $(1)" > $$(IDIR_$(1))/CONTROL/control - echo "Version: $(VERSION)" >> $$(IDIR_$(1))/CONTROL/control - ( \ - DEPENDS='$(EXTRA_DEPENDS)'; \ - for depend in $$(filter-out @%,$$(IDEPEND_$(1))); do \ - 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 - echo "Maintainer: $(MAINTAINER)" >> $$(IDIR_$(1))/CONTROL/control - echo "Architecture: $(PKGARCH)" >> $$(IDIR_$(1))/CONTROL/control - echo "Description: $(DESCRIPTION)" | sed -e 's,\\,\n,g' | sed -e 's,^[[:space:]]*$$$$, .,g' >> $$(IDIR_$(1))/CONTROL/control - chmod 644 $$(IDIR_$(1))/CONTROL/control - (cd $$(IDIR_$(1))/CONTROL; \ - $($(1)_COMMANDS) \ - ) - - $$(IPKG_$(1)): $(PKG_BUILD_DIR)/.built $$(IDIR_$(1))/CONTROL/control - $(call Package/$(1)/install,$$(IDIR_$(1))) - mkdir -p $(PACKAGE_DIR) - -find $$(IDIR_$(1)) -name CVS | xargs rm -rf - -find $$(IDIR_$(1)) -name .svn | xargs rm -rf - -find $$(IDIR_$(1)) -name '.#*' | xargs rm -f - $(RSTRIP) $$(IDIR_$(1)) - $(IPKG_BUILD) $$(IDIR_$(1)) $(PACKAGE_DIR) - @[ -f $$(IPKG_$(1)) ] || false - - $$(INFO_$(1)): $$(IPKG_$(1)) - $(IPKG) install $$(IPKG_$(1)) - - $(1)-clean: - rm -f $(PACKAGE_DIR)/$(1)_* - - clean: $(1)-clean - - $(PKG_BUILD_DIR)/.version-$(1)_$(VERSION)_$(PKGARCH): $(PKG_BUILD_DIR)/.prepared - -@rm -f $(PKG_BUILD_DIR)/.version-$(1)_* 2>/dev/null - @touch $$@ - - $$(eval $$(call Build/DefaultTargets,$(1))) - - ifdef Package/$(1)/install - ifneq ($$(CONFIG_PACKAGE_$(1))$(DEVELOPER)$(SDK),) - ifneq ($(MAKECMDGOALS),prereq) - ifneq ($(DUMP),1) - ifneq ($$(shell $(SCRIPT_DIR)/timestamp.pl -p -x ipkg -x ipkg-install '$$(IPKG_$(1))' '$(PKG_BUILD_DIR)'),$$(IPKG_$(1))) - $(PKG_BUILD_DIR)/.built: package-rebuild - $$(info Rebuilding $(subst $(TOPDIR)/,,$$(IPKG_$(1)))) - endif - endif - endif - endif - endif + $(Dumpinfo) + $(BuildIPKG) endef -ifneq ($(strip $(PKG_UNPACK)),) - define Build/Prepare/Default - $(PKG_UNPACK) - @if [ -d ./patches -a "$$$$(ls ./patches | wc -l)" -gt 0 ]; then \ - $(PATCH) $(PKG_BUILD_DIR) ./patches; \ - fi - endef -endif - define Build/Prepare $(call Build/Prepare/Default,) endef -define Build/Configure/Default - (cd $(PKG_BUILD_DIR)/$(strip $(3)); \ - if [ -x configure ]; then \ - $(TARGET_CONFIGURE_OPTS) \ - CFLAGS="$(TARGET_CFLAGS)" \ - CXXFLAGS="$(TARGET_CFLAGS)" \ - CPPFLAGS="-I$(STAGING_DIR)/usr/include -I$(STAGING_DIR)/include" \ - LDFLAGS="-L$(STAGING_DIR)/usr/lib -L$(STAGING_DIR)/lib" \ - PKG_CONFIG_PATH="$(STAGING_DIR)/usr/lib/pkgconfig" \ - PKG_CONFIG_LIBDIR="$(STAGING_DIR)/usr/lib/pkgconfig" \ - $(2) \ - $(PKG_CONFIG_PATH)/configure \ - --target=$(GNU_TARGET_NAME) \ - --host=$(GNU_TARGET_NAME) \ - --build=$(GNU_HOST_NAME) \ - --program-prefix="" \ - --program-suffix="" \ - --prefix=/usr \ - --exec-prefix=/usr \ - --bindir=/usr/bin \ - --sbindir=/usr/sbin \ - --libexecdir=/usr/lib \ - --sysconfdir=/etc \ - --datadir=/usr/share \ - --localstatedir=/var \ - --mandir=/usr/man \ - --infodir=/usr/info \ - $(DISABLE_NLS) \ - $(1); \ - fi; \ - ) -endef - define Build/Configure $(call Build/Configure/Default,) endef -define Build/Compile/Default - CFLAGS="$(TARGET_CFLAGS) $(EXTRA_CPPFLAGS) " \ - LDFLAGS="$(EXTRA_LDFLAGS) " \ - $(MAKE) -C $(PKG_BUILD_DIR) \ - $(TARGET_CONFIGURE_OPTS) \ - CROSS="$(TARGET_CROSS)" \ - CXXFLAGS="$(TARGET_CFLAGS) $(EXTRA_CPPFLAGS) " \ - ARCH="$(ARCH)" \ - $(1); -endef - define Build/Compile $(call Build/Compile/Default,) endef -ifneq ($(DUMP),) - dumpinfo: -else - $(PACKAGE_DIR): +$(PACKAGE_DIR): mkdir -p $@ - ifneq ($(strip $(PKG_SOURCE_URL)),) - download: $(DL_DIR)/$(PKG_SOURCE) - - $(DL_DIR)/$(PKG_SOURCE): - mkdir -p $(DL_DIR) - $(SCRIPT_DIR)/download.pl "$(DL_DIR)" "$(PKG_SOURCE)" "$(PKG_MD5SUM)" $(PKG_SOURCE_URL) - - $(PKG_BUILD_DIR)/.prepared: $(DL_DIR)/$(PKG_SOURCE) - endif - - download: - prepare: $(PKG_BUILD_DIR)/.prepared - configure: $(PKG_BUILD_DIR)/.configured - - compile-targets: - compile: compile-targets - - install-targets: - install: install-targets - - clean-targets: - clean: FORCE - @$(MAKE) clean-targets - $(call Build/Clean) - rm -rf $(PKG_BUILD_DIR) -endif +dumpinfo: +download: +prepare: $(STAMP_PREPARED) +configure: $(STAMP_CONFIGURED) +compile: +install: +clean: FORCE + $(Build/UninstallDev) + $(Build/Clean) + @rm -f $(STAGING_DIR)/stampfiles/.$(PKG_NAME)-installed + @rm -rf $(PKG_BUILD_DIR) diff --git a/openwrt/package/sdk/files/include/prereq.mk b/openwrt/package/sdk/files/include/prereq.mk index 41596dcb8b..8a08be8e68 100644 --- a/openwrt/package/sdk/files/include/prereq.mk +++ b/openwrt/package/sdk/files/include/prereq.mk @@ -27,7 +27,7 @@ define Require echo 'ok.'; \ else \ echo 'failed.'; \ - echo -e "$(strip $(2))" | perl -ne 's/\\\s*/\n/g,print' >> $(TMP_DIR)/.prereq-error; \ + echo -e "$(PKG_NAME): $(strip $(2))" | perl -ne 's/\\\s*/\n/g,print' >> $(TMP_DIR)/.prereq-error; \ fi check-$(1): FORCE diff --git a/openwrt/package/sdk/files/include/quilt.mk b/openwrt/package/sdk/files/include/quilt.mk new file mode 100644 index 0000000000..395f64e174 --- /dev/null +++ b/openwrt/package/sdk/files/include/quilt.mk @@ -0,0 +1,109 @@ +# +# Copyright (C) 2007 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +ifeq ($(KERNEL_BUILD),1) + PKG_BUILD_DIR:=$(LINUX_DIR) +endif + +define Quilt/Patch + @for patch in $$$$( (cd $(1) && ls) 2>/dev/null ); do ( \ + cp "$(1)/$$$$patch" $(PKG_BUILD_DIR); \ + cd $(PKG_BUILD_DIR); \ + quilt import -P$(2)$$$$patch -p 1 "$$$$patch"; \ + quilt push -f >/dev/null 2>/dev/null; \ + rm -f "$$$$patch"; \ + ); done +endef + +QUILT?=$(strip $(shell test -f $(PKG_BUILD_DIR)/.quilt_used && echo y)) +ifneq ($(QUILT),) + STAMP_PREPARED:=$(strip $(STAMP_PREPARED))_q + STAMP_PATCHED:=$(PKG_BUILD_DIR)/.quilt_patched + CONFIG_AUTOREBUILD= + PATCHES:=$(shell ) + define Build/Patch/Default + rm -rf $(PKG_BUILD_DIR)/patches + mkdir -p $(PKG_BUILD_DIR)/patches + $(call Quilt/Patch,./patches,) + @echo + touch $(PKG_BUILD_DIR)/.quilt_used + endef + $(STAMP_CONFIGURED): $(STAMP_PATCHED) FORCE + prepare: $(STAMP_PATCHED) + quilt-check: $(STAMP_PATCHED) +else + define Build/Patch/Default + @if [ -d ./patches -a "$$$$(ls ./patches | wc -l)" -gt 0 ]; then \ + $(PATCH) $(PKG_BUILD_DIR) ./patches; \ + fi + endef +endif + +define Kernel/Patch/Default + if [ -d $(GENERIC_PLATFORM_DIR)/files ]; then $(CP) $(GENERIC_PLATFORM_DIR)/files/* $(LINUX_DIR)/; fi + if [ -d ./files ]; then $(CP) ./files/* $(LINUX_DIR)/; fi + $(if $(strip $(QUILT)),$(call Quilt/Patch,$(GENERIC_PLATFORM_DIR)/patches,generic/), \ + if [ -d $(GENERIC_PLATFORM_DIR)/patches ]; then $(PATCH) $(LINUX_DIR) $(GENERIC_PLATFORM_DIR)/patches; fi \ + ) + $(if $(strip $(QUILT)),$(call Quilt/Patch,./patches,platform/), \ + if [ -d ./patches ]; then $(PATCH) $(LINUX_DIR) ./patches; fi \ + ) + $(if $(strip $(QUILT)),touch $(PKG_BUILD_DIR)/.quilt_used) +endef + +$(STAMP_PATCHED): $(STAMP_PREPARED) + @cd $(PKG_BUILD_DIR); quilt pop -a -f >/dev/null 2>/dev/null || true + [ -f "$(PKG_BUILD_DIR)/patches/series" ] && cd $(PKG_BUILD_DIR); quilt push -a + touch $@ + +define Quilt/RefreshDir + mkdir -p $(1) + -rm -f $(1)/* 2>/dev/null >/dev/null + @( \ + for patch in $$($(if $(2),grep "^$(2)",cat) $(PKG_BUILD_DIR)/patches/series | awk '{print $$1}'); do \ + $(CP) -v "$(PKG_BUILD_DIR)/patches/$$patch" $(1); \ + done; \ + ) +endef + +define Quilt/Refresh/Package + $(call Quilt/RefreshDir,./patches) +endef + +define Quilt/Refresh/Kernel + @[ -z "$$(grep -v '^generic/' $(PKG_BUILD_DIR)/patches/series | grep -v '^platform/')" ] || { \ + echo "All kernel patches must start with either generic/ or platform/"; \ + false; \ + } + $(call Quilt/RefreshDir,$(GENERIC_PLATFORM_DIR)/patches,generic/) + $(call Quilt/RefreshDir,./patches,platform/) +endef + +quilt-check: $(STAMP_PREPARED) FORCE + @[ -f "$(PKG_BUILD_DIR)/.quilt_used" ] || { \ + echo "The source directory was not unpacked using quilt. Please rebuild with QUILT=1"; \ + false; \ + } + @[ -f "$(PKG_BUILD_DIR)/patches/series" ] || { \ + echo "The source directory contains no quilt patches."; \ + false; \ + } + @[ "$$(cat $(PKG_BUILD_DIR)/patches/series | md5sum)" = "$$(sort $(PKG_BUILD_DIR)/patches/series | md5sum)" ] || { \ + echo "The patches are not sorted in the right order. Please fix."; \ + false; \ + } + +refresh: quilt-check + @cd $(PKG_BUILD_DIR); quilt pop -a -f >/dev/null 2>/dev/null + @cd $(PKG_BUILD_DIR); while quilt next 2>/dev/null >/dev/null && quilt push; do \ + quilt refresh; \ + done; ! quilt next 2>/dev/null >/dev/null + $(if $(KERNEL_BUILD),$(Quilt/Refresh/Kernel),$(Quilt/Refresh/Package)) + +update: quilt-check + $(if $(KERNEL_BUILD),$(Quilt/Refresh/Kernel),$(Quilt/Refresh/Package)) + diff --git a/openwrt/package/sdk/files/include/scan.mk b/openwrt/package/sdk/files/include/scan.mk new file mode 100644 index 0000000000..b149e3252f --- /dev/null +++ b/openwrt/package/sdk/files/include/scan.mk @@ -0,0 +1,55 @@ +include $(TOPDIR)/include/verbose.mk + +SCAN_TARGET ?= packageinfo +SCAN_NAME ?= package +SCAN_DIR ?= package +SCAN_DEPS ?= include/package.mk + +ifeq ($(IS_TTY),1) + define progress + printf "\033[M\r$(1)" >&2; + endef +else + define progress + : + endef +endif + +SCAN = $(patsubst $(SCAN_DIR)/%/Makefile,%,$(wildcard $(SCAN_DIR)/*/Makefile)) +tmp/.$(SCAN_TARGET): + @($(call progress,Collecting $(SCAN_NAME) info: merging...)) + for file in $(SCAN); do \ + cat tmp/info/.$(SCAN_TARGET)-$$file; \ + done > $@ + @($(call progress,Collecting $(SCAN_NAME) info: done)) + @echo + +ifneq ($(SCAN_EXTRA),) +SCAN_STAMP=tmp/info/.scan-$(SCAN_TARGET)-$(shell ls $(SCAN_EXTRA) 2>/dev/null | (md5sum || md5) 2>/dev/null | cut -d' ' -f1) +$(SCAN_STAMP): + rm -f tmp/info/.scan-$(SCAN_TARGET)-* + touch $@ +endif + +# FIXME: generate this dynamically? +ifeq ($(SCAN_TARGET),packageinfo) +tmp/info/.packageinfo-kernel: $(wildcard package/kernel/modules/*.mk) +endif + +define scanfiles +$(foreach FILE,$(SCAN), + tmp/.$(SCAN_TARGET): tmp/info/.$(SCAN_TARGET)-$(FILE) $(SCAN_TARGET_DEPS) $(SCAN_DEPS) + tmp/info/.$(SCAN_TARGET)-$(FILE): $(SCAN_DIR)/$(FILE)/Makefile $(SCAN_STAMP) $(SCAN_TARGET_DEPS) + grep -E 'include (\$$$$\(INCLUDE_DIR\)|\$$$$\(TOPDIR\)/include)/' $(SCAN_DIR)/$(FILE)/Makefile >/dev/null && { \ + $$(call progress,Collecting $(SCAN_NAME) info: $(SCAN_DIR)/$(FILE)); \ + echo Source-Makefile: $(SCAN_DIR)/$(FILE)/Makefile; \ + $(NO_TRACE_MAKE) --no-print-dir DUMP=1 -C $(SCAN_DIR)/$(FILE) 3>/dev/null || echo "ERROR: please fix $(SCAN_DIR)/$(FILE)/Makefile" >&2; \ + echo; \ + } | tee $$@ || true +) + +endef +$(eval $(call scanfiles)) + +FORCE: +.PHONY: FORCE diff --git a/openwrt/package/sdk/files/include/shell.sh b/openwrt/package/sdk/files/include/shell.sh index 1e60692b97..f6be6c526f 100644 --- a/openwrt/package/sdk/files/include/shell.sh +++ b/openwrt/package/sdk/files/include/shell.sh @@ -28,3 +28,7 @@ trapret() {( } } )} + +md5s() { + which md5sum 2>&1 >/dev/null && md5sum "$@" | awk '{print $1}' || md5 "$@" +} diff --git a/openwrt/package/sdk/files/include/unpack.mk b/openwrt/package/sdk/files/include/unpack.mk index e533476b52..500aada462 100644 --- a/openwrt/package/sdk/files/include/unpack.mk +++ b/openwrt/package/sdk/files/include/unpack.mk @@ -1,20 +1,59 @@ +ext=$(word $(words $(subst ., ,$(1))),$(subst ., ,$(1))) + +# unpacking files with +s may break on some platforms. this typically emits error code 2 +ifneq ($(HOST_OS),Linux) + HOST_TAR:=trapret 2 $(TAR) +else + HOST_TAR:=$(TAR) +endif +TAR_CMD:=$(HOST_TAR) -C $(PKG_BUILD_DIR)/.. $(TAR_OPTIONS) +UNZIP_CMD:=unzip -d $(PKG_BUILD_DIR)/.. $(DL_DIR)/$(PKG_SOURCE) + +ifeq ($(PKG_SOURCE),) + PKG_UNPACK ?= true +endif ifeq ($(strip $(PKG_UNPACK)),) - ifneq ($(HOST_OS),Linux) - HOST_TAR:=trapret 2 $(TAR) - else - HOST_TAR:=$(TAR) + ifeq ($(strip $(PKG_CAT)),) + # try to autodetect file type + EXT:=$(call ext,$(PKG_SOURCE)) + EXT1:=$(EXT) + + ifeq ($(filter gz tgz,$(EXT)),$(EXT)) + EXT:=$(call ext,$(PKG_SOURCE:.$(EXT)=)) + UNPACK:=gzip -dc $(DL_DIR)/$(PKG_SOURCE) | + endif + ifeq ($(filter bzip2 bz2 bz tbz2 tbz,$(EXT)),$(EXT)) + EXT:=$(call ext,$(PKG_SOURCE:.$(EXT)=)) + UNPACK:=bzcat $(DL_DIR)/$(PKG_SOURCE) | + endif + ifeq ($(filter tgz tbz tbz2,$(EXT1)),$(EXT1)) + EXT:=tar + endif + UNPACK ?= cat $(DL_DIR)/$(PKG_SOURCE) | + ifeq ($(EXT),tar) + PKG_UNPACK:=$(UNPACK) $(TAR_CMD) + endif + ifeq ($(EXT),cpio) + PKG_UNPACK:=$(UNPACK) (cd $(PKG_BUILD_DIR)/..; cpio -i -d) + endif + ifeq ($(EXT),zip) + PKG_UNPACK:=$(UNZIP_CMD) + endif endif - ifneq ($(strip $(PKG_CAT)),) + + # compatibility code for packages that set PKG_CAT + ifeq ($(strip $(PKG_UNPACK)),) # use existing PKG_CAT - PKG_UNPACK:=$(PKG_CAT) $(DL_DIR)/$(PKG_SOURCE) | $(HOST_TAR) -C $(PKG_BUILD_DIR)/.. $(TAR_OPTIONS) + PKG_UNPACK:=$(PKG_CAT) $(DL_DIR)/$(PKG_SOURCE) | $(TAR_CMD) ifeq ($(PKG_CAT),unzip) - PKG_UNPACK:=unzip -d $(PKG_BUILD_DIR)/.. $(DL_DIR)/$(PKG_SOURCE) + PKG_UNPACK:=$(UNZIP_CMD) endif - # replace zcat with $(ZCAT), because some system have it as gzcat + # replace zcat with $(ZCAT), because some system don't support it properly ifeq ($(PKG_CAT),zcat) - PKG_UNPACK:=$(ZCAT) $(DL_DIR)/$(PKG_SOURCE) | $(HOST_TAR) -C $(PKG_BUILD_DIR)/.. $(TAR_OPTIONS) + PKG_UNPACK:=gzip -dc $(DL_DIR)/$(PKG_SOURCE) | $(TAR_CMD) endif - else - # try to autodetect file type + endif + ifneq ($(strip $(CRLF_WORKAROUND)),) + PKG_UNPACK += && find $(PKG_BUILD_DIR) -type f -print0 | xargs -0 perl -pi -e 's!\r$$$$!!g' endif endif diff --git a/openwrt/package/sdk/files/include/verbose.mk b/openwrt/package/sdk/files/include/verbose.mk index b4242f212a..6b2d6d044b 100644 --- a/openwrt/package/sdk/files/include/verbose.mk +++ b/openwrt/package/sdk/files/include/verbose.mk @@ -19,17 +19,21 @@ ifeq ("$(origin V)", "command line") endif ifeq ($(IS_TTY),1) - _Y:="\\33[33m"# yellow - _N:="\\33[m"# normal + _Y:="\\033[33m" # yellow + _N:="\\033[m" #normal endif +define MESSAGE + echo -e "$(_Y)$(1)$(_N)" >&3 +endef + ifneq ($(KBUILD_VERBOSE),99) ifeq ($(QUIET),1) $(MAKECMDGOALS): trace trace: FORCE @[ -f "$(MAKECMDGOALS)" ] || { \ [ -z "$${PWD##$$TOPDIR}" ] || DIR=" -C $${PWD##$$TOPDIR/}"; \ - echo -e "$(_Y)make[$$(($(MAKELEVEL)+1))]$$DIR $(MAKECMDGOALS)$(_N)" >&3; \ + $(call MESSAGE, "make[$$(($(MAKELEVEL)+1))]$$DIR $(MAKECMDGOALS)"); \ } else export QUIET:=1 diff --git a/openwrt/package/sdk/files/package/Makefile b/openwrt/package/sdk/files/package/Makefile index 9dc972abfa..3141fae85b 100644 --- a/openwrt/package/sdk/files/package/Makefile +++ b/openwrt/package/sdk/files/package/Makefile @@ -8,7 +8,7 @@ include $(TOPDIR)/rules.mk include $(TOPDIR)/.config -include $(TOPDIR)/.pkgdeps +include $(TMP_DIR)/.packagedeps include $(INCLUDE_DIR)/host.mk PREREQ_PACKAGES:=$(patsubst %,%-prereq,$(prereq-y) $(prereq-m)) @@ -41,8 +41,8 @@ ifeq ($(SDK),1) GENDEP_OPTS := -s endif -$(TOPDIR)/.pkgdeps: $(TOPDIR)/.pkginfo - @$(TOPDIR)/scripts/gen_deps.pl $(GENDEP_OPTS) < $< > $@ || rm -f $@ +$(TMP_DIR)/.packagedeps: $(TMP_DIR)/.packageinfo + @$(TOPDIR)/scripts/metadata.pl package_mk < $< > $@ || rm -f $@ all: compile clean: $(patsubst %,%-clean,$(package-) $(package-y) $(package-m)) diff --git a/openwrt/package/sdk/files/scripts/config.guess b/openwrt/package/sdk/files/scripts/config.guess old mode 100644 new mode 100755 diff --git a/openwrt/package/sdk/files/scripts/config.pl b/openwrt/package/sdk/files/scripts/config.pl new file mode 100755 index 0000000000..2f4a968ea7 --- /dev/null +++ b/openwrt/package/sdk/files/scripts/config.pl @@ -0,0 +1,142 @@ +#!/usr/bin/env perl +# +# Copyright (C) 2006 Felix Fietkau +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +use warnings; +use strict; + +my @arg = @ARGV; + +sub load_config($) { + my $file = shift; + my %config; + + open FILE, "$file" or die "can't open file"; + while () { + chomp; + /^CONFIG_(.+?)=(.+)/ and do { + $config{$1} = $2; + next; + }; + /^# CONFIG_(.+?) is not set/ and do { + $config{$1} = "#undef"; + next; + }; + /^#/ and next; + /^(.+)$/ and print "WARNING: can't parse line: $1\n"; + } + return \%config; +} + + +sub config_and($$) { + my $cfg1 = shift; + my $cfg2 = shift; + my %config; + + foreach my $config (keys %$cfg1) { + my $val1 = $cfg1->{$config}; + my $val2 = $cfg2->{$config}; + $val2 and ($val1 eq $val2) and do { + $config{$config} = $val1; + }; + } + return \%config; +} + + +sub config_add($$) { + my $cfg1 = shift; + my $cfg2 = shift; + my %config; + + for ($cfg1, $cfg2) { + my %cfg = %$_; + + foreach my $config (keys %cfg) { + $config{$config} = $cfg{$config}; + } + } + return \%config; +} + +sub config_diff($$) { + my $cfg1 = shift; + my $cfg2 = shift; + my %config; + + foreach my $config (keys %$cfg2) { + if (!$cfg1->{$config} or $cfg1->{$config} ne $cfg2->{$config}) { + $config{$config} = $cfg2->{$config}; + } + } + return \%config +} + +sub config_sub($$) { + my $cfg1 = shift; + my $cfg2 = shift; + my %config = %{$cfg1}; + + foreach my $config (keys %$cfg2) { + delete $config{$config}; + } + return \%config; +} + +sub print_cfgline($$) { + my $name = shift; + my $val = shift; + if ($val eq '#undef') { + print "# CONFIG_$name is not set\n"; + } else { + print "CONFIG_$name=$val\n"; + } +} + + +sub dump_config($) { + my $cfg = shift; + die "argument error in dump_config" unless ($cfg); + my %config = %$cfg; + foreach my $config (sort keys %config) { + print_cfgline($config, $config{$config}); + } +} + +sub parse_expr($); + +sub parse_expr($) { + my $pos = shift; + my $arg = $arg[$$pos++]; + + die "Parse error" if (!$arg); + + if ($arg eq '&') { + my $arg1 = parse_expr($pos); + my $arg2 = parse_expr($pos); + return config_and($arg1, $arg2); + } elsif ($arg =~ /^\+/) { + my $arg1 = parse_expr($pos); + my $arg2 = parse_expr($pos); + return config_add($arg1, $arg2); + } elsif ($arg eq '>') { + my $arg1 = parse_expr($pos); + my $arg2 = parse_expr($pos); + return config_diff($arg1, $arg2); + } elsif ($arg eq '-') { + my $arg1 = parse_expr($pos); + my $arg2 = parse_expr($pos); + return config_sub($arg1, $arg2); + } else { + return load_config($arg); + } +} + +my $pos = 0; +dump_config(parse_expr(\$pos)); +die "Parse error" if ($arg[$pos]); diff --git a/openwrt/package/sdk/files/scripts/download.pl b/openwrt/package/sdk/files/scripts/download.pl index 8f5d1d6b46..543dcc1879 100755 --- a/openwrt/package/sdk/files/scripts/download.pl +++ b/openwrt/package/sdk/files/scripts/download.pl @@ -8,16 +8,41 @@ use strict; use warnings; +use File::Basename; my $target = shift @ARGV; my $filename = shift @ARGV; my $md5sum = shift @ARGV; +my $scriptdir = dirname($0); my @mirrors; my $ok; @ARGV > 0 or die "Syntax: $0 [ ...]\n"; +sub localmirrors { + my @mlist; + open LM, "$scriptdir/localmirrors" and do { + while () { + chomp $_; + push @mlist, $_; + } + close LM; + }; + open CONFIG, "<".$ENV{'TOPDIR'}."/.config" and do { + while () { + /^CONFIG_LOCALMIRROR="(.+)"/ and do { + chomp; + push @mlist, $1; + }; + } + close CONFIG; + }; + + + return @mlist; +} + sub which($) { my $prog = shift; my $res = `which $prog`; @@ -37,7 +62,8 @@ sub download my $mirror = shift; my $options = $ENV{WGET_OPTIONS}; $options or $options = ""; - + + $mirror =~ s/\/$//; open WGET, "wget -t1 --timeout=20 $options -O- \"$mirror/$filename\" |" or die "Cannot launch wget.\n"; open MD5SUM, "| $md5cmd > \"$target/$filename.md5sum\"" or die "Cannot launch md5sum.\n"; open OUTPUT, "> $target/$filename.dl" or die "Cannot create file $target/$filename.dl: $!\n"; @@ -77,21 +103,14 @@ sub cleanup unlink "$target/$filename.md5sum"; } +@mirrors = localmirrors(); + foreach my $mirror (@ARGV) { if ($mirror =~ /^\@SF\/(.+)$/) { - my $sfpath = $1; - open SF, "wget -t1 -q -O- 'http://prdownloads.sourceforge.net/$sfpath/$filename' |"; - while () { - /RADIO NAME=use_default VALUE=(\w+) OnClick="form\.submit\(\)">/ or - /type="radio" name="use_default" value="(\w+)" onclick="form\.submit\(\)"\/>/ and do { - push @mirrors, "http://$1.dl.sourceforge.net/sourceforge/$sfpath"; - }; - /Download/ and do { - push @mirrors, "http://$1.dl.sourceforge.net/sourceforge/$sfpath"; - }; + # give sourceforge a few more tries, because it redirects to different mirrors + for (1 .. 5) { + push @mirrors, "http://downloads.sourceforge.net/$1"; } - push @mirrors, "http://dl.sourceforge.net/sourceforge/$sfpath"; - close SF; } elsif ($mirror =~ /^\@GNU\/(.+)$/) { my $gnupath = $1; push @mirrors, "ftp://ftp.gnu.org/gnu/$gnupath"; @@ -107,9 +126,9 @@ foreach my $mirror (@ARGV) { } } -#push @mirrors, 'http://mirror1.openwrt.org/'; +#push @mirrors, 'http://mirror1.openwrt.org'; push @mirrors, 'http://mirror2.openwrt.org/sources'; -push @mirrors, 'http://downloads.openwrt.org/sources/'; +push @mirrors, 'http://downloads.openwrt.org/sources'; while (!$ok) { my $mirror = shift @mirrors; diff --git a/openwrt/package/sdk/files/scripts/flash.sh b/openwrt/package/sdk/files/scripts/flash.sh deleted file mode 100644 index 8841c35684..0000000000 --- a/openwrt/package/sdk/files/scripts/flash.sh +++ /dev/null @@ -1,66 +0,0 @@ -#!/bin/bash -# -# tftp flash script for wireless routers -# -# Copyright (C) 2004 by Oleg I. Vdovikin -# Copyright (C) 2005 by Waldemar Brodkorb -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -# - -if [ -z "$1" ] || [ ! -f $1 ] || [ -z $2 ]; then - echo Usage: $0 firmware vendor -cat << EOF -IMPORTANT: -Notes for Linksys / Asus WL500gx router: - be sure you have set boot_wait to yes. Power on your router - after executing this script. - -Notes for Asus WL500g router: - be sure POWER led is flashing (If this is not the case - poweroff the device, push the reset button & power on - it again, then release button) - -1) connect your pc to the LAN port -2) be sure your link is up and has an address in the - 192.168.1.0/24 address range (and not the 192.168.1.1) - -Notes for Toshiba router: - boot_wait is enabled by default on these units. - -1) connect your pc to any of the four LAN ports -2) be sure your link is up and has an address in the - 192.168.10.1/24 address range (and not the 192.168.10.1) -3) run this script (unit will only accept .trx images) -4) Turn unit power on. - -EOF - exit 0 -fi -if [ "$2" == "asus" ]; then -echo Confirming IP address setting... -echo -en "get ASUSSPACELINK\x01\x01\xa8\xc0 /dev/null\nquit\n" | tftp 192.168.1.1 -echo Flashing 192.168.1.1 using $1... -echo -en "binary\nput $1 ASUSSPACELINK\nquit\n" | tftp 192.168.1.1 -echo Please wait until leds stops flashing. -elif [ "$2" == "linksys" ]; then -echo Flashing 192.168.1.1 using $1... -echo -en "rexmt 1\ntrace\nbinary\nput $1\nquit\n" | tftp 192.168.1.1 -echo Please wait until power led stops flashing. Do not poweroff! Then you can login via telnet 192.168.1.1. -elif [ "$2" == "toshiba" ]; then -echo Flashing 192.168.10.1 using $1... -echo -en "rexmt 1\ntrace\nbinary\nput $1\nquit\n" | tftp 192.168.10.1 -echo Unit will automatically reboot within 5 minutes. Do not power off. Then you can login via telnet 192.168.10.1. -fi diff --git a/openwrt/package/sdk/files/scripts/gen_deps.pl b/openwrt/package/sdk/files/scripts/gen_deps.pl deleted file mode 100755 index 0fc80aae85..0000000000 --- a/openwrt/package/sdk/files/scripts/gen_deps.pl +++ /dev/null @@ -1,101 +0,0 @@ -#!/usr/bin/perl -# -# Copyright (C) 2006 OpenWrt.org -# -# This is free software, licensed under the GNU General Public License v2. -# See /LICENSE for more information. -# - -use strict; - -my $name; -my $src; -my $makefile; -my %conf; -my %pkg; -my %prereq; -my %dep; -my %options; -my $opt; - -while ($opt = shift @ARGV) { - $opt =~ /^-s/ and $options{SDK} = 1; -} - -my $line; -while ($line = <>) { - chomp $line; - $line =~ /^Source-Makefile: \s*(.+\/([^\/]+)\/Makefile)\s*$/ and do { - $makefile = $1; - $src = $2; - defined $pkg{$src} or $pkg{$src} = {}; - $pkg{$src}->{src} = $src; - }; - $line =~ /^Package: \s*(.+)\s*$/ and do { - $name = $1; - defined $pkg{$name} or $pkg{$name} = {}; - $pkg{$name}->{src} = $src; - }; - $line =~ /^Provides: \s*(.+)\s*$/ and do { - foreach my $vpkg (split /\s+/, $1) { - defined $pkg{$vpkg} or $pkg{$vpkg} = {}; - $pkg{$vpkg}->{virtual} = 1; - } - }; - $line =~ /^Prereq-Check:/ and !defined $prereq{$src} and do { - $pkg{$name}->{prereq} = 1; - }; - $line =~ /^(Build-)?Depends: \s*(.+)\s*$/ and do { - $pkg{$name}->{depends} ||= []; - foreach my $v (split /\s+/, $2) { - next if $v =~ /^[\+]?@/; - $v =~ s/^\+//; - push @{$pkg{$name}->{depends}}, $v; - } - }; -} - -$line=""; - -foreach $name (sort {uc($a) cmp uc($b)} keys %pkg) { - my $config; - - next if defined $pkg{$name}->{virtual}; - if ($options{SDK}) { - $conf{$pkg{$name}->{src}} or do { - $config = 'm'; - $conf{$pkg{$name}->{src}} = 1; - }; - } else { - $config = "\$(CONFIG_PACKAGE_$name)" - } - if ($config) { - print "package-$config += $pkg{$name}->{src}\n"; - $pkg{$name}->{prereq} and print "prereq-$config += $pkg{$name}->{src}\n"; - } - - my $hasdeps = 0; - my $depline = ""; - foreach my $dep (@{$pkg{$name}->{depends}}) { - my $idx; - next if defined $pkg{$dep}->{virtual}; - if (defined $pkg{$dep}->{src}) { - ($pkg{$name}->{src} ne $pkg{$dep}->{src}) and $idx = $pkg{$dep}->{src}; - } elsif (defined($pkg{$dep}) && !$options{SDK}) { - $idx = $dep; - } - undef $idx if $idx =~ /^(kernel)|(base-files)$/; - if ($idx) { - next if $dep{$pkg{$name}->{src}."->".$idx}; - $depline .= " $idx\-compile"; - $dep{$pkg{$name}->{src}."->".$idx} = 1; - } - } - if ($depline ne "") { - $line .= "$pkg{$name}->{src}-compile: $depline\n"; - } -} - -if ($line ne "") { - print "\n$line"; -} diff --git a/openwrt/package/sdk/files/scripts/ipkg b/openwrt/package/sdk/files/scripts/ipkg index 97a3151425..311f3abdb5 100755 --- a/openwrt/package/sdk/files/scripts/ipkg +++ b/openwrt/package/sdk/files/scripts/ipkg @@ -234,7 +234,6 @@ ipkg_download() { proxyoption="--proxy=on" fi - echo "Downloading $src ..." rm -f $IPKG_TMP/$src_file case "$src" in http://* | ftp://*) @@ -252,7 +251,6 @@ ipkg_download() { ;; esac - echo "Done." return 0 } @@ -665,7 +663,7 @@ Status: install ok not-installed" | ipkg_status_update_sd $sd $pkg curcheck="`expr $curcheck + 1`" local is_installed="`ipkg_get_installed $pkg`" if [ "$is_installed" = "installed" ]; then - echo "$pkg is installed" > /dev/console + echo "$pkg is installed" continue fi @@ -693,7 +691,6 @@ Status: install ok not-installed" | ipkg_status_update_sd $sd $pkg return 1; fi - echo "" local tmp_pkg_file="$IPKG_TMP/"`ipkg_file_part $filename` if ! ipkg_download `ipkg_src_byname $src`/$filename $tmp_pkg_file; then echo "ipkg_get_install: Perhaps you need to run \`ipkg update'?" @@ -907,7 +904,6 @@ ipkg_install_file() { } ipkg_install() { - while [ $# -gt 0 ]; do local pkg="$1" shift diff --git a/openwrt/package/sdk/files/scripts/ipkg-make-index.sh b/openwrt/package/sdk/files/scripts/ipkg-make-index.sh old mode 100644 new mode 100755 diff --git a/openwrt/package/sdk/files/scripts/metadata.pl b/openwrt/package/sdk/files/scripts/metadata.pl new file mode 100755 index 0000000000..e196003326 --- /dev/null +++ b/openwrt/package/sdk/files/scripts/metadata.pl @@ -0,0 +1,569 @@ +#!/usr/bin/perl +use strict; +my %preconfig; +my %package; +my %srcpackage; +my %category; + +sub get_multiline { + my $prefix = shift; + my $str; + while (<>) { + last if /^@@/; + s/^\s*//g; + $str .= (($_ and $prefix) ? $prefix . $_ : $_); + } + + return $str; +} + +sub parse_target_metadata() { + my ($target, @target, $profile); + while (<>) { + chomp; + /^Target:\s*((.+)-(\d+\.\d+))\s*$/ and do { + my $conf = uc $3.'_'.$2; + $conf =~ tr/\.-/__/; + $target = { + id => $1, + conf => $conf, + board => $2, + kernel => $3, + profiles => [] + }; + push @target, $target; + }; + /^Target-Name:\s*(.+)\s*$/ and $target->{name} = $1; + /^Target-Path:\s*(.+)\s*$/ and $target->{path} = $1; + /^Target-Arch:\s*(.+)\s*$/ and $target->{arch} = $1; + /^Target-Features:\s*(.+)\s*$/ and $target->{features} = [ split(/\s+/, $1) ]; + /^Target-Description:/ and $target->{desc} = get_multiline(); + /^Linux-Version:\s*(.+)\s*$/ and $target->{version} = $1; + /^Linux-Release:\s*(.+)\s*$/ and $target->{release} = $1; + /^Linux-Kernel-Arch:\s*(.+)\s*$/ and $target->{karch} = $1; + /^Default-Packages:\s*(.+)\s*$/ and $target->{packages} = [ split(/\s+/, $1) ]; + /^Target-Profile:\s*(.+)\s*$/ and do { + $profile = { + id => $1, + name => $1, + packages => [] + }; + push @{$target->{profiles}}, $profile; + }; + /^Target-Profile-Name:\s*(.+)\s*$/ and $profile->{name} = $1; + /^Target-Profile-Packages:\s*(.*)\s*$/ and $profile->{packages} = [ split(/\s+/, $1) ]; + /^Target-Profile-Description:\s*(.*)\s*/ and $profile->{desc} = get_multiline(); + /^Target-Profile-Config:/ and $profile->{config} = get_multiline("\t"); + /^Target-Profile-Kconfig:/ and $profile->{kconfig} = 1; + } + foreach my $target (@target) { + @{$target->{profiles}} > 0 or $target->{profiles} = [ + { + id => 'Default', + name => 'Default', + packages => [] + } + ]; + } + return @target; +} + +sub parse_package_metadata() { + my $pkg; + my $makefile; + my $preconfig; + my $src; + while (<>) { + chomp; + /^Source-Makefile: \s*(.+\/([^\/]+)\/Makefile)\s*$/ and do { + $makefile = $1; + $src = $2; + $srcpackage{$src} = []; + undef $pkg; + }; + /^Package:\s*(.+?)\s*$/ and do { + $pkg = {}; + $pkg->{src} = $src; + $pkg->{makefile} = $makefile; + $pkg->{name} = $1; + $pkg->{default} = "m if ALL"; + $pkg->{depends} = []; + $pkg->{builddepends} = []; + $package{$1} = $pkg; + push @{$srcpackage{$src}}, $pkg; + }; + /^Version: \s*(.+)\s*$/ and $pkg->{version} = $1; + /^Title: \s*(.+)\s*$/ and $pkg->{title} = $1; + /^Menu: \s*(.+)\s*$/ and $pkg->{menu} = $1; + /^Submenu: \s*(.+)\s*$/ and $pkg->{submenu} = $1; + /^Submenu-Depends: \s*(.+)\s*$/ and $pkg->{submenudep} = $1; + /^Default: \s*(.+)\s*$/ and $pkg->{default} = $1; + /^Provides: \s*(.+)\s*$/ and do { + my @vpkg = split /\s+/, $1; + foreach my $vpkg (@vpkg) { + $package{$vpkg} or $package{$vpkg} = { vdepends => [] }; + push @{$package{$vpkg}->{vdepends}}, $pkg->{name}; + } + }; + /^Depends: \s*(.+)\s*$/ and $pkg->{depends} = [ split /\s+/, $1 ]; + /^Build-Depends: \s*(.+)\s*$/ and $pkg->{builddepends} = [ split /\s+/, $1 ]; + /^Category: \s*(.+)\s*$/ and do { + $pkg->{category} = $1; + defined $category{$1} or $category{$1} = {}; + defined $category{$1}->{$src} or $category{$1}->{$src} = []; + push @{$category{$1}->{$src}}, $pkg; + }; + /^Description: \s*(.*)\s*$/ and $pkg->{description} = "\t\t $1\n". get_multiline("\t\t "); + /^Config: \s*(.*)\s*$/ and $pkg->{config} = "$1\n".get_multiline(); + /^Prereq-Check:/ and $pkg->{prereq} = 1; + /^Preconfig:\s*(.+)\s*$/ and do { + my $pkgname = $pkg->{name}; + $preconfig{$pkgname} or $preconfig{$pkgname} = []; + $preconfig = { + id => $1 + }; + push @{$preconfig{$pkgname}}, $preconfig; + }; + /^Preconfig-Type:\s*(.*?)\s*$/ and $preconfig->{type} = $1; + /^Preconfig-Label:\s*(.*?)\s*$/ and $preconfig->{label} = $1; + /^Preconfig-Default:\s*(.*?)\s*$/ and $preconfig->{default} = $1; + } + return %category; +} + + +sub gen_target_mk() { + my @target = parse_target_metadata(); + + @target = sort { + $a->{id} cmp $b->{id} + } @target; + + foreach my $target (@target) { + my ($profiles_def, $profiles_eval); + my $conf = uc $target->{kernel}.'_'.$target->{board}; + $conf =~ tr/\.-/__/; + + foreach my $profile (@{$target->{profiles}}) { + $profiles_def .= " + define Profile/$conf\_$profile->{id} + ID:=$profile->{id} + NAME:=$profile->{name} + PACKAGES:=".join(" ", @{$profile->{packages}})."\n"; + $profile->{kconfig} and $profiles_def .= " KCONFIG:=1\n"; + $profiles_def .= " endef"; + $profiles_eval .= " +\$(eval \$(call AddProfile,$conf\_$profile->{id}))" + } + print " +ifeq (\$(CONFIG_LINUX_$conf),y) + define Target + KERNEL:=$target->{kernel} + BOARD:=$target->{board} + BOARDNAME:=$target->{name} + LINUX_VERSION:=$target->{version} + LINUX_RELEASE:=$target->{release} + LINUX_KARCH:=$target->{karch} + DEFAULT_PACKAGES:=".join(" ", @{$target->{packages}})." + endef$profiles_def +endif$profiles_eval + +" + } + print "\$(eval \$(call Target))\n"; +} + +sub target_config_features(@) { + my $ret; + + while ($_ = shift @_) { + /broken/ and $ret .= "\tdepends BROKEN\n"; + /pci/ and $ret .= "\tselect PCI_SUPPORT\n"; + /usb/ and $ret .= "\tselect USB_SUPPORT\n"; + /atm/ and $ret .= "\tselect ATM_SUPPORT\n"; + /pcmcia/ and $ret .= "\tselect PCMCIA_SUPPORT\n"; + /video/ and $ret .= "\tselect VIDEO_SUPPORT\n"; + /squashfs/ and $ret .= "\tselect USES_SQUASHFS\n"; + /jffs2/ and $ret .= "\tselect USES_JFFS2\n"; + /ext2/ and $ret .= "\tselect USES_EXT2\n"; + } + return $ret; +} + + +sub gen_target_config() { + my @target = parse_target_metadata(); + + @target = sort { + $a->{name} cmp $b->{name} + } @target; + + + print <{features}}); + my $help = $target->{desc}; + my $kernel = $target->{kernel}; + $kernel =~ tr/./_/; + + chomp $features; + $features .= "\n"; + if ($help =~ /\w+/) { + $help =~ s/^\s*/\t /mg; + $help = "\thelp\n$help"; + } else { + undef $help; + } + + print <{conf} + bool "$target->{name}" + select $target->{arch} + select LINUX_$kernel +$features$help + +EOF + } + + print <{profiles}; + + foreach my $profile (@$profiles) { + print <{conf}_$profile->{id} + bool "$profile->{name}" + depends LINUX_$target->{conf} +$profile->{config} +EOF + $profile->{kconfig} and print "\tselect PROFILE_KCONFIG\n"; + my %pkgs; + foreach my $pkg (@{$target->{packages}}, @{$profile->{packages}}) { + $pkgs{$pkg} = 1; + } + foreach my $pkg (keys %pkgs) { + print "\tselect DEFAULT_$pkg\n" unless ($pkg =~ /^-/ or $pkgs{"-$pkg"}); + } + print "\n"; + } + } + + print "endchoice\n"; +} + +sub find_package_dep($$) { + my $pkg = shift; + my $name = shift; + my $deps = ($pkg->{vdepends} or $pkg->{depends}); + + return 0 unless defined $deps; + foreach my $dep (@{$deps}) { + return 1 if $dep eq $name; + return 1 if ($package{$dep} and (find_package_dep($package{$dep},$name) == 1)); + } + return 0; +} + +sub package_depends($$) { + my $a = shift; + my $b = shift; + my $ret; + + return 0 if ($a->{submenu} ne $b->{submenu}); + if (find_package_dep($a, $b->{name}) == 1) { + $ret = 1; + } elsif (find_package_dep($b, $a->{name}) == 1) { + $ret = -1; + } else { + return 0; + } + return $ret; +} + +sub mconf_depends($$) { + my $depends = shift; + my $only_dep = shift; + my $res; + + $depends or return; + my @depends = @$depends; + foreach my $depend (@depends) { + my $m = "depends"; + $depend =~ s/^([@\+]+)//; + my $flags = $1; + my $vdep; + + if ($vdep = $package{$depend}->{vdepends}) { + $depend = join("||", map { "PACKAGE_".$_ } @$vdep); + } else { + $flags =~ /\+/ and do { + next if $only_dep; + $m = "select"; + + # Menuconfig will not treat 'select FOO' as a real dependency + # thus if FOO depends on other config options, these dependencies + # will not be checked. To fix this, we simply emit all of FOO's + # depends here as well. + $package{$depend} and $res .= mconf_depends($package{$depend}->{depends}, 1); + }; + $flags =~ /@/ or $depend = "PACKAGE_$depend"; + } + $res .= "\t\t$m $depend\n"; + } + return $res; +} + +sub print_package_config_category($) { + my $cat = shift; + my %menus; + my %menu_dep; + + return unless $category{$cat}; + + print "menu \"$cat\"\n\n"; + my %spkg = %{$category{$cat}}; + + foreach my $spkg (sort {uc($a) cmp uc($b)} keys %spkg) { + foreach my $pkg (@{$spkg{$spkg}}) { + my $menu = $pkg->{submenu}; + if ($menu) { + $menu_dep{$menu} or $menu_dep{$menu} = $pkg->{submenudep}; + } else { + $menu = 'undef'; + } + $menus{$menu} or $menus{$menu} = []; + push @{$menus{$menu}}, $pkg; + print "\tconfig DEFAULT_".$pkg->{name}."\n"; + print "\t\tbool\n\n"; + } + } + my @menus = sort { + ($a eq 'undef' ? 1 : 0) or + ($b eq 'undef' ? -1 : 0) or + ($a cmp $b) + } keys %menus; + + foreach my $menu (@menus) { + my @pkgs = sort { + package_depends($a, $b) or + ($a->{name} cmp $b->{name}) + } @{$menus{$menu}}; + if ($menu ne 'undef') { + $menu_dep{$menu} and print "if $menu_dep{$menu}\n"; + print "menu \"$menu\"\n"; + } + foreach my $pkg (@pkgs) { + my $title = $pkg->{name}; + my $c = (72 - length($pkg->{name}) - length($pkg->{title})); + if ($c > 0) { + $title .= ("." x $c). " ". $pkg->{title}; + } + print "\t"; + $pkg->{menu} and print "menu"; + print "config PACKAGE_".$pkg->{name}."\n"; + print "\t\ttristate \"$title\"\n"; + print "\t\tdefault y if DEFAULT_".$pkg->{name}."\n"; + foreach my $default (split /\s*,\s*/, $pkg->{default}) { + print "\t\tdefault $default\n"; + } + print mconf_depends($pkg->{depends}, 0); + print "\t\thelp\n"; + print $pkg->{description}; + print "\n"; + + $pkg->{config} and print $pkg->{config}."\n"; + } + if ($menu ne 'undef') { + print "endmenu\n"; + $menu_dep{$menu} and print "endif\n"; + } + } + print "endmenu\n\n"; + + undef $category{$cat}; +} + +sub gen_package_config() { + parse_package_metadata(); + print "menuconfig UCI_PRECONFIG\n\tbool \"Image configuration\"\n"; + foreach my $preconfig (keys %preconfig) { + foreach my $cfg (@{$preconfig{$preconfig}}) { + my $conf = $cfg->{id}; + $conf =~ tr/\.-/__/; + print <{label}" if UCI_PRECONFIG + depends PACKAGE_$preconfig + default "$cfg->{default}" + +EOF + } + } + print_package_config_category 'Base system'; + foreach my $cat (keys %category) { + print_package_config_category $cat; + } +} + +sub gen_package_mk() { + my %conf; + my %dep; + my $line; + + parse_package_metadata(); + foreach my $name (sort {uc($a) cmp uc($b)} keys %package) { + my $config; + my $pkg = $package{$name}; + + next if defined $pkg->{vdepends}; + if ($ENV{SDK}) { + $conf{$pkg->{src}} or do { + $config = 'm'; + $conf{$pkg->{src}} = 1; + }; + } else { + $config = "\$(CONFIG_PACKAGE_$name)" + } + if ($config) { + print "package-$config += $pkg->{src}\n"; + $pkg->{prereq} and print "prereq-$config += $pkg->{src}\n"; + } + + my $hasdeps = 0; + my $depline = ""; + foreach my $dep (@{$pkg->{depends}}, @{$pkg->{builddepends}}) { + next if $dep =~ /@/; + $dep =~ s/\+//; + my $idx; + my $pkg_dep = $package{$dep}; + $pkg_dep or $pkg_dep = $srcpackage{$dep}->[0]; + next unless defined $pkg_dep; + next if defined $pkg_dep->{vdepends}; + + if (defined $pkg_dep->{src}) { + ($pkg->{src} ne $pkg_dep->{src}) and $idx = $pkg_dep->{src}; + } elsif (defined($pkg_dep) && !defined($ENV{SDK})) { + $idx = $dep; + } + undef $idx if $idx =~ /^(kernel)|(base-files)$/; + if ($idx) { + next if $dep{$pkg->{src}."->".$idx}; + $depline .= " $idx\-compile"; + $dep{$pkg->{src}."->".$idx} = 1; + } + } + if ($depline) { + $line .= "$pkg->{src}-compile: $depline\n"; + } + } + + if ($line ne "") { + print "\n$line"; + } + foreach my $preconfig (keys %preconfig) { + my $cmds; + foreach my $cfg (@{$preconfig{$preconfig}}) { + my $conf = $cfg->{id}; + $conf =~ tr/\.-/__/; + $cmds .= "\techo \"uci set '$cfg->{id}=\$(subst \",,\$(CONFIG_UCI_PRECONFIG_$conf))'\"; \\\n"; + } + next unless $cmds; + print < \$@ + +ifneq (\$(UCI_PRECONFIG)\$(CONFIG_UCI_PRECONFIG),) + preconfig: \$(TARGET_DIR)/etc/uci-defaults/$preconfig +endif +EOF + } +} + + +sub parse_command() { + my $cmd = shift @ARGV; + for ($cmd) { + /^target_mk$/ and return gen_target_mk(); + /^target_config$/ and return gen_target_config(); + /^package_mk$/ and return gen_package_mk(); + /^package_config$/ and return gen_package_config(); + } + print <) { chomp; my $file = $_; - open FILE, "<$file"; - my @stat = stat FILE; - close FILE; + next if -l $file; + my @stat = stat $file; if ($stat[9] > $ts) { $ts = $stat[9]; $fn = $file; -- 2.30.2