summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2022-02-08 12:39:40 +0100
committerRémi Verschelde <rverschelde@gmail.com>2022-02-08 13:01:35 +0100
commit3495288b037a20c2baebad1985b3b00dda93e72d (patch)
tree3e6fa1722300644210e289656932dadd8b67abca
parentf425d403fe8be16b1a5dafbdce4dce546bdd28a4 (diff)
SCons: Improve logic to generate `modules_tests.gen.h`
This removes the need for `AlwaysBuild` by ensuring that the proper files are being tracked as `Depends`.
-rw-r--r--modules/SCsub45
-rw-r--r--modules/modules_builders.py7
2 files changed, 29 insertions, 23 deletions
diff --git a/modules/SCsub b/modules/SCsub
index 5ff4623743..fcc01e2c1b 100644
--- a/modules/SCsub
+++ b/modules/SCsub
@@ -22,36 +22,45 @@ env.CommandNoCache(
),
)
-# Header to be included in `tests/test_main.cpp` to run module-specific tests.
-if env["tests"]:
- env.Depends("modules_tests.gen.h", Value(env.module_list))
- env.CommandNoCache(
- "modules_tests.gen.h",
- Value(env.module_list),
- env.Run(
- modules_builders.generate_modules_tests,
- "Generating modules tests header.",
- # NOTE: No need to run in subprocess since this is still executed serially.
- subprocess=False,
- ),
- )
- env.AlwaysBuild("modules_tests.gen.h")
vs_sources = []
+test_headers = []
# libmodule_<name>.a for each active module.
for name, path in env.module_list.items():
env.modules_sources = []
- if not os.path.isabs(path):
- SConscript(name + "/SCsub") # Built-in.
- else:
- SConscript(path + "/SCsub") # Custom.
+ # Name for built-in modules, (absolute) path for custom ones.
+ base_path = path if os.path.isabs(path) else name
+ SConscript(base_path + "/SCsub")
lib = env_modules.add_library("module_%s" % name, env.modules_sources)
env.Prepend(LIBS=[lib])
if env["vsproj"]:
vs_sources += env.modules_sources
+ if env["tests"]:
+ # Lookup potential headers in `tests` subfolder.
+ import glob
+
+ module_tests = sorted(glob.glob(os.path.join(base_path, "tests", "*.h")))
+ if module_tests != []:
+ test_headers += module_tests
+
+
+# Generate header to be included in `tests/test_main.cpp` to run module-specific tests.
+if env["tests"]:
+ env.Depends("modules_tests.gen.h", test_headers)
+ env.CommandNoCache(
+ "modules_tests.gen.h",
+ test_headers,
+ env.Run(
+ modules_builders.generate_modules_tests,
+ "Generating modules tests header.",
+ # NOTE: No need to run in subprocess since this is still executed serially.
+ subprocess=False,
+ ),
+ )
+
# libmodules.a with only register_module_types.
# Must be last so that all libmodule_<name>.a libraries are on the right side
# in the linker command.
diff --git a/modules/modules_builders.py b/modules/modules_builders.py
index 2243162555..13d5a2075a 100644
--- a/modules/modules_builders.py
+++ b/modules/modules_builders.py
@@ -14,13 +14,10 @@ def generate_modules_enabled(target, source, env):
def generate_modules_tests(target, source, env):
import os
- import glob
with open(target[0].path, "w") as f:
- for name, path in env.module_list.items():
- headers = glob.glob(os.path.join(path, "tests", "*.h"))
- for h in headers:
- f.write('#include "%s"\n' % (os.path.normpath(h)))
+ for header in source:
+ f.write('#include "%s"\n' % (os.path.normpath(header.path)))
if __name__ == "__main__":