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