make: Improve make variable caching machinery #50
14 changed files with 61 additions and 43 deletions
2
.gitignore
vendored
2
.gitignore
vendored
|
|
@ -12,3 +12,5 @@ pkg-build.dist
|
||||||
pkgconfig/
|
pkgconfig/
|
||||||
rebase.sh
|
rebase.sh
|
||||||
__pycache__
|
__pycache__
|
||||||
|
.cache-project.mk
|
||||||
|
.cache-projects.mk
|
||||||
|
|
|
||||||
14
Makefile
14
Makefile
|
|
@ -1,14 +1,24 @@
|
||||||
TOPDIR = .
|
TOPDIR = .
|
||||||
PKG_UPLOAD_URLPREFIX ?= rsync_ssh://$(JANWARE_USER)@pkg.janware.com:/srv/dav/pub/packages/jw-foss/$(PKG_UPLOAD_OS_NAME)/$(PKG_UPLOAD_OS_VERSION)
|
PKG_UPLOAD_URLPREFIX ?= rsync_ssh://$(JANWARE_USER)@pkg.janware.com:/srv/dav/pub/packages/jw-foss/$(PKG_UPLOAD_OS_NAME)/$(PKG_UPLOAD_OS_VERSION)
|
||||||
|
|
||||||
|
all:
|
||||||
|
all: cache-projects
|
||||||
|
|
||||||
include $(TOPDIR)/make/proj.mk
|
include $(TOPDIR)/make/proj.mk
|
||||||
include $(JWBDIR)/make/topdir.mk
|
include $(JWBDIR)/make/topdir.mk
|
||||||
include $(JWBDIR)/make/srcdist.mk
|
include $(JWBDIR)/make/srcdist.mk
|
||||||
include $(JWBDIR)/make/git-cvs-bridge.mk
|
include $(JWBDIR)/make/git-cvs-bridge.mk
|
||||||
include $(JWBDIR)/make/py-topdir.mk
|
include $(JWBDIR)/make/py-topdir.mk
|
||||||
|
|
||||||
all:
|
|
||||||
clean: clean.pkgconfig
|
clean: clean.pkgconfig
|
||||||
|
|
||||||
clean.pkgconfig:
|
clean.pkgconfig:
|
||||||
rm -rf pkgconfig
|
rm -rf pkgconfig
|
||||||
|
|
||||||
|
# -- Cache for all projects
|
||||||
|
cache-projects: $(CACHE_PROJECTS_MK)
|
||||||
|
clean.cache-projects:
|
||||||
|
rm -f $(CACHE_PROJECTS_MK)
|
||||||
|
topdir.clean: clean.cache-projects
|
||||||
|
$(CACHE_PROJECTS_MK): $(CACHE_PROJECT_MK)
|
||||||
|
sed -E '/^[[:blank:]]*ifndef[[:blank:]]+($(subst $(space),|,$(CACHED_VARS_ONLY_PROJECT)))[[:blank:]]*$$/,/^[[:blank:]]*endif[[:blank:]]*$$/d' $< > $@.tmp
|
||||||
|
mv $@.tmp $@
|
||||||
|
|
|
||||||
|
|
@ -13,19 +13,9 @@ endif
|
||||||
|
|
||||||
include $(JWBDIR)/make/dev-utils.mk
|
include $(JWBDIR)/make/dev-utils.mk
|
||||||
|
|
||||||
all: cache-projects
|
|
||||||
clean: clean-cache-projects
|
|
||||||
|
|
||||||
ifeq ($(TARGET),mingw)
|
ifeq ($(TARGET),mingw)
|
||||||
install: $(INSTALL_MAKEDIR)/winres.rc.tmpl
|
install: $(INSTALL_MAKEDIR)/winres.rc.tmpl
|
||||||
endif
|
endif
|
||||||
|
|
||||||
grep-vars:
|
grep-vars:
|
||||||
$(Q)sed '/^ *[A-Z]/!d; s/^[ ]*//g; s/[=+?:].*//g; s/[ ]*//g' *.mk | sort -u
|
$(Q)sed '/^ *[A-Z]/!d; s/^[ ]*//g; s/[=+?:].*//g; s/[ ]*//g' *.mk | sort -u
|
||||||
|
|
||||||
cache-projects: $(CACHE_PROJECTS_MK)
|
|
||||||
clean-cache-projects:
|
|
||||||
rm -f $(CACHE_PROJECTS_MK)
|
|
||||||
$(CACHE_PROJECTS_MK): $(CACHE_PROJECT_MK)
|
|
||||||
sed -E '/^[[:blank:]]*ifndef[[:blank:]]+($(subst $(space),|,$(CACHED_VARS_ONLY_PROJECT)))[[:blank:]]*$$/,/^[[:blank:]]*endif[[:blank:]]*$$/d' $< > $@.tmp
|
|
||||||
mv $@.tmp $@
|
|
||||||
|
|
|
||||||
|
|
@ -1,9 +1,15 @@
|
||||||
# ----- define these variables
|
# ----- define these variables
|
||||||
# CACHED_FILES = $(TOPDIR)/VERSION
|
# CACHED_FILES = $(TOPDIR)/VERSION
|
||||||
# CACHED_VARS = VERSION
|
# CACHED_VARS = VERSION
|
||||||
.PHONY: cache clean-cache clean-cache-projects
|
.PHONY: cache clean.cache
|
||||||
|
|
||||||
|
CACHED_FILES ?= $(VERSION_FILE) $(wildcard $(TOPDIR)/make/project.conf)
|
||||||
|
CACHED_VARS ?= PROJECT PREREQ_BUILD PREREQ_RUN PREREQ VERSION HEX_VERSION \
|
||||||
|
FULL_NAME WHICH PYTHON ECHO TEST BROWSER SED RM PWD ID CUT TR \
|
||||||
|
AWK GETENT XARGS FIND PRINTF PLATFORM_INFO OS_NAME_VERSION \
|
||||||
|
CAT BIN_INSTALL SUDO \
|
||||||
|
JW_PKG_LD_LIBRARY_PATH JW_PKG_EXE_PATH JW_PKG_PYTHON_PATH
|
||||||
|
|
||||||
CACHE_PROJECT_MK ?= .cache-project.mk
|
|
||||||
CACHED_VARS_ONLY_PROJECT ?= \
|
CACHED_VARS_ONLY_PROJECT ?= \
|
||||||
PROJECT \
|
PROJECT \
|
||||||
PREREQ_BUILD \
|
PREREQ_BUILD \
|
||||||
|
|
@ -15,9 +21,13 @@ CACHED_VARS_ONLY_PROJECT ?= \
|
||||||
JW_PKG_LD_LIBRARY_PATH \
|
JW_PKG_LD_LIBRARY_PATH \
|
||||||
JW_PKG_EXE_PATH \
|
JW_PKG_EXE_PATH \
|
||||||
JW_PKG_PYTHON_PATH
|
JW_PKG_PYTHON_PATH
|
||||||
|
|
||||||
|
# We need this to cache JW_PKG_PYTHON_PATH
|
||||||
|
include $(JWBDIR)/make/py-path.mk
|
||||||
|
|
||||||
all: cache
|
all: cache
|
||||||
clean: clean-cache
|
clean: clean.cache
|
||||||
clean-cache:
|
clean.cache:
|
||||||
rm -f $(CACHE_PROJECT_MK)
|
rm -f $(CACHE_PROJECT_MK)
|
||||||
|
|
||||||
cache: $(CACHE_PROJECT_MK)
|
cache: $(CACHE_PROJECT_MK)
|
||||||
|
|
|
||||||
|
|
@ -8,15 +8,6 @@ include $(JWBDIR)/make/ldlibpath.mk
|
||||||
include $(JWBDIR)/make/defs-dirs.mk
|
include $(JWBDIR)/make/defs-dirs.mk
|
||||||
include $(JWBDIR)/make/dev-utils.mk
|
include $(JWBDIR)/make/dev-utils.mk
|
||||||
|
|
||||||
CACHED_FILES ?= $(VERSION_FILE) $(wildcard $(TOPDIR)/make/project.conf)
|
|
||||||
CACHED_VARS ?= PROJECT PREREQ_BUILD PREREQ_RUN PREREQ VERSION HEX_VERSION \
|
|
||||||
FULL_NAME WHICH PYTHON ECHO TEST BROWSER SED RM PWD ID CUT TR \
|
|
||||||
AWK GETENT XARGS FIND PRINTF PLATFORM_INFO OS_NAME_VERSION \
|
|
||||||
CAT BIN_INSTALL SUDO \
|
|
||||||
JW_PKG_LD_LIBRARY_PATH JW_PKG_EXE_PATH JW_PKG_PYTHON_PATH
|
|
||||||
|
|
||||||
include $(JWBDIR)/make/cache.mk
|
|
||||||
|
|
||||||
ifneq ($(CREATE_DEVEL),false)
|
ifneq ($(CREATE_DEVEL),false)
|
||||||
MKFILES += $(wildcard project.conf)
|
MKFILES += $(wildcard project.conf)
|
||||||
DEVEL_TARGETS += install_MAKE $(INSTALLED_PKG_MK)
|
DEVEL_TARGETS += install_MAKE $(INSTALLED_PKG_MK)
|
||||||
|
|
|
||||||
|
|
@ -128,7 +128,7 @@ pkg-update: pkgupdate.dist
|
||||||
pkg-upload-local: pkg-upload-local.dist
|
pkg-upload-local: pkg-upload-local.dist
|
||||||
|
|
||||||
clean.rpm:
|
clean.rpm:
|
||||||
$(RM) -rf $(DIST_DIR) *.dist make/.cache-project.mk
|
$(RM) -rf $(DIST_DIR) *.dist
|
||||||
|
|
||||||
pkg-build.dist: $(VERSION_FILE)
|
pkg-build.dist: $(VERSION_FILE)
|
||||||
$(PKG_SH) build $(PKG_SH_BUILD_OPTS)
|
$(PKG_SH) build $(PKG_SH_BUILD_OPTS)
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,16 @@
|
||||||
ifndef PLATFORM_MK_INCLUDED
|
ifndef PLATFORM_MK_INCLUDED
|
||||||
PLATFORM_MK_INCLUDED = true
|
PLATFORM_MK_INCLUDED = true
|
||||||
|
|
||||||
|
CACHE_PROJECT_MK ?= $(TOPDIR)/.cache-project.mk
|
||||||
|
CACHE_PROJECTS_MK := $(JWBDIR)/.cache-projects.mk
|
||||||
|
JW_PKG_NO_CACHE ?= false
|
||||||
|
|
||||||
|
ifneq ($(filter clean distclean,$(MAKECMDGOALS)),)
|
||||||
|
ifeq ($(TOPDIR),.)
|
||||||
|
JW_PKG_NO_CACHE = true
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
# "-include" tries search path, we don't want that
|
# "-include" tries search path, we don't want that
|
||||||
define try_include
|
define try_include
|
||||||
ifneq ($$(wildcard $(1)),)
|
ifneq ($$(wildcard $(1)),)
|
||||||
|
|
@ -10,10 +20,11 @@ define try_include
|
||||||
endif
|
endif
|
||||||
endef
|
endef
|
||||||
|
|
||||||
CACHE_PROJECTS_MK := $(JWBDIR)/cache-projects.mk
|
ifneq ($(JW_PKG_NO_CACHE),true)
|
||||||
|
$(eval $(call try_include,$(CACHE_PROJECT_MK)))
|
||||||
$(eval $(call try_include,$(TOPDIR)/make/.cache-project.mk))
|
|
||||||
$(eval $(call try_include,$(CACHE_PROJECTS_MK)))
|
$(eval $(call try_include,$(CACHE_PROJECTS_MK)))
|
||||||
|
endif
|
||||||
|
|
||||||
$(eval $(call try_include,$(JWBDIR)/make/pre-local.mk))
|
$(eval $(call try_include,$(JWBDIR)/make/pre-local.mk))
|
||||||
$(eval $(call try_include,$(TOPDIR)/make/pre-local.mk))
|
$(eval $(call try_include,$(TOPDIR)/make/pre-local.mk))
|
||||||
$(eval $(call try_include,pre-local.mk))
|
$(eval $(call try_include,pre-local.mk))
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,6 @@ endif
|
||||||
|
|
||||||
ifneq ($(PY_DEFS_MK_INCLUDED),true)
|
ifneq ($(PY_DEFS_MK_INCLUDED),true)
|
||||||
all:
|
all:
|
||||||
clean: pyc.clean
|
|
||||||
|
|
||||||
echo-py:
|
echo-py:
|
||||||
@echo 'PYTHON = $(PYTHON)'
|
@echo 'PYTHON = $(PYTHON)'
|
||||||
|
|
@ -86,8 +85,6 @@ echo-py:
|
||||||
@echo 'PY_INSTALL_MOD = $(PY_INSTALL_MOD)'
|
@echo 'PY_INSTALL_MOD = $(PY_INSTALL_MOD)'
|
||||||
@echo 'PY_INSTALL_SUB_MOD = $(PY_INSTALL_SUB_MOD)'
|
@echo 'PY_INSTALL_SUB_MOD = $(PY_INSTALL_SUB_MOD)'
|
||||||
|
|
||||||
pyc.clean:
|
|
||||||
$(RM) -rf $(wildcard *.pyc) __pycache__
|
|
||||||
libpath: py-libpath
|
libpath: py-libpath
|
||||||
py-libpath:
|
py-libpath:
|
||||||
@echo 'export PYTHONPATH = $(PYTHONPATH)'
|
@echo 'export PYTHONPATH = $(PYTHONPATH)'
|
||||||
|
|
|
||||||
|
|
@ -5,3 +5,9 @@ ifeq ($(origin JW_PKG_PYTHON_PATH),undefined)
|
||||||
endif
|
endif
|
||||||
export PYTHONPATH := $(subst $(space),:,$(JW_PKG_PYTHON_PATH))
|
export PYTHONPATH := $(subst $(space),:,$(JW_PKG_PYTHON_PATH))
|
||||||
export MYPYPATH := $(PYTHONPATH)
|
export MYPYPATH := $(PYTHONPATH)
|
||||||
|
|
||||||
|
all:
|
||||||
|
|
||||||
|
clean: py-tools.clean
|
||||||
|
py-tools.clean:
|
||||||
|
$(RM) -rf $(wildcard *.pyc) __pycache__ .mypy_cache .ruff_cache .pytest_cache
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,6 @@ run.sh:
|
||||||
echo -e "#!/bin/bash\n\nexport PYTHONPATH=$(PYTHONPATH)\nset -x\nexec $(PYTHON) $(EXE)" '"$$@"' > $@.tmp
|
echo -e "#!/bin/bash\n\nexport PYTHONPATH=$(PYTHONPATH)\nset -x\nexec $(PYTHON) $(EXE)" '"$$@"' > $@.tmp
|
||||||
chmod 755 $@.tmp
|
chmod 755 $@.tmp
|
||||||
mv $@.tmp $@
|
mv $@.tmp $@
|
||||||
clean-run-sh:
|
clean.py-run:
|
||||||
rm -f run.sh
|
rm -rf run.sh
|
||||||
clean: clean-run-sh
|
clean: clean.py-run
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,6 @@ $(PY_CONFTEST):
|
||||||
$(PY_CONFTEST_CMD) > $@.tmp
|
$(PY_CONFTEST_CMD) > $@.tmp
|
||||||
mv $@.tmp $@
|
mv $@.tmp $@
|
||||||
|
|
||||||
clean: clean.generated
|
clean: clean.py-test
|
||||||
clean.generated:
|
clean.py-test:
|
||||||
rm -f $(PY_GENERATED)
|
rm -rf $(PY_GENERATED) .pytest-cache
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ MYPY_CONFIG_PATH = $(shell $(JW_PKG_PY) --topdir-format relative pro
|
||||||
MYPY_PATH_DIRECTIVE = mypy_path = "$(MYPY_CONFIG_PATH)"
|
MYPY_PATH_DIRECTIVE = mypy_path = "$(MYPY_CONFIG_PATH)"
|
||||||
|
|
||||||
ifndef PY_CHECK_ROOTS
|
ifndef PY_CHECK_ROOTS
|
||||||
PY_CHECK_ROOTS += $(wildcard $(TOPDIR)/src $(TOPDIR)/tools)
|
PY_CHECK_ROOTS = $(wildcard $(TOPDIR)/src $(TOPDIR)/tools)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifndef PY_CHECK_RUFF
|
ifndef PY_CHECK_RUFF
|
||||||
|
|
@ -72,9 +72,10 @@ ifneq ($(PY_CHECK_RUFF),)
|
||||||
$(PY_CHECK_RUFF) check --select TC,FA --fix --unsafe-fixes $(PY_CHECK_ROOTS)
|
$(PY_CHECK_RUFF) check --select TC,FA --fix --unsafe-fixes $(PY_CHECK_ROOTS)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
clean: clean.topdir
|
||||||
clean.topdir: clean.py-check
|
clean.topdir: clean.py-check
|
||||||
clean.py-check:
|
clean.py-check:
|
||||||
rm -rf .mypy_cache
|
rm -rf .mypy_cache .ruff_cache .pytest_cache
|
||||||
|
|
||||||
pyproject.toml:
|
pyproject.toml:
|
||||||
$(PYTHON) $(JWB_SCRIPT_DIR)/jw-pkg.py -p $(PROJECTS_DIR) -t $(TOPDIR) --topdir-format unaltered projects create-file --format tmpl \
|
$(PYTHON) $(JWB_SCRIPT_DIR)/jw-pkg.py -p $(PROJECTS_DIR) -t $(TOPDIR) --topdir-format unaltered projects create-file --format tmpl \
|
||||||
|
|
|
||||||
|
|
@ -104,6 +104,7 @@ include $(JWBDIR)/make/rules.mk
|
||||||
include $(JWBDIR)/make/doc-rules.mk
|
include $(JWBDIR)/make/doc-rules.mk
|
||||||
include $(JWBDIR)/make/list-files.mk
|
include $(JWBDIR)/make/list-files.mk
|
||||||
include $(JWBDIR)/make/projects+project.mk
|
include $(JWBDIR)/make/projects+project.mk
|
||||||
|
include $(JWBDIR)/make/cache.mk
|
||||||
|
|
||||||
STREAMLINE_PROJECT ?= bash $(JWB_SCRIPT_DIR)/streamline-project.sh
|
STREAMLINE_PROJECT ?= bash $(JWB_SCRIPT_DIR)/streamline-project.sh
|
||||||
|
|
||||||
|
|
@ -115,7 +116,7 @@ TD_COPY_FILES ?= $(filter-out Makefile,$(notdir $(wildcard $(TD_CO
|
||||||
# -- Internal variables, define JW_PKG_TOPDIR_COPY_PATH if you want to
|
# -- Internal variables, define JW_PKG_TOPDIR_COPY_PATH if you want to
|
||||||
# add more files appended to the target files
|
# add more files appended to the target files
|
||||||
TD_COPY_SRC_PATH = $(subst :,$(space),$(JW_PKG_TOPDIR_COPY_PATH))
|
TD_COPY_SRC_PATH = $(subst :,$(space),$(JW_PKG_TOPDIR_COPY_PATH))
|
||||||
TD_GENERATE_FILES += $(TD_COPY_FILES)
|
TD_GENERATE_FILES += $(TD_COPY_FILES) $(CACHE_PROJECT_MK)
|
||||||
|
|
||||||
test: all
|
test: all
|
||||||
format: topdir
|
format: topdir
|
||||||
|
|
|
||||||
|
|
@ -103,8 +103,7 @@ cat_gitignore()
|
||||||
*.done
|
*.done
|
||||||
*.dist
|
*.dist
|
||||||
*.dep.mk
|
*.dep.mk
|
||||||
.cache.mk
|
.cache-project.mk
|
||||||
make/.cache-project.mk
|
|
||||||
*.o
|
*.o
|
||||||
*.so.*
|
*.so.*
|
||||||
*.so
|
*.so
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue