Allow specifying a library from the current project as a dependency.

This commit is contained in:
Patrick 2024-10-12 12:30:21 +02:00
parent e3b3fd8f7c
commit 2b05834798

View File

@ -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')