From: <sv...@ww...> - 2004-09-26 08:07:08
|
Author: mkrose Date: 2004-09-26 01:06:59 -0700 (Sun, 26 Sep 2004) New Revision: 1255 Modified: trunk/CSP/tools/build.py Log: A few enhancements to the scons build tools. In "short message" mode (ie with -Q set), the full build commands are now logged to .bulidlog. Browse at: https://www.zerobar.net/viewcvs/viewcvs.cgi?view=rev&rev=1255 Modified: trunk/CSP/tools/build.py =================================================================== --- trunk/CSP/tools/build.py 2004-09-26 07:49:34 UTC (rev 1254) +++ trunk/CSP/tools/build.py 2004-09-26 08:06:59 UTC (rev 1255) @@ -47,7 +47,9 @@ PYTHON_INCLUDE = sysconfig.get_python_inc() PYTHON_LIBRARY = sysconfig.get_python_lib() +BUILD_LOG = open(File('#/.buildlog').abspath, 'wt') + ############################################################################ # GENERAL HELPERS @@ -76,6 +78,24 @@ ############################################################################ # SHORT MESSAGES +class ShortMessageWrapper: + def __init__(self, message): + self.message = message + self.old_message = None + + def bind(self, action): + if not isinstance(action.strfunction, ShortMessageWrapper): + self.old_message = action.strfunction + action.strfunction = self + + def __call__(self, target, source, env): + if self.old_message and BUILD_LOG: + old = self.old_message(target, source, env) + print >>BUILD_LOG, old + BUILD_LOG.flush() + return self.message(target, source, env) + + def TargetMessage(phrase, suffix=''): def printer(target, source, env, phrase=phrase, suffix=suffix): if type(target) == type([]): @@ -124,9 +144,9 @@ if isinstance(action, SCons.Action.ListAction): for a in action.get_actions(): if a.strfunction is not None: - a.strfunction = message + ShortMessageWrapper(message).bind(a) return - action.strfunction = message + ShortMessageWrapper(message).bind(action) def SetShortMessages(env): SetShortMessage(env, 'StaticObject', SourceMessage('Compiling')) @@ -148,17 +168,29 @@ def BuildPackages(env, packages, **kw): import build + result = [] for package in packages: kw['build_dir'] = '%s/.bin' % package kw.setdefault('duplicate', 0) kw.setdefault('exports', 'env build') - env.SConscript('%s/SConscript' % package, **kw) + targets = env.SConscript('%s/SConscript' % package, **kw) + if targets: + if type(targets) != type([]): targets = [targets] + result.extend(targets) + result = env.Flatten(result) + return result def BuildModules(env, modules, **kw): import build + result = [] for module in modules: kw.setdefault('exports', 'env build') - env.SConscript('%s/SConscript' % module, **kw) + targets = env.SConscript('%s/SConscript' % module, **kw) + if targets: + if type(targets) != type([]): targets = [targets] + result.extend(targets) + result = env.Flatten(result) + return result @@ -498,3 +530,8 @@ env.Alias('dox', dox) env.Clean(['dox', 'all'], html) +def Apply(builder, sources, **overrides): + def builder_wrap(source): + return builder(source, **overrides) + return map(builder_wrap, sources) + |