mirror of
ssh://git.janware.com/srv/git/janware/proj/jw-pkg
synced 2026-01-15 03:53:32 +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
|
||||
|
||||
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
|
||||
|
||||
# ----- pre-local.mk
|
||||
|
|
@ -29,17 +29,31 @@ ifneq ($(wildcard pre-local.mk),)
|
|||
endif
|
||||
|
||||
# ----- executables
|
||||
SED := $(shell which sed)
|
||||
WHICH := $(firstword $(wildcard /usr/bin/which) $(shell which which))
|
||||
SED := $(shell $(WHICH) sed)
|
||||
CAT := /bin/cat
|
||||
SHELL ?= /bin/bash
|
||||
#ifeq ($(SHELL),)
|
||||
export SHELL := /bin/bash
|
||||
#endif
|
||||
BROWSER ?= xdg-open
|
||||
RM := $(shell which rm)
|
||||
RM := $(shell $(WHICH) rm)
|
||||
AR = /usr/bin/ar
|
||||
PWD := $(shell which pwd)
|
||||
PWD := $(shell $(WHICH) pwd)
|
||||
CWD := $(shell $(PWD))
|
||||
BIN_INSTALL := /usr/bin/install
|
||||
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
|
||||
ifneq ($(wildcard $(TOPDIR)/.git),)
|
||||
|
|
@ -56,7 +70,9 @@ endif
|
|||
|
||||
# ----- 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),)
|
||||
TARGET_TUPLE_WORDS ?= $(subst -, ,$(TARGET_TUPLE))
|
||||
|
|
@ -82,9 +98,9 @@ else
|
|||
TARGET_TRIPLET ?= $(TARGET_ARCH)-$(TARGET_OS)-$(TARGET_ABI)
|
||||
endif
|
||||
|
||||
ifeq ($(TARGET_TUPLE),)
|
||||
$(error TARGET_TUPLE is undefined)
|
||||
endif
|
||||
#ifeq ($(TARGET_TUPLE),)
|
||||
# $(error TARGET_TUPLE is undefined)
|
||||
#endif
|
||||
|
||||
# - support legacy jw-build target variables
|
||||
ifeq ($(TARGET_ABI),mingw32)
|
||||
|
|
@ -95,8 +111,13 @@ else
|
|||
TARGET ?= $(TARGET_OS)
|
||||
endif
|
||||
|
||||
OS_NAME_VERSION ?= $(shell $(GET_OS_SH))
|
||||
OS_NAME ?= $(shell $(GET_OS_SH) name)
|
||||
ifeq ($(OS_NAME_VERSION),)
|
||||
OS_NAME_VERSION := $(shell $(GET_OS_SH))
|
||||
endif
|
||||
|
||||
ifeq ($(OS_NAME),)
|
||||
OS_NAME := $(shell $(GET_OS_SH) name)
|
||||
endif
|
||||
ARCH ?= $(TARGET_ARCH)
|
||||
|
||||
ARCH_32 = i586
|
||||
|
|
@ -149,7 +170,7 @@ endif
|
|||
|
||||
ifeq ($(PKG_FORMAT),debian)
|
||||
RPM ?= /bin/bash $(MOD_SCRIPT_DIR)/dpm.sh
|
||||
RPM_ARCH ?= $(shell dpkg --print-architecture)
|
||||
RPM_ARCH := $(shell dpkg --print-architecture)
|
||||
RPM_SUFFIX ?= deb
|
||||
else
|
||||
RPM ?= /bin/rpm
|
||||
|
|
@ -163,7 +184,7 @@ endif
|
|||
|
||||
PROJECT_DESCR_FILE ?= $(wildcard $(TOPDIR)/make/project.conf)
|
||||
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_SUMMARY ?= $(PROJECT_DESCR)
|
||||
CUSTOMER ?= jannet
|
||||
|
|
@ -174,25 +195,28 @@ CREATE_DEVEL = false
|
|||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(wildcard $(VERSION_FILE)),)
|
||||
VERSION ?= $(shell $(CAT) $(VERSION_FILE))
|
||||
ifeq ($(VERSION),)
|
||||
ifneq ($(wildcard $(VERSION_FILE)),)
|
||||
VERSION := $(shell $(CAT) $(VERSION_FILE))
|
||||
endif
|
||||
endif
|
||||
DIST_VERSION ?= $(patsubst %-dev,%,$(VERSION))
|
||||
HEX_VERSION = $(shell echo $(DIST_VERSION) | \
|
||||
$(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')
|
||||
WINVERSION = $(shell echo $(VERSION) | $(SED) -e "s/\./_/g")
|
||||
LOCAL_VERSION = $(shell echo $(VERSION))
|
||||
LOCAL_WINVERSION = $(shell echo $(VERSION) | $(SED) -e "s/\./_/g")
|
||||
DIST_VERSION = $(shell echo $(VERSION) | $(SED) -e "s/-dev//")
|
||||
DIST_WINVERSION = $(shell echo $(WINVERSION) | $(SED) -e "s/-dev//")
|
||||
LOCAL_DIST_VERSION = $(shell echo $(LOCAL_VERSION) | $(SED) -e "s/-dev//")
|
||||
LOCAL_DIST_WINVERSION = $(shell echo $(LOCAL_WINVERSION) | $(SED) -e "s/-dev//")
|
||||
MAJOR_MINOR_RELEASE = $(shell echo $(DIST_VERSION) | cut -d- -f1)
|
||||
MAJOR_VERSION = $(shell echo $(MAJOR_MINOR_RELEASE) | cut -d. -f1)
|
||||
MINOR_VERSION = $(shell echo $(MAJOR_MINOR_RELEASE) | cut -d. -f2)
|
||||
RELEASE_VERSION = $(shell echo $(MAJOR_MINOR_RELEASE) | cut -d. -f3)
|
||||
BUILD_NUMBER = $(shell echo $(DIST_VERSION) | cut -d- -f2)
|
||||
HEX_VERSION := $(shell echo $(DIST_VERSION) | \
|
||||
$(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')
|
||||
WINVERSION = $(subst .,_,$(VERSION))
|
||||
LOCAL_VERSION = $(VERSION)
|
||||
LOCAL_WINVERSION = $(subst .,_,$(VERSION))
|
||||
DIST_VERSION = $(patsubst %-dev,%,$(VERSION))
|
||||
DIST_WINVERSION = $(patsubst %-dev,%,$(WINVERSION))
|
||||
LOCAL_DIST_VERSION = $(patsubst %-dev,%,$(LOCAL_VERSION))
|
||||
LOCAL_DIST_WINVERSION = $(patsubst %-dev,%,$(LOCAL_WINVERSION))
|
||||
DIST_VERSION_WORDS = $(subst ., ,$(subst -, ,$(DIST_VERSION)))
|
||||
MAJOR_VERSION = $(word 1,$(DIST_VERSION_WORDS))
|
||||
MINOR_VERSION = $(word 2,$(DIST_VERSION_WORDS))
|
||||
RELEASE_VERSION = $(word 2,$(DIST_VERSION_WORDS))
|
||||
BUILD_NUMBER = $(word 4,$(DIST_VERSION_WORDS))
|
||||
MAJOR_MINOR_RELEASE = $(MAJOR_VERSION).$(MINOR_VERSION).$(RELEASE_VERSION)
|
||||
CVS_RSH ?= /usr/bin/ssh
|
||||
|
||||
# ----- input dirs
|
||||
|
|
@ -205,7 +229,7 @@ ifeq ($(VCS),cvs)
|
|||
CVS_ROOT_DIR = $(patsubst %/$(CVS_MODULE),%,$(CWD))
|
||||
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
|
||||
IMAGE_DIR ?= $(CVS_ROOT_DIR)/images
|
||||
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)
|
||||
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
|
||||
EXPORT_PROJECT_LIB ?= $(USE_PROJECT_LIB)
|
||||
USE_JW_BUILD ?= true
|
||||
|
|
@ -291,13 +315,8 @@ BUILD_CFLAGS += -DCATCH_ONLY_YERROR
|
|||
BUILD_CPPFLAGS += -DCATCH_ONLY_YERROR
|
||||
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_FILE ?= $(SYSCFG_DIR)/$(PROJECT)
|
||||
endif
|
||||
OPTS_PID_FILE ?= $(PIDDIR)/$(PROJECT).pid
|
||||
|
||||
USE_VERSION_MACROS ?= true
|
||||
|
|
@ -340,8 +359,8 @@ else
|
|||
endif
|
||||
|
||||
# makefile helpers
|
||||
FIND_SUBDIRS = $(filter-out . .. nomake CVS $(IGNORE_SUBDIRS),\
|
||||
$(patsubst ./%,%,$(patsubst %/,%,$(dir $(shell find . -maxdepth 2 -mindepth 2 -a \( -iname Makefile -o -iname GNUmakefile \))))))
|
||||
FIND_SUBDIRS := $(filter-out . .. nomake CVS $(IGNORE_SUBDIRS),\
|
||||
$(patsubst ./%,%,$(patsubst %/,%,$(dir $(shell $(FIND) . -maxdepth 2 -mindepth 2 -a \( -iname Makefile -o -iname GNUmakefile \))))))
|
||||
SUBDIRS_TO_ITERATE = $(filter-out $(IGNORE_SUBDIRS),$(SUBDIRS))
|
||||
|
||||
# compiler and linker
|
||||
|
|
@ -501,7 +520,7 @@ VERSION_SCRIPT = $(BUILD_LIBDIR)/version.ldscript
|
|||
LOCAL_LIBS +=
|
||||
ifneq ($(TARGET),mingw)
|
||||
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
|
||||
LIB_SO = $(BUILD_LIBDIR)/lib$(LIBNAME).$(SO_SUFFIX)
|
||||
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
|
||||
BUILD_HTMLDIR = $(TOPDIR)/htdocs
|
||||
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),)
|
||||
INSTALL_HTMLDIR ?= $(PROJECT_HTMLDIR)
|
||||
else
|
||||
|
|
@ -584,7 +605,9 @@ INSTALLED_HTML += $(addprefix $(INSTALL_HTMLDIR)/,$(LOCAL_HTML))
|
|||
INSTALLATION_FILE_TYPES += TMPL
|
||||
BUILD_TMPLDIR = $(TOPDIR)/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),)
|
||||
INSTALL_TMPLDIR = $(PROJECT_TMPLDIR)
|
||||
else
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue