OLD | NEW |
| 1 #!/usr/bin/env python |
1 # Copyright 2014 The Chromium Authors. All rights reserved. | 2 # Copyright 2014 The Chromium Authors. All rights reserved. |
2 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
3 # found in the LICENSE file. | 4 # found in the LICENSE file. |
4 | 5 |
5 """Helper script for GN to run an arbitrary binary. See compiled_action.gni. | 6 """Helper script for GN to run an arbitrary binary. See compiled_action.gni. |
6 | 7 |
7 Run with: | 8 Run with: |
8 python gn_run_binary.py <binary_name> [args ...] | 9 python gn_run_binary.py <binary_name> [args ...] |
9 """ | 10 """ |
10 | 11 |
11 import os | 12 import os |
12 import sys | 13 import sys |
13 import subprocess | 14 import subprocess |
14 | 15 |
15 # Run a command, swallowing the output unless there is an error. | 16 # Run a command, swallowing the output unless there is an error. |
16 def run_command(command): | 17 def run_command(command): |
17 try: | 18 try: |
18 subprocess.check_output(command, stderr=subprocess.STDOUT) | 19 subprocess.check_output(command, stderr=subprocess.STDOUT) |
19 return 0 | 20 return 0 |
20 except subprocess.CalledProcessError as e: | 21 except subprocess.CalledProcessError as e: |
21 return ("Command failed: " + ' '.join(command) + "\n" + | 22 return ("Command failed: " + ' '.join(command) + "\n" + |
22 "output: " + e.output) | 23 "output: " + e.output) |
23 | 24 |
24 # Unless the path is absolute, this script is designed to run binaries produced | 25 def main(argv): |
25 # by the current build. We always prefix it with "./" to avoid picking up system | 26 # Unless the path is absolute, this script is designed to run binaries |
26 # versions that might also be on the path. | 27 # produced by the current build. We always prefix it with "./" to avoid |
27 if os.path.isabs(sys.argv[1]): | 28 # picking up system versions that might also be on the path. |
28 path = sys.argv[1] | 29 if os.path.isabs(argv[1]): |
29 else: | 30 path = argv[1] |
30 path = './' + sys.argv[1] | 31 else: |
| 32 path = './' + argv[1] |
31 | 33 |
32 # The rest of the arguements are passed directly to the executable. | 34 if not os.path.isfile(path): |
33 args = [path] + sys.argv[2:] | 35 print "Binary not found: " + path |
| 36 return 0 |
34 | 37 |
35 sys.exit(run_command(args)) | 38 # The rest of the arguements are passed directly to the executable. |
| 39 args = [path] + argv[2:] |
| 40 |
| 41 result = run_command(args) |
| 42 if result != 0: |
| 43 print result |
| 44 return 0 |
| 45 |
| 46 if __name__ == '__main__': |
| 47 sys.exit(main(sys.argv)) |
OLD | NEW |