#!/usr/bin/env python # Copyright 2013 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. """A script to find a recently-built Chrome, in the likely places. This script is used for automated testing, don't trust it for anything more than that!""" import optparse import os import sys def FindChrome(src_dir, configs, verbose=False): # List of places that chrome could live. # In theory we should be more careful about what platform we're actually # building for. # As currently constructed, this will also hork people who have debug and # release builds sitting side by side who build locally. chrome_locations = [] for config in configs: chrome_locations.extend([ 'build/%s/chrome.exe' % config, 'chrome/%s/chrome.exe' % config, # Windows Chromium ninja builder 'out/%s/chrome.exe' % config, # Linux 'out/%s/chrome' % config, # Mac Chromium ninja builder 'out/%s/Chromium.app/Contents/MacOS/Chromium' % config, # Mac release ninja builder 'out/%s/Google Chrome.app/Contents/MacOS/Google Chrome' % config, # Mac Chromium xcode builder 'xcodebuild/%s/Chromium.app/Contents/MacOS/Chromium' % config, # Mac release xcode builder 'xcodebuild/%s/Google Chrome.app/Contents/MacOS/Google Chrome' % config, ]) # Pick the one with the newest timestamp. latest_mtime = 0 latest_path = None for chrome in chrome_locations: chrome_filename = os.path.join(src_dir, chrome) if verbose: print 'Looking for %r...' % chrome_filename, if os.path.exists(chrome_filename): if verbose: print 'YES.' mtime = os.path.getmtime(chrome_filename) if mtime > latest_mtime: latest_mtime = mtime latest_path = chrome_filename else: if verbose: print 'NO.' if latest_path is not None: if verbose: print 'Most recent is %r.' % latest_path return latest_path return None def main(args): usage = 'Usage: %prog [options] ' description = __doc__ parser = optparse.OptionParser(usage, description=description) parser.add_option('-c', '--config', action='append', help='Which configuration of Chrome to look for. ' 'One of [Debug, Release]. The default is to try both. ' 'You can specify this multiple times.') parser.add_option('-v', '--verbose', action='store_true', help='Verbose output') options, args = parser.parse_args(args[1:]) if not len(args): parser.error('Expected source directory as first argument.') if not options.config: options.config = ['Debug', 'Release'] invalid_configs = set(options.config) - set(['Debug', 'Release']) if invalid_configs: parser.error('Expected config to be one of [Debug, Release]. ' 'Got the following invalid configs: %s. ' % ', '.invalid_configs) src_dir = args[0] chrome_path = FindChrome(src_dir, options.config, options.verbose) if not chrome_path: sys.stderr.write('Error: Cannot find Chrome. ' 'Run again with -v to see where was searched.\n') return 1 print chrome_path return 0 if __name__ == '__main__': sys.exit(main(sys.argv))