Index: site_scons/site_tools/distcc.py |
=================================================================== |
--- site_scons/site_tools/distcc.py (revision 67) |
+++ site_scons/site_tools/distcc.py (working copy) |
@@ -65,6 +65,25 @@ |
# results from trying to add it a second time. |
pass |
+ # Modify compilers we support |
+ distcc_compilers = env.get('DISTCC_COMPILERS', ['cc', 'gcc', 'c++', 'g++']) |
+ |
+ if sys.platform == 'darwin': |
+ for compiler_var in ('CC', 'CXX'): |
+ compiler = env.get(compiler_var) |
+ if compiler in distcc_compilers: |
+ # On Mac, distcc requires the full path to the compiler. Even |
+ # if distcc is disabled, change the compiler name to the |
+ # full-path so that the compiler name is the same whether |
+ # distcc is enabled or not. This prevents unnecessary |
+ # recompilation when distcc is turned on/off. If we can't find |
+ # the compiler, leave the non-absolute pathname as a tip-off |
+ # that there's a problem and avoid the string concatenation |
+ # with the none type. |
+ compiler_path = env.WhereIs(compiler) |
+ if compiler_path is not None: |
+ env[compiler_var] = compiler_path |
+ |
# If distcc isn't enabled, stop now |
if not env.GetOption('distcc'): |
return |
@@ -77,15 +96,28 @@ |
return |
env['ENV'][envvar] = value |
+ # For distcc pump mode, copy the following variable only if they exist. |
+ for envvar in ('INCLUDE_SERVER_PID', 'INCLUDE_SERVER_DIR', |
+ 'INCLUDE_SERVER_PORT'): |
+ value = env.get(envvar, os.environ.get(envvar)) |
+ if value: |
+ env['ENV'][envvar] = value |
+ |
# Set name of distcc tool |
env['DISTCC'] = 'distcc' |
- # Modify compilers we support |
- distcc_compilers = env.get('DISTCC_COMPILERS', ['cc', 'gcc', 'c++', 'g++']) |
+ # Change distcc_compilers to absolute paths for darwin systems since |
+ # we changed the compiler variables in the environment to full-paths |
+ # earlier. |
+ if sys.platform == 'darwin': |
+ for i in range(len(distcc_compilers)): |
+ full_path = env.WhereIs(distcc_compilers[i]) |
+ if full_path is not None: |
+ distcc_compilers[i] = full_path |
+ |
for compiler_var in ('CC', 'CXX'): |
compiler = env.get(compiler_var) |
if compiler in distcc_compilers: |
- if sys.platform == 'darwin': |
- # On Mac, distcc requires the full path to the compiler |
- compiler = env.WhereIs(compiler) |
- env[compiler_var] = '$DISTCC ' + compiler |
+ # Surround DISTCC command with "ignore" tags to avoid |
+ # recompiling unnecessarily when distcc is turned on/off |
+ env[compiler_var] = '$( $DISTCC $) ' + compiler |