From 4823463b88057f6bcca63aee9e95dc742bd5fe96 Mon Sep 17 00:00:00 2001 From: Jan Lindemann Date: Mon, 21 Sep 2026 08:54:07 +0200 Subject: [PATCH] common.mk: Add file This is the first in a series of attempts to clean up jw-pkg's makefile fragments make/*.mk. It collects redundantly defined workspace and project variables into one shared common.mk. Variables needed in both the workspace directory and the project directories are defined separately in the two contexts: Q in defs.mk and projects-dir-minimal.mk, INTERACTIVE in topdir.mk and projects-dir.mk, BROWSER and JWB_SCRIPT_DIR in defs.mk/platform.mk and projects-dir.mk, and LIST_VCS_FILES and LIST_VCS_FILES_SH wrapping the same scm.sh ls-files call under different names. PKG_MANAGER is defined in topdir.mk and projects-dir.mk, and JW_PKG_PY_PROJECTS is a prefix only used to build two other variables in projects-dir.mk. This commit adds make/common.mk, included from defs.mk (and hence from every project directory) and from projects-dir.mk (the workspace), and collects the shared variables there: - Q, INTERACTIVE, BROWSER, JWB_SCRIPT_DIR: one ?= definition each - LIST_VCS_FILES: one definition; LIST_VCS_FILES_SH is dropped and the list-files target uses the shared name - PKG_MANAGER moves to projects+project.mk, the fragment shared by the workspace and the topdir - projects-dir-minimal.mk keeps its own Q, because the bootstrap recipes run before common.mk is parsed - JW_PKG_PY_PROJECTS is inlined into JW_PKG_PY_BUILD and JW_PKG_PY_REQUIRED_OS_PKG Signed-off-by: Jan Lindemann Assisted-by: unsloth/Qwen3.8-27B-GGUF:Q4_K_M with pi.dev v0.87.0 --- make/common.mk | 15 +++++++++++++++ make/defs.mk | 9 +++------ make/list-files.mk | 2 -- make/platform.mk | 2 -- make/projects+project.mk | 1 + make/projects-dir-minimal.mk | 2 ++ make/projects-dir.mk | 16 +++++----------- make/topdir.mk | 2 -- 8 files changed, 26 insertions(+), 23 deletions(-) create mode 100644 make/common.mk diff --git a/make/common.mk b/make/common.mk new file mode 100644 index 00000000..7cfb509e --- /dev/null +++ b/make/common.mk @@ -0,0 +1,15 @@ +# Common fragment for all jw-pkg-aware Makefiles. Its contents is pulled in +# - from every directory of every project +# - from the projects directory (i.e. the directory containing projects) + +ifndef COMMON_MK_INCLUDED +COMMON_MK_INCLUDED = true + +Q ?= @ +INTERACTIVE ?= auto +BROWSER ?= xdg-open +JWB_SCRIPT_DIR ?= $(firstword $(wildcard $(JWBDIR)/scripts $(JWBDIR)/bin) jwb-script-dir-not-found) + +LIST_VCS_FILES = /bin/bash $(JWB_SCRIPT_DIR)/scm.sh ls-files + +endif diff --git a/make/defs.mk b/make/defs.mk index b5d38455..1522461c 100644 --- a/make/defs.mk +++ b/make/defs.mk @@ -10,12 +10,12 @@ MAKEFLAGS += -r empty := space := $(empty) $(empty) comma := , -Q ?= @ + +include $(JWBDIR)/make/common.mk +include $(JWBDIR)/make/projects.mk # ----- Executables -include $(JWBDIR)/make/projects.mk - ifndef WHICH WHICH := $(firstword $(wildcard /usr/bin/which) $(shell which which)) endif @@ -34,9 +34,6 @@ endif ifndef CAT CAT := $(shell $(WHICH) cat) endif -ifndef BROWSER - BROWSER := $(shell $(WHICH) xdg-open) -endif ifeq ($(origin RM),default) RM := $(shell $(WHICH) rm) endif diff --git a/make/list-files.mk b/make/list-files.mk index ff9b6dd5..89a0a43f 100644 --- a/make/list-files.mk +++ b/make/list-files.mk @@ -1,5 +1,3 @@ -LIST_VCS_FILES := /bin/bash $(JWB_SCRIPT_DIR)/scm.sh ls-files - ifndef LIST_FILES_MK_INCLUDED LIST_FILES_MK_INCLUDED := true diff --git a/make/platform.mk b/make/platform.mk index 7b00642d..ffebcfec 100644 --- a/make/platform.mk +++ b/make/platform.mk @@ -63,8 +63,6 @@ else export SHELL := /bin/bash endif -JWB_SCRIPT_DIR := $(firstword $(wildcard $(JWBDIR)/scripts $(JWBDIR)/bin)) - include $(JWBDIR)/make/py-version.mk JW_PKG_PY = $(PYTHON) $(JWB_SCRIPT_DIR)/jw-pkg.py -p $(PROJECTS_DIR) -t $(TOPDIR) $(JW_PKG_PY_EXTRA_OPTS) diff --git a/make/projects+project.mk b/make/projects+project.mk index 46c29242..b2634928 100644 --- a/make/projects+project.mk +++ b/make/projects+project.mk @@ -3,3 +3,4 @@ # projects-dir-minimal.mk / projects-dir.mk for details) PGIT_SH = /bin/bash $(JWB_SCRIPT_DIR)/pgit.sh +PKG_MANAGER ?= $(TIME) $(JW_PKG_PY) --interactive=$(INTERACTIVE) pkg diff --git a/make/projects-dir-minimal.mk b/make/projects-dir-minimal.mk index 00c27052..2dc56285 100644 --- a/make/projects-dir-minimal.mk +++ b/make/projects-dir-minimal.mk @@ -18,6 +18,8 @@ PROJECTS_MAKEFILE_NAME := $(firstword $(MAKEFILE_LIST)) -include local.mk JWBDIR ?= jw-pkg +# The bootstrap recipes below run before jw-pkg's common.mk is +# parsed, so Q must be defined here; a no-op in the steady state. Q ?= @ ifeq ($(origin PROJECTS_DIR_REMOTE_BASE),undefined) diff --git a/make/projects-dir.mk b/make/projects-dir.mk index d6e97d75..09b60335 100644 --- a/make/projects-dir.mk +++ b/make/projects-dir.mk @@ -25,8 +25,9 @@ JWBDIR_NAME ?= jw-pkg JWBDIR_SEARCH_PATH ?= $(DEV_PROJECTS_DIR) $(BUILD_TOOLS_PREFIX)/opt/$(FLAVOUR_PATH_PREFIX) JWBDIR ?= $(firstword $(wildcard $(addsuffix /$(JWBDIR_NAME),$(JWBDIR_SEARCH_PATH)))) +include $(JWBDIR)/make/common.mk + JW_PKG_BINDIR = $(JWBDIR)/bin -JWB_SCRIPT_DIR = $(firstword $(wildcard $(JWBDIR)/scripts $(JW_PKG_BINDIR)) jwb-script-dir-not-found) JW_PKG_REMOTE_BINDIR = /opt/jw-pkg/bin SHELL = /bin/bash -o pipefail +H @@ -110,12 +111,8 @@ ifneq ($(EXCLUDE_FROM_BUILD),) JW_PKG_PY_EXTRA_BUILD_OPTS += --exclude "$(EXCLUDE_FROM_BUILD)" endif -# non-interactive mode -INTERACTIVE ?= auto - # ------------ external programs II -BROWSER ?= xdg-open EDITOR ?= xdg-open ifeq ($(TIME),) TIME := $(shell which time) @@ -123,11 +120,9 @@ ifeq ($(TIME),) TIME += -p endif endif -JW_PKG_PY_PROJECTS = $(JW_PKG_PY) projects PKG_RELATIONS_BUILD ?= requires,recommends -JW_PKG_PY_BUILD = $(JW_PKG_PY_PROJECTS) build --pkg-relations "$(PKG_RELATIONS_BUILD)" $(JW_PKG_PY_EXTRA_BUILD_OPTS) -JW_PKG_PY_REQUIRED_OS_PKG = $(JW_PKG_PY_PROJECTS) required-os-pkg --quote --skip-excluded --pkg-relations "$(PKG_RELATIONS_BUILD)" -PKG_MANAGER ?= $(TIME) $(JW_PKG_PY) --interactive=$(INTERACTIVE) pkg +JW_PKG_PY_REQUIRED_OS_PKG = $(JW_PKG_PY) projects required-os-pkg --quote --skip-excluded --pkg-relations "$(PKG_RELATIONS_BUILD)" +JW_PKG_PY_BUILD = $(JW_PKG_PY) projects build --pkg-relations "$(PKG_RELATIONS_BUILD)" $(JW_PKG_PY_EXTRA_BUILD_OPTS) ifneq ($(origin PROJECTS_DIR_REMOTE_BASE),undefined) PGIT_SH += --remote-base $(PROJECTS_DIR_REMOTE_BASE) @@ -147,7 +142,6 @@ endif PURGE_SH = /bin/bash $(firstword $(wildcard $(JWB_SCRIPT_DIR)/purge-stale-projects.sh $(JW_PKG_BINDIR)/purge-stale-projects.sh) purge-not-found) CREATE_PROJECT_SH ?= /bin/bash $(firstword $(wildcard $(JWB_SCRIPT_DIR)/jw-pkg-create-project.sh $(JW_PKG_BINDIR)/jw-pkg-create-project.sh) jw-pkg-create-project-not-found) -LIST_VCS_FILES_SH = /bin/bash $(firstword $(wildcard $(JWB_SCRIPT_DIR)/scm.sh $(JW_PKG_BINDIR)/scm.sh) scm-sh-not-found) ls-files GIT_SRV_ADMIN_SH = $(GIT_SSH) $(JANWARE_USER)@devgit.janware.com $(JW_PKG_REMOTE_BINDIR)/git-srv-admin.sh JANWARE_PACKAGE_FILTER = url =~ janware @@ -227,7 +221,7 @@ clean.text-files-cache: rm -f $(TEXT_FILES_CACHE) list-files: $(Q)for p in $(DEP_PROJECTS); do \ - $(LIST_VCS_FILES_SH) -znf $$p | sed -z "s/^/$$p\//" | \ + $(LIST_VCS_FILES) -znf $$p | sed -z "s/^/$$p\//" | \ xargs -0 realpath -q ;\ done $(TEXT_FILES_CACHE): diff --git a/make/topdir.mk b/make/topdir.mk index b8eb3e75..564af8a3 100644 --- a/make/topdir.mk +++ b/make/topdir.mk @@ -61,8 +61,6 @@ GIT_DESCR = $(TOPDIR)/.git/description GIT_MAIN_BRANCH ?= master OPT_JANWARE_PROJECT ?= -j -INTERACTIVE ?= auto -PKG_MANAGER ?= $(JW_PKG_PY) --interactive=$(INTERACTIVE) pkg ifeq ($(OPT_JANWARE_PROJECT),-j) REMOTE_GIT_FLAVOUR ?= proj