From 27247a1b6202cf82eea842d880af1bf791e1ac12 Mon Sep 17 00:00:00 2001
From: Simon Rose <simon.rose@ess.eu>
Date: Mon, 21 Mar 2022 10:28:47 +0100
Subject: [PATCH] Warning if invalid dependent X_DEP_VERSION is used

---
 require-ess/tools/driver.makefile | 24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/require-ess/tools/driver.makefile b/require-ess/tools/driver.makefile
index b00ecc9b..18d98f6d 100644
--- a/require-ess/tools/driver.makefile
+++ b/require-ess/tools/driver.makefile
@@ -438,36 +438,38 @@ select = $(strip $(call -select,$(strip $2),$1,$3))
 str-eq = $(if $(subst x$1,,x$2),,t)
 
 _MODULES :=
-REQUIRED :=
+REQ :=
+INSTALLED_MODULES := $(sort $(notdir $(shell ls -d $(E3_SITEMODS_PATH)/* $(EPICS_MODULES)/*)))
 
 # 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)
+  ifneq ($$(strip $$(filter $(INSTALLED_MODULES),$$(_lm))),)
+    $$(_lm)_VERSION := $($1_DEP_VERSION)
+    _MODULES += $$(_lm)
+  else
+    $$(warning Invalid dependency "$1_DEP_VERSION"; pruning)
+  endif
 endef
 $(foreach m,$(patsubst %_DEP_VERSION,%,$(filter %_DEP_VERSION,$(.VARIABLES))),$(eval $(call fetch_module_versions,$m)))
 
-# Only keep actual modules, however
-_MODULES := $(filter $(shell ls $(E3_SITEMODS_PATH) $(EPICS_MODULES)),$(_MODULES))
-
 # 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
+# Used to recurse through versions: updates REQ and fetches all of the dependencies from the given module
 define update_dep_versions
   m := $$(firstword $$(_MODULES))
-  REQUIRED += $$m
+  REQ += $$m
   $$m_TBL := $$(call fetch_deps,$$m)
   $$m_DEPS := $$(call select,1,$$($$m_TBL),1)
-  _MODULES := $$(filter-out $$(REQUIRED),$$(_MODULES) $$($$m_DEPS))
+  _MODULES := $$(filter-out $$(REQ),$$(_MODULES) $$($$m_DEPS))
   $$(foreach mm,$$($$m_DEPS),$$(eval $$(mm)_VERSION := $$(call select,2,$$($$m_TBL),$$$$(call str-eq,$$$$1,$$(mm)))))
 endef
 $(call while,$$(_MODULES),$(update_dep_versions))
 
-$(foreach m,$(REQUIRED),$(eval export $m_VERSION))
+$(foreach m,$(REQ),$(eval export $m_VERSION))
 
 debug::
 	@echo "===================== Pass 3: T_A = $(T_A) ====================="
@@ -514,7 +516,7 @@ ARCH_PARTS = ${T_A} $(subst -, ,${T_A}) ${OS_CLASS}
 VAR_EXTENSIONS = ${EPICSVERSION} ${ARCH_PARTS} ${ARCH_PARTS:%=${EPICSVERSION}_%}
 export VAR_EXTENSIONS
 
-REQ = ${REQUIRED} $(foreach x, ${VAR_EXTENSIONS}, ${REQUIRED_$x})
+REQ += ${REQUIRED} $(foreach x, ${VAR_EXTENSIONS}, ${REQUIRED_$x})
 export REQ
 
 SRCS += $(foreach x, ${VAR_EXTENSIONS}, ${SOURCES_$x})
-- 
GitLab