From c669ad98f1e83bec1d4affd44bdef075d97b1280 Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Sat, 5 Dec 2015 09:52:52 -0800 Subject: [PATCH 1/7] Doc comment for SConstruct --- SConstruct | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/SConstruct b/SConstruct index 4f4d44c..48b0d84 100644 --- a/SConstruct +++ b/SConstruct @@ -1,11 +1,12 @@ # SConstruct # vim: set ft=python: -# -# Toplevel Scons build script. This should be mostly complete and generic enough -# for most builds. -# # Eryn Wells +''' +Toplevel Scons build script. This should be mostly complete and generic enough +for most builds. +''' + import logging setup_logging() From fd2e6ae69916b901f6304536f34242eb119a1d64 Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Sat, 5 Dec 2015 09:53:32 -0800 Subject: [PATCH 2/7] Add swiftc tool --- site_scons/site_init.py | 2 +- site_scons/site_tools/swiftc.py | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 site_scons/site_tools/swiftc.py diff --git a/site_scons/site_init.py b/site_scons/site_init.py index cb25ecf..12b7b3c 100644 --- a/site_scons/site_init.py +++ b/site_scons/site_init.py @@ -184,7 +184,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', 'program', 'sconscript']: + for tool in ['lib', 'test', 'program', 'sconscript', 'swiftc']: if tool in tools: continue tools.append(tool) diff --git a/site_scons/site_tools/swiftc.py b/site_scons/site_tools/swiftc.py new file mode 100644 index 0000000..5d2766d --- /dev/null +++ b/site_scons/site_tools/swiftc.py @@ -0,0 +1,33 @@ +# swiftc.py +# vim: set ft=python: +# Eryn Wells + +''' +SCons plugin for building Swift files with swiftc. +''' + +import SCons.Action +import SCons.Tool +import SCons.Util + +SwiftSuffix = '.swift' +SwiftAction = SCons.Action.Action("$SWIFTCCOM", "$SWIFTCCOMSTR") + +compilers = ['swiftc'] + +def generate(env): + static_obj, shared_obj = SCons.Tool.createObjBuilders(env) + static_obj.add_action(SwiftSuffix, SwiftAction) + static_obj.add_emitter(SwiftSuffix, SCons.Defaults.SharedObjectEmitter) + shared_obj.add_action(SwiftSuffix, SwiftAction) + shared_obj.add_emitter(SwiftSuffix, SCons.Defaults.SharedObjectEmitter) + + if 'SWIFTC' not in env: + compiler = env.Detect(compilers) + env['SWIFTC'] = compiler if compiler else compilers[0] + env['SWIFTFLAGS'] = SCons.Util.CLVar('') + env['SWIFTCCOM'] = '$SWIFTC -o $TARGET -c $SWIFTFLAGS $SOURCES' + env['SWIFTFILESUFFIX'] = SwiftSuffix + +def exists(env): + return env.Detect(compilers) From 517a083694ed6444a1dff235a72879b16d6f78a9 Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Sat, 27 Feb 2016 08:55:09 -0800 Subject: [PATCH 3/7] Add Append and Replace to the env --- site_scons/site_tools/sconscript.py | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/site_scons/site_tools/sconscript.py b/site_scons/site_tools/sconscript.py index b898481..12c0015 100644 --- a/site_scons/site_tools/sconscript.py +++ b/site_scons/site_tools/sconscript.py @@ -9,12 +9,15 @@ 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} + 'Program': env.Program, + + 'Append': env.Append, + 'Replace': env.Replace} SCons.Script._SConscript.GlobalDict.update(exports) env.log('Reading {}'.format(sconscript)) return original_sconscript(sconscript, From 2ab67a8138010dc6b2ef9ae8ed57b6520149e524 Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Sat, 27 Feb 2016 09:11:38 -0800 Subject: [PATCH 4/7] Add color diagnostics switch for gcc --- site_scons/site_init.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/site_scons/site_init.py b/site_scons/site_init.py index 12b7b3c..e4398ca 100644 --- a/site_scons/site_init.py +++ b/site_scons/site_init.py @@ -105,6 +105,9 @@ class Environment(SCons.Environment.Environment): if colorful and sys.stdout.isatty(): if 'clang' in self['CC'] or 'clang' in self['CXX']: self.AppendUnique(CCFLAGS=['-fcolor-diagnostics']) + elif 'gcc' in self['CC'] or 'g++' in self['CXX']: + # TODO: Also set a GCC_COLORS variable in the system environment? + self.AppendUnique(CCFLAGS=['-fdiagnostics-color=always']) # Pretty printing self.SetDefault(ARCOMSTR=Environment._comstr('Archiving', succinct)) From 84b5595490fa52da13c42be008692242d76d1fdd Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Sun, 28 Feb 2016 09:22:34 -0800 Subject: [PATCH 5/7] Remove TODO --- site_scons/site_init.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/site_scons/site_init.py b/site_scons/site_init.py index e4398ca..2d3788b 100644 --- a/site_scons/site_init.py +++ b/site_scons/site_init.py @@ -138,8 +138,6 @@ class Environment(SCons.Environment.Environment): def process_src(self): 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]) From 146b177ca99f133b6391afc1acbbdd602360a2d0 Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Sun, 28 Feb 2016 09:22:46 -0800 Subject: [PATCH 6/7] Property export env --- site_scons/site_tools/sconscript.py | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/site_scons/site_tools/sconscript.py b/site_scons/site_tools/sconscript.py index 12c0015..3e9b597 100644 --- a/site_scons/site_tools/sconscript.py +++ b/site_scons/site_tools/sconscript.py @@ -11,19 +11,18 @@ 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, - - 'Append': env.Append, - 'Replace': env.Replace} + exports = { + 'Library': env.Library, + 'Object': env.Object, + 'SharedObject': env.SharedObject, + 'StaticLibrary': env.StaticLibrary, + 'SharedLibrary': env.SharedLibrary, + 'Program': env.Program, + 'env': env.Clone() if clone else env, + } 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 original_sconscript(sconscript, {}, *args, **kwargs) return sconscript From 50177d96b8b243f739d9a2adfe71734dc39f89b0 Mon Sep 17 00:00:00 2001 From: Eryn Wells Date: Sun, 28 Feb 2016 09:24:20 -0800 Subject: [PATCH 7/7] Remove paths module --- site_scons/paths.py | 30 ------------------------------ site_scons/site_init.py | 3 --- 2 files changed, 33 deletions(-) delete mode 100644 site_scons/paths.py diff --git a/site_scons/paths.py b/site_scons/paths.py deleted file mode 100644 index c2b37b9..0000000 --- a/site_scons/paths.py +++ /dev/null @@ -1,30 +0,0 @@ -# paths.py -# Eryn Wells - -import os -import os.path - - -def is_executable(path): - return os.path.exists(path) and os.access(path, os.X_OK) - - -def which(program): - ''' - Look for `program` in system path and return the full path to that binary if - it is found. Otherwise, return `None`. - ''' - path, name = os.path.split(program) - if path: - if is_executable(program): - return program - else: - pathext = [''] + os.environ.get('PATHEXT', '').split(os.pathsep) - for path in os.environ.get('PATH', '').split(os.pathsep): - exe = os.path.join(path, program) - for ext in pathext: - candidate = exe + ext - if is_executable(candidate): - return candidate - return None - diff --git a/site_scons/site_init.py b/site_scons/site_init.py index 2d3788b..0c2f2ba 100644 --- a/site_scons/site_init.py +++ b/site_scons/site_init.py @@ -3,12 +3,9 @@ import logging import sys - import SCons.Environment import SCons.Errors -import paths - def setup_logging(level=logging.DEBUG): '''Configure global logging for the SCons system.'''