4 커밋 5ab4e16c6c ... 06ca549dd4

작성자 SHA1 메시지 날짜
  Lars Kruse 06ca549dd4 Bump version: 0.14.4 -> 0.15.0 2 달 전
  Lars Kruse 552d8a32c7 docs: prepare release notes 2 달 전
  Lars Kruse 5186b866b0 feat: add fallback URL for downloading `makefilet` 2 달 전
  Lars Kruse e2c8652276 feat: add downloading of external modules via `MAKEFILET_MODULES` 2 달 전
8개의 변경된 파일115개의 추가작업 그리고 9개의 파일을 삭제
  1. 1 1
      .bumpversion.cfg
  2. 5 1
      Changelog
  3. 48 0
      REFERENCE.md
  4. 1 1
      VERSION
  5. 6 0
      debian/changelog
  6. 24 0
      include/makefilet-download-modules.mk
  7. 4 1
      main.mk
  8. 26 5
      makefilet-download-ondemand.mk

+ 1 - 1
.bumpversion.cfg

@@ -1,5 +1,5 @@
 [bumpversion]
-current_version = 0.14.4
+current_version = 0.15.0
 
 [bumpversion:file:VERSION]
 

+ 5 - 1
Changelog

@@ -1,9 +1,13 @@
-# UNRELEASED
+# Version 0.15.0 (2024-03-09)
 
 * deb: generate proper package name during `init-deb`
   (replacing underscores with hyphens)
 * python: add "upload" actions for poetry and hatchling
 * python: add "build" (`dist`) actions for poetry and hatchling
+* add downloading of external modules via `MAKEFILET_MODULES`
+* add default fallback URL for downloading `makefilet`.
+  The download URLs can be configured via `MAKEFILET_DOWNLOAD_URL_TEMPLATES`.
+  This requires an update of your embedded `makefilet-download-ondemand.mk`.
 
 
 # Version 0.14.4 (2023-12-15)

+ 48 - 0
REFERENCE.md

