jw-pkg/make/make.mk
Jan Lindemann f05e1ee0e3 make/[Makefile|*.mk): Improve variable caching
This commit aims at improving speed by using better caching.

  - Makefile, cache.mk: Split .cache.mk up

    To allow caching of runtime path variables which are
    project-specific, split .cache.mk up in .cache-project.mk and
    .cache-projects.mk

  - ldlibpath.mk: Cache ldlibpath, exepath and pythonpath

    Place the output of $(call proj_query ldlibpath), $(call
    proj_query, exepath) and $(call proj_query pythonpath) in
    JW_PKG_LD_LIBRARY_PATH, JW_PKG_EXE_PATH, and JW_PKG_PYTHON_PATH
    respectively, and cache the variables in make/.project-cache.mk.

  - cache.mk: Use = instead of :=

    Recursively expanded variables are nearly as fast as := variables
    if the assigned value is a fixed string. And sometimes it's not,
    rightly so, because variables get assigned below, as with
    JW_PKG_XXX for instance.

  - cache.mk: Use $(TOPDIR) as variable values

    Replace absolute references to project's topdir by $(TOPDIR) with
    sed. As soon as the project queries produce absolute paths, they
    will be transformed into relative paths which allow the code base
    to be moved to a different location and still remain functional
    without a rebuild.

Signed-off-by: Jan Lindemann <jan@janware.com>
2026-01-26 17:17:23 +01:00

87 lines
2.5 KiB
Makefile

# generic utility modules
# (c) 2001 jannet it services
# contact@jannet.de
# $Id$
include $(JWBDIR)/make/defs.mk
include $(JWBDIR)/make/ldlibpath.mk
include $(JWBDIR)/make/defs-dirs.mk
include $(JWBDIR)/make/dev-utils.mk
CACHED_FILES ?= $(VERSION_FILE) $(wildcard $(TOPDIR)/make/project.conf)
CACHED_VARS ?= PROJECT PREREQ VERSION HEX_VERSION FULL_NAME \
WHICH PYTHON ECHO TEST BROWSER SED RM PWD ID CUT TR \
AWK GETENT XARGS FIND PRINTF HOST_TUPLE OS_NAME_VERSION \
OS_NAME 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)
MKFILES += $(wildcard project.conf)
DEVEL_TARGETS += install_MAKE $(INSTALLED_PKG_MK)
ifeq ($(CREATE_PKG_CONFIG),true)
DEVEL_TARGETS += install_PKG_CONFIG
endif
endif
include $(JWBDIR)/make/rules.mk
INSTALL_PCKG_DEPS_DIR = $(ENV_PREFIX)$(JWBDIR)/make/deps.d
ifneq ($(wildcard pckg-deps.mk),)
INSTALLED_PKG_MK += $(INSTALL_PCKG_DEPS_DIR)/$(PROJECT).mk
endif
INSTALL_PCKG_DEFS_DIR = $(JWBDIR)/make/defs.d
ifneq ($(wildcard pckg-defs.mk),)
INSTALLED_PKG_MK += $(INSTALL_PCKG_DEFS_DIR)/$(PROJECT).mk
endif
ifeq ($(CREATE_PKG_CONFIG),true)
all: build_PKG_CONFIG
endif
install: $(DEVEL_TARGETS)
clean: textclean localclean doneclean clean.pkg-config
test:
$(INSTALL_PCKG_DEPS_DIR)/$(PROJECT).mk: pckg-deps.mk
mkdir -p $(dir $@)
$(INSTALL) -p -m $(MAKEMODE) -o $(MAKEOWNER) -g $(MAKEGROUP) $< $@
$(INSTALL_PCKG_DEFS_DIR)/$(PROJECT).mk: pckg-defs.mk
mkdir -p $(dir $@)
$(INSTALL) -p -m $(MAKEMODE) -o $(MAKEOWNER) -g $(MAKEGROUP) $< $@
install-links:
DEVELOPMENT=false make do-install-links
do-install-links:
@$(call install_links,MAKE)
ifeq ($(CREATE_PKG_CONFIG),true)
ifeq ($(EXPORT_PROJECT_LIB),true)
CREATE_PKG_CONFIG_OPTS += -c "-I$(PROJECT_DIRPATH)/include"
CREATE_PKG_CONFIG_OPTS += -l "-L$(PROJECT_DIRPATH)/lib -l$(PROJECT)"
endif
$(LOCAL_PKG_CONFIG): $(PROJECT_DESCR_FILE) $(JWBDIR)/make/make.mk
$(proj_query_cmd) create-pkg-config \
-F $< \
-n $(PROJECT) \
-v $(DIST_VERSION) \
-p $(PROJECT_DIRPATH) \
-V $(shell echo $(PROJECT) | tr a-z- A-Z_)_DIR=$(PROJECT_DIRPATH) \
-r "$(RPM_REQUIRES_RUN)" \
-R "$(RPM_REQUIRES_DEVEL)" \
-l "-L$(PROJECT_DIRPATH)/lib -l$(LIBNAME)" \
$(CREATE_PKG_CONFIG_OPTS) \
> $@.tmp
mv $@.tmp $@
$(BUILD_PKG_CONFIG): $(LOCAL_PKG_CONFIG)
endif # ifeq ($(CREATE_PKG_CONFIG),true)
clean.pkg-config:
$(RM) -f *.pc $(BUILD_PKG_CONFIG)