diff options
author | Boris Nagaev <bnagaev@gmail.com> | 2016-01-04 22:00:41 (GMT) |
---|---|---|
committer | Boris Nagaev <bnagaev@gmail.com> | 2016-01-08 12:39:41 (GMT) |
commit | a516d920efaeb18de81bc38c70064b7c9a111453 (patch) | |
tree | 9065e44ddc2ed92208a6008d26c9bca768eca4f2 /Makefile | |
parent | 72477c9ac2dd029ce29d0f563492dde408a3093b (diff) | |
download | mxe-a516d920efaeb18de81bc38c70064b7c9a111453.zip mxe-a516d920efaeb18de81bc38c70064b7c9a111453.tar.gz mxe-a516d920efaeb18de81bc38c70064b7c9a111453.tar.bz2 |
reimplement patch-tool-mxe in Makefile
fix #1063
Diffstat (limited to 'Makefile')
-rw-r--r-- | Makefile | 83 |
1 files changed, 82 insertions, 1 deletions
@@ -45,6 +45,7 @@ REQUIREMENTS := autoconf automake autopoint bash bison bzip2 flex \ PREFIX := $(PWD)/usr LOG_DIR := $(PWD)/log +GITS_DIR := $(PWD)/gits GIT_HEAD := $(shell git rev-parse HEAD) TIMESTAMP := $(shell date +%Y%m%d_%H%M%S) PKG_DIR := $(PWD)/pkg @@ -154,7 +155,8 @@ endef PRELOAD_VARS := LD_PRELOAD DYLD_FORCE_FLAT_NAMESPACE DYLD_INSERT_LIBRARIES # use a minimal whitelist of safe environment variables -ENV_WHITELIST := PATH LANG MAKE% MXE% %PROXY %proxy LD_LIBRARY_PATH $(PRELOAD_VARS) ACLOCAL_PATH +# HOME is needed for ~/.gitconfig for patch-tool-mxe +ENV_WHITELIST := PATH HOME LANG MAKE% MXE% %PROXY %proxy LD_LIBRARY_PATH $(PRELOAD_VARS) ACLOCAL_PATH unexport $(filter-out $(ENV_WHITELIST),$(shell env | cut -d '=' -f1)) # disable wine with readonly directory (created by mxe-conf) @@ -793,3 +795,82 @@ versions.json: $(foreach PKG,$(PKGS), $(TOP_DIR)/src/$(PKG).mk) "$($(PKG)_VERSION)",';)} >> $@ @echo ' "": null' >> $@ @echo '}' >> $@ + +# for patch-tool-mxe + +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 + +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 + +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)) + +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 IMPORT_PATCH + cd '$(call GIT_DIR,$(1))' \ + && cat '$(PATCH_BY_NAME)' \ + | sed '/^From/,$$ !d' \ + | sed s/'^From: MXE'/"From: fix@me"/'g;' \ + | $(call GIT_CMD,$(1)) am --keep-cr +endef + +import-patch-%: + $(if $(call set_is_member,$*,$(PKGS)), \ + $(if $(wildcard $(call GIT_DIR,$*)), \ + $(call IMPORT_PATCH,$*,$(PATCH_NAME)), \ + $(error $(call GIT_DIR,$*) does not exist)), \ + $(error Package $* not found in index.html)) + +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 + +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)) |