+define Build/DefaultTargets
+
+ ifeq ($(shell $(SCRIPT_DIR)/timestamp.pl -p $(PKG_BUILD_DIR) .),.)
+ $(PKG_BUILD_DIR)/.prepared: package-clean
+ endif
+
+ $(PKG_BUILD_DIR)/.prepared: $(DL_DIR)/$(PKG_SOURCE)
+ @-rm -rf $(PKG_BUILD_DIR)
+ @mkdir -p $(PKG_BUILD_DIR)
+ $(call Build/Prepare)
+ touch $$@
+
+ $(PKG_BUILD_DIR)/.configured: $(PKG_BUILD_DIR)/.prepared
+ $(call Build/Configure)
+ touch $$@
+
+ built: FORCE $(PKG_BUILD_DIR)/.configured
+ ifneq ($$(shell $(SCRIPT_DIR)/timestamp.pl -p -x ipkg $(IPKG_$(1)) $(PKG_BUILD_DIR)),$(IPKG_$(1)))
+ $(call Build/Compile)
+ endif
+
+ package-clean: FORCE
+ $(call Build/Clean)
+
+ define Build/DefaultTargets
+ endef
+endef
+
+define Package/Default
+ CONFIGFILE:=
+ SECTION:=opt
+ CATEGORY:=Extra packages
+ DEPENDS:=
+ MAINTAINER:=OpenWrt Developers Team <openwrt-devel@openwrt.org>
+ SOURCE:=$(patsubst $(TOPDIR)/%,%,${shell pwd})
+ VERSION:=$(PKG_VERSION)-$(PKG_RELEASE)
+ PKGARCH:=$(ARCH)
+ PRIORITY:=optional
+ DEFAULT:=
+ MENU:=
+ TITLE:=
+ DESCRIPTION:=
+endef
+
+define BuildPackage
+ $(eval $(call Package/Default))
+ $(eval $(call Package/$(1)))
+
+ $(foreach FIELD, TITLE CATEGORY PRIORITY VERSION,
+ ifeq ($($(FIELD)),)
+ $$(error Package/$(1) is missing the $(FIELD) field)
+ endif
+ )
+
+ ifeq ($(PKGARCH),)
+ PKGARCH:=$(ARCH)
+ endif
+
+ ifeq ($(DESCRIPTION),)
+ $(eval DESCRIPTION:=$(TITLE))
+ endif
+
+ IPKG_$(1):=$(PACKAGE_DIR)/$(1)_$(VERSION)_$(PKGARCH).ipk
+ IDIR_$(1):=$(PKG_BUILD_DIR)/ipkg/$(1)
+ INFO_$(1):=$(IPKG_STATE_DIR)/info/$(1).list
+
+ ifneq ($(CONFIG_PACKAGE_$(1))$(DEVELOPER),)
+ COMPILE_$(1):=1
+ endif
+
+ ifeq ($(CONFIG_PACKAGE_$(1)),y)
+ install-targets: $$(INFO_$(1))
+ endif
+
+ ifneq ($(COMPILE_$(1)),)
+ compile-targets: $(IPKG_$(1))
+ endif
+
+ IDEPEND_$(1):=$$(strip $$(DEPENDS))
+
+ DUMPINFO += \
+ echo "Package: $(1)";
+
+ ifneq ($(MENU),)
+ DUMPINFO += \
+ echo "Menu: $(MENU)";
+ endif
+
+ ifneq ($(DEFAULT),)
+ DUMPINFO += \
+ echo "Default: $(DEFAULT)";
+ endif
+
+ DUMPINFO += \
+ echo "Version: $(VERSION)"; \
+ echo "Depends: $$(IDEPEND_$(1))"; \
+ echo "Category: $(CATEGORY)"; \
+ echo "Title: $(TITLE)"; \
+ echo "Description: $(DESCRIPTION)" | sed -e 's,\\,\n,g';
+
+ ifneq ($(URL),)
+ DUMPINFO += \
+ echo; \
+ echo "$(URL)";
+ endif
+
+ DUMPINFO += \
+ echo "@@";
+
+ $$(IDIR_$(1))/CONTROL/control: $(PKG_BUILD_DIR)/.prepared
+ 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
+ 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' >> $$(IDIR_$(1))/CONTROL/control
+ chmod 644 $$(IDIR_$(1))/CONTROL/control