Don't create module configuration for dependencies.

This commit is contained in:
Patrick 2025-07-11 14:43:19 +02:00
parent 45b4d164d0
commit 9b82fb87c0

View File

@ -100,22 +100,26 @@ def _cook(env: Environment, recipe_name: str):
_run_cook(dependency) _run_cook(dependency)
return dependency.cook_result 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 module_root = env.Dir('#/private').abspath
try: 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 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): def _module(env: Environment, file: str):
folder = _normalize_module_path(env, env.File(file).dir.abspath) folder = _normalize_module_path(env, env.File(file).dir.abspath)
dirname = os.path.basename(folder) if folder is not None: # only include modules inside the source tree
env.Append(SPP_MODULES = {folder: _Module( dirname = os.path.basename(folder)
name=dirname, env.Append(SPP_MODULES = {folder: _Module(
folder=folder, name=dirname,
description='', folder=folder,
cxx_namespace=dirname description='',
)}) cxx_namespace=dirname
)})
return SConscript(file, exports = 'env', variant_dir = env['VARIANT_DIR'], src_dir = '.') return SConscript(file, exports = 'env', variant_dir = env['VARIANT_DIR'], src_dir = '.')
def _module_config(env: Environment, **kwargs) -> None: def _module_config(env: Environment, **kwargs) -> None:
@ -302,8 +306,7 @@ def _try_merge_dicts(dictA: dict, dictB: dict) -> 'dict|None':
result[key] = mergedValue result[key] = mergedValue
elif valueA != valueB: elif valueA != valueB:
return None return None
else: result[key] = valueA
result[key] = valueA
for key, valueB in dictB.items(): for key, valueB in dictB.items():
if key not in result: if key not in result:
result[key] = valueB result[key] = valueB
@ -459,11 +462,12 @@ def _wrap_builder(builder, target_type: TargetType):
target.kwargs = kwargs target.kwargs = kwargs
target.dependencies = target_dependencies target.dependencies = target_dependencies
module_folder = _normalize_module_path(env, env.Dir('.').abspath) module_folder = _normalize_module_path(env, env.Dir('.').abspath)
module = env['SPP_MODULES'].get(module_folder) if module_folder is not None:
if module is None: module = env['SPP_MODULES'].get(module_folder)
env.Warn(f'No module config found for target {target.name} at {module_folder}') if module is None:
else: env.Warn(f'No module config found for target {target.name} at {module_folder}')
target.module = module else:
target.module = module
env.Append(SPP_TARGETS = [target]) env.Append(SPP_TARGETS = [target])
if not target.dependencies: if not target.dependencies:
_build_target(target) _build_target(target)