Add program and sconscript tools
This commit is contained in:
parent
bd7a79c9e1
commit
e1c4e0c4b7
4 changed files with 87 additions and 8 deletions
|
@ -149,6 +149,8 @@ class Environment(SCons.Environment.Environment):
|
||||||
out_dir = self.build_root.Dir('src')
|
out_dir = self.build_root.Dir('src')
|
||||||
# TODO: Do the thing.
|
# TODO: Do the thing.
|
||||||
# do_sconscript(env, env.source_root, src_out_dir)
|
# do_sconscript(env, env.source_root, src_out_dir)
|
||||||
|
self.SConscript(self.src_root.File('SConscript'),
|
||||||
|
variant_dir=out_dir)
|
||||||
self.Append(CPPPATH=[self.src_root])
|
self.Append(CPPPATH=[self.src_root])
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -194,7 +196,7 @@ class Environment(SCons.Environment.Environment):
|
||||||
def _append_custom_tools(self, kwargs):
|
def _append_custom_tools(self, kwargs):
|
||||||
'''Add custom tools to the `kwargs`.'''
|
'''Add custom tools to the `kwargs`.'''
|
||||||
tools = kwargs.setdefault('tools', ['default'])
|
tools = kwargs.setdefault('tools', ['default'])
|
||||||
for tool in ['lib', 'test']:
|
for tool in ['lib', 'test', 'program', 'sconscript']:
|
||||||
if tool in tools:
|
if tool in tools:
|
||||||
continue
|
continue
|
||||||
tools.append(tool)
|
tools.append(tool)
|
||||||
|
|
|
@ -48,14 +48,9 @@ def _process_lib_dir(env, lib, src_dir=None, out_dir=None, inc_dir=None):
|
||||||
if include_dir.isdir():
|
if include_dir.isdir():
|
||||||
inc_dir = [include_dir]
|
inc_dir = [include_dir]
|
||||||
env.Append(CPPPATH=inc_dir)
|
env.Append(CPPPATH=inc_dir)
|
||||||
exports = {'Library': env.Library,
|
|
||||||
'StaticLibrary': env.StaticLibrary,
|
|
||||||
'SharedLibrary': env.SharedLibrary}
|
|
||||||
SCons.Script._SConscript.GlobalDict.update(exports)
|
|
||||||
out = env.SConscript(src_dir.File('SConscript'),
|
out = env.SConscript(src_dir.File('SConscript'),
|
||||||
{'env': env.Clone()},
|
clone=True,
|
||||||
variant_dir=out_dir,
|
variant_dir=out_dir)
|
||||||
exports=exports)
|
|
||||||
return out
|
return out
|
||||||
|
|
||||||
|
|
||||||
|
|
46
site_scons/site_tools/program.py
Normal file
46
site_scons/site_tools/program.py
Normal file
|
@ -0,0 +1,46 @@
|
||||||
|
# program.py
|
||||||
|
# Eryn Wells <eryn@erynwells.me>
|
||||||
|
|
||||||
|
'''
|
||||||
|
SCons tool for working with Programs.
|
||||||
|
'''
|
||||||
|
|
||||||
|
def _program(env, name):
|
||||||
|
return env['PROGRAMS'].get(name)
|
||||||
|
|
||||||
|
|
||||||
|
def _register_program(env, name, program):
|
||||||
|
env['PROGRAMS'][name] = program
|
||||||
|
|
||||||
|
|
||||||
|
def _build_program(env):
|
||||||
|
original_builder = env.Program
|
||||||
|
|
||||||
|
def builder(env, program, sources, local_libs=None, *args, **kwargs):
|
||||||
|
# local_libs is an array of names of libs built in the local project.
|
||||||
|
# These will be looked up in the environment and added to the LIBS
|
||||||
|
# array, if present.
|
||||||
|
# if local_libs:
|
||||||
|
# local_libs = map(lambda lib: env.lib(lib), local_libs)
|
||||||
|
# try:
|
||||||
|
# kwargs['LIBS'].extend(local_libs)
|
||||||
|
# except KeyError:
|
||||||
|
# kwargs['LIBS'] = local_libs
|
||||||
|
prog = original_builder(program, sources, *args, **kwargs)
|
||||||
|
register_program(prog)
|
||||||
|
return prog
|
||||||
|
|
||||||
|
return builder
|
||||||
|
|
||||||
|
#
|
||||||
|
# SCons tool interface
|
||||||
|
#
|
||||||
|
|
||||||
|
def generate(env):
|
||||||
|
env.SetDefault(PROGRAMS={})
|
||||||
|
env.AddMethod(_build_program(env), 'Program')
|
||||||
|
env.AddMethod(_program, 'program')
|
||||||
|
|
||||||
|
|
||||||
|
def exists(env):
|
||||||
|
return True
|
36
site_scons/site_tools/sconscript.py
Normal file
36
site_scons/site_tools/sconscript.py
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
# sconscript.py
|
||||||
|
# Eryn Wells <eryn@erynwells.me>
|
||||||
|
|
||||||
|
'''
|
||||||
|
SCons tool for working with SConscripts.
|
||||||
|
'''
|
||||||
|
|
||||||
|
import SCons.Script
|
||||||
|
|
||||||
|
def _do_sconscript(env):
|
||||||
|
original_sconscript = env.SConscript
|
||||||
|
|
||||||
|
def sconscript(env, sconscript, clone=False, *args, **kwargs):
|
||||||
|
exports = {'Library': env.Library,
|
||||||
|
'StaticLibrary': env.StaticLibrary,
|
||||||
|
'SharedLibrary': env.SharedLibrary,
|
||||||
|
'Program': env.Program}
|
||||||
|
SCons.Script._SConscript.GlobalDict.update(exports)
|
||||||
|
env.log('Reading {}'.format(sconscript))
|
||||||
|
return original_sconscript(sconscript,
|
||||||
|
{'env': env.Clone() if clone else env},
|
||||||
|
*args,
|
||||||
|
**kwargs)
|
||||||
|
|
||||||
|
return sconscript
|
||||||
|
|
||||||
|
#
|
||||||
|
# SCons tool interface
|
||||||
|
#
|
||||||
|
|
||||||
|
def generate(env):
|
||||||
|
env.AddMethod(_do_sconscript(env), 'SConscript')
|
||||||
|
|
||||||
|
|
||||||
|
def exists(env):
|
||||||
|
return True
|
Loading…
Add table
Add a link
Reference in a new issue