From 611aefeff487c4c465b788c607ee19dad147d2f5 Mon Sep 17 00:00:00 2001 From: Simon Rose <simon.rose@ess.eu> Date: Thu, 17 Mar 2022 16:23:02 +0100 Subject: [PATCH] Refactor and rearrange --- require-ess/tools/driver.makefile | 28 +++++++++++++++++----------- 1 file changed, 17 insertions(+), 11 deletions(-) diff --git a/require-ess/tools/driver.makefile b/require-ess/tools/driver.makefile index ea0392c1..32254685 100644 --- a/require-ess/tools/driver.makefile +++ b/require-ess/tools/driver.makefile @@ -425,41 +425,47 @@ ifeq ($(filter O.%,$(notdir ${CURDIR})),) # Still in source directory, third run. # First, sort out all of the dependencies. This is done recursively using tools from https://github.com/markpiffer/gmtt.git - space := $(strip) $(strip)# comma := ,# list2param = $(subst $(space),$(comma),$(strip $1)) exec = $(eval -exec=$1)$(eval -exec:=$$(call -exec,$(call list2param,$2)))$(-exec) while = $(if $(call exec,$1),$(eval $2)$(call while,$1,$2,$3),$(eval $3)) +# Used to select from table-like data; syntax is SELECT what FROM where WHEN condition. This has been tailored to parse .dep files. select = $(strip $(call -select,$(strip $2),$1,$3)) -select = $(if $1,$(if $(call exec,$3,$(call list2param,$(wordlist 1,2,$1))), $(word $2,$1))$(call -select,$(wordlist 3,2147483647,$1),$2,$3)) str-eq = $(if $(subst x$1,,x$2),,t) +_MODULES := +REQUIRED := + +# Converts all of the X_DEP_VERSIONs to x_VERSION and records them +define fetch_module_versions +_lm := $$(shell echo $1 | tr '[:upper:]' '[:lower:]') +$$(_lm)_VERSION := $($1_DEP_VERSION) +_MODULES += $$(_lm) +endef +$(foreach m,$(patsubst %_DEP_VERSION,%,$(filter %_DEP_VERSION,$(.VARIABLES))),$(eval $(call fetch_module_versions,$m))) + +# Fetches the data from .dep files to be parsed by the above define fetch_deps $(shell cat $(E3_SITEMODS_PATH)/$1/$($1_VERSION)/lib/$(T_A)/$1.dep | sed '1d') endef +# Used to recurse through versions: updates REQUIRED and fetches all of the dependencies from the given module define update_dep_versions m := $$(firstword $$(_MODULES)) REQUIRED += $$m $$m_TBL := $$(call fetch_deps,$$m) $$m_DEPS := $$(call select,1,$$($$m_TBL),1) _MODULES := $$(filter-out $$(REQUIRED),$$(_MODULES) $$($$m_DEPS)) -$$(foreach mm,$$($$m_DEPS),$$(eval export $$(mm)_VERSION := $$(call select,2,$$($$m_TBL),$$$$(call str-eq,$$$$1,$$(mm))))) +$$(foreach mm,$$($$m_DEPS),$$(eval $$(mm)_VERSION := $$(call select,2,$$($$m_TBL),$$$$(call str-eq,$$$$1,$$(mm))))) endef - -# Convert (for example) ASYN_DEP_VERSION to asyn_VERSION and add asyn to the list of modules -_MODULES := -REQUIRED := -$(foreach m,$(patsubst %_DEP_VERSION,%,$(filter %_DEP_VERSION,$(.VARIABLES))),\ -$(eval _lm := $(shell echo $m | tr '[:upper:]' '[:lower:]'))\ -$(eval export $(_lm)_VERSION := $($m_DEP_VERSION))\ -$(eval _MODULES += $(_lm))) - $(call while,$$(_MODULES),$(update_dep_versions)) +$(foreach m,$(REQUIRED),$(eval export $m_VERSION)) + debug:: @echo "===================== Pass 3: T_A = $(T_A) =====================" @echo "BINS = $(BINS)" -- GitLab