make: Miscellaneous versatility improvements #83

Merged
Jan Lindemann merged 5 commits from jan/feature/20260905-make-miscellaneous-versatility-improvements into master 2026-09-05 13:49:10 +02:00 AGit
2 changed files with 23 additions and 2 deletions
Showing only changes of commit 29abf14a67 - Show all commits

py-ns-dir.mk: Support __init__.py generation

For in-tree tests, the jw package is split across several projects, and
each directory containing a py-ns-dir.mk contributes its subtree. So far,
it's up to that directory how the contribution is handled. Usually an
__init__.py with pkgutil.extend_path() is present in version control to
glue these parts together. This commit makes py-ns-dir.mk handle the
contribution method centrally by default unless PY_UPDATE_INIT_PY is set to
false.

As of this commit, this is the case by default, i.e. PY_UPDATE_INIT_PY is
set to false in py-ns-dir.mk, maintaining the current behaviour.

Downstream projects or modules can decide to have __init__.py centrally
maintained. For this, they need to remove __init__.py from version control
and set PY_UPDATE_INIT_PY to true in the respective Makefile.

PY_UPDATE_INIT_PY = false is also set explicitly in src/python/jw/Makefile,
because that file should never be generated. Bootstrapping the entire
workspace hinges on it.

Pending better testing, most notably of consistent in-tree testing
functionality, PY_UPDATE_INIT_PY = true might become a global default in
the future.

Signed-off-by: Jan Lindemann <jan@janware.com>
Jan Lindemann 2026-09-01 11:07:21 +02:00
Signed by: Jan Lindemann
GPG key ID: 3750640C9E25DD61

View file

@ -1,7 +1,26 @@
define INIT_PY
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
endef
# The __init__.py machinery duplicates (but is independent from) py-mod.mk
PY_UPDATE_INIT_PY ?= true
PY_INSTALL_INIT_PY ?= false
ifneq ($(PY_UPDATE_INIT_PY),false)
PY_GENERATED_PY += __init__.py
endif
include $(JWBDIR)/make/dirs.mk
all:
all: $(PY_GENERATED_PY)
clean: py.clean
py.clean:
rm -rf __pycache__
rm -rf __pycache__ $(PY_GENERATED_PY)
__init__.py:
@echo "Creating default namespace stub $@.tmp"
$(file >$@.tmp,$(INIT_PY))
mv $@.tmp $@

View file

@ -1,4 +1,6 @@
TOPDIR = ../../..
PY_UPDATE_INIT_PY = false
include $(TOPDIR)/make/proj.mk
include $(JWBDIR)/make/py-ns-dir.mk