diff --git a/SConscript b/SConscript index 621c4ad..d2a0c8e 100644 --- a/SConscript +++ b/SConscript @@ -60,7 +60,7 @@ def _find_recipe(env: Environment, recipe_name: str): source_file = try_source_file break if not source_file: - raise Exception(f'Could not find recipe {recipe_name}.') + env.Error(f'Could not find recipe for {recipe_name}.') spec = importlib.util.spec_from_file_location(recipe_name, source_file) recipe = importlib.util.module_from_spec(spec) recipe.env = env @@ -332,6 +332,14 @@ def _wrap_builder(builder, target_type: TargetType): def _wrapped(env, dependencies = {}, *args, **kwargs): target_dependencies = [] for name, version_spec in dependencies.items(): + if version_spec == {}: + dep_target = _find_target(env, name) + if dep_target is not None and dep_target.target_type == TargetType.LIBRARY: + if 'LIBS' in kwargs: + kwargs['LIBS'].append(dep_target) + else: + kwargs['LIBS'] = [dep_target] + continue target_dependencies.append(_add_dependency(env, name, _parse_version_spec(version_spec))) if 'CPPPATH' not in kwargs: @@ -360,7 +368,7 @@ def _wrap_builder(builder, target_type: TargetType): else: trgt = _target_entry(kwargs.get('target')) if trgt is not None: - target.name = str(_target_entry(kwargs['target']).name) + target.name = str(trgt.name) else: target.name = 'Unknown target' target.target_type = target_type @@ -451,6 +459,12 @@ def _finalize(env: Environment): dependency = dependency.target env.Depends(dependant, dependency) +def _find_target(env: Environment, target_name: str) -> '_Target|None': + for target in env['SPP_TARGETS']: + if target.name == target_name: + return target + return None + def _get_fallback_cache_dir() -> str: return Dir('#cache').abspath @@ -893,6 +907,7 @@ env.AddMethod(_wrap_builder(env.UnityStaticLibrary, TargetType.LIBRARY), 'UnityS env.AddMethod(_wrap_builder(env.UnitySharedLibrary, TargetType.LIBRARY), 'UnitySharedLibrary') env.AddMethod(_module, 'Module') env.AddMethod(_finalize, 'Finalize') +env.AddMethod(_find_target, 'FindTarget') if hasattr(env, 'Gch'): env.AddMethod(_wrap_builder(env.Gch), 'Gch')