97 lines
3.1 KiB
Python
97 lines
3.1 KiB
Python
#
|
|
# Copyright (c) 2016 Stefan Seefeld
|
|
# All rights reserved.
|
|
#
|
|
# Distributed under the Boost Software License, Version 1.0.
|
|
# (See accompanying file LICENSE_1_0.txt or copy at
|
|
# http://www.boost.org/LICENSE_1_0.txt)
|
|
|
|
from SCons.Script import AddOption
|
|
import sys
|
|
|
|
variables=[] # remember 'public' variables
|
|
options=[]
|
|
|
|
def add_option(*args, **kwds):
|
|
"""Capture the help messages so we can produce a helpful usage text."""
|
|
options.append('{:25} {}'.format(', '.join(args), kwds.get('help', '')))
|
|
AddOption(*args, **kwds)
|
|
|
|
def add_variable(vars, var):
|
|
variables.append(var[0])
|
|
vars.Add(var)
|
|
|
|
|
|
def options_help(env):
|
|
|
|
return '\n '.join(options)
|
|
|
|
|
|
def variables_help(vars, env):
|
|
"""This is cloned from SCons' Variables.GenerateHelpText, to only report 'public' variables."""
|
|
|
|
opts = [o for o in vars.options if o.key in variables]
|
|
|
|
def format(opt):
|
|
if opt.key in env:
|
|
actual = env.subst('${%s}' % opt.key)
|
|
else:
|
|
actual = None
|
|
return vars.FormatVariableHelpText(env, opt.key, opt.help, opt.default, actual, opt.aliases)
|
|
text = ''.join([f for f in map(format, opts) if f])
|
|
lines = [' %s'%l for l in text.split('\n')] # Add some indentation
|
|
return '\n'.join(lines)
|
|
|
|
|
|
|
|
def help(vars, env):
|
|
|
|
return """Usage: scons [--option...] [variable=value...] [target...]
|
|
|
|
available options:
|
|
|
|
{}
|
|
|
|
available variables:
|
|
{}
|
|
""".format(options_help(env), variables_help(vars, env))
|
|
|
|
def pretty_output(env):
|
|
|
|
colors = {}
|
|
colors['red'] = '\033[31m'
|
|
colors['green'] = '\033[32m'
|
|
colors['blue'] = '\033[34m'
|
|
colors['yellow'] = '\033[93m'
|
|
colors['Red'] = '\033[91m'
|
|
colors['Green'] = '\033[92m'
|
|
colors['Blue'] = '\033[94m'
|
|
colors['Purple'] = '\033[95m'
|
|
colors['Cyan'] = '\033[96m'
|
|
colors['end'] = '\033[0m'
|
|
|
|
#If the output is not a terminal, remove the colors
|
|
if not sys.stdout.isatty():
|
|
for key, value in colors.iteritems():
|
|
colors[key] = ''
|
|
|
|
compile_source_message = '{green}Compiling $TARGET{end}'.format(**colors)
|
|
compile_shared_source_message = '{green}Compiling $TARGET{end}'.format(**colors)
|
|
link_program_message = '{blue}Linking $TARGET{end}'.format(**colors)
|
|
link_library_message = '{blue}Linking $TARGET{end}'.format(**colors)
|
|
ranlib_library_message = '{blue}Ranlib $TARGET{end}'.format(**colors)
|
|
link_shared_library_message = '{blue}Linking $TARGET{end}'.format(**colors)
|
|
test_message = '{blue}Testing $SOURCE{end}'.format(**colors)
|
|
testsum_message = '{Blue}Test Summary{end}'.format(**colors)
|
|
|
|
env.Replace(CXXCOMSTR = compile_source_message,
|
|
CCCOMSTR = compile_source_message,
|
|
SHCCCOMSTR = compile_shared_source_message,
|
|
SHCXXCOMSTR = compile_shared_source_message,
|
|
ARCOMSTR = link_library_message,
|
|
RANLIBCOMSTR = ranlib_library_message,
|
|
SHLINKCOMSTR = link_shared_library_message,
|
|
LINKCOMSTR = link_program_message,
|
|
TESTCOMSTR = test_message,
|
|
TESTSUMCOMSTR = testsum_message)
|