diff --git a/include/package-defaults.mk b/include/package-defaults.mk index 57f5ed7ef4..16d9ae0027 100644 --- a/include/package-defaults.mk +++ b/include/package-defaults.mk @@ -33,12 +33,11 @@ define Package/Default DESCRIPTION:= endef +Build/Patch:=$(Build/Patch/Default) 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 + $(Build/Patch) endef endif diff --git a/include/package.mk b/include/package.mk index 3e2944fbdc..daff3ed0d6 100644 --- a/include/package.mk +++ b/include/package.mk @@ -14,13 +14,16 @@ include $(INCLUDE_DIR)/prereq.mk include $(INCLUDE_DIR)/host.mk include $(INCLUDE_DIR)/unpack.mk include $(INCLUDE_DIR)/depends.mk -include $(INCLUDE_DIR)/package-defaults.mk -include $(INCLUDE_DIR)/package-dumpinfo.mk -include $(INCLUDE_DIR)/package-ipkg.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 + export CONFIG_SITE:=$(INCLUDE_DIR)/site/$(REAL_GNU_TARGET_NAME) ifneq ($(CONFIG_AUTOREBUILD),) diff --git a/include/quilt.mk b/include/quilt.mk new file mode 100644 index 0000000000..ec5acc507e --- /dev/null +++ b/include/quilt.mk @@ -0,0 +1,48 @@ +# +# Copyright (C) 2007 OpenWrt.org +# +# This is free software, licensed under the GNU General Public License v2. +# See /LICENSE for more information. +# + +QUILT?=$(strip $(shell test -f $(PKG_BUILD_DIR)/.quilt_patched && echo y)) +ifneq ($(QUILT),) + STAMP_PREPARED:=$(strip $(STAMP_PREPARED))_q + CONFIG_AUTOREBUILD= + PATCHES:=$(shell cd ./patches; ls) + define Build/Patch/Default + rm -rf $(PKG_BUILD_DIR)/patches + mkdir -p $(PKG_BUILD_DIR)/patches + for patch in $(PATCHES); do ( \ + cp "./patches/$$$$patch" $(PKG_BUILD_DIR); \ + cd $(PKG_BUILD_DIR); \ + quilt import -p 1 "$$$$patch"; \ + quilt push; \ + quilt refresh; \ + rm -f "$$$$patch"; \ + ); done + touch $(PKG_BUILD_DIR)/.quilt_patched + endef +else + define Build/Patch/Default + @if [ -d ./patches -a "$$$$(ls ./patches | wc -l)" -gt 0 ]; then \ + $(PATCH) $(PKG_BUILD_DIR) ./patches; \ + fi + endef +endif + +refresh: $(STAMP_PREPARED) + @[ -f "$(PKG_BUILD_DIR)/patches/series" ] || { \ + echo "The source directory was not unpacked using quilt. Please rebuild."; \ + 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; \ + } + rm -f ./patches/* 2>/dev/null >/dev/null + @( \ + for patch in $$(cat $(PKG_BUILD_DIR)/patches/series); do \ + $(CP) -v "$(PKG_BUILD_DIR)/patches/$$patch" ./patches; \ + done; \ + ) diff --git a/package/Makefile b/package/Makefile index 64c78de5e7..0713e8d23e 100644 --- a/package/Makefile +++ b/package/Makefile @@ -26,9 +26,9 @@ ifeq ($(QUIET),1) %-compile %-install: FORCE $(MAKE) -C $* $(patsubst $*-%,%,$@) || { $(call MESSAGE, "*** $* $(patsubst $*-%,%,$@) failed"); false; } -%-prepare %-prereq %-download %-clean: FORCE +%-prepare %-prereq %-download %-clean %-refresh: FORCE else -%-prepare %-prereq %-download %-clean %-compile %-install: FORCE +%-prepare %-prereq %-download %-clean %-compile %-install %-refresh: FORCE endif $(MAKE) -C $* $(patsubst $*-%,%,$@)