Improve handling of virtual packages and build messages

- add metadata to distinguish virtual package types
  - improve build order and status messages for empty packages
        print pkg type or `disabled` instead of `no-build`
  - add BUILD_DRY_RUN option and fixup make -t
  - update build-matrix rule to identify virtual pkgs
pull/1990/head
Tony Theodore 7 years ago
parent 8eb5c0e41b
commit 0e1b95fc24

@ -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-<plugin>` 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 '<tr>\n \
<th class="row">$(PKG)</th>\n \
<td>$(call substr,$($(PKG)_VERSION),1,12)$(if $(call gt,$(call strlen,$($(PKG)_VERSION)),12),&hellip;)</td>\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)) \
<td class="supported">&#x2713;</td>, \
<td class="unsupported">&#x2717;</td>)\n) \
$(if $(and $(call set_is_member,$(PKG),$($(BUILD)_PKGS)), \
$(value $(call LOOKUP_PKG_RULE,$(PKG),BUILD,$(BUILD)))), \
$(eval $(PKG)_VIRTUAL := $(false)) \
<td class="supported">&#x2713;</td>, \
<td class="unsupported">&#x2717;</td>)\n \
</tr>\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 '<tr>\n \
<th class="row" \
title="$($(PKG)_MESSAGE)"> \
$(PKG) \
$(if $($(PKG)_TYPE), [$($(PKG)_TYPE)-pkg]) \
$(if $($(PKG)_MESSAGE), **)\
</th>\n \
<td>$(call substr,$($(PKG)_VERSION),1,12) \
$(if $(call gt,$(call strlen,$($(PKG)_VERSION)),12),&hellip;)</td>\n\
$(foreach TARGET,$(MXE_TARGET_LIST), \
$(if $(filter $(VIRTUAL_PKG_TYPES),$($(PKG)_TYPE)), \
$(if $(filter $(TARGET),$($(PKG)_TARGETS)), \
<td class="neutral">&bull;</td>, \
<td></td>), \
$(if $(filter $(TARGET),$($(PKG)_TARGETS)), \
$(if $(value $(call LOOKUP_PKG_RULE,$(PKG),BUILD,$(TARGET))), \
$(eval $(TARGET)_PKGCOUNT += x) \
<td class="supported">&#x2713;</td>, \
<td class="unsupported">&#x2717;</td>),\
<td></td>))\n) \
$(if $(filter $(VIRTUAL_PKG_TYPES),$($(PKG)_TYPE)), \
$(eval VIRTUAL_PKGCOUNT += x) \
$(if $(filter $(BUILD),$($(PKG)_TARGETS)), \
<td class="neutral">&bull;</td>, \
<td></td>), \
$(if $(filter $(BUILD),$($(PKG)_TARGETS)), \
$(if $(value $(call LOOKUP_PKG_RULE,$(PKG),BUILD,$(BUILD))), \
<td class="supported">&#x2713;</td>, \
<td class="unsupported">&#x2717;</td>), \
<td></td>))\n \
</tr>\n' >> $@ $(newline) \
$(if $(call seq,$(BUILD),$($(PKG)_TARGETS)), \
$(eval BUILD_ONLY_PKGCOUNT += x)))
@echo '<tr>' >> $@
@echo '<th class="row" colspan="2">' >> $@

@ -12,3 +12,7 @@ td.unsupported {
background-color: #f99;
text-align: center;
}
td.neutral {
background-color: #d1d1d1;
text-align: center;
}

@ -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;

@ -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

@ -9,3 +9,4 @@ $(PKG)_CHECKSUM := 3f20b6acb37e5a98e8c4518165711e3e35d47deb6cdb5a4dd4566563b5efd
$(PKG)_GH_CONF := google/googlemock/tags, release-
$(PKG)_DEPS :=
$(PKG)_TARGETS := $(BUILD) $(MXE_TARGETS)
$(PKG)_TYPE := archive

@ -9,3 +9,4 @@ $(PKG)_CHECKSUM := f73a6546fdf9fce9ff93a5015e0333a8af3062a152a9ad6bcb772c9668701
$(PKG)_GH_CONF := google/googletest/tags, release-
$(PKG)_DEPS :=
$(PKG)_TARGETS := $(BUILD) $(MXE_TARGETS)
$(PKG)_TYPE := archive

@ -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

@ -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' \

Loading…
Cancel
Save