| Index: build/ios/clean_env.py
|
| diff --git a/build/ios/clean_env.py b/build/ios/clean_env.py
|
| new file mode 100755
|
| index 0000000000000000000000000000000000000000..548e2b92eefdd6fd1c9ef65945afaf29e2d3a408
|
| --- /dev/null
|
| +++ b/build/ios/clean_env.py
|
| @@ -0,0 +1,77 @@
|
| +#!/usr/bin/python
|
| +# Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +# Use of this source code is governed by a BSD-style license that can be
|
| +# found in the LICENSE file.
|
| +
|
| +import os
|
| +import sys
|
| +
|
| +def Main(argv):
|
| + """This is like 'env -i', but it uses a whitelist of env variables to allow
|
| + through to the command being run. It attempts to strip off Xcode-added
|
| + values from PATH.
|
| + """
|
| + # Note: An attempt was made to do something like: env -i bash -lc '[command]'
|
| + # but that fails to set the things set by login (USER, etc.), so instead
|
| + # the only approach that seems to work is to have a whitelist.
|
| + env_key_whitelist = (
|
| + 'HOME',
|
| + 'LOGNAME',
|
| + # 'PATH' added below (but filtered).
|
| + 'PWD',
|
| + 'SHELL',
|
| + 'TEMP',
|
| + 'TMPDIR',
|
| + 'USER'
|
| + )
|
| +
|
| + # Need something to run.
|
| + # TODO(lliabraa): Make this output a usage string and exit (here and below).
|
| + assert(len(argv) > 0)
|
| +
|
| + add_to_path = [];
|
| + first_entry = argv[0];
|
| + if first_entry.startswith('ADD_TO_PATH='):
|
| + argv = argv[1:];
|
| + add_to_path = first_entry.replace('ADD_TO_PATH=', '', 1).split(':')
|
| +
|
| + # Still need something to run.
|
| + assert(len(argv) > 0)
|
| +
|
| + clean_env = {}
|
| +
|
| + # Pull over the whitelisted keys.
|
| + for key in env_key_whitelist:
|
| + val = os.environ.get(key, None)
|
| + if not val is None:
|
| + clean_env[key] = val
|
| +
|
| + # Collect the developer dir as set via Xcode, defaulting it.
|
| + dev_prefix = os.environ.get('DEVELOPER_DIR', '/Developer/')
|
| + if dev_prefix[-1:] != '/':
|
| + dev_prefix += '/'
|
| +
|
| + # Now pull in PATH, but remove anything Xcode might have added.
|
| + initial_path = os.environ.get('PATH', '')
|
| + filtered_chunks = \
|
| + [x for x in initial_path.split(':') if not x.startswith(dev_prefix)]
|
| + if filtered_chunks:
|
| + clean_env['PATH'] = ':'.join(add_to_path + filtered_chunks)
|
| +
|
| + # Add any KEY=VALUE args before the command to the cleaned environment.
|
| + args = argv[:]
|
| + while '=' in args[0]:
|
| + (key, val) = args[0].split('=', 1)
|
| + clean_env[key] = val
|
| + args = args[1:]
|
| +
|
| + # Still need something to run.
|
| + assert(len(args) > 0)
|
| +
|
| + # Off it goes...
|
| + os.execvpe(args[0], args, clean_env)
|
| + # Should never get here, so return a distinctive, non-zero status code.
|
| + return 66
|
| +
|
| +if __name__ == '__main__':
|
| + sys.exit(Main(sys.argv[1:]))
|
|
|