diff --git a/require-ess/tools/driver.makefile b/require-ess/tools/driver.makefile index ef66a2bec5c674904a6b2cf98705253bf2244e48..6172177081585d4ec9a2f22bca8198844a9e8f4d 100644 --- a/require-ess/tools/driver.makefile +++ b/require-ess/tools/driver.makefile @@ -445,7 +445,7 @@ str-eq = $(if $(subst x$1,,x$2),,t) _MODULES := _PROCESSED_MODULES := REQ := -INSTALLED_MODULES := $(sort $(notdir $(shell ls -d $(E3_SITEMODS_PATH)/* $(EPICS_MODULES)/*))) +INSTALLED_MODULES := $(sort $(notdir $(wildcard $(E3_SITEMODS_PATH)/* $(EPICS_MODULES)/*))) # Converts all of the X_DEP_VERSIONs to x_VERSION and records them define fetch_module_versions @@ -466,7 +466,7 @@ export REQ # 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') +$(shell cat $(lastword $(wildcard $(addsuffix /$1/$($1_VERSION)/lib/$(T_A)/$1.dep,$(E3_SITEMODS_PATH) $(EPICS_MODULES)))) | sed '1d') endef # Used to recurse through versions: recursively fetches all of the dependencies from the given module diff --git a/tests/test_build.py b/tests/test_build.py index d3e2c9df7449892b83e0f21b66283c1911ae2414..95b5ae987ae1079abd136f2f3b9030ec48f82c3c 100644 --- a/tests/test_build.py +++ b/tests/test_build.py @@ -160,3 +160,28 @@ def test_updated_dependencies(wrappers): ) assert rc == 0 assert f"Loaded {wrapper_dep.name} version {new_version}" in outs + + +def test_recursive_deps(wrappers): + wrapper_a = wrappers.get() + wrapper_b = wrappers.get() + wrapper_c = wrappers.get() + + cell_path = wrapper_a.path / "cellMods" + + wrapper_a.add_var_to_config_module(f"{wrapper_b.name}_DEP_VERSION", "0.0.0+0") + wrapper_b.add_var_to_config_module(f"{wrapper_c.name}_DEP_VERSION", "0.0.0+0") + + wrapper_c.add_var_to_makefile("HEADERS", f"{wrapper_c.name}.h") + (wrapper_c.module_dir / f"{wrapper_c.name}.h").touch() + + wrapper_a.add_var_to_makefile("SOURCES", f"{wrapper_a.name}.c") + with open(wrapper_a.module_dir / f"{wrapper_a.name}.c", "w") as f: + f.write(f'#include "{wrapper_c.name}.h"') + + rc, *_ = wrapper_c.run_make("cellinstall", cell_path=cell_path) + assert rc == 0 + rc, *_ = wrapper_b.run_make("cellinstall", cell_path=cell_path) + assert rc == 0 + rc, *_ = wrapper_a.run_make("cellinstall", cell_path=cell_path) + assert rc == 0