- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / test / nacl_test_injection / find_chrome.py
1 #!/usr/bin/env python
2 # Copyright 2013 The Chromium Authors. All rights reserved.
3 # Use of this source code is governed by a BSD-style license that can be
4 # found in the LICENSE file.
5
6 """A script to find a recently-built Chrome, in the likely places.
7 This script is used for automated testing, don't trust it for anything more
8 than that!"""
9
10
11 import optparse
12 import os
13 import sys
14
15
16 def FindChrome(src_dir, configs, verbose=False):
17   # List of places that chrome could live.
18   # In theory we should be more careful about what platform we're actually
19   # building for.
20   # As currently constructed, this will also hork people who have debug and
21   # release builds sitting side by side who build locally.
22   chrome_locations = []
23
24   for config in configs:
25     chrome_locations.extend([
26         'build/%s/chrome.exe' % config,
27         'chrome/%s/chrome.exe' % config,
28         # Windows Chromium ninja builder
29         'out/%s/chrome.exe' % config,
30         # Linux
31         'out/%s/chrome' % config,
32         # Mac Chromium ninja builder
33         'out/%s/Chromium.app/Contents/MacOS/Chromium' % config,
34         # Mac release make builder
35         'out/%s/Google Chrome.app/Contents/MacOS/Google Chrome' % config,
36         # Mac Chromium xcode builder
37         'xcodebuild/%s/Chromium.app/Contents/MacOS/Chromium' % config,
38         # Mac release xcode builder
39         'xcodebuild/%s/Google Chrome.app/Contents/MacOS/Google Chrome' % config,
40     ])
41
42   # Pick the one with the newest timestamp.
43   latest_mtime = 0
44   latest_path = None
45   for chrome in chrome_locations:
46     chrome_filename = os.path.join(src_dir, chrome)
47     if verbose:
48       print 'Looking for %r...' % chrome_filename,
49     if os.path.exists(chrome_filename):
50       if verbose:
51         print 'YES.'
52       mtime = os.path.getmtime(chrome_filename)
53       if mtime > latest_mtime:
54         latest_mtime = mtime
55         latest_path = chrome_filename
56     else:
57       if verbose:
58         print 'NO.'
59   if latest_path is not None:
60     if verbose:
61       print 'Most recent is %r.' % latest_path
62     return latest_path
63   return None
64
65
66 def main(args):
67   usage = 'Usage: %prog [options] <src dir>'
68   description = __doc__
69   parser = optparse.OptionParser(usage, description=description)
70   parser.add_option('-c', '--config',
71                     action='append',
72                     help='Which configuration of Chrome to look for. '
73                          'One of [Debug, Release]. The default is to try both. '
74                          'You can specify this multiple times.')
75   parser.add_option('-v', '--verbose', action='store_true',
76                     help='Verbose output')
77
78   options, args = parser.parse_args(args[1:])
79
80   if not len(args):
81     parser.error('Expected source directory as first argument.')
82
83   if not options.config:
84     options.config = ['Debug', 'Release']
85
86   invalid_configs = set(options.config) - set(['Debug', 'Release'])
87   if invalid_configs:
88     parser.error('Expected config to be one of [Debug, Release]. '
89                  'Got the following invalid configs: %s. ' %
90                  ', '.invalid_configs)
91
92   src_dir = args[0]
93   chrome_path = FindChrome(src_dir, options.config, options.verbose)
94   if not chrome_path:
95     sys.stderr.write('Error: Cannot find Chrome. '
96                      'Run again with -v to see where was searched.\n')
97     return 1
98
99   print chrome_path
100   return 0
101
102
103 if __name__ == '__main__':
104   sys.exit(main(sys.argv))