diff options
author | Fabio Alessandrelli <fabio.alessandrelli@gmail.com> | 2022-08-04 19:11:01 +0200 |
---|---|---|
committer | Fabio Alessandrelli <fabio.alessandrelli@gmail.com> | 2022-08-04 20:00:19 +0200 |
commit | 951a1016d3c381252d2d32131c1ad1ec68a2b190 (patch) | |
tree | dab061435f41bf3f4a14589c43bf3859e4d436b4 /SConstruct | |
parent | bed2482ce20fb9efdf4caed73df8032c5c6dea04 (diff) |
[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.
Diffstat (limited to 'SConstruct')
-rw-r--r-- | SConstruct | 16 |
1 files changed, 7 insertions, 9 deletions
diff --git a/SConstruct b/SConstruct index 0fd9326e1c..1c8858c945 100644 --- a/SConstruct +++ b/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) |