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: [PATCH] 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 | 47 ++++++++++++++++++++++--------------- modules/modules_builders.py | 7 ++---- 2 files changed, 30 insertions(+), 24 deletions(-) diff --git a/modules/SCsub b/modules/SCsub index 5ff46237436..fcc01e2c1b2 100644 --- a/modules/SCsub +++ b/modules/SCsub @@ -22,12 +22,37 @@ env.CommandNoCache( ), ) -# Header to be included in `tests/test_main.cpp` to run module-specific tests. + +vs_sources = [] +test_headers = [] +# libmodule_.a for each active module. +for name, path in env.module_list.items(): + env.modules_sources = [] + + # 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", Value(env.module_list)) + env.Depends("modules_tests.gen.h", test_headers) env.CommandNoCache( "modules_tests.gen.h", - Value(env.module_list), + test_headers, env.Run( modules_builders.generate_modules_tests, "Generating modules tests header.", @@ -35,22 +60,6 @@ if env["tests"]: subprocess=False, ), ) - env.AlwaysBuild("modules_tests.gen.h") - -vs_sources = [] -# 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. - - lib = env_modules.add_library("module_%s" % name, env.modules_sources) - env.Prepend(LIBS=[lib]) - if env["vsproj"]: - vs_sources += env.modules_sources # libmodules.a with only register_module_types. # Must be last so that all libmodule_.a libraries are on the right side diff --git a/modules/modules_builders.py b/modules/modules_builders.py index 22431625559..13d5a2075a2 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__":