mirror of https://git.wownero.com/dsc/mxe.git
Merge pull request #1975 from tonytheodore/updater
Makefile: add generic updater function
This commit is contained in:
commit
ee36fd0550
48
Makefile
48
Makefile
|
@ -784,50 +784,6 @@ clean-pkg:
|
||||||
clean-junk: clean-pkg
|
clean-junk: clean-pkg
|
||||||
rm -rf $(LOG_DIR) $(call TMP_DIR,*)
|
rm -rf $(LOG_DIR) $(call TMP_DIR,*)
|
||||||
|
|
||||||
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))
|
|
||||||
|
|
||||||
.PHONY: cleanup-style
|
.PHONY: cleanup-style
|
||||||
define CLEANUP_STYLE
|
define CLEANUP_STYLE
|
||||||
@$(SED) ' \
|
@$(SED) ' \
|
||||||
|
@ -965,6 +921,6 @@ docs/packages.json: $(foreach 1,$(PKGS),$(PKG_MAKEFILES))
|
||||||
@echo ' "": null' >> $@
|
@echo ' "": null' >> $@
|
||||||
@echo '}' >> $@
|
@echo '}' >> $@
|
||||||
|
|
||||||
# for patch-tool-mxe
|
# for other mxe functions
|
||||||
|
|
||||||
include patch.mk
|
include patch.mk
|
||||||
|
include updates.mk
|
||||||
|
|
|
@ -47,9 +47,18 @@ $(PKG)_URL := %(file_url_template)s
|
||||||
|
|
||||||
UPDATE = r'''
|
UPDATE = r'''
|
||||||
define $(PKG)_UPDATE
|
define $(PKG)_UPDATE
|
||||||
echo 'TODO: write update script for %(name)s.' >&2;
|
$(call GET_LATEST_VERSION, %(update_url_template)s)
|
||||||
echo $(%(name)s_VERSION)
|
|
||||||
endef
|
endef
|
||||||
|
# $(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 with make check-update-package-%(name)s and delete comments
|
||||||
'''
|
'''
|
||||||
|
|
||||||
CMAKE_BUILD = r'''
|
CMAKE_BUILD = r'''
|
||||||
|
@ -177,6 +186,7 @@ def make_skeleton(
|
||||||
filename = get_filename(file_url)
|
filename = get_filename(file_url)
|
||||||
filename_template = filename.replace(version, '$($(PKG)_VERSION)')
|
filename_template = filename.replace(version, '$($(PKG)_VERSION)')
|
||||||
file_url_template = file_url.replace(version, '$($(PKG)_VERSION)')
|
file_url_template = file_url.replace(version, '$($(PKG)_VERSION)')
|
||||||
|
update_url_template = file_url.replace('/' + filename,'')
|
||||||
subdir_template = subdir.replace(version, '$($(PKG)_VERSION)')
|
subdir_template = subdir.replace(version, '$($(PKG)_VERSION)')
|
||||||
libname = name
|
libname = name
|
||||||
if libname.startswith('lib'):
|
if libname.startswith('lib'):
|
||||||
|
@ -188,6 +198,7 @@ def make_skeleton(
|
||||||
'libname': libname,
|
'libname': libname,
|
||||||
'website': website,
|
'website': website,
|
||||||
'file_url_template': file_url_template,
|
'file_url_template': file_url_template,
|
||||||
|
'update_url_template': update_url_template,
|
||||||
'gh_conf': gh_conf,
|
'gh_conf': gh_conf,
|
||||||
'checksum': checksum,
|
'checksum': checksum,
|
||||||
'version': version,
|
'version': version,
|
||||||
|
|
|
@ -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))
|
Loading…
Reference in New Issue