diff --git a/make/Makefile b/make/Makefile index 88b31d4a..bebdb8fc 100644 --- a/make/Makefile +++ b/make/Makefile @@ -5,22 +5,33 @@ TOPDIR = .. +CACHED_FILES := defs.mk projects.mk platform.mk Makefile +#CACHED_VARS = $(shell sed '/^[ \t]*\([A-Z_]\+\) *\(.=\).*$$.shell/!d; s/ *.=.*//' $(CACHED_FILES)) +CACHED_VARS := WHICH BROWSER SED RM PWD ID CUT TR AWK GETENT XARGS FIND PRINTF OS_TUPLE OS_NAME_VERSION OS_NAME CAT BIN_INSTALL SUDO +#CACHED_VARS += TARGET_ARCH RPM_ARCH +CACHED_VARS += TARGET_ARCH +#CACHED_VARS += DEVELOPMENT + include $(TOPDIR)/make/proj.mk include $(MODDIR)/make/make.mk ifneq ($(MAKECMDGOALS),install-links) -ifneq ($(MAKECMDGOALS),do-install-links) -include $(MODDIR)/make/dirs.mk -endif + ifneq ($(MAKECMDGOALS),do-install-links) + include $(MODDIR)/make/dirs.mk + endif endif include $(MODDIR)/make/dev-utils.mk +#include $(MODDIR)/make/cache.mk + +all: ifeq ($(TARGET),mingw) install: $(INSTALL_MAKEDIR)/winres.rc.tmpl endif +grep-vars: + @sed '/^ *[A-Z]/!d; s/^[ ]*//g; s/[=+?:].*//g; s/[ ]*//g' *.mk | sort -u + $(INSTALL_MAKEDIR)/%.tmpl: %.tmpl $(TOPDIR)/dir_install_MAKE.done $(INSTALL) -o $(MAKEOWNER) -g $(MAKEGROUP) -m $(MAKEMODE) $< $@A -grep-vars: - @sed '/^ *[A-Z]/!d; s/^[ ]*//g; s/[=+?:].*//g; s/[ ]*//g' *.mk | sort -u diff --git a/make/cache.mk b/make/cache.mk new file mode 100644 index 00000000..8070bb77 --- /dev/null +++ b/make/cache.mk @@ -0,0 +1,22 @@ +# ----- define these variables +# CACHED_FILES = $(TOPDIR)/VERSION +# CACHED_VARS = VERSION + +CACHE_FILE_MK ?= .cache.mk + +# if not checked against MAKECMDGOALS, a standard rule kicks in from rules.mk, +# and $(CACHE_FILE_MK) is remade with the clean target +ifeq ($(findstring clean,$(MAKECMDGOALS)),) +all: $(CACHE_FILE_MK) +$(CACHE_FILE_MK): $(CACHED_FILES) $(MODDIR)/make/cache.mk +ifeq ($(wildcard $(CACHE_FILE_MK)),) + @echo $(foreach v,$(CACHED_VARS),$v := $(value $(v))EOL) | $(SED) 's/EOL */\n/g;' | $(GREP) . | tee $@.tmp + mv $@.tmp $@ +else + rm $@ + make $@ +endif +endif +clean: clean-cache +clean-cache: + $(RM) -f $(CACHE_FILE_MK) diff --git a/make/defs.mk b/make/defs.mk index 74e36680..4525b3ef 100644 --- a/make/defs.mk +++ b/make/defs.mk @@ -7,51 +7,85 @@ JW_BUILD_DEF_MK_INCLUDED = true MAKEFLAGS += -r +-include $(MODDIR)/make/.cache.mk +-include $(TOPDIR)/make/.cache.mk include $(MODDIR)/make/platform.mk include $(MODDIR)/make/projects.mk ifeq ($(MAKE_BENCHMARK),true) - SHELL := /bin/bash $(MOD_SCRIPT_DIR)/timed-make-shell.sh + export SHELL := /bin/bash $(MOD_SCRIPT_DIR)/timed-make-shell.sh +else + export SHELL := /bin/bash endif # ----- pre-local.mk -ifneq ($(wildcard $(MODDIR)/make/pre-local.mk),) - include $(MODDIR)/make/pre-local.mk -endif - -ifneq ($(wildcard $(TOPDIR)/make/pre-local.mk),) - include $(TOPDIR)/make/pre-local.mk -endif - -ifneq ($(wildcard pre-local.mk),) - include pre-local.mk -endif +-include $(MODDIR)/make/pre-local.mk +-include $(TOPDIR)/make/pre-local.mk +-include pre-local.mk # ----- executables -WHICH := $(firstword $(wildcard /usr/bin/which) $(shell which which)) -SED := $(shell $(WHICH) sed) -CAT := /bin/cat -#ifeq ($(SHELL),) - export SHELL := /bin/bash +ifndef WHICH + WHICH := $(firstword $(wildcard /usr/bin/which) $(shell which which)) +endif +ifndef GREP + GREP := $(shell $(WHICH) grep) +endif +ifndef SED + SED := $(shell $(WHICH) sed) +endif + CAT := $(shell $(WHICH) cat) +ifndef BROWSER + BROWSER := $(shell $(WHICH) xdg-open) +endif +ifeq ($(origin RM),default) + RM := $(shell $(WHICH) rm) +endif +ifndef AR + AR = $(shell $(WHICH) ar) +endif +#ifndef PWD + PWD := $(shell $(WHICH) pwd) #endif -BROWSER ?= xdg-open -RM := $(shell $(WHICH) rm) -AR = /usr/bin/ar -PWD := $(shell $(WHICH) pwd) -CWD := $(shell $(PWD)) -BIN_INSTALL := /usr/bin/install -SUDO ?= /usr/bin/sudo -MY_SHELL := /bin/bash -GET_OS_SH := $(SHELL) $(MOD_SCRIPT_DIR)/get-os.sh -ID := $(shell $(WHICH) id) -CUT := $(shell $(WHICH) cut) -TR := $(shell $(WHICH) tr) -AWK := $(shell $(WHICH) awk) -GETENT := $(shell $(WHICH) getent) -XARGS := $(shell $(WHICH) xargs) -FIND := $(shell $(WHICH) find) -PRINTF := $(shell $(WHICH) printf) +ifndef CWD + CWD := $(shell $(PWD)) +endif +ifndef BIN_INSTALL + BIN_INSTALL := $(shell $(WHICH) install) +endif +ifndef SUDO + SUDO := $(shell $(WHICH) sudo) +endif +ifndef MY_SHELL + MY_SHELL := /bin/bash +endif +ifndef GET_OS_SH + GET_OS_SH := $(SHELL) $(MOD_SCRIPT_DIR)/get-os.sh +endif +ifndef ID + ID := $(shell $(WHICH) id) +endif +ifndef CUT + CUT := $(shell $(WHICH) cut) +endif +ifndef TR + TR := $(shell $(WHICH) tr) +endif +ifndef AWK + AWK := $(shell $(WHICH) awk) +endif +ifndef GETENT + GETENT := $(shell $(WHICH) getent) +endif +ifndef XARGS + XARGS := $(shell $(WHICH) xargs) +endif +ifndef FIND + FIND := $(shell $(WHICH) find) +endif +ifndef PRINTF + PRINTF := $(shell $(WHICH) printf) +endif # makefile helpers FIND_SUBDIRS := $(filter-out . .. nomake CVS $(IGNORE_SUBDIRS),\ @@ -147,27 +181,27 @@ ifeq ($(OS_TUPLE),) endif ifneq ($(TARGET_TUPLE),) - TARGET_TUPLE_WORDS ?= $(subst -, ,$(TARGET_TUPLE)) - TARGET_ARCH ?= $(word 1,$(TARGET_TUPLE_WORDS)) - TARGET_VENDOR ?= $(word 2,$(TARGET_TUPLE_WORDS)) - TARGET_OS ?= $(word 3,$(TARGET_TUPLE_WORDS)) - TARGET_ABI ?= $(word 4,$(TARGET_TUPLE_WORDS)) - TARGET_TRIPLET ?= $(TARGET_ARCH)-$(TARGET_OS)-$(TARGET_ABI) + TARGET_TUPLE_WORDS := $(subst -, ,$(TARGET_TUPLE)) + TARGET_ARCH := $(word 1,$(TARGET_TUPLE_WORDS)) + TARGET_VENDOR := $(word 2,$(TARGET_TUPLE_WORDS)) + TARGET_OS := $(word 3,$(TARGET_TUPLE_WORDS)) + TARGET_ABI := $(word 4,$(TARGET_TUPLE_WORDS)) + TARGET_TRIPLET := $(TARGET_ARCH)-$(TARGET_OS)-$(TARGET_ABI) else ifneq ($(TARGET_TRIPLET),) - TARGET_TRIPLET_WORDS ?= $(subst -, ,$(TARGET_TRIPLET)) - TARGET_ARCH ?= $(word 1,$(TARGET_TRIPLET_WORDS)) - TARGET_VENDOR ?= unknown - TARGET_OS ?= $(word 2,$(TARGET_TRIPLET_WORDS)) - TARGET_ABI ?= $(word 3,$(TARGET_TRIPLET_WORDS)) - TARGET_TUPLE ?= $(TARGET_ARCH)-$(TARGET_VENDOR)-$(TARGET_OS)-$(TARGET_ABI) + TARGET_TRIPLET_WORDS := $(subst -, ,$(TARGET_TRIPLET)) + TARGET_ARCH := $(word 1,$(TARGET_TRIPLET_WORDS)) + TARGET_VENDOR := unknown + TARGET_OS := $(word 2,$(TARGET_TRIPLET_WORDS)) + TARGET_ABI := $(word 3,$(TARGET_TRIPLET_WORDS)) + TARGET_TUPLE := $(TARGET_ARCH)-$(TARGET_VENDOR)-$(TARGET_OS)-$(TARGET_ABI) else - TARGET_TUPLE ?= $(OS_TUPLE) - TARGET_TUPLE_WORDS ?= $(subst -, ,$(TARGET_TUPLE)) - TARGET_ARCH ?= $(word 1,$(TARGET_TUPLE_WORDS)) - TARGET_VENDOR ?= $(word 2,$(TARGET_TUPLE_WORDS)) - TARGET_OS ?= $(word 3,$(TARGET_TUPLE_WORDS)) - TARGET_ABI ?= $(word 4,$(TARGET_TUPLE_WORDS)) - TARGET_TRIPLET ?= $(TARGET_ARCH)-$(TARGET_OS)-$(TARGET_ABI) + TARGET_TUPLE := $(OS_TUPLE) + TARGET_TUPLE_WORDS := $(subst -, ,$(TARGET_TUPLE)) + TARGET_ARCH := $(word 1,$(TARGET_TUPLE_WORDS)) + TARGET_VENDOR := $(word 2,$(TARGET_TUPLE_WORDS)) + TARGET_OS := $(word 3,$(TARGET_TUPLE_WORDS)) + TARGET_ABI := $(word 4,$(TARGET_TUPLE_WORDS)) + TARGET_TRIPLET := $(TARGET_ARCH)-$(TARGET_OS)-$(TARGET_ABI) endif #ifeq ($(TARGET_TUPLE),) @@ -246,12 +280,12 @@ ifeq ($(PKG_FORMAT),debian) RPM_SUFFIX ?= deb else RPM ?= /bin/rpm - RPM_ARCH ?= $(ARCH) + RPM_ARCH ?= $(TARGET_ARCH) RPM_SUFFIX ?= rpm endif ifeq ($(PKG_FORMAT),debian) -export INCLUDE_REV_IN_VERSIONS = true + export INCLUDE_REV_IN_VERSIONS = true endif PROJECT_DESCR_FILE ?= $(wildcard $(TOPDIR)/make/project.conf) @@ -262,9 +296,9 @@ PROJECT_SUMMARY ?= $(PROJECT_DESCR) CUSTOMER ?= jannet ifneq ($(PROJECT_DESCR_FILE),) -ifeq ($(shell grep "^ *subpackages *=.*devel" $(PROJECT_DESCR_FILE)),) -CREATE_DEVEL = false -endif + ifeq ($(shell $(GREP) "^ *subpackages *=.*devel" $(PROJECT_DESCR_FILE)),) + CREATE_DEVEL = false + endif endif ifeq ($(VERSION),) @@ -410,34 +444,6 @@ INSTALL_CGIDIR = $(CGI_DIR) BUILD_CGI += $(addprefix $(BUILD_CGIDIR)/,$(EXE_CGI)) INSTALLED_CGI += $(addprefix $(INSTALL_CGIDIR)/,$(EXE_CGI)) -# -- HTML -INSTALLATION_FILE_TYPES += HTML -BUILD_HTMLDIR = $(TOPDIR)/htdocs -LOCAL_HTML += $(filter-out $(DONT_INSTALL),$(wildcard *.html *.css *.php *.js) $(FONTS) $(IMAGES)) -ifeq ($(HTML_SUBDIR),) - HTML_SUBDIR := $(shell $(PWD) | $(SED) '/.*\/htdocs\(\/\|$$\)/!d; s%.*/htdocs\(/\|$$\)%%') -endif -ifeq ($(HTML_SUBDIR),) -INSTALL_HTMLDIR ?= $(PROJECT_HTMLDIR) -else -INSTALL_HTMLDIR ?= $(PROJECT_HTMLDIR)/$(HTML_SUBDIR) -endif -INSTALLED_HTML += $(addprefix $(INSTALL_HTMLDIR)/,$(LOCAL_HTML)) - -# -- TMPL -INSTALLATION_FILE_TYPES += TMPL -BUILD_TMPLDIR = $(TOPDIR)/tmpl -LOCAL_TMPL += $(filter-out $(DONT_INSTALL),$(wildcard *.tmpl)) -ifndef TMPL_SUBDIR - TMPL_SUBDIR := $(shell $(PWD) | $(SED) '/.*\/tmpl\(\/\|$$\)/!d; s%.*/tmpl\(/\|$$\)%%') -endif -ifeq ($(TMPL_SUBDIR),) -INSTALL_TMPLDIR = $(PROJECT_TMPLDIR) -else -INSTALL_TMPLDIR = $(PROJECT_TMPLDIR)/$(TMPL_SUBDIR) -endif -INSTALLED_TMPL += $(addprefix $(INSTALL_TMPLDIR)/,$(LOCAL_TMPL)) - # -- SYSTEMD INSTALLATION_FILE_TYPES += SYSTEMD BUILD_SYSTEMDDIR = $(TOPDIR)/bin/systemd @@ -562,17 +568,9 @@ INSTALL_DIR ?= $(INSTALL) # ----- local.mk -ifneq ($(wildcard $(MODDIR)/make/local.mk),) -include $(MODDIR)/make/local.mk -endif - -ifneq ($(wildcard $(TOPDIR)/make/local.mk),) -include $(TOPDIR)/make/local.mk -endif - -ifneq ($(wildcard local.mk),) -include local.mk -endif +-include $(MODDIR)/make/local.mk +-include $(TOPDIR)/make/local.mk +-include local.mk BTOOLS_DIR ?= $(call proj_dir, dspider-btools) #DSPCD_DIR ?= $(call proj_dir, dspcd) @@ -598,4 +596,4 @@ doc-module: doc-project: $(BROWSER) $(JANWARE_URL_DOC_PROJECT) -endif +endif # ifndef JW_BUILD_DEF_MK_INCLUDED diff --git a/make/htdocs.mk b/make/htdocs.mk index 94912184..54f4644f 100644 --- a/make/htdocs.mk +++ b/make/htdocs.mk @@ -3,6 +3,22 @@ LESS_GENERATED_CSS ?= $(patsubst %.less,%.css,$(LESS_SRC)) LESS_CPY ?= lesscpy include $(MODDIR)/make/defs.mk + +# -- HTML +INSTALLATION_FILE_TYPES += HTML +BUILD_HTMLDIR = $(TOPDIR)/htdocs +LOCAL_HTML += $(filter-out $(DONT_INSTALL),$(wildcard *.html *.css *.php *.js) $(FONTS) $(IMAGES)) +ifeq ($(HTML_SUBDIR),) + HTML_SUBDIR := $(shell $(PWD) | $(SED) '/.*\/htdocs\(\/\|$$\)/!d; s%.*/htdocs\(/\|$$\)%%') +endif +ifeq ($(HTML_SUBDIR),) + INSTALL_HTMLDIR ?= $(PROJECT_HTMLDIR) +else + INSTALL_HTMLDIR ?= $(PROJECT_HTMLDIR)/$(HTML_SUBDIR) +endif +INSTALLED_HTML += $(addprefix $(INSTALL_HTMLDIR)/,$(LOCAL_HTML)) + + include $(MODDIR)/make/js.mk include $(MODDIR)/make/rules.mk include $(MODDIR)/make/dev-utils.mk diff --git a/make/make.mk b/make/make.mk index c574df3b..f5097359 100644 --- a/make/make.mk +++ b/make/make.mk @@ -5,6 +5,11 @@ include $(MODDIR)/make/defs.mk +CACHED_FILES ?= $(VERSION_FILE) +CACHED_VARS ?= VERSION HEX_VERSION PROJECT + +include $(MODDIR)/make/cache.mk + ifneq ($(CREATE_DEVEL),false) MKFILES += $(wildcard project.conf) DEVEL_TARGETS += install_MAKE $(INSTALLED_PKG_MK) install_PKG_CONFIG diff --git a/make/projects.mk b/make/projects.mk index bdd20cb3..afeb36e5 100644 --- a/make/projects.mk +++ b/make/projects.mk @@ -1,7 +1,7 @@ # == Variables for inter-project-communication # -- What do I know about myself? -VERSION_FILE ?= $(firstword $(wildcard VERSION) $(TOPDIR)/VERSION) +VERSION_FILE := $(firstword $(wildcard VERSION) $(TOPDIR)/VERSION) ifndef DEVELOPMENT ifeq ($(wildcard $(VERSION_FILE)),) DEVELOPMENT := true @@ -17,13 +17,13 @@ ifeq ($(DEVELOPMENT),true) else PRJS_DIR ?= /opt endif -MOD_SCRIPT_DIR ?= $(firstword $(wildcard $(MODDIR)/scripts $(MODDIR)/bin)) +MOD_SCRIPT_DIR := $(firstword $(wildcard $(MODDIR)/scripts $(MODDIR)/bin)) # -- Query the build system about other projects: PYTHON ?= /usr/bin/python2 ifneq ($(TOPDIR),) -proj_query_cmd = $(PYTHON) $(MOD_SCRIPT_DIR)/projects.py -p $(PRJS_DIR) -t $(TOPDIR) $(PROJECTS_PY_EXTRA_ARGS) -proj_query = $(shell $(proj_query_cmd) $(1)) -proj_dir = $(call proj_query,proj-dir $(1)) -htdocs_dir = $(call proj_query,htdocs-dir $(1)) + proj_query_cmd = $(PYTHON) $(MOD_SCRIPT_DIR)/projects.py -p $(PRJS_DIR) -t $(TOPDIR) $(PROJECTS_PY_EXTRA_ARGS) + proj_query = $(shell $(proj_query_cmd) $(1)) + proj_dir = $(call proj_query,proj-dir $(1)) + htdocs_dir = $(call proj_query,htdocs-dir $(1)) endif diff --git a/make/tmpl.mk b/make/tmpl.mk index f065d096..94714905 100644 --- a/make/tmpl.mk +++ b/make/tmpl.mk @@ -1,4 +1,19 @@ include $(MODDIR)/make/defs.mk + +# -- TMPL +INSTALLATION_FILE_TYPES += TMPL +BUILD_TMPLDIR = $(TOPDIR)/tmpl +LOCAL_TMPL += $(filter-out $(DONT_INSTALL),$(wildcard *.tmpl)) +ifndef TMPL_SUBDIR + TMPL_SUBDIR := $(shell $(PWD) | $(SED) '/.*\/tmpl\(\/\|$$\)/!d; s%.*/tmpl\(/\|$$\)%%') +endif +ifeq ($(TMPL_SUBDIR),) + INSTALL_TMPLDIR = $(PROJECT_TMPLDIR) +else + INSTALL_TMPLDIR = $(PROJECT_TMPLDIR)/$(TMPL_SUBDIR) +endif +INSTALLED_TMPL += $(addprefix $(INSTALL_TMPLDIR)/,$(LOCAL_TMPL)) + include $(MODDIR)/make/rules.mk all: