SCons: Add an option to detect C++ modules recursively
This adds `custom_modules_recursive` which allows to detect and collect
all nested C++ modules which may reside in any directory specified by
`custom_modules` option.
The detection logic is made to be more strict because `SCSub` may be
used for organizing hierarchical builds within a module itself, so the
existence of `register_types.h` and `config.py` is checked as well
(these are all required for a C++ module to be compiled by Godot).
For performance reasons, built-in modules are not checked recursively,
and there's no benefit of doing so in the first place.
It's now possible to specify a directory path pointing to a *single*
module, as it may contain nested modules which are detected recursively.
(cherry picked from commit a3c2c1e18a)
This commit is contained in:
committed by
Rémi Verschelde
parent
395afe9363
commit
65a2f0dfd4
@ -121,6 +121,7 @@ opts.Add(BoolVariable("gdscript", "Enable GDScript support", True))
|
||||
opts.Add(BoolVariable("minizip", "Enable ZIP archive support using minizip", True))
|
||||
opts.Add(BoolVariable("xaudio2", "Enable the XAudio2 audio driver", False))
|
||||
opts.Add("custom_modules", "A list of comma-separated directory paths containing custom modules to build.", "")
|
||||
opts.Add(BoolVariable("custom_modules_recursive", "Detect custom modules recursively for each specified path.", True))
|
||||
|
||||
# Advanced options
|
||||
opts.Add(BoolVariable("dev", "If yes, alias for verbose=yes warnings=extra werror=yes", False))
|
||||
@ -238,8 +239,14 @@ if env_base["custom_modules"]:
|
||||
sys.exit(255)
|
||||
|
||||
for path in module_search_paths:
|
||||
if path == "modules":
|
||||
# Built-in modules don't have nested modules,
|
||||
# so save the time it takes to parse directories.
|
||||
modules = methods.detect_modules(path, recursive=False)
|
||||
else: # External.
|
||||
modules = methods.detect_modules(path, env_base["custom_modules_recursive"])
|
||||
# Note: custom modules can override built-in ones.
|
||||
modules_detected.update(methods.detect_modules(path))
|
||||
modules_detected.update(modules)
|
||||
include_path = os.path.dirname(path)
|
||||
if include_path:
|
||||
env_base.Prepend(CPPPATH=[include_path])
|
||||
|
||||
Reference in New Issue
Block a user