Browse Source

Merge pull request #57798 from akien-mga/scons-module-tests-simplify

Rémi Verschelde 3 years ago
parent
commit
4a2f22daf4
2 changed files with 29 additions and 23 deletions
  1. 27 18
      modules/SCsub
  2. 2 5
      modules/modules_builders.py

+ 27 - 18
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.

+ 2 - 5
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__":