diff --git a/require-ess/tools/driver.makefile b/require-ess/tools/driver.makefile index 346d825e31ed33f458d8cefd2ab1776a5f21e826..a36150cf20d4308606e4afd5f6f9e49cb1f6f286 100644 --- a/require-ess/tools/driver.makefile +++ b/require-ess/tools/driver.makefile @@ -423,6 +423,46 @@ ifeq ($(filter O.%,$(notdir ${CURDIR})),) ## RUN 3 # Target architecture defined. # 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)) + +pick = $(foreach elem,$1,$(word $(elem),$2)) + +select = $(strip $(call -select,$1,$(strip $2),$3)) +-select = $(call --select,$(wordlist 2,2147483647,$2),$(firstword $2),3,$1,$3) +--select = $(if $1,$(if $(call exec,$5,$(call list2param,$(wordlist 1,$2,$1))), $(call pick,$4,$1))$(call --select,$(wordlist $3,2147483647,$1),$2,$3,$4,$5)) + +str-eq = $(if $(subst x$1,,x$2),,t) + +define fetch_deps +2 $(shell cat $(E3_SITEMODS_PATH)/$1/$($1_VERSION)/lib/$(T_A)/$1.dep | sed '1d') +endef + +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))))) +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)) + debug:: @echo "===================== Pass 3: T_A = $(T_A) =====================" @echo "BINS = $(BINS)"