Index: build/landmines.py |
diff --git a/build/landmines.py b/build/landmines.py |
index 4db23807cca32ff7c0dd030c434dbcdd7fe44d60..e9da6ba83c5f337316c0157b455dd106501e9829 100755 |
--- a/build/landmines.py |
+++ b/build/landmines.py |
@@ -27,10 +27,7 @@ import clobber |
import landmine_utils |
-SRC_DIR = os.path.dirname(os.path.dirname(os.path.realpath(__file__))) |
- |
- |
-def get_build_dir(build_tool, is_iphone=False): |
+def get_build_dir(build_tool, src_dir, is_iphone=False): |
""" |
Returns output directory absolute path dependent on build and targets. |
Examples: |
@@ -42,7 +39,7 @@ def get_build_dir(build_tool, is_iphone=False): |
""" |
ret = None |
if build_tool == 'xcode': |
- ret = os.path.join(SRC_DIR, 'xcodebuild') |
+ ret = os.path.join(src_dir, 'xcodebuild') |
elif build_tool in ['make', 'ninja', 'ninja-ios']: # TODO: Remove ninja-ios. |
if 'CHROMIUM_OUT_DIR' in os.environ: |
output_dir = os.environ.get('CHROMIUM_OUT_DIR').strip() |
@@ -50,16 +47,16 @@ def get_build_dir(build_tool, is_iphone=False): |
raise Error('CHROMIUM_OUT_DIR environment variable is set but blank!') |
else: |
output_dir = landmine_utils.gyp_generator_flags().get('output_dir', 'out') |
- ret = os.path.join(SRC_DIR, output_dir) |
+ ret = os.path.join(src_dir, output_dir) |
else: |
raise NotImplementedError('Unexpected GYP_GENERATORS (%s)' % build_tool) |
return os.path.abspath(ret) |
-def clobber_if_necessary(new_landmines): |
+def clobber_if_necessary(new_landmines, src_dir): |
"""Does the work of setting, planting, and triggering landmines.""" |
- out_dir = get_build_dir(landmine_utils.builder()) |
- landmines_path = os.path.normpath(os.path.join(out_dir, '..', '.landmines')) |
+ out_dir = get_build_dir(landmine_utils.builder(), src_dir) |
+ landmines_path = os.path.normpath(os.path.join(src_dir, '.landmines')) |
try: |
os.makedirs(out_dir) |
except OSError as e: |
@@ -85,14 +82,16 @@ def clobber_if_necessary(new_landmines): |
def process_options(): |
- """Returns a list of landmine emitting scripts.""" |
+ """Returns an options object containing the configuration for this script.""" |
parser = optparse.OptionParser() |
parser.add_option( |
'-s', '--landmine-scripts', action='append', |
- default=[os.path.join(SRC_DIR, 'build', 'get_landmines.py')], |
help='Path to the script which emits landmines to stdout. The target ' |
'is passed to this script via option -t. Note that an extra ' |
'script can be specified via an env var EXTRA_LANDMINES_SCRIPT.') |
+ parser.add_option('-d', '--src-dir', |
+ help='Path of the source root dir. Overrides the default location of the ' |
+ 'source root dir when calculating the build directory.') |
parser.add_option('-v', '--verbose', action='store_true', |
default=('LANDMINES_VERBOSE' in os.environ), |
help=('Emit some extra debugging information (default off). This option ' |
@@ -107,15 +106,27 @@ def process_options(): |
logging.basicConfig( |
level=logging.DEBUG if options.verbose else logging.ERROR) |
+ if options.src_dir: |
+ if not os.path.isdir(options.src_dir): |
+ parser.error('Cannot find source root dir at %s' % options.src_dir) |
+ logging.debug('Overriding source root dir. Using: %s', options.src_dir) |
+ else: |
+ options.src_dir = \ |
+ os.path.dirname(os.path.dirname(os.path.realpath(__file__))) |
+ |
+ if not options.landmine_scripts: |
+ options.landmine_scripts = [os.path.join(options.src_dir, 'build', |
+ 'get_landmines.py')] |
+ |
extra_script = os.environ.get('EXTRA_LANDMINES_SCRIPT') |
if extra_script: |
- return options.landmine_scripts + [extra_script] |
- else: |
- return options.landmine_scripts |
+ options.landmine_scripts += [extra_script] |
+ |
+ return options |
def main(): |
- landmine_scripts = process_options() |
+ options = process_options() |
if landmine_utils.builder() in ('dump_dependency_json', 'eclipse'): |
return 0 |
@@ -123,11 +134,11 @@ def main(): |
gyp_environment.SetEnvironment() |
landmines = [] |
- for s in landmine_scripts: |
+ for s in options.landmine_scripts: |
proc = subprocess.Popen([sys.executable, s], stdout=subprocess.PIPE) |
output, _ = proc.communicate() |
landmines.extend([('%s\n' % l.strip()) for l in output.splitlines()]) |
- clobber_if_necessary(landmines) |
+ clobber_if_necessary(landmines, options.src_dir) |
return 0 |