mirror of
ssh://git.janware.com/srv/git/janware/proj/jw-pkg
synced 2026-01-15 12:03:31 +01:00
defs.mk: Reduce multiple invocations of external commands
Many external commands are called unnecessarily often, because either there's a GNU Make internal alternative, or because they are invoked from within a recursively defined variable. This patch adresses that and lessens make invocation time per directory by factor 3. Signed-off-by: Jan Lindemann <jan@janware.com>
This commit is contained in:
parent
e16b4c6d82
commit
cec620c00e
1 changed files with 66 additions and 43 deletions
109
make/defs.mk
109
make/defs.mk
|
|
@ -11,7 +11,7 @@ include $(MODDIR)/make/platform.mk
|
||||||
include $(MODDIR)/make/projects.mk
|
include $(MODDIR)/make/projects.mk
|
||||||
|
|
||||||
ifeq ($(MAKE_BENCHMARK),true)
|
ifeq ($(MAKE_BENCHMARK),true)
|
||||||
SHELL = /bin/bash $(MOD_SCRIPT_DIR)/timed-make-shell.sh
|
SHELL := /bin/bash $(MOD_SCRIPT_DIR)/timed-make-shell.sh
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# ----- pre-local.mk
|
# ----- pre-local.mk
|
||||||
|
|
@ -29,17 +29,31 @@ ifneq ($(wildcard pre-local.mk),)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# ----- executables
|
# ----- executables
|
||||||
SED := $(shell which sed)
|
WHICH := $(firstword $(wildcard /usr/bin/which) $(shell which which))
|
||||||
|
SED := $(shell $(WHICH) sed)
|
||||||
CAT := /bin/cat
|
CAT := /bin/cat
|
||||||
SHELL ?= /bin/bash
|
#ifeq ($(SHELL),)
|
||||||
|
export SHELL := /bin/bash
|
||||||
|
#endif
|
||||||
BROWSER ?= xdg-open
|
BROWSER ?= xdg-open
|
||||||
RM := $(shell which rm)
|
RM := $(shell $(WHICH) rm)
|
||||||
AR = /usr/bin/ar
|
AR = /usr/bin/ar
|
||||||
PWD := $(shell which pwd)
|
PWD := $(shell $(WHICH) pwd)
|
||||||
CWD := $(shell $(PWD))
|
CWD := $(shell $(PWD))
|
||||||
BIN_INSTALL := /usr/bin/install
|
BIN_INSTALL := /usr/bin/install
|
||||||
SUDO ?= /usr/bin/sudo
|
SUDO ?= /usr/bin/sudo
|
||||||
GET_OS_SH ?= /bin/bash $(MOD_SCRIPT_DIR)/get-os.sh
|
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)
|
||||||
|
|
||||||
|
# ----- custom functions
|
||||||
|
reverse = $(if $(wordlist 2,2,$(1)),$(call reverse,$(wordlist 2,$(words $(1)),$(1))) $(firstword $(1)),$(1))
|
||||||
|
|
||||||
# ----- standard variables
|
# ----- standard variables
|
||||||
ifneq ($(wildcard $(TOPDIR)/.git),)
|
ifneq ($(wildcard $(TOPDIR)/.git),)
|
||||||
|
|
@ -56,7 +70,9 @@ endif
|
||||||
|
|
||||||
# ----- host and target variables
|
# ----- host and target variables
|
||||||
|
|
||||||
OS_TUPLE ?= $(shell $(GET_OS_SH) tuple)
|
ifeq ($(OS_TUPLE),)
|
||||||
|
OS_TUPLE := $(shell $(GET_OS_SH) tuple)
|
||||||
|
endif
|
||||||
|
|
||||||
ifneq ($(TARGET_TUPLE),)
|
ifneq ($(TARGET_TUPLE),)
|
||||||
TARGET_TUPLE_WORDS ?= $(subst -, ,$(TARGET_TUPLE))
|
TARGET_TUPLE_WORDS ?= $(subst -, ,$(TARGET_TUPLE))
|
||||||
|
|
@ -82,9 +98,9 @@ else
|
||||||
TARGET_TRIPLET ?= $(TARGET_ARCH)-$(TARGET_OS)-$(TARGET_ABI)
|
TARGET_TRIPLET ?= $(TARGET_ARCH)-$(TARGET_OS)-$(TARGET_ABI)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(TARGET_TUPLE),)
|
#ifeq ($(TARGET_TUPLE),)
|
||||||
$(error TARGET_TUPLE is undefined)
|
# $(error TARGET_TUPLE is undefined)
|
||||||
endif
|
#endif
|
||||||
|
|
||||||
# - support legacy jw-build target variables
|
# - support legacy jw-build target variables
|
||||||
ifeq ($(TARGET_ABI),mingw32)
|
ifeq ($(TARGET_ABI),mingw32)
|
||||||
|
|
@ -95,8 +111,13 @@ else
|
||||||
TARGET ?= $(TARGET_OS)
|
TARGET ?= $(TARGET_OS)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
OS_NAME_VERSION ?= $(shell $(GET_OS_SH))
|
ifeq ($(OS_NAME_VERSION),)
|
||||||
OS_NAME ?= $(shell $(GET_OS_SH) name)
|
OS_NAME_VERSION := $(shell $(GET_OS_SH))
|
||||||
|
endif
|
||||||
|
|
||||||
|
ifeq ($(OS_NAME),)
|
||||||
|
OS_NAME := $(shell $(GET_OS_SH) name)
|
||||||
|
endif
|
||||||
ARCH ?= $(TARGET_ARCH)
|
ARCH ?= $(TARGET_ARCH)
|
||||||
|
|
||||||
ARCH_32 = i586
|
ARCH_32 = i586
|
||||||
|
|
@ -149,7 +170,7 @@ endif
|
||||||
|
|
||||||
ifeq ($(PKG_FORMAT),debian)
|
ifeq ($(PKG_FORMAT),debian)
|
||||||
RPM ?= /bin/bash $(MOD_SCRIPT_DIR)/dpm.sh
|
RPM ?= /bin/bash $(MOD_SCRIPT_DIR)/dpm.sh
|
||||||
RPM_ARCH ?= $(shell dpkg --print-architecture)
|
RPM_ARCH := $(shell dpkg --print-architecture)
|
||||||
RPM_SUFFIX ?= deb
|
RPM_SUFFIX ?= deb
|
||||||
else
|
else
|
||||||
RPM ?= /bin/rpm
|
RPM ?= /bin/rpm
|
||||||
|
|
@ -163,7 +184,7 @@ endif
|
||||||
|
|
||||||
PROJECT_DESCR_FILE ?= $(wildcard $(TOPDIR)/make/project.conf)
|
PROJECT_DESCR_FILE ?= $(wildcard $(TOPDIR)/make/project.conf)
|
||||||
PROJECT_SHORT_NAME ?= $(PROJECT)
|
PROJECT_SHORT_NAME ?= $(PROJECT)
|
||||||
PROJECT_CAPNAME = $(shell echo $(PROJECT) | tr [a-z] [A-Z] | $(SED) 's/-/_/g')
|
PROJECT_CAPNAME := $(shell echo $(PROJECT) | tr [a-z] [A-Z] | $(SED) 's/-/_/g')
|
||||||
PROJECT_DESCR ?= $(call proj_query, summary $(PROJECT))
|
PROJECT_DESCR ?= $(call proj_query, summary $(PROJECT))
|
||||||
PROJECT_SUMMARY ?= $(PROJECT_DESCR)
|
PROJECT_SUMMARY ?= $(PROJECT_DESCR)
|
||||||
CUSTOMER ?= jannet
|
CUSTOMER ?= jannet
|
||||||
|
|
@ -174,25 +195,28 @@ CREATE_DEVEL = false
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifneq ($(wildcard $(VERSION_FILE)),)
|
ifeq ($(VERSION),)
|
||||||
VERSION ?= $(shell $(CAT) $(VERSION_FILE))
|
ifneq ($(wildcard $(VERSION_FILE)),)
|
||||||
|
VERSION := $(shell $(CAT) $(VERSION_FILE))
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
DIST_VERSION ?= $(patsubst %-dev,%,$(VERSION))
|
DIST_VERSION ?= $(patsubst %-dev,%,$(VERSION))
|
||||||
HEX_VERSION = $(shell echo $(DIST_VERSION) | \
|
HEX_VERSION := $(shell echo $(DIST_VERSION) | \
|
||||||
$(SED) 's/-dev//; s/pre[^\.]*//; s/F[^\.]//; s/[\.-]/ /g' | xargs printf "0x%02x%02x%02x%02x")
|
$(SED) 's/-dev//; s/pre[^\.]*//; s/F[^\.]//; s/[\.-]/ /g' | $(XARGS) printf "0x%02x%02x%02x%02x")
|
||||||
BINARY_VERSION = $(shell echo $(PROJECT)_$(DIST_VERSION) | tr [a-z] [A-Z] | $(SED) 's/-[^-]*$$//; s/-/_/g')
|
BINARY_VERSION := $(shell echo $(PROJECT)_$(DIST_VERSION) | tr [a-z] [A-Z] | $(SED) 's/-[^-]*$$//; s/-/_/g')
|
||||||
WINVERSION = $(shell echo $(VERSION) | $(SED) -e "s/\./_/g")
|
WINVERSION = $(subst .,_,$(VERSION))
|
||||||
LOCAL_VERSION = $(shell echo $(VERSION))
|
LOCAL_VERSION = $(VERSION)
|
||||||
LOCAL_WINVERSION = $(shell echo $(VERSION) | $(SED) -e "s/\./_/g")
|
LOCAL_WINVERSION = $(subst .,_,$(VERSION))
|
||||||
DIST_VERSION = $(shell echo $(VERSION) | $(SED) -e "s/-dev//")
|
DIST_VERSION = $(patsubst %-dev,%,$(VERSION))
|
||||||
DIST_WINVERSION = $(shell echo $(WINVERSION) | $(SED) -e "s/-dev//")
|
DIST_WINVERSION = $(patsubst %-dev,%,$(WINVERSION))
|
||||||
LOCAL_DIST_VERSION = $(shell echo $(LOCAL_VERSION) | $(SED) -e "s/-dev//")
|
LOCAL_DIST_VERSION = $(patsubst %-dev,%,$(LOCAL_VERSION))
|
||||||
LOCAL_DIST_WINVERSION = $(shell echo $(LOCAL_WINVERSION) | $(SED) -e "s/-dev//")
|
LOCAL_DIST_WINVERSION = $(patsubst %-dev,%,$(LOCAL_WINVERSION))
|
||||||
MAJOR_MINOR_RELEASE = $(shell echo $(DIST_VERSION) | cut -d- -f1)
|
DIST_VERSION_WORDS = $(subst ., ,$(subst -, ,$(DIST_VERSION)))
|
||||||
MAJOR_VERSION = $(shell echo $(MAJOR_MINOR_RELEASE) | cut -d. -f1)
|
MAJOR_VERSION = $(word 1,$(DIST_VERSION_WORDS))
|
||||||
MINOR_VERSION = $(shell echo $(MAJOR_MINOR_RELEASE) | cut -d. -f2)
|
MINOR_VERSION = $(word 2,$(DIST_VERSION_WORDS))
|
||||||
RELEASE_VERSION = $(shell echo $(MAJOR_MINOR_RELEASE) | cut -d. -f3)
|
RELEASE_VERSION = $(word 2,$(DIST_VERSION_WORDS))
|
||||||
BUILD_NUMBER = $(shell echo $(DIST_VERSION) | cut -d- -f2)
|
BUILD_NUMBER = $(word 4,$(DIST_VERSION_WORDS))
|
||||||
|
MAJOR_MINOR_RELEASE = $(MAJOR_VERSION).$(MINOR_VERSION).$(RELEASE_VERSION)
|
||||||
CVS_RSH ?= /usr/bin/ssh
|
CVS_RSH ?= /usr/bin/ssh
|
||||||
|
|
||||||
# ----- input dirs
|
# ----- input dirs
|
||||||
|
|
@ -205,7 +229,7 @@ ifeq ($(VCS),cvs)
|
||||||
CVS_ROOT_DIR = $(patsubst %/$(CVS_MODULE),%,$(CWD))
|
CVS_ROOT_DIR = $(patsubst %/$(CVS_MODULE),%,$(CWD))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
REV_SUBDIRS = $(shell echo $(SUBDIRS) | awk '{for (i=NF; i>=1; i--) printf ("%s ",$$i)}')
|
REV_SUBDIRS = $(call reverse $(SUBDIRS))
|
||||||
FRESH_CVSDIR = $(HOME)/local/src/cvs.fresh
|
FRESH_CVSDIR = $(HOME)/local/src/cvs.fresh
|
||||||
IMAGE_DIR ?= $(CVS_ROOT_DIR)/images
|
IMAGE_DIR ?= $(CVS_ROOT_DIR)/images
|
||||||
PCKG_DEPS_DIR = $(MODDIR)/make/deps.d
|
PCKG_DEPS_DIR = $(MODDIR)/make/deps.d
|
||||||
|
|
@ -240,7 +264,7 @@ JANWARE_URL_DOC_MODULE ?= https://janware.com/wiki/$(JANWARE_WIKI)/assets/type
|
||||||
JANWARE_URL_DOC_PROJECT ?= https://janware.com/wiki/$(JANWARE_WIKI)/assets/types/data/sw/$(PROJECT)/$(PROJECT)
|
JANWARE_URL_DOC_PROJECT ?= https://janware.com/wiki/$(JANWARE_WIKI)/assets/types/data/sw/$(PROJECT)/$(PROJECT)
|
||||||
PKG_VENDOR ?= janware GmbH
|
PKG_VENDOR ?= janware GmbH
|
||||||
|
|
||||||
FULL_NAME ?= $(shell id -nu | xargs getent passwd | cut -d: -f5)
|
FULL_NAME := $(shell $(ID) -nu | $(XARGS) $(GETENT) passwd | $(CUT) -d: -f5)
|
||||||
USE_PROJECT_LIB ?= true
|
USE_PROJECT_LIB ?= true
|
||||||
EXPORT_PROJECT_LIB ?= $(USE_PROJECT_LIB)
|
EXPORT_PROJECT_LIB ?= $(USE_PROJECT_LIB)
|
||||||
USE_JW_BUILD ?= true
|
USE_JW_BUILD ?= true
|
||||||
|
|
@ -291,13 +315,8 @@ BUILD_CFLAGS += -DCATCH_ONLY_YERROR
|
||||||
BUILD_CPPFLAGS += -DCATCH_ONLY_YERROR
|
BUILD_CPPFLAGS += -DCATCH_ONLY_YERROR
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifneq ($(shell echo $(OS_NAME_VERSION) | cut -d: -f1),suse-9)
|
|
||||||
SYSCFG_DIR ?= /etc
|
|
||||||
SYSCFG_FILE ?= /etc/rc.config
|
|
||||||
else
|
|
||||||
SYSCFG_DIR ?= /etc/sysconfig
|
SYSCFG_DIR ?= /etc/sysconfig
|
||||||
SYSCFG_FILE ?= $(SYSCFG_DIR)/$(PROJECT)
|
SYSCFG_FILE ?= $(SYSCFG_DIR)/$(PROJECT)
|
||||||
endif
|
|
||||||
OPTS_PID_FILE ?= $(PIDDIR)/$(PROJECT).pid
|
OPTS_PID_FILE ?= $(PIDDIR)/$(PROJECT).pid
|
||||||
|
|
||||||
USE_VERSION_MACROS ?= true
|
USE_VERSION_MACROS ?= true
|
||||||
|
|
@ -340,8 +359,8 @@ else
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# makefile helpers
|
# makefile helpers
|
||||||
FIND_SUBDIRS = $(filter-out . .. nomake CVS $(IGNORE_SUBDIRS),\
|
FIND_SUBDIRS := $(filter-out . .. nomake CVS $(IGNORE_SUBDIRS),\
|
||||||
$(patsubst ./%,%,$(patsubst %/,%,$(dir $(shell find . -maxdepth 2 -mindepth 2 -a \( -iname Makefile -o -iname GNUmakefile \))))))
|
$(patsubst ./%,%,$(patsubst %/,%,$(dir $(shell $(FIND) . -maxdepth 2 -mindepth 2 -a \( -iname Makefile -o -iname GNUmakefile \))))))
|
||||||
SUBDIRS_TO_ITERATE = $(filter-out $(IGNORE_SUBDIRS),$(SUBDIRS))
|
SUBDIRS_TO_ITERATE = $(filter-out $(IGNORE_SUBDIRS),$(SUBDIRS))
|
||||||
|
|
||||||
# compiler and linker
|
# compiler and linker
|
||||||
|
|
@ -501,7 +520,7 @@ VERSION_SCRIPT = $(BUILD_LIBDIR)/version.ldscript
|
||||||
LOCAL_LIBS +=
|
LOCAL_LIBS +=
|
||||||
ifneq ($(TARGET),mingw)
|
ifneq ($(TARGET),mingw)
|
||||||
LIB_A = $(BUILD_LIBDIR)/lib$(LIBNAME).a
|
LIB_A = $(BUILD_LIBDIR)/lib$(LIBNAME).a
|
||||||
SO_SUFFIX = so.$(shell echo $(VERSION) | cut -d- -f1)
|
SO_SUFFIX = so.$(MAJOR_MINOR_RELEASE)
|
||||||
SO_PREFIX ?= lib
|
SO_PREFIX ?= lib
|
||||||
LIB_SO = $(BUILD_LIBDIR)/lib$(LIBNAME).$(SO_SUFFIX)
|
LIB_SO = $(BUILD_LIBDIR)/lib$(LIBNAME).$(SO_SUFFIX)
|
||||||
LINKS_SO += $(shell echo $(LIB_SO) | $(SED) -e "s/\.so\..*$$/.so/" | grep -v $(LIB_SO))
|
LINKS_SO += $(shell echo $(LIB_SO) | $(SED) -e "s/\.so\..*$$/.so/" | grep -v $(LIB_SO))
|
||||||
|
|
@ -572,7 +591,9 @@ INSTALLED_CGI += $(addprefix $(INSTALL_CGIDIR)/,$(EXE_CGI))
|
||||||
INSTALLATION_FILE_TYPES += HTML
|
INSTALLATION_FILE_TYPES += HTML
|
||||||
BUILD_HTMLDIR = $(TOPDIR)/htdocs
|
BUILD_HTMLDIR = $(TOPDIR)/htdocs
|
||||||
LOCAL_HTML += $(filter-out $(DONT_INSTALL),$(wildcard *.html *.css *.php *.js) $(FONTS) $(IMAGES))
|
LOCAL_HTML += $(filter-out $(DONT_INSTALL),$(wildcard *.html *.css *.php *.js) $(FONTS) $(IMAGES))
|
||||||
HTML_SUBDIR ?= $(shell $(PWD) | $(SED) '/.*\/htdocs\(\/\|$$\)/!d; s%.*/htdocs\(/\|$$\)%%')
|
ifeq ($(HTML_SUBDIR),)
|
||||||
|
HTML_SUBDIR := $(shell $(PWD) | $(SED) '/.*\/htdocs\(\/\|$$\)/!d; s%.*/htdocs\(/\|$$\)%%')
|
||||||
|
endif
|
||||||
ifeq ($(HTML_SUBDIR),)
|
ifeq ($(HTML_SUBDIR),)
|
||||||
INSTALL_HTMLDIR ?= $(PROJECT_HTMLDIR)
|
INSTALL_HTMLDIR ?= $(PROJECT_HTMLDIR)
|
||||||
else
|
else
|
||||||
|
|
@ -584,7 +605,9 @@ INSTALLED_HTML += $(addprefix $(INSTALL_HTMLDIR)/,$(LOCAL_HTML))
|
||||||
INSTALLATION_FILE_TYPES += TMPL
|
INSTALLATION_FILE_TYPES += TMPL
|
||||||
BUILD_TMPLDIR = $(TOPDIR)/tmpl
|
BUILD_TMPLDIR = $(TOPDIR)/tmpl
|
||||||
LOCAL_TMPL += $(filter-out $(DONT_INSTALL),$(wildcard *.tmpl))
|
LOCAL_TMPL += $(filter-out $(DONT_INSTALL),$(wildcard *.tmpl))
|
||||||
TMPL_SUBDIR ?= $(shell $(PWD) | $(SED) '/.*\/tmpl\(\/\|$$\)/!d; s%.*/tmpl\(/\|$$\)%%')
|
ifndef TMPL_SUBDIR
|
||||||
|
TMPL_SUBDIR := $(shell $(PWD) | $(SED) '/.*\/tmpl\(\/\|$$\)/!d; s%.*/tmpl\(/\|$$\)%%')
|
||||||
|
endif
|
||||||
ifeq ($(TMPL_SUBDIR),)
|
ifeq ($(TMPL_SUBDIR),)
|
||||||
INSTALL_TMPLDIR = $(PROJECT_TMPLDIR)
|
INSTALL_TMPLDIR = $(PROJECT_TMPLDIR)
|
||||||
else
|
else
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue