From 3495288b037a20c2baebad1985b3b00dda93e72d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=A9mi=20Verschelde?= Date: Tue, 8 Feb 2022 12:39:40 +0100 Subject: 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`. --- modules/SCsub | 45 +++++++++++++++++++++++++++------------------ modules/modules_builders.py | 7 ++----- 2 files changed, 29 insertions(+), 23 deletions(-) (limited to 'modules') 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_.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_.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__": -- cgit v1.2.3