| #!/usr/bin/env python3 |
| # Copyright 2014 the V8 project authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| """This program wraps an arbitrary command since gn currently can only execute |
| scripts.""" |
| |
| import subprocess |
| import sys |
| |
| from pathlib import Path |
| |
| # The first two arguments can be used to specify a file to redirect the |
| # stdout to. |
| cmd = sys.argv[1:] |
| kwargs = {} |
| stdout_file = None |
| if cmd and cmd[0] == '--redirect-stdout': |
| stdout_file = Path(cmd[1]) |
| kwargs = dict(stdout=subprocess.PIPE) |
| cmd = cmd[2:] |
| |
| process = subprocess.Popen(cmd, **kwargs) |
| stdout, _ = process.communicate() |
| if stdout_file: |
| with stdout_file.open('w') as f: |
| f.write(stdout.decode('utf-8')) |
| |
| result = process.returncode |
| if result != 0: |
| # Windows error codes such as 0xC0000005 and 0xC0000409 are much easier |
| # to recognize and differentiate in hex. |
| if result < -100: |
| # Print negative hex numbers as positive by adding 2^32. |
| print('Return code is %08X' % (result + 2**32)) |
| else: |
| print('Return code is %d' % result) |
| sys.exit(result) |