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')
 | 
			
		||||
        # TODO: Do the thing.
 | 
			
		||||
        # 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])
 | 
			
		||||
 | 
			
		||||
    #
 | 
			
		||||
| 
						 | 
				
			
			@ -194,7 +196,7 @@ class Environment(SCons.Environment.Environment):
 | 
			
		|||
    def _append_custom_tools(self, kwargs):
 | 
			
		||||
        '''Add custom tools to the `kwargs`.'''
 | 
			
		||||
        tools = kwargs.setdefault('tools', ['default'])
 | 
			
		||||
        for tool in ['lib', 'test']:
 | 
			
		||||
        for tool in ['lib', 'test', 'program', 'sconscript']:
 | 
			
		||||
            if tool in tools:
 | 
			
		||||
                continue
 | 
			
		||||
            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():
 | 
			
		||||
            inc_dir = [include_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'),
 | 
			
		||||
                         {'env': env.Clone()},
 | 
			
		||||
                         variant_dir=out_dir,
 | 
			
		||||
                         exports=exports)
 | 
			
		||||
                         clone=True,
 | 
			
		||||
                         variant_dir=out_dir)
 | 
			
		||||
    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