From f9a4e6890bf5b21ae39c12f920e11005b07df9aa Mon Sep 17 00:00:00 2001 From: hurikhan Date: Mon, 12 Jan 2015 12:54:17 +0800 Subject: [PATCH] SCons: colored compilation --- SConstruct | 4 ++++ methods.py | 36 ++++++++++++++++++++++++++++++++++++ platform/server/detect.py | 3 +++ platform/x11/detect.py | 3 +++ 4 files changed, 46 insertions(+) diff --git a/SConstruct b/SConstruct index b9f2b7e2c4a..c68ca3989fd 100644 --- a/SConstruct +++ b/SConstruct @@ -116,6 +116,7 @@ opts.Add("CFLAGS", "Custom flags for the C compiler"); opts.Add("LINKFLAGS", "Custom flags for the linker"); opts.Add('disable_3d', 'Disable 3D nodes for smaller executable (yes/no)', "no") opts.Add('disable_advanced_gui', 'Disable advance 3D gui nodes and behaviors (yes/no)', "no") +opts.Add('colored', 'Enable colored output for the compilation (yes/no)', 'no') # add platform specific options @@ -299,6 +300,9 @@ if selected_platform in platform_list: if (env['xml']=='yes'): env.Append(CPPFLAGS=['-DXML_ENABLED']) + if (env['colored']=='yes'): + methods.colored(sys,env) + Export('env') diff --git a/methods.py b/methods.py index 0c0c5a05e33..da1491e3f9b 100755 --- a/methods.py +++ b/methods.py @@ -1316,3 +1316,39 @@ def save_active_platforms(apnames,ap): logow = open(wf,"wb") logow.write(str) + +def colored(sys,env): + + #If the output is not a terminal, do nothing + if not sys.stdout.isatty(): + return + + colors = {} + colors['cyan'] = '\033[96m' + colors['purple'] = '\033[95m' + colors['blue'] = '\033[94m' + colors['green'] = '\033[92m' + colors['yellow'] = '\033[93m' + colors['red'] = '\033[91m' + colors['end'] = '\033[0m' + + compile_source_message = '%sCompiling %s==> %s$SOURCE%s' % (colors['blue'], colors['purple'], colors['yellow'], colors['end']) + java_compile_source_message = '%sCompiling %s==> %s$SOURCE%s' % (colors['blue'], colors['purple'], colors['yellow'], colors['end']) + compile_shared_source_message = '%sCompiling shared %s==> %s$SOURCE%s' % (colors['blue'], colors['purple'], colors['yellow'], colors['end']) + link_program_message = '%sLinking Program %s==> %s$TARGET%s' % (colors['red'], colors['purple'], colors['yellow'], colors['end']) + link_library_message = '%sLinking Static Library %s==> %s$TARGET%s' % (colors['red'], colors['purple'], colors['yellow'], colors['end']) + ranlib_library_message = '%sRanlib Library %s==> %s$TARGET%s' % (colors['red'], colors['purple'], colors['yellow'], colors['end']) + link_shared_library_message = '%sLinking Shared Library %s==> %s$TARGET%s' % (colors['red'], colors['purple'], colors['yellow'], colors['end']) + java_library_message = '%sCreating Java Archive %s==> %s$TARGET%s' % (colors['red'], colors['purple'], colors['yellow'], colors['end']) + + env.Append( CXXCOMSTR=[compile_source_message] ) + env.Append( CCCOMSTR=[compile_source_message] ) + env.Append( SHCCCOMSTR=[compile_shared_source_message] ) + env.Append( SHCXXCOMSTR=[compile_shared_source_message] ) + env.Append( ARCOMSTR=[link_library_message] ) + env.Append( RANLIBCOMSTR=[ranlib_library_message] ) + env.Append( SHLINKCOMSTR=[link_shared_library_message] ) + env.Append( LINKCOMSTR=[link_program_message] ) + env.Append( JARCOMSTR=[java_library_message] ) + env.Append( JAVACCOMSTR=[java_compile_source_message] ) + diff --git a/platform/server/detect.py b/platform/server/detect.py index 24b36d31885..e2d64c65458 100644 --- a/platform/server/detect.py +++ b/platform/server/detect.py @@ -40,6 +40,9 @@ def configure(env): env["CC"]="clang" env["CXX"]="clang++" env["LD"]="clang++" + if (env["colored"]=="yes"): + if sys.stdout.isatty(): + env.Append(CXXFLAGS=["-fcolor-diagnostics"]) is64=sys.maxsize > 2**32 diff --git a/platform/x11/detect.py b/platform/x11/detect.py index 621a0c66a0d..2b38099a744 100644 --- a/platform/x11/detect.py +++ b/platform/x11/detect.py @@ -81,6 +81,9 @@ def configure(env): env.extra_suffix=".llvms" else: env.extra_suffix=".llvm" + if (env["colored"]=="yes"): + if sys.stdout.isatty(): + env.Append(CXXFLAGS=["-fcolor-diagnostics"])