[Scons] Implement module dependency sorting.
Modules can now call: env.module_add_dependencies(name: str, deps: list, optional: bool) To add required or optional dependencies during the "can_build" step. Required dependencies will be checked and the module will be not be enabled when they are missing, printing a warning to notify the user.
This commit is contained in:
16
SConstruct
16
SConstruct
@ -138,6 +138,7 @@ env_base.__class__.CommandNoCache = methods.CommandNoCache
|
||||
env_base.__class__.Run = methods.Run
|
||||
env_base.__class__.disable_warnings = methods.disable_warnings
|
||||
env_base.__class__.force_optimization_on_debug = methods.force_optimization_on_debug
|
||||
env_base.__class__.module_add_dependencies = methods.module_add_dependencies
|
||||
env_base.__class__.module_check_dependencies = methods.module_check_dependencies
|
||||
|
||||
env_base["x86_libtheora_opt_gcc"] = False
|
||||
@ -699,6 +700,7 @@ if selected_platform in platform_list:
|
||||
sys.modules.pop("detect")
|
||||
|
||||
modules_enabled = OrderedDict()
|
||||
env.module_dependencies = {}
|
||||
env.module_icons_paths = []
|
||||
env.doc_class_path = {}
|
||||
|
||||
@ -710,6 +712,10 @@ if selected_platform in platform_list:
|
||||
import config
|
||||
|
||||
if config.can_build(env, selected_platform):
|
||||
# Disable it if a required dependency is missing.
|
||||
if not env.module_check_dependencies(name):
|
||||
continue
|
||||
|
||||
config.configure(env)
|
||||
# Get doc classes paths (if present)
|
||||
try:
|
||||
@ -732,6 +738,7 @@ if selected_platform in platform_list:
|
||||
sys.modules.pop("config")
|
||||
|
||||
env.module_list = modules_enabled
|
||||
methods.sort_module_list(env)
|
||||
|
||||
methods.update_version(env.module_version_string)
|
||||
|
||||
@ -794,15 +801,6 @@ if selected_platform in platform_list:
|
||||
if env["minizip"]:
|
||||
env.Append(CPPDEFINES=["MINIZIP_ENABLED"])
|
||||
|
||||
editor_module_list = []
|
||||
if env["tools"] and not env.module_check_dependencies("tools", editor_module_list):
|
||||
print(
|
||||
"Build option 'module_"
|
||||
+ x
|
||||
+ "_enabled=no' cannot be used with 'tools=yes' (editor), only with 'tools=no' (export template)."
|
||||
)
|
||||
Exit(255)
|
||||
|
||||
if not env["verbose"]:
|
||||
methods.no_verbose(sys, env)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user