OLD | NEW |
| (Empty) |
1 #!/usr/bin/env python | |
2 # Copyright (c) 2011 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 tool to run the crash handler executable, used by the buildbot slaves. | |
7 | |
8 When this is run, the current directory (cwd) should be the outer build | |
9 directory (e.g., chrome-release/build/). | |
10 | |
11 This can only be run on Windows. | |
12 | |
13 For a list of command-line options, call this script with '--help'. | |
14 """ | |
15 | |
16 import optparse | |
17 import os | |
18 import sys | |
19 try: | |
20 # pylint: disable=F0401 | |
21 import win32process | |
22 except ImportError: | |
23 print >> sys.stderr, 'This script runs on Windows only.' | |
24 sys.exit(1) | |
25 | |
26 from common import chromium_utils | |
27 from slave import build_directory | |
28 | |
29 USAGE = '%s [options]' % os.path.basename(sys.argv[0]) | |
30 | |
31 | |
32 def main(): | |
33 """Using the target build configuration, run the crash_service.exe | |
34 executable. | |
35 """ | |
36 option_parser = optparse.OptionParser(usage=USAGE) | |
37 | |
38 option_parser.add_option('--target', default='Release', | |
39 help='build target (Debug or Release)') | |
40 option_parser.add_option('--build-dir', help='ignored') | |
41 options, args = option_parser.parse_args() | |
42 options.build_dir = build_directory.GetBuildOutputDirectory() | |
43 | |
44 if args: | |
45 option_parser.error('No args are supported') | |
46 | |
47 build_dir = os.path.abspath(options.build_dir) | |
48 exe_path = os.path.join(build_dir, options.target, 'crash_service.exe') | |
49 if not os.path.exists(exe_path): | |
50 raise chromium_utils.PathNotFound('Unable to find %s' % exe_path) | |
51 | |
52 # crash_service's window can interfere with interactive ui tests. | |
53 cmd = exe_path + ' --no-window' | |
54 | |
55 print '\n' + cmd + '\n', | |
56 | |
57 # We cannot use Popen or os.spawn here because buildbot will wait until | |
58 # the process terminates before going to the next step. Since we want to | |
59 # keep the process alive, we need to explicitly say that we want the | |
60 # process to be detached and that we don't want to inherit handles from | |
61 # the parent process. | |
62 si = win32process.STARTUPINFO() | |
63 details = win32process.CreateProcess(None, cmd, None, None, 0, | |
64 win32process.DETACHED_PROCESS, None, | |
65 None, si) | |
66 print '\nCreated with process id %d\n' % details[2] | |
67 return 0 | |
68 | |
69 | |
70 if '__main__' == __name__: | |
71 sys.exit(main()) | |
OLD | NEW |