From 4bba59627e339626be0d12e4678f9e38a09c4f18 Mon Sep 17 00:00:00 2001 From: Tony Theodore Date: Sun, 2 Feb 2014 15:44:50 +1100 Subject: Makefile: refactor lookup of pkg build rules and deps Introduces a LOOKUP_PKG_RULE function that matches generic rules from targets specified along the lines of: triplet.lib-type.debug.treading.exceptions.my.experimental.version Current build rules will be matched according to the current logic (pkg-target --> pkg) and future variants can use "targets" as both functionality determinants and a directory separator for multiple side-by-side variants. --- Makefile | 35 ++++++++++++++++++++++------------- 1 file changed, 22 insertions(+), 13 deletions(-) diff --git a/Makefile b/Makefile index 5e8b5ad..52bfa14 100644 --- a/Makefile +++ b/Makefile @@ -151,11 +151,15 @@ $(PREFIX)/installed/check-requirements: $(MAKEFILE) $(call CHECK_REQUIREMENT_VERSION,automake,1\.11\.[3-9]\|1\.[1-9][2-9]\(\.[0-9]\+\)\?) @touch '$@' +# define some whitespace variables define newline endef +null := +space := $(null) $(null) + include $(patsubst %,$(TOP_DIR)/src/%.mk,$(PKGS)) .PHONY: download @@ -193,9 +197,19 @@ $(1): | $(if $(value $(1)_DEPS), \ endef $(foreach TARGET,$(MXE_TARGETS),$(eval $(call TARGET_RULE,$(TARGET)))) +# finds a package build rule or deps by truncating the target elements +# $(call LOOKUP_PKG_RULE, package, [BUILD|DEPS], target) +# returns variable name for use with $(value) +LOOKUP_PKG_RULE = $(strip \ + $(if $(findstring undefined, $(flavor $(1)_$(2)_$(3))),\ + $(if $(3),\ + $(call LOOKUP_PKG_RULE,$(1),$(2),$(call merge,.,$(call chop,$(call split,.,$(3))))),\ + $(1)_$(2)),\ + $(1)_$(2)_$(3))) + define PKG_RULE .PHONY: download-$(1) -download-$(1):: $(addprefix download-,$($(1)_DEPS) $($(1)_DEPS_$(3))) +download-$(1):: $(addprefix download-,$(value $(call LOOKUP_PKG_RULE,$(1),DEPS,$(3)))) if ! $(call CHECK_PKG_ARCHIVE,$(1)); then \ $(call DOWNLOAD_PKG_ARCHIVE,$(1)); \ $(call CHECK_PKG_ARCHIVE,$(1)) || { echo 'Wrong checksum!'; exit 1; }; \ @@ -206,7 +220,7 @@ $(1): $(PREFIX)/$(3)/installed/$(1) $(PREFIX)/$(3)/installed/$(1): $(TOP_DIR)/src/$(1).mk \ $(wildcard $(TOP_DIR)/src/$(1)-*.patch) \ $(wildcard $(TOP_DIR)/src/$(1)-test*) \ - $(addprefix $(PREFIX)/$(3)/installed/,$($(1)_DEPS) $($(1)_DEPS_$(3))) \ + $(addprefix $(PREFIX)/$(3)/installed/,$(value $(call LOOKUP_PKG_RULE,$(1),DEPS,$(3)))) \ | $(if $(DONT_CHECK_REQUIREMENTS),,check-requirements) $(3) @[ -d '$(LOG_DIR)/$(TIMESTAMP)' ] || mkdir -p '$(LOG_DIR)/$(TIMESTAMP)' @if ! $(call CHECK_PKG_ARCHIVE,$(1)); then \ @@ -224,14 +238,9 @@ $(PREFIX)/$(3)/installed/$(1): $(TOP_DIR)/src/$(1).mk \ exit 1; \ fi; \ fi - $(if $(or $(value $(1)_BUILD_$(3)),\ - $(and $(value $(1)_BUILD),$(findstring undefined,$(origin $(1)_BUILD_$(3))))), + $(if $(value $(call LOOKUP_PKG_RULE,$(1),BUILD,$(3))), @echo '[build] $(1)', - $(if $(findstring undefined,$(origin $(1)_BUILD_$(3))), - @echo '[no-op] $(1)', - @echo '[exclude] $(1)' - ) - ) + @echo '[no-build] $(1)') @touch '$(LOG_DIR)/$(TIMESTAMP)/$(1)_$(3)' @[ $(words $(MXE_TARGETS)) == 1 ] || ln -sf '$(TIMESTAMP)/$(1)_$(3)' '$(LOG_DIR)/$(1)_$(3)' @ln -sf '$(TIMESTAMP)/$(1)_$(3)' '$(LOG_DIR)/$(1)' @@ -251,15 +260,15 @@ $(PREFIX)/$(3)/installed/$(1): $(TOP_DIR)/src/$(1).mk \ ) >> '$(LOG_DIR)/$(TIMESTAMP)/$(1)_$(3)'; \ exit 1; \ fi - @echo '[done] $(1)' + $(if $(value $(call LOOKUP_PKG_RULE,$(1),BUILD,$(3))), + @echo '[done] $(1)') .PHONY: build-only-$(1)_$(3) build-only-$(1)_$(3): PKG = $(1) build-only-$(1)_$(3): TARGET = $(3) build-only-$(1)_$(3): CMAKE_TOOLCHAIN_FILE = $(PREFIX)/$(3)/share/cmake/mxe-conf.cmake build-only-$(1)_$(3): - $(if $(or $(value $(1)_BUILD_$(3)),\ - $(and $(value $(1)_BUILD),$(findstring undefined,$(origin $(1)_BUILD_$(3))))), + $(if $(value $(call LOOKUP_PKG_RULE,$(1),BUILD,$(3))), uname -a git show-branch --list --reflog=1 lsb_release -a 2>/dev/null || sw_vers 2>/dev/null || true @@ -269,7 +278,7 @@ build-only-$(1)_$(3): cd '$(2)/$($(1)_SUBDIR)' $(foreach PKG_PATCH,$(sort $(wildcard $(TOP_DIR)/src/$(1)-*.patch)), (cd '$(2)/$($(1)_SUBDIR)' && $(PATCH) -p1 -u) < $(PKG_PATCH)) - $$(call $(if $(value $(1)_BUILD_$(3)),$(1)_BUILD_$(3),$(1)_BUILD),$(2)/$($(1)_SUBDIR),$(TOP_DIR)/src/$(1)-test) + $$(call $(call LOOKUP_PKG_RULE,$(1),BUILD,$(3)),$(2)/$($(1)_SUBDIR),$(TOP_DIR)/src/$(1)-test) (du -k -d 0 '$(2)' 2>/dev/null || du -k --max-depth 0 '$(2)') | $(SED) -n 's/^\(\S*\).*/du: \1 KiB/p' rm -rfv '$(2)' ,) -- cgit v0.12 From c1ad1344399ec3ee81bac467cd89c6438a9b8ed6 Mon Sep 17 00:00:00 2001 From: Tony Theodore Date: Sun, 9 Feb 2014 00:24:09 +1100 Subject: packages gcc sdl_rwhttp: use new-style target-specific deps --- src/gcc.mk | 6 +++--- src/sdl_rwhttp.mk | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/gcc.mk b/src/gcc.mk index e5f2166..2f8206b 100644 --- a/src/gcc.mk +++ b/src/gcc.mk @@ -11,9 +11,9 @@ $(PKG)_URL := ftp://ftp.gnu.org/pub/gnu/gcc/gcc-$($(PKG)_VERSION)/$($(PKG)_ $(PKG)_URL_2 := ftp://ftp.mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-$($(PKG)_VERSION)/$($(PKG)_FILE) $(PKG)_DEPS := binutils gcc-cloog gcc-gmp gcc-isl gcc-mpc gcc-mpfr -$(PKG)_DEPS_i686-pc-mingw32 := mingwrt w32api -$(PKG)_DEPS_i686-w64-mingw32 := mingw-w64 -$(PKG)_DEPS_x86_64-w64-mingw32 := mingw-w64 +$(PKG)_DEPS_i686-pc-mingw32 := $($(PKG)_DEPS) mingwrt w32api +$(PKG)_DEPS_i686-w64-mingw32 := $($(PKG)_DEPS) mingw-w64 +$(PKG)_DEPS_x86_64-w64-mingw32 := $($(PKG)_DEPS) mingw-w64 define $(PKG)_UPDATE $(WGET) -q -O- 'http://ftp.gnu.org/gnu/gcc/?C=M;O=D' | \ diff --git a/src/sdl_rwhttp.mk b/src/sdl_rwhttp.mk index 65abffb..3f98a46 100644 --- a/src/sdl_rwhttp.mk +++ b/src/sdl_rwhttp.mk @@ -10,9 +10,9 @@ $(PKG)_FILE := SDL_rwhttp-$($(PKG)_VERSION).tar.gz $(PKG)_URL := https://github.com/mgerhardy/SDL_rwhttp/releases/download/$(call SHORT_PKG_VERSION,$(PKG))/$($(PKG)_FILE) $(PKG)_DEPS := gcc curl -$(PKG)_DEPS_i686-pc-mingw32 := sdl sdl_net -$(PKG)_DEPS_i686-w64-mingw32 := sdl2 sdl2_net -$(PKG)_DEPS_x86_64-w64-mingw32 := sdl2 sdl2_net +$(PKG)_DEPS_i686-pc-mingw32 := $($(PKG)_DEPS) sdl sdl_net +$(PKG)_DEPS_i686-w64-mingw32 := $($(PKG)_DEPS) sdl2 sdl2_net +$(PKG)_DEPS_x86_64-w64-mingw32 := $($(PKG)_DEPS) sdl2 sdl2_net define $(PKG)_UPDATE $(WGET) -q -O- 'http://github.com/mgerhardy/SDL_rwhttp/tags' | \ -- cgit v0.12