Skip to content
Snippets Groups Projects
Commit 3c89a585 authored by Simon Rose's avatar Simon Rose
Browse files

Merge branch 'e3_894_fix_hanging_builds' into 'master'

E3-894: Fix issue where non-existent versions would cause the build to hang

See merge request e3/e3-require!95
parents ed5cc7a2 64b67f73
No related branches found
No related tags found
1 merge request!95E3-894: Fix issue where non-existent versions would cause the build to hang
Pipeline #117601 passed with warnings
...@@ -320,6 +320,7 @@ define fetch_module_versions ...@@ -320,6 +320,7 @@ define fetch_module_versions
lm := $$(shell echo $1 | tr '[:upper:]' '[:lower:]') lm := $$(shell echo $1 | tr '[:upper:]' '[:lower:]')
ifneq ($$(strip $$(filter $(INSTALLED_MODULES),$$(lm))),) ifneq ($$(strip $$(filter $(INSTALLED_MODULES),$$(lm))),)
$$(lm)_VERSION := $($1_DEP_VERSION$2) $$(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) MODULES += $$(lm)
REQ += $$(lm) REQ += $$(lm)
else else
...@@ -338,7 +339,10 @@ export REQ ...@@ -338,7 +339,10 @@ export REQ
# Fetches the data from .dep files to be parsed by the above # Fetches the data from .dep files to be parsed by the above
define fetch_deps 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 endef
# Used to recurse through versions: recursively fetches all of the dependencies # Used to recurse through versions: recursively fetches all of the dependencies
...@@ -453,7 +457,7 @@ INSTALL_INCLUDES = ...@@ -453,7 +457,7 @@ INSTALL_INCLUDES =
# shell script build_number.sh included with require. # shell script build_number.sh included with require.
define ADD_INCLUDES_TEMPLATE 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 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 ${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)))) $(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}))) ...@@ -518,7 +522,7 @@ DBDFILES += $(patsubst %.stt,%_snl.dbd,$(notdir $(filter %.stt,${SRCS})))
DBDFILES += $(patsubst %.gt,%.dbd,$(notdir $(filter %.gt,${SRCS}))) DBDFILES += $(patsubst %.gt,%.dbd,$(notdir $(filter %.gt,${SRCS})))
# snc location # 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 SNC=$(lastword $(SNCALL))/snc
ifneq (,$(strip $(VLIBS))) ifneq (,$(strip $(VLIBS)))
...@@ -791,7 +795,7 @@ ${DEPFILE}: ${LIBOBJS} $(USERMAKEFILE) ...@@ -791,7 +795,7 @@ ${DEPFILE}: ${LIBOBJS} $(USERMAKEFILE)
# Check dependencies on other module headers. # 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 cat *.d 2>/dev/null | sed 's/ /\n/g' | grep -v '$(EPICS_BASE)/include' | sed -n '$(DEP_PARSER)' > $@.tmp
# Manully added dependencies: ${REQ} # 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 >> $@ cat $@.tmp | sort -u >> $@
endif # In O.* directory endif # In O.* directory
......
...@@ -10,6 +10,7 @@ MODULE_VERSION = "0.0.0+0" ...@@ -10,6 +10,7 @@ MODULE_VERSION = "0.0.0+0"
MODULE_VERSION_NO_BUILD = "0.0.0" MODULE_VERSION_NO_BUILD = "0.0.0"
RE_MISSING_FILE = "No rule to make target [`']{filename}'" 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): def create_patch_file(path, desc):
...@@ -97,6 +98,27 @@ def test_missing_requirement(wrapper): ...@@ -97,6 +98,27 @@ def test_missing_requirement(wrapper):
assert 'Invalid dependency "FOO_DEP_VERSION"; pruning' in errs 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): def test_header_install_location(wrapper):
subdir = wrapper.module_dir / "db" / "subdir" subdir = wrapper.module_dir / "db" / "subdir"
subdir.mkdir(parents=True) subdir.mkdir(parents=True)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment