diff --git a/require-ess/tools/driver.makefile b/require-ess/tools/driver.makefile index 89cfa6acc6aee603f67d5ca2241b9e4b31e7f9ad..c439a9b1760de3461db0707b263dbd8ea6b4f906 100644 --- a/require-ess/tools/driver.makefile +++ b/require-ess/tools/driver.makefile @@ -320,6 +320,7 @@ define fetch_module_versions lm := $$(shell echo $1 | tr '[:upper:]' '[:lower:]') ifneq ($$(strip $$(filter $(INSTALLED_MODULES),$$(lm))),) $$(lm)_VERSION := $($1_DEP_VERSION$2) + $$(lm)_VERSION := $$(lastword $$(call FETCH_BUILD_NUMBER,$(E3_SITEMODS_PATH),$$(lm)) $$(call FETCH_BUILD_NUMBER,$(EPICS_MODULES),$$(lm))) MODULES += $$(lm) REQ += $$(lm) else @@ -338,7 +339,10 @@ export REQ # Fetches the data from .dep files to be parsed by the above define fetch_deps -$(shell cat $(lastword $(wildcard $(addsuffix /$1/$($1_VERSION)/lib/$(T_A)/$1.dep,$(E3_SITEMODS_PATH) $(EPICS_MODULES)))) | sed '1d') +$(shell cat $(or \ + $(lastword $(wildcard $(addsuffix /$1/$($1_VERSION)/lib/$(T_A)/$1.dep,$(E3_SITEMODS_PATH) $(EPICS_MODULES)))),\ + $(error Module '$1' version '$($1_VERSION)' does not exist.)) \ + | sed '1d') endef # Used to recurse through versions: recursively fetches all of the dependencies @@ -453,7 +457,7 @@ INSTALL_INCLUDES = # shell script build_number.sh included with require. define ADD_INCLUDES_TEMPLATE -INSTALL_INCLUDES += $$(patsubst %,-I${2}/$(1)/%/include,$$(call FETCH_BUILD_NUMBER,$(2),$(1))) +INSTALL_INCLUDES += $$(patsubst %,-I${2}/${1}/%/include,$${${1}_VERSION}) endef $(foreach m,$(filter-out $(PRJ),$(notdir $(wildcard ${E3_SITEMODS_PATH}/*))),$(eval $(call ADD_INCLUDES_TEMPLATE,$m,$(E3_SITEMODS_PATH)))) $(foreach m,$(filter-out $(PRJ),$(notdir $(wildcard ${EPICS_MODULES}/*))) ,$(eval $(call ADD_INCLUDES_TEMPLATE,$m,$(EPICS_MODULES)))) @@ -518,7 +522,7 @@ DBDFILES += $(patsubst %.stt,%_snl.dbd,$(notdir $(filter %.stt,${SRCS}))) DBDFILES += $(patsubst %.gt,%.dbd,$(notdir $(filter %.gt,${SRCS}))) # snc location -SNCALL=$(shell ls -dv $(E3_SITEMODS_PATH)/sequencer/$(call FETCH_BUILD_NUMBER,$(E3_SITEMODS_PATH),sequencer)/bin/$(EPICS_HOST_ARCH) 2> /dev/null) +SNCALL=$(shell ls -dv $(E3_SITEMODS_PATH)/sequencer/$(sequencer_VERSION)/bin/$(EPICS_HOST_ARCH) 2> /dev/null)) SNC=$(lastword $(SNCALL))/snc ifneq (,$(strip $(VLIBS))) @@ -791,7 +795,7 @@ ${DEPFILE}: ${LIBOBJS} $(USERMAKEFILE) # Check dependencies on other module headers. cat *.d 2>/dev/null | sed 's/ /\n/g' | grep -v '$(EPICS_BASE)/include' | sed -n '$(DEP_PARSER)' > $@.tmp # Manully added dependencies: ${REQ} - @$(foreach m,${REQ},echo "$m $(or $(and $(or $(wildcard $(EPICS_MODULES)/$m/$($m_VERSION)),$(wildcard $(E3_SITEMODS_PATH)/$m/$($m_VERSION))),$($m_VERSION)),$(error REQUIRED module '$m' version '$($m_VERSION)' does not exist))" >> $@.tmp;) + @$(foreach m,${REQ},echo "$m $($m_VERSION)" >> $@.tmp;) cat $@.tmp | sort -u >> $@ endif # In O.* directory diff --git a/tests/test_build.py b/tests/test_build.py index 580ceff8282b0a2e6f690d60fc4652654db79243..fa12115a7b65f6d66359dbc6459b3a3d6dc2b400 100644 --- a/tests/test_build.py +++ b/tests/test_build.py @@ -10,6 +10,7 @@ MODULE_VERSION = "0.0.0+0" MODULE_VERSION_NO_BUILD = "0.0.0" RE_MISSING_FILE = "No rule to make target [`']{filename}'" +RE_MISSING_VERSION = "Module '{module}' version '{version}' does not exist." def create_patch_file(path, desc): @@ -97,6 +98,27 @@ def test_missing_requirement(wrapper): assert 'Invalid dependency "FOO_DEP_VERSION"; pruning' in errs +def test_missing_dependent_version(wrappers): + wrapper_dep = wrappers.get() + wrapper_main = wrappers.get() + + cell_path = wrapper_main.path / "cellMods" + + rc, *_ = wrapper_dep.run_make("cellinstall", cell_path=cell_path) + assert rc == 0 + + missing_version = "not_a_real_version" + wrapper_main.add_var_to_config_module( + f"{wrapper_dep.name}_DEP_VERSION", missing_version + ) + rc, _, errs = wrapper_main.run_make("cellbuild") + assert rc == 2 + assert re.search( + RE_MISSING_VERSION.format(module=wrapper_dep.name, version=missing_version), + errs, + ) + + def test_header_install_location(wrapper): subdir = wrapper.module_dir / "db" / "subdir" subdir.mkdir(parents=True)