+ifneq ($(HOST_BUILD_DIR),)
+ HOST_QUILT?=$(if $(wildcard $(if $(PKG_BUILD_DIR),$(PKG_BUILD_DIR),$(HOST_BUILD_DIR))/.quilt_used),y)
+ ifneq ($(HOST_QUILT),)
+ HOST_STAMP_PATCHED:=$(HOST_BUILD_DIR)/.quilt_patched
+ HOST_STAMP_CHECKED:=$(HOST_BUILD_DIR)/.quilt_checked
+ override CONFIG_AUTOREBUILD=
+ host-prepare: $(HOST_STAMP_PATCHED)
+ host-quilt-check: $(HOST_STAMP_CHECKED)
+ endif
+endif
+
+define Host/Patch/Default
+ $(if $(QUILT),rm -rf $(HOST_BUILD_DIR)/patches; mkdir -p $(HOST_BUILD_DIR)/patches)
+ $(call PatchDir,$(HOST_BUILD_DIR),$(HOST_PATCH_DIR),)
+ $(if $(QUILT),touch $(HOST_BUILD_DIR)/.quilt_used)
+endef
+
+define Build/Patch/Default
+ $(if $(QUILT),rm -rf $(PKG_BUILD_DIR)/patches; mkdir -p $(PKG_BUILD_DIR)/patches)
+ $(call PatchDir,$(PKG_BUILD_DIR),$(PATCH_DIR),)
+ $(if $(QUILT),touch $(PKG_BUILD_DIR)/.quilt_used)
+endef
+
+kernel_files=$(foreach fdir,$(GENERIC_FILES_DIR) $(FILES_DIR),$(fdir)/.)
+define Kernel/Patch/Default
+ rm -rf $(PKG_BUILD_DIR)/patches; mkdir -p $(PKG_BUILD_DIR)/patches
+ $(if $(kernel_files),$(CP) $(kernel_files) $(LINUX_DIR)/)
+ find $(LINUX_DIR)/ -name \*.rej -or -name \*.orig | $(XARGS) rm -f
+ $(call PatchDir,$(PKG_BUILD_DIR),$(GENERIC_PATCH_DIR),generic/)
+ $(call PatchDir,$(PKG_BUILD_DIR),$(PATCH_DIR),platform/)
+endef
+
+define Quilt/RefreshDir
+ mkdir -p $(2)
+ -rm -f $(2)/* 2>/dev/null >/dev/null
+ @( \
+ for patch in $$$$($(if $(3),grep "^$(3)",cat) $(PKG_BUILD_DIR)/patches/series | awk '{print $$$$1}'); do \
+ $(CP) -v "$(PKG_BUILD_DIR)/patches/$$$$patch" $(2); \
+ done; \
+ )
+endef
+
+define Quilt/Refresh/Host
+ $(call Quilt/RefreshDir,$(HOST_BUILD_DIR),$(PATCH_DIR))
+endef
+
+define Quilt/Refresh/Package
+ $(call Quilt/RefreshDir,$(PKG_BUILD_DIR),$(PATCH_DIR))
+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,$(PKG_BUILD_DIR),$(GENERIC_PATCH_DIR),generic/)
+ $(call Quilt/RefreshDir,$(PKG_BUILD_DIR),$(PATCH_DIR),platform/)
+endef
+
+define Quilt/Template
+ $($(2)STAMP_PATCHED): $($(2)STAMP_PREPARED)
+ @( \
+ cd $(1)/patches; \
+ $(QUILT_CMD) pop -a -f >/dev/null 2>/dev/null; \
+ if [ -s ".subdirs" ]; then \
+ rm -f series; \
+ for file in $$$$(cat .subdirs); do \
+ if [ -f $$$$file/series ]; then \
+ echo "Converting $$file/series"; \
+ $$(call filter_series,$$$$file/series) | awk -v file="$$$$file/" '$$$$0 !~ /^#/ { print file $$$$0 }' | sed -e s,//,/,g >> series; \
+ else \
+ echo "Sorting patches in $$$$file"; \
+ find $$$$file/* -type f \! -name series | sed -e s,//,/,g | sort >> series; \
+ fi; \
+ done; \
+ else \
+ find * -type f \! -name series | sort > series; \
+ fi; \
+ )
+ touch "$$@"
+
+ $($(2)STAMP_CONFIGURED): $($(2)STAMP_CHECKED) FORCE
+ $($(2)STAMP_CHECKED): $($(2)STAMP_PATCHED)
+ if [ -s "$(1)/patches/series" ]; then \
+ (cd "$(1)"; \
+ if $(QUILT_CMD) next >/dev/null 2>&1; then \
+ $(QUILT_CMD) push -a; \
+ else \
+ $(QUILT_CMD) top >/dev/null 2>&1; \
+ fi \
+ ); \
+ fi
+ touch "$$@"
+
+ $(3)quilt-check: $($(2)STAMP_PREPARED) FORCE
+ @[ -f "$(1)/.quilt_used" ] || { \
+ echo "The source directory was not unpacked using quilt. Please rebuild with QUILT=1"; \
+ false; \
+ }
+ @[ -f "$(1)/patches/series" ] || { \
+ echo "The source directory contains no quilt patches."; \