diff --git a/Makefile b/Makefile index 35bcc841..5298506a 100644 --- a/Makefile +++ b/Makefile @@ -416,21 +416,24 @@ $(PREFIX)/installed/print-git-oneline-$(GIT_HEAD): | $(PREFIX)/installed/.gitkee @rm -f '$(PREFIX)/installed/print-git-oneline-'* @touch '$@' +# distinguish between deliberately empty rules and disabled ones +VIRTUAL_PKG_TYPES := archive meta + # include files from MXE_PLUGIN_DIRS, set base filenames and `all-` target PLUGIN_FILES := $(realpath $(wildcard $(addsuffix /*.mk,$(MXE_PLUGIN_DIRS)))) -PLUGIN_PKGS := $(basename $(notdir $(PLUGIN_FILES))) +PKGS := $(sort $(basename $(notdir $(PLUGIN_FILES)))) $(foreach FILE,$(PLUGIN_FILES),\ $(eval $(basename $(notdir $(FILE)))_MAKEFILE ?= $(FILE)) \ $(eval $(basename $(notdir $(FILE)))_TEST_FILE ?= $(wildcard $(basename $(FILE))-test.*)) \ $(eval all-$(lastword $(call split,/,$(dir $(FILE)))): $(basename $(notdir $(FILE))))) include $(PLUGIN_FILES) -PKGS := $(sort $(MXE_CONF_PKGS) $(PLUGIN_PKGS)) # create target sets for PKG_TARGET_RULE loop to avoid creating empty rules # and having to explicitly disable $(BUILD) for most packages CROSS_TARGETS := $(filter-out $(BUILD),$(MXE_TARGETS)) $(foreach PKG,$(PKGS), \ - $(foreach TARGET,$(or $(sort $($(PKG)_TARGETS)),$(CROSS_TARGETS)), \ + $(if $($(PKG)_TARGETS),,$(eval $(PKG)_TARGETS := $(CROSS_TARGETS))) \ + $(foreach TARGET,$($(PKG)_TARGETS), \ $(eval $(TARGET)_PKGS += $(PKG)) \ $(eval FILTERED_PKGS += $(PKG)))) @@ -526,6 +529,7 @@ download-$(1): $(addprefix download-,$($(1)_DEPS)) download-only-$(1) # or dependencies (see bfd/binutils openscenegraph/openthreads qwt/qwt_qt4). # Use a double-colon rule to allow multiple definitions: # https://www.gnu.org/software/make/manual/html_node/Double_002dColon.html +.PHONY: download-only-$($(1)_FILE) download-only-$(1): download-only-$($(1)_FILE) download-only-$($(1)_FILE):: $(and $($(1)_URL), @@ -576,7 +580,7 @@ endif $(NONET_LIB): $(TOP_DIR)/tools/nonetwork.c | $(PREFIX)/$(BUILD)/lib/.gitkeep @echo '[build nonetwork lib]' - @$(BUILD_CC) -shared -fPIC $(NONET_CFLAGS) -o $@ $< + +@$(BUILD_CC) -shared -fPIC $(NONET_CFLAGS) -o $@ $< .PHONY: shell shell: $(NONET_LIB) @@ -597,33 +601,42 @@ $(PREFIX)/$(3)/installed/$(1): $(PKG_MAKEFILES) \ $(NONET_LIB) \ $(PREFIX)/$(3)/installed/.gitkeep \ print-git-oneline - @[ -d '$(LOG_DIR)/$(TIMESTAMP)' ] || mkdir -p '$(LOG_DIR)/$(TIMESTAMP)' - $(if $(value $(call LOOKUP_PKG_RULE,$(1),BUILD,$(3))), - @$(PRINTF_FMT) '[build]' '$(1)' '$(3)' | $(RTRIM) - , - @$(PRINTF_FMT) '[no-build]' '$(1)' '$(3)' | $(RTRIM) - ) $(if $(value $(call LOOKUP_PKG_RULE,$(1),MESSAGE,$(3))), @$(PRINTF_FMT) '[message]' '$(1)' '$(3) $($(call LOOKUP_PKG_RULE,$(1),MESSAGE,$(3)))' \ | $(RTRIM) ) - @touch '$(LOG_DIR)/$(TIMESTAMP)/$(1)_$(3)' - @ln -sf '$(TIMESTAMP)/$(1)_$(3)' '$(LOG_DIR)/$(1)_$(3)' - @if ! (time $(PRELOAD) WINEPREFIX='$(2)/readonly' $(MAKE) -f '$(MAKEFILE)' 'build-only-$(1)_$(3)' WGET=false) &> '$(LOG_DIR)/$(TIMESTAMP)/$(1)_$(3)'; then \ - echo; \ - echo 'Failed to build package $(1) for target $(3)!'; \ - echo '------------------------------------------------------------'; \ - $(if $(findstring undefined, $(origin MXE_VERBOSE)),\ - tail -n 10 '$(LOG_DIR)/$(1)_$(3)' | $(SED) -n '/./p';, \ - $(SED) -n '/./p' '$(LOG_DIR)/$(1)_$(3)';) \ - echo '------------------------------------------------------------'; \ - echo '[log] $(LOG_DIR)/$(1)_$(3)'; \ - echo; \ - exit 1; \ - fi $(if $(value $(call LOOKUP_PKG_RULE,$(1),BUILD,$(3))), - @$(PRINTF_FMT) '[done]' '$(1)' '$(3)' "`grep -a '^du:.*KiB$$\' '$(LOG_DIR)/$(TIMESTAMP)/$(1)_$(3)' | cut -d ':' -f2 | tail -1`" \ - "`grep -a '^real.*m.*s$$\' '$(LOG_DIR)/$(TIMESTAMP)/$(1)_$(3)' | tr '\t' ' ' | cut -d ' ' -f2 | tail -1`") + $(if $(BUILD_DRY_RUN), \ + @$(PRINTF_FMT) '[dry-run]' '$(1)' '$(3)' | $(RTRIM) + @touch '$(PREFIX)/$(3)/installed/$(1)' + $(else), + @$(PRINTF_FMT) '[build]' '$(1)' '$(3)' | $(RTRIM) + @[ -d '$(LOG_DIR)/$(TIMESTAMP)' ] || mkdir -p '$(LOG_DIR)/$(TIMESTAMP)' + @touch '$(LOG_DIR)/$(TIMESTAMP)/$(1)_$(3)' + @ln -sf '$(TIMESTAMP)/$(1)_$(3)' '$(LOG_DIR)/$(1)_$(3)' + @if ! (time $(PRELOAD) WINEPREFIX='$(2)/readonly' \ + $(MAKE) -f '$(MAKEFILE)' \ + 'build-only-$(1)_$(3)' \ + WGET=false \ + ) &> '$(LOG_DIR)/$(TIMESTAMP)/$(1)_$(3)'; then \ + echo; \ + echo 'Failed to build package $(1) for target $(3)!'; \ + echo '------------------------------------------------------------'; \ + $(if $(findstring undefined, $(origin MXE_VERBOSE)),\ + tail -n 10 '$(LOG_DIR)/$(1)_$(3)' | $(SED) -n '/./p';, \ + $(SED) -n '/./p' '$(LOG_DIR)/$(1)_$(3)';) \ + echo '------------------------------------------------------------'; \ + echo '[log] $(LOG_DIR)/$(1)_$(3)'; \ + echo; \ + exit 1; \ + fi + @$(PRINTF_FMT) '[done]' '$(1)' '$(3)' "`grep -a '^du:.*KiB$$\' '$(LOG_DIR)/$(TIMESTAMP)/$(1)_$(3)' | cut -d ':' -f2 | tail -1`" \ + "`grep -a '^real.*m.*s$$\' '$(LOG_DIR)/$(TIMESTAMP)/$(1)_$(3)' | tr '\t' ' ' | cut -d ' ' -f2 | tail -1`" + ) + $(else), + @$(PRINTF_FMT) '[$(or $($(PKG)_TYPE),disabled)]' '$(1)' '$(3)' | $(RTRIM) + @touch '$(PREFIX)/$(3)/installed/$(1)' + ) .PHONY: build-only-$(1)_$(3) @@ -867,29 +880,41 @@ docs/build-matrix.html: $(foreach 1,$(PKGS),$(PKG_MAKEFILES)) # $(eval $(VIRTUAL_PKGCOUNT += x)) # vs # $(eval $(VIRTUAL_PKGCOUNT := $(call int_inc,$(VIRTUAL_PKGCOUNT)))) - @$(foreach PKG,$(PKGS), \ - $(eval $(PKG)_VIRTUAL := $(true)) \ - $(eval $(PKG)_BUILD_ONLY := $(true)) \ - echo -e '\n \ - $(PKG)\n \ - $(call substr,$($(PKG)_VERSION),1,12)$(if $(call gt,$(call strlen,$($(PKG)_VERSION)),12),…)\n\ - $(foreach TARGET,$(MXE_TARGET_LIST), \ - $(if $(value $(call LOOKUP_PKG_RULE,$(PKG),BUILD,$(TARGET))), \ - $(eval $(TARGET)_PKGCOUNT += x) \ - $(eval $(PKG)_VIRTUAL := $(false)) \ - $(eval $(PKG)_BUILD_ONLY := $(false)) \ - ✓, \ - ✗)\n) \ - $(if $(and $(call set_is_member,$(PKG),$($(BUILD)_PKGS)), \ - $(value $(call LOOKUP_PKG_RULE,$(PKG),BUILD,$(BUILD)))), \ - $(eval $(PKG)_VIRTUAL := $(false)) \ - ✓, \ - ✗)\n \ - \n' >> $@ $(newline) \ - $(if $($(PKG)_VIRTUAL), \ - $(eval VIRTUAL_PKGCOUNT += x) \ - $(eval $(PKG)_BUILD_ONLY := $(false))) \ - $(if $($(PKG)_BUILD_ONLY), \ + @$(foreach PKG,$(PKGS), \ + $(eval $(PKG)_VIRTUAL := $(true)) \ + $(eval $(PKG)_BUILD_ONLY := $(true)) \ + echo -e '\n \ + \ + $(PKG) \ + $(if $($(PKG)_TYPE), [$($(PKG)_TYPE)-pkg]) \ + $(if $($(PKG)_MESSAGE), **)\ + \n \ + $(call substr,$($(PKG)_VERSION),1,12) \ + $(if $(call gt,$(call strlen,$($(PKG)_VERSION)),12),…)\n\ + $(foreach TARGET,$(MXE_TARGET_LIST), \ + $(if $(filter $(VIRTUAL_PKG_TYPES),$($(PKG)_TYPE)), \ + $(if $(filter $(TARGET),$($(PKG)_TARGETS)), \ + •, \ + ), \ + $(if $(filter $(TARGET),$($(PKG)_TARGETS)), \ + $(if $(value $(call LOOKUP_PKG_RULE,$(PKG),BUILD,$(TARGET))), \ + $(eval $(TARGET)_PKGCOUNT += x) \ + ✓, \ + ✗),\ + ))\n) \ + $(if $(filter $(VIRTUAL_PKG_TYPES),$($(PKG)_TYPE)), \ + $(eval VIRTUAL_PKGCOUNT += x) \ + $(if $(filter $(BUILD),$($(PKG)_TARGETS)), \ + •, \ + ), \ + $(if $(filter $(BUILD),$($(PKG)_TARGETS)), \ + $(if $(value $(call LOOKUP_PKG_RULE,$(PKG),BUILD,$(BUILD))), \ + ✓, \ + ✗), \ + ))\n \ + \n' >> $@ $(newline) \ + $(if $(call seq,$(BUILD),$($(PKG)_TARGETS)), \ $(eval BUILD_ONLY_PKGCOUNT += x))) @echo '' >> $@ @echo '' >> $@ diff --git a/docs/assets/build-matrix.css b/docs/assets/build-matrix.css index 49850b63..fe47d12e 100644 --- a/docs/assets/build-matrix.css +++ b/docs/assets/build-matrix.css @@ -12,3 +12,7 @@ td.unsupported { background-color: #f99; text-align: center; } +td.neutral { + background-color: #d1d1d1; + text-align: center; +} diff --git a/plugins/native/glib2-macports.mk b/plugins/native/glib2-macports.mk index 6e8ae04a..3ae26a90 100644 --- a/plugins/native/glib2-macports.mk +++ b/plugins/native/glib2-macports.mk @@ -11,6 +11,7 @@ $(PKG)_FILE := glib2-$($(PKG)_VERSION)_0.darwin_16.x86_64.tbz2 $(PKG)_URL := https://packages.macports.org/glib2/glib2-$($(PKG)_VERSION)_0.darwin_16.x86_64.tbz2 $(PKG)_DEPS := $(PKG)_TARGETS := $(BUILD) +$(PKG)_TYPE := archive define $(PKG)_UPDATE echo 'manually update glib2-macports as necessary' >&2; diff --git a/src/autotools.mk b/src/autotools.mk index 7f200a31..475f9128 100644 --- a/src/autotools.mk +++ b/src/autotools.mk @@ -6,3 +6,4 @@ $(PKG)_DESCR := Dependency package to ensure the autotools work $(PKG)_VERSION := 1 $(PKG)_DEPS := libtool pkgconf $(PKG)_TARGETS := $(BUILD) +$(PKG)_TYPE := meta diff --git a/src/googlemock.mk b/src/googlemock.mk index 31d15fdb..3bd5e650 100644 --- a/src/googlemock.mk +++ b/src/googlemock.mk @@ -9,3 +9,4 @@ $(PKG)_CHECKSUM := 3f20b6acb37e5a98e8c4518165711e3e35d47deb6cdb5a4dd4566563b5efd $(PKG)_GH_CONF := google/googlemock/tags, release- $(PKG)_DEPS := $(PKG)_TARGETS := $(BUILD) $(MXE_TARGETS) +$(PKG)_TYPE := archive diff --git a/src/googletest.mk b/src/googletest.mk index f60c44a2..d3171a79 100644 --- a/src/googletest.mk +++ b/src/googletest.mk @@ -9,3 +9,4 @@ $(PKG)_CHECKSUM := f73a6546fdf9fce9ff93a5015e0333a8af3062a152a9ad6bcb772c9668701 $(PKG)_GH_CONF := google/googletest/tags, release- $(PKG)_DEPS := $(PKG)_TARGETS := $(BUILD) $(MXE_TARGETS) +$(PKG)_TYPE := archive diff --git a/src/mingw-w64.mk b/src/mingw-w64.mk index f2ec1425..87f5ff5c 100644 --- a/src/mingw-w64.mk +++ b/src/mingw-w64.mk @@ -9,6 +9,7 @@ $(PKG)_CHECKSUM := 2a601db99ef579b9be69c775218ad956a24a09d7dabc9ff6c5bd60da9ccc9 $(PKG)_SUBDIR := $(PKG)-v$($(PKG)_VERSION) $(PKG)_FILE := $(PKG)-v$($(PKG)_VERSION).tar.bz2 $(PKG)_URL := https://$(SOURCEFORGE_MIRROR)/project/$(PKG)/$(PKG)/$(PKG)-release/$($(PKG)_FILE) +$(PKG)_TYPE := archive $(PKG)_DEPS := define $(PKG)_UPDATE diff --git a/src/qt5.mk b/src/qt5.mk index f26c7c22..ba11a1f6 100644 --- a/src/qt5.mk +++ b/src/qt5.mk @@ -4,6 +4,7 @@ PKG := qt5 $(PKG)_WEBSITE := https://www.qt.io/ $(PKG)_DESCR := Qt $(PKG)_VERSION = $(qtbase_VERSION) +$(PKG)_TYPE := meta $(PKG)_DEPS := $(subst qt5, qtbase, \ $(patsubst $(dir $(lastword $(MAKEFILE_LIST)))/%.mk,%,\ $(shell grep -l 'qtbase_VERSION' \