Added recipes for some Linux system libraries.
This commit is contained in:
31
SConscript
31
SConscript
@@ -179,6 +179,30 @@ def _make_interface(env: Environment, dependencies: list = []):
|
||||
'CPPDEFINES': kwargs.get('CPPDEFINES', [])
|
||||
}
|
||||
|
||||
def _exe_filename(env: Environment, name: str, type: str = 'static') -> str:
|
||||
if os.name == 'posix':
|
||||
return name
|
||||
elif os.name == 'nt':
|
||||
return f'{name}.exe'
|
||||
else:
|
||||
raise Exception('What OS is this?')
|
||||
|
||||
def _find_executable(env: Environment, name: str, paths: 'list[str]', type : str = 'static', allow_fail: bool = False, use_glob: bool = False):
|
||||
fname = _exe_filename(env, name, type)
|
||||
for path in paths:
|
||||
lib_path = os.path.join(path, fname)
|
||||
if use_glob:
|
||||
files = glob.glob(lib_path)
|
||||
if len(files) == 1:
|
||||
return files[0]
|
||||
elif len(files) > 1:
|
||||
raise Exception(f'Multiple candidates found for executable with name {name} in paths: "{", ".join(paths)}" with name: "{", ".join(files)}".')
|
||||
elif os.path.exists(lib_path):
|
||||
return lib_path
|
||||
if allow_fail:
|
||||
return None
|
||||
raise Exception(f'Could not find executable with name {name} in paths: "{", ".join(paths)}" filename: "{fname}".')
|
||||
|
||||
def _lib_filename(env: Environment, name: str, type: str = 'static') -> str:
|
||||
if os.name == 'posix':
|
||||
ext = {
|
||||
@@ -239,7 +263,7 @@ def _try_merge_dicts(dictA: dict, dictB: dict) -> 'dict|None':
|
||||
return result
|
||||
|
||||
|
||||
def _find_common_depenency_version(name: str, versionA: _VersionSpec, versionB: _VersionSpec) -> _VersionSpec:
|
||||
def _find_common_dependency_version(name: str, versionA: _VersionSpec, versionB: _VersionSpec) -> _VersionSpec:
|
||||
options = _try_merge_dicts(versionA.options, versionB.options)
|
||||
if options is None:
|
||||
return None
|
||||
@@ -272,13 +296,13 @@ def _can_add_dependency(env: Environment, name: str, version_spec: _VersionSpec)
|
||||
if name not in env['SPP_DEPENDENCIES']:
|
||||
return True
|
||||
dependency = env['SPP_DEPENDENCIES'][name]
|
||||
common_version_spec = _find_common_depenency_version(name, dependency.version_spec, version_spec)
|
||||
common_version_spec = _find_common_dependency_version(name, dependency.version_spec, version_spec)
|
||||
return common_version_spec is not None
|
||||
|
||||
def _add_dependency(env: Environment, name: str, version_spec: _VersionSpec) -> _Dependency:
|
||||
if name in env['SPP_DEPENDENCIES']:
|
||||
dependency = env['SPP_DEPENDENCIES'][name]
|
||||
common_version_spec = _find_common_depenency_version(name, dependency.version_spec, version_spec)
|
||||
common_version_spec = _find_common_dependency_version(name, dependency.version_spec, version_spec)
|
||||
if common_version_spec is None:
|
||||
raise Exception(f'Incompatible versions detected for {name}: {dependency.version_spec} and {version_spec}')
|
||||
if dependency.version_spec != common_version_spec:
|
||||
@@ -938,6 +962,7 @@ env.AddMethod(_rglob, 'RGlob')
|
||||
env.AddMethod(_deps_from_json, 'DepsFromJson')
|
||||
env.AddMethod(_make_interface, 'MakeInterface')
|
||||
env.AddMethod(_lib_filename, 'LibFilename')
|
||||
env.AddMethod(_find_executable, 'FindExecutable')
|
||||
env.AddMethod(_find_lib, 'FindLib')
|
||||
env.AddMethod(_error, 'Error')
|
||||
env.AddMethod(_wrap_builder(env.Library, TargetType.STATIC_LIBRARY), 'Library')
|
||||
|
||||
Reference in New Issue
Block a user