@@ -286,6 +286,33 @@ Arguments for the [lintian](https://lintian.debian.org/) tool used by `lint-deb`
 Default: empty
 
 
+## `MAKEFILET_DOWNLOAD_URL_TEMPLATES`
+The provided `makefilet-download-ondemand.mk` file uses this variable for determining the URL to be
+used for downloading `makefilet`.
+
+The variable is expected to contain a space-separated list of URL templates.
+Each template should include the string `__VERSION__`., which will be replaced with the content of
+`MAKEFILET_DOWNLOAD_VERSION`.
+
+The URLs are queried in the configured order until a download succeeds.
+
+`MAKEFILET_DOWNLOAD_URL_TEMPLATES` is ignored, if `MAKEFILET_DOWNLOAD_URLS` is defined.
+
+Default: URL patterns for all known download locations of `makefilet`
+
+
+## `MAKEFILET_DOWNLOAD_URLS`
+This variable is similar to `MAKEFILET_DOWNLOAD_URL_TEMPLATES`.
+Instead of URL patterns it contains resolved URLs (without a `__VERSION__` string).
+
+If this variable is defined, then `MAKEFILET_DOWNLOAD_URL_TEMPLATES` and
+`MAKEFILET_DOWNLOAD_VERSION` are ignored.
+
+`MAKEFILET_DOWNLOAD_URL_TEMPLATES` is preferable under most circumstances.
+
+Default: empty
+
+
 ## `MAKEFILET_ENABLE_PYTHON`
 Force Python features to be enabled, even if no `setup.py` was found
 (e.g. for `virtualenv` support).
@@ -293,6 +320,27 @@ Force Python features to be enabled, even if no `setup.py` was found
 Default: empty
 
 
+## `MAKEFILET_MODULES`
+Download additional makefilet modules, which are executed whenever `makefilet` is loaded.
+
+The variable is expected to be a space-separated list of URLs.
+`Makefilet` will refuse to operate if any of these URLs cannot be downloaded.
+
+The downloaded modules are cached as a complete collection (not individually).
+Any change of a single URL or a change of order will cause another download of all modules.
+
+You may need to add cache-invalidating query arguments (e.g. `?foo`) if a URL points to different
+content over time (i.e. the URL lacks an explicit version identifier).
+
+Example:
+```make
+MAKEFILET_MODULES += https://example.org/makefilet/foo_v1.0.2.mk
+MAKEFILET_MODULES += https://example.org/makefilet/bar.mk?v1.3.0
+```
+
+Default: empty
+
+
 ## `MAKEFILET_OUTPUT_SYNCHRONIZATION`
 Configure `make`'s
 [output synchronization](https://www.gnu.org/software/make/manual/html_node/Parallel-Output.html)

+ 1 - 1
VERSION

@@ -1 +1 @@
-0.14.4
+0.15.0

+ 6 - 0
debian/changelog

@@ -1,3 +1,9 @@
+makefilet (0.15.0-1) unstable; urgency=medium
+
+  * New upstream release
+
+ -- Lars Kruse <devel@sumpfralle.de>  Sat, 09 Mar 2024 02:05:45 +0100
+
 makefilet (0.14.4-1) unstable; urgency=medium
 
   * New upstream release

+ 24 - 0
include/makefilet-download-modules.mk

@@ -0,0 +1,24 @@
+ifneq ($(MAKEFILET_MODULES),)
+MAKEFILET_MODULES_HASHSUM = $(shell printf '%s\n' $(MAKEFILET_MODULES) | sha1sum | cut -f 1 -d " ")
+MAKEFILET_MODULES_STORAGE_FILE ?= $(DIR_BUILD)/makefilet-modules/$(MAKEFILET_MODULES_HASHSUM).mk
+MAKEFILET_MODULES_STORAGE_FILE_IF_EXISTS := $(wildcard $(MAKEFILET_MODULES_STORAGE_FILE))
+MAKEFILET_MODULES_PARTIAL_DOWNLOAD_FILE := $(dir $(MAKEFILET_MODULES_STORAGE_FILE))/partial-download
+ifeq ($(MAKEFILET_MODULES_STORAGE_FILE_IF_EXISTS),)
+# delete the file to be used for storing the downloaded modules
+$(shell $(RM) $(MAKEFILET_MODULES_PARTIAL_DOWNLOAD_FILE))
+$(shell mkdir -p "$(dir $(MAKEFILET_MODULES_PARTIAL_DOWNLOAD_FILE))")
+MAKEFILET_MODULES_DOWNLOAD_FAILED_URLS := $(foreach module_url,$(MAKEFILET_MODULES),$(shell \
+	echo >&2 "Downloading makefilet module: $(module_url)"; \
+	echo "# module: $(module_url)" >>"$(MAKEFILET_MODULES_PARTIAL_DOWNLOAD_FILE)"; \
+	if ! wget --quiet --output-document - "$(module_url)" >>"$(MAKEFILET_MODULES_PARTIAL_DOWNLOAD_FILE)"; then \
+		echo >&2 "Failed to download $(module_url)"; \
+		printf '%s\n' "$(module_url)"; \
+	fi \
+))
+ifneq ($(strip $(MAKEFILET_MODULES_DOWNLOAD_FAILED_URLS)),)
+$(error Some makefilet modules failed to downloaded: $(MAKEFILET_MODULES_DOWNLOAD_FAILED_URLS))
+endif
+$(shell mv "$(MAKEFILET_MODULES_PARTIAL_DOWNLOAD_FILE)" "$(MAKEFILET_MODULES_STORAGE_FILE)")
+endif
+include $(MAKEFILET_MODULES_STORAGE_FILE)
+endif

+ 4 - 1
main.mk

@@ -10,7 +10,7 @@ DIR_DIST ?= dist
 # e.g. for "debian/rules install"
 DESTDIR ?= root
 
-MAKEFILET_CURRENT_VERSION = 0.14.4
+MAKEFILET_CURRENT_VERSION = 0.15.0
 
 include $(DIR_MAKEFILET)/base.mk
 include $(DIR_MAKEFILET)/deprecations.mk
@@ -49,6 +49,9 @@ else ifeq "$(MAKEFILET_ENABLE_PYTHON)" "1"
 	include $(DIR_MAKEFILET)/python-common.mk
 endif
 
+# load optional external modules (see `MAKEFILET_MODULES`)
+include $(DIR_MAKEFILET)/makefilet-download-modules.mk
+
 
 .PHONY: help
 .NOTPARALLEL:

+ 26 - 5
makefilet-download-ondemand.mk

@@ -4,9 +4,23 @@
 #   * on-demand download (temporarily stored in the local 'build/' directory)
 
 # alternative version: "main" (the tip of the current development branch)
-MAKEFILET_DOWNLOAD_VERSION ?= v0.14.4
-MAKEFILET_DOWNLOAD_URL_TEMPLATE ?= https://notabug.org/sumpfralle/makefilet/archive/__VERSION__.tar.gz
-MAKEFILET_DOWNLOAD_URL ?= $(subst __VERSION__,$(MAKEFILET_DOWNLOAD_VERSION),$(MAKEFILET_DOWNLOAD_URL_TEMPLATE))
+MAKEFILET_DOWNLOAD_VERSION ?= v0.15.0
+
+ifneq ($(MAKEFILET_DOWNLOAD_URL_TEMPLATE),)
+$(warning 'MAKEFILET_DOWNLOAD_URL_TEMPLATE' is deprecated. Use 'MAKEFILET_DOWNLOAD_URL_TEMPLATES' instead.)
+MAKEFILET_DOWNLOAD_URL_TEMPLATES ?= $(MAKEFILET_DOWNLOAD_URL_TEMPLATE)
+else
+MAKEFILET_DOWNLOAD_URL_TEMPLATES ?= \
+	https://notabug.org/sumpfralle/makefilet/archive/__VERSION__.tar.gz \
+	https://git.hack-hro.de/kmohrf/makefilet/-/archive/__VERSION__/makefilet-__VERSION__.tar.gz
+endif
+
+ifneq ($(MAKEFILET_DOWNLOAD_URL),)
+$(warning 'MAKEFILET_DOWNLOAD_URL' is deprecated. Use 'MAKEFILET_DOWNLOAD_URLS' instead.)
+MAKEFILET_DOWNLOAD_URLS ?= $(MAKEFILET_DOWNLOAD_URL)
+else
+MAKEFILET_DOWNLOAD_URLS ?= $(foreach template,$(MAKEFILET_DOWNLOAD_URL_TEMPLATES),$(subst __VERSION__,$(MAKEFILET_DOWNLOAD_VERSION),$(template)))
+endif
 
 # first attempt: system-wide installation (e.g. deb package) or submodule of this project?
 -include makefilet/main.mk
@@ -20,8 +34,15 @@ ifndef DIR_MAKEFILET
 # third attempt: download and extract a known release
 $(info Downloading 'makefilet' ...)
 $(shell mkdir -p "$(DIR_MAKEFILET_DOWNLOAD)" \
-	&& wget --no-verbose --output-document - "$(MAKEFILET_DOWNLOAD_URL)" \
-	| tar -xz -C "$(DIR_MAKEFILET_DOWNLOAD)" --strip-components=1 -f -)
+	&& for url in $(MAKEFILET_DOWNLOAD_URLS); do \
+		printf >&2 "Trying to download 'makefilet' from $$url ... "; \
+		if wget --quiet --output-document - "$$url"; then \
+			echo >&2 "OK"; \
+			break; \
+		else \
+			echo >&2 "failed"; \
+		fi; \
+	done | tar -xz -C "$(DIR_MAKEFILET_DOWNLOAD)" --strip-components=1 -f -)
 # last include attempt
 -include $(DIR_MAKEFILET_DOWNLOAD)/main.mk
 ifndef DIR_MAKEFILET