summaryrefslogtreecommitdiffstats
path: root/patch.mk
diff options
context:
space:
mode:
authorBoris Nagaev <bnagaev@gmail.com>2016-01-05 18:20:43 (GMT)
committerBoris Nagaev <bnagaev@gmail.com>2016-01-08 12:39:41 (GMT)
commitefc287a8d99f35176daf79af6ccd174eed8acd36 (patch)
tree72226e316daed57e245695db546e287e4af66de1 /patch.mk
parentadb07e2153696a9ef4c9b4a8cc931054e0788fdf (diff)
downloadmxe-efc287a8d99f35176daf79af6ccd174eed8acd36.zip
mxe-efc287a8d99f35176daf79af6ccd174eed8acd36.tar.gz
mxe-efc287a8d99f35176daf79af6ccd174eed8acd36.tar.bz2
move patching functions and targets to patch.mk
See https://github.com/mxe/mxe/pull/1134#issuecomment-168873410 See https://github.com/mxe/mxe/pull/1134#issuecomment-169867926
Diffstat (limited to 'patch.mk')
-rw-r--r--patch.mk87
1 files changed, 87 insertions, 0 deletions
diff --git a/patch.mk b/patch.mk
new file mode 100644
index 0000000..87c72d0
--- /dev/null
+++ b/patch.mk
@@ -0,0 +1,87 @@
+# This file is part of MXE.
+# See index.html for further information.
+
+GIT_DIR = $(if $(patsubst .,,$($(1)_SUBDIR)) \
+ ,$(GITS_DIR)/$($(1)_SUBDIR),$(GITS_DIR)/$(1))
+
+GIT_CMD = git \
+ --work-tree='$(call GIT_DIR,$(1))' \
+ --git-dir='$(call GIT_DIR,$(1))'/.git
+
+PATCH_NAME = 1-fixes
+
+# can't use PKG_PATCHES here, because it returns existing patches
+# while export-patch creates new patch
+PATCH_BY_NAME = $(patsubst %.mk,%-$(2).patch,$(PKG_MAKEFILES))
+
+define INIT_GIT
+ # unpack to gits/tmp/pkg
+ rm -rf '$(GITS_DIR)/tmp'
+ mkdir -p '$(GITS_DIR)/tmp/$(1)'
+ cd '$(GITS_DIR)/tmp/$(1)' && $(call UNPACK_PKG_ARCHIVE,$(1))
+ # if PKG_SUBDIR is ".", the following will move gits/tmp/pkg
+ mv '$(abspath $(GITS_DIR)/tmp/$(1)/$($(1)_SUBDIR))' '$(call GIT_DIR,$(1))'
+ rm -rf '$(GITS_DIR)/tmp'
+ # initialize git
+ $(call GIT_CMD,$(1)) init
+ $(call GIT_CMD,$(1)) add -A
+ $(call GIT_CMD,$(1)) commit -m "init"
+ $(call GIT_CMD,$(1)) tag dist
+endef
+
+define IMPORT_PATCH
+ cd '$(call GIT_DIR,$(1))' \
+ && cat '$(2)' \
+ | sed '/^From/,$$ !d' \
+ | sed s/'^From: MXE'/"From: fix@me"/'g;' \
+ | $(call GIT_CMD,$(1)) am --keep-cr ;
+endef
+
+define EXPORT_PATCH
+ cd '$(call GIT_DIR,$(1))' \
+ && ( \
+ echo 'This file is part of MXE.'; \
+ echo 'See index.html for further information.'; \
+ echo ''; \
+ echo 'Contains ad hoc patches for cross building.'; \
+ echo ''; \
+ $(call GIT_CMD,$(1)) format-patch \
+ --no-numbered \
+ -p \
+ --no-signature \
+ --stdout \
+ --text \
+ dist..HEAD \
+ | sed 's/^From [0-9a-f]\{40\} /From 0000000000000000000000000000000000000000 /' \
+ | sed 's/^index .......\.\......../index 1111111..2222222/' \
+ ) > '$(PATCH_BY_NAME)'
+endef
+
+init-git-%: download-only-%
+ $(if $(call set_is_member,$*,$(PKGS)), \
+ $(if $(wildcard $(call GIT_DIR,$*)), \
+ $(error $(call GIT_DIR,$*) already exists), \
+ $(call INIT_GIT,$*)), \
+ $(error Package $* not found in index.html))
+
+import-patch-%:
+ $(if $(call set_is_member,$*,$(PKGS)), \
+ $(if $(wildcard $(call GIT_DIR,$*)), \
+ $(call IMPORT_PATCH,$*,$(call PATCH_BY_NAME,$*,$(PATCH_NAME))), \
+ $(error $(call GIT_DIR,$*) does not exist)), \
+ $(error Package $* not found in index.html))
+
+import-all-patches-%:
+ $(if $(call set_is_member,$*,$(PKGS)), \
+ $(if $(wildcard $(call GIT_DIR,$*)), \
+ $(foreach PKG_PATCH,$(call PKG_PATCHES,$*), \
+ $(call IMPORT_PATCH,$*,$(PKG_PATCH))), \
+ $(error $(call GIT_DIR,$*) does not exist)), \
+ $(error Package $* not found in index.html))
+
+export-patch-%:
+ $(if $(call set_is_member,$*,$(PKGS)), \
+ $(if $(wildcard $(call GIT_DIR,$*)), \
+ $(call EXPORT_PATCH,$*,$(PATCH_NAME)), \
+ $(error $(call GIT_DIR,$*) does not exist)), \
+ $(error Package $* not found in index.html))