From 9b82fb87c09b4a6c9458d26da617d9babf7869cb Mon Sep 17 00:00:00 2001 From: Patrick Wuttke Date: Fri, 11 Jul 2025 14:43:19 +0200 Subject: [PATCH] Don't create module configuration for dependencies. --- SConscript | 38 +++++++++++++++++++++----------------- 1 file changed, 21 insertions(+), 17 deletions(-) diff --git a/SConscript b/SConscript index eb8c9a9..cc1d2ea 100644 --- a/SConscript +++ b/SConscript @@ -100,22 +100,26 @@ def _cook(env: Environment, recipe_name: str): _run_cook(dependency) return dependency.cook_result -def _normalize_module_path(env: Environment, path: str) -> str: +def _normalize_module_path(env: Environment, path: str) -> str|None: module_root = env.Dir('#/private').abspath try: - return os.path.relpath(path, module_root) + relative = os.path.relpath(path, module_root) + if relative[:2] == '..': + return None + return relative except ValueError: # may be thrown on Windows if the module is on a different drive than the project - return os.path.normpath(path) # just use the absolute path then + return None def _module(env: Environment, file: str): folder = _normalize_module_path(env, env.File(file).dir.abspath) - dirname = os.path.basename(folder) - env.Append(SPP_MODULES = {folder: _Module( - name=dirname, - folder=folder, - description='', - cxx_namespace=dirname - )}) + if folder is not None: # only include modules inside the source tree + dirname = os.path.basename(folder) + env.Append(SPP_MODULES = {folder: _Module( + name=dirname, + folder=folder, + description='', + cxx_namespace=dirname + )}) return SConscript(file, exports = 'env', variant_dir = env['VARIANT_DIR'], src_dir = '.') def _module_config(env: Environment, **kwargs) -> None: @@ -302,8 +306,7 @@ def _try_merge_dicts(dictA: dict, dictB: dict) -> 'dict|None': result[key] = mergedValue elif valueA != valueB: return None - else: - result[key] = valueA + result[key] = valueA for key, valueB in dictB.items(): if key not in result: result[key] = valueB @@ -459,11 +462,12 @@ def _wrap_builder(builder, target_type: TargetType): target.kwargs = kwargs target.dependencies = target_dependencies module_folder = _normalize_module_path(env, env.Dir('.').abspath) - module = env['SPP_MODULES'].get(module_folder) - if module is None: - env.Warn(f'No module config found for target {target.name} at {module_folder}') - else: - target.module = module + if module_folder is not None: + module = env['SPP_MODULES'].get(module_folder) + if module is None: + env.Warn(f'No module config found for target {target.name} at {module_folder}') + else: + target.module = module env.Append(SPP_TARGETS = [target]) if not target.dependencies: _build_target(target)