From bd07d1adb90a6010e7d03839335e3bafc2b6ae81 Mon Sep 17 00:00:00 2001
From: Simon Rose <simon.rose@ess.eu>
Date: Mon, 17 Jul 2023 09:37:42 +0200
Subject: [PATCH] E3-1243: Enforce strict conditions on module existence

Originally we simply warned if `FOO_DEP_VERSION` did not refer to a real
module; this was necessary as some modules had legacy (non-e3) dependencies
defined this way. However, this has the unfortunate side-effect that missing
_modules_ would "pass" the build, with a failure only happening if some
version of the module existed (but not the correct one).
---
 require-ess/tools/driver.makefile |  2 +-
 tests/test_build.py               | 11 ++++++++---
 2 files changed, 9 insertions(+), 4 deletions(-)

diff --git a/require-ess/tools/driver.makefile b/require-ess/tools/driver.makefile
index a501fc09..b734aaf1 100644
--- a/require-ess/tools/driver.makefile
+++ b/require-ess/tools/driver.makefile
@@ -155,7 +155,7 @@ define fetch_module_versions
     MODULES += $$(lm)
     REQ += $$(lm)
   else
-    $$(warning Invalid dependency "$1_DEP_VERSION$2"; pruning)
+    $$(error Dependent module "$$(lm)" (from "$1_DEP_VERSION$2") not installed)
   endif
 endef
 
diff --git a/tests/test_build.py b/tests/test_build.py
index e6505d03..bb07bf06 100644
--- a/tests/test_build.py
+++ b/tests/test_build.py
@@ -86,11 +86,16 @@ def test_missing_source_file(wrapper: Wrapper):
 
 
 def test_missing_requirement(wrapper: Wrapper):
-    wrapper.add_var_to_config_module("FOO_DEP_VERSION", "bar")
+    missing_module = "FOO"
+    wrapper.add_var_to_config_module(f"{missing_module}_DEP_VERSION", "bar")
 
     rc, _, errs = wrapper.run_make("build")
-    assert rc == 0
-    assert 'Invalid dependency "FOO_DEP_VERSION"; pruning' in errs
+    assert rc != 0
+    print(errs)
+    assert (
+        f'Dependent module "{missing_module.lower()}" (from "{missing_module}_DEP_VERSION") not installed'
+        in errs
+    )
 
 
 def test_missing_dependent_version(wrappers):
-- 
GitLab