Added libbacktrace and recursive dependencies.
This commit is contained in:
parent
0abc33d6f8
commit
3cac31bd81
@ -4,9 +4,11 @@ import os
|
||||
|
||||
def _cook(env: Environment, recipe_name: str, *args, **kwargs):
|
||||
import importlib.util
|
||||
source_file = None
|
||||
for folder in env['RECIPES_FOLDERS']:
|
||||
source_file = f'{folder.abspath}/{recipe_name}/recipe.py'
|
||||
if os.path.exists(source_file):
|
||||
try_source_file = f'{folder.abspath}/{recipe_name}/recipe.py'
|
||||
if os.path.exists(try_source_file):
|
||||
source_file = try_source_file
|
||||
break
|
||||
if not source_file:
|
||||
raise Exception(f'Could not find recipe {recipe_name}.')
|
||||
@ -34,6 +36,9 @@ def _inject_dependency(dependency, kwargs: dict) -> None:
|
||||
_inject_list(kwargs, dependency, 'CPPDEFINES')
|
||||
_inject_list(kwargs, dependency, 'LIBPATH')
|
||||
_inject_list(kwargs, dependency, 'LIBS')
|
||||
if 'DEPENDENCIES' in dependency:
|
||||
for inner_dependency in dependency['DEPENDENCIES']:
|
||||
_inject_dependency(inner_dependency, kwargs)
|
||||
|
||||
def _rglob(env: Environment, root_path: str, pattern: str, **kwargs):
|
||||
result_nodes = []
|
||||
|
||||
39
recipes/AutotoolsProject/recipe.py
Normal file
39
recipes/AutotoolsProject/recipe.py
Normal file
@ -0,0 +1,39 @@
|
||||
|
||||
import os
|
||||
import pathlib
|
||||
import subprocess
|
||||
import sys
|
||||
from SCons.Script import *
|
||||
|
||||
_BUILT_STAMPFILE = '.spp_built'
|
||||
|
||||
def cook(env: Environment, project_root: str, config_args: 'list[str]' = [], build_args : 'list[str]' = [], install_args : 'list[str]' = []) -> dict:
|
||||
config = env['BUILD_TYPE']
|
||||
build_dir = os.path.join(project_root, f'build_{config}')
|
||||
install_dir = os.path.join(project_root, f'install_{config}')
|
||||
is_built = os.path.exists(os.path.join(install_dir, _BUILT_STAMPFILE))
|
||||
if not is_built or env['UPDATE_REPOSITORIES']:
|
||||
print(f'Building {project_root}, config {config}')
|
||||
os.makedirs(build_dir, exist_ok=True)
|
||||
opt_level = {
|
||||
'debug': '-O0',
|
||||
}.get(env['BUILD_TYPE'], '-O2')
|
||||
debug_symbols = {
|
||||
'release': ''
|
||||
}.get(env['BUILD_TYPE'], '-g')
|
||||
cflags = f'{opt_level} {debug_symbols}'
|
||||
jobs = env.GetOption('num_jobs')
|
||||
env = os.environ.copy()
|
||||
env['CFLAGS'] = cflags
|
||||
|
||||
subprocess.run((os.path.join(project_root, 'configure'), '--prefix', install_dir, *config_args), cwd=build_dir, env=env, stdout=sys.stdout, stderr=sys.stderr, check=True)
|
||||
subprocess.run(('make', f'-j{jobs}', *build_args), cwd=build_dir, stdout=sys.stdout, stderr=sys.stderr, check=True)
|
||||
subprocess.run(('make', 'install', *install_args), cwd=build_dir, stdout=sys.stdout, stderr=sys.stderr, check=True)
|
||||
pathlib.Path(install_dir, _BUILT_STAMPFILE).touch()
|
||||
|
||||
return {
|
||||
'install_dir': install_dir,
|
||||
'LIBPATH': [os.path.join(install_dir, 'lib')],
|
||||
'CPPPATH': [os.path.join(install_dir, 'include')]
|
||||
}
|
||||
|
||||
12
recipes/libbacktrace/recipe.py
Normal file
12
recipes/libbacktrace/recipe.py
Normal file
@ -0,0 +1,12 @@
|
||||
|
||||
from SCons.Script import *
|
||||
|
||||
def cook(env: Environment) -> dict:
|
||||
repo = env.Cook('GitBranch', repo_name = 'libbacktrace', remote_url = 'https://github.com/ianlancetaylor/libbacktrace.git', git_ref = 'master')
|
||||
checkout_root = repo['checkout_root']
|
||||
build_result = env.Cook('AutotoolsProject', checkout_root)
|
||||
return {
|
||||
'LIBPATH': build_result['LIBPATH'],
|
||||
'CPPPATH': build_result['CPPPATH'],
|
||||
'LIBS': ['backtrace']
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user