diff options
author | Tony Theodore <tonyt@logyst.com> | 2018-03-11 02:19:24 (GMT) |
---|---|---|
committer | Tony Theodore <tonyt@logyst.com> | 2018-03-12 03:28:14 (GMT) |
commit | 38c43b5017befbf0153d3a5f2165e80c064329ad (patch) | |
tree | 8bf6e35d8bfc55f906517376fe0edc6bcb18e20b /mxe.updates.mk | |
parent | 02e11b8dc1690a1730bd35d5b61d5c9e3bbf2f5a (diff) | |
download | mxe-38c43b5017befbf0153d3a5f2165e80c064329ad.zip mxe-38c43b5017befbf0153d3a5f2165e80c064329ad.tar.gz mxe-38c43b5017befbf0153d3a5f2165e80c064329ad.tar.bz2 |
sub makefiles: standardize names and add to build-pkg
Diffstat (limited to 'mxe.updates.mk')
-rw-r--r-- | mxe.updates.mk | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/mxe.updates.mk b/mxe.updates.mk new file mode 100644 index 0000000..9a4455d --- /dev/null +++ b/mxe.updates.mk @@ -0,0 +1,79 @@ +# This file is part of MXE. See LICENSE.md for licensing information. + +# Generic updater +# $(call GET_LATEST_VERSION, base url[, prefix, ext, filter, separator]) +# base url : required page returning list of versions +# e.g https://ftp.gnu.org/gnu/libfoo +# prefix : segment before version +# defaults to lastword of url with dash i.e. `libfoo-` +# ext : segment ending version - default `\.tar` +# filter : `grep -i` filter-out pattern - default alpha\|beta\|rc +# separator: transform char to `.` - typically `_` +# +# test changes with: +# make check-get-latest-version +# +# and update tools/skeleton.py with usage notes + +define GET_LATEST_VERSION + $(WGET) -q -O- '$(strip $(1))' | \ + $(SED) -n 's,.*<a href=".*$(strip $(or $(2),$(lastword $(subst /,$(space),$(1)))-))\([0-9][^"]*\)$(strip $(or $(3),\.tar)).*,\1,p' | \ + grep -vi '$(strip $(or $(4),alpha\|beta\|rc))' | \ + tr '$(strip $(5))' '.' | \ + $(SORT) -V | \ + tail -1 +endef + +ALL_DIRS := $(MXE_PLUGIN_DIRS) $(shell find $(realpath $(TOP_DIR)/plugins) -type d) +GET_LATEST_VERSION_PKGS := $(sort \ + $(basename $(notdir $(shell grep -l GET_LATEST_VERSION -r $(ALL_DIRS))))) + +.PHONY: check-get-latest-version +check-get-latest-version: + @$(MAKE) -f '$(MAKEFILE)' \ + $(addprefix check-update-package-,$(GET_LATEST_VERSION_PKGS)) \ + MXE_PLUGIN_DIRS='$(ALL_DIRS)' + +COMPARE_VERSIONS = $(strip \ + $(if $($(1)_BRANCH),$(call seq,$($(1)_VERSION),$(2)),\ + $(filter $(2),$(shell printf '$($(1)_VERSION)\n$(2)' | $(SORT) -V | head -1)))) + +.PHONY: update +define UPDATE + $(if $(2), + $(if $(filter $($(1)_IGNORE),$(2)), + $(info IGNORED $(1) $(2)), + $(if $(COMPARE_VERSIONS), + $(if $(filter $(2),$($(1)_VERSION)), + $(info . $(1) $(2)), + $(info OLD $(1) $($(1)_VERSION) --> $(2) ignoring)), + $(info NEW $(1) $($(1)_VERSION) --> $(2)) + $(if $(findstring undefined, $(origin UPDATE_DRYRUN)), + $(SED) -i 's/^\([^ ]*_VERSION *:=\).*/\1 $(2)/' '$($(1)_MAKEFILE)' + $(MAKE) -f '$(MAKEFILE)' 'update-checksum-$(1)' \ + || { $(SED) -i 's/^\([^ ]*_VERSION *:=\).*/\1 $($(1)_VERSION)/' '$($(1)_MAKEFILE)'; \ + exit 1; }))), + $(info Unable to update version number of package $(1) \ + $(newline)$(newline)$($(1)_UPDATE)$(newline))) + +endef +update: + $(foreach PKG,$(PKGS),\ + $(and $($(PKG)_UPDATE),$(call UPDATE,$(PKG),$(shell $($(PKG)_UPDATE))))) + +update-package-%: + $(if $(call set_is_member,$*,$(PKGS)), \ + $(and $($*_UPDATE),$(call UPDATE,$*,$(shell $($*_UPDATE)))), \ + $(error Package $* not found)) + @echo -n + +check-update-package-%: UPDATE_DRYRUN = true +check-update-package-%: update-package-% ; + +update-checksum-%: MXE_NO_BACKUP_DL = true +update-checksum-%: SKIP_CHECHSUM = true +update-checksum-%: + $(if $(call set_is_member,$*,$(PKGS)), \ + $(call DOWNLOAD_PKG_ARCHIVE,$*) && \ + $(SED) -i 's/^\([^ ]*_CHECKSUM *:=\).*/\1 '"`$(call PKG_CHECKSUM,$*)`"'/' '$($*_MAKEFILE)', \ + $(error Package $* not found)) |