| #!/usr/bin/python3 |
| # Copyright 2020 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. |
| """ |
| Wrapper around xcrun adding support for --developer-dir parameter to set |
| the DEVELOPER_DIR environment variable, and for converting paths relative |
| to absolute (since this is required by most of the tool run via xcrun). |
| """ |
| |
| import argparse |
| import os |
| import subprocess |
| import sys |
| |
| |
| def xcrun(command, developer_dir): |
| environ = dict(os.environ) |
| if developer_dir: |
| environ['DEVELOPER_DIR'] = os.path.abspath(developer_dir) |
| |
| processed_args = ['/usr/bin/xcrun'] |
| for arg in command: |
| if os.path.exists(arg): |
| arg = os.path.abspath(arg) |
| processed_args.append(arg) |
| |
| process = subprocess.Popen(processed_args, |
| stdout=subprocess.PIPE, |
| stderr=subprocess.PIPE, |
| universal_newlines=True, |
| env=environ) |
| |
| stdout, stderr = process.communicate() |
| sys.stdout.write(stdout) |
| if process.returncode: |
| sys.stderr.write(stderr) |
| sys.exit(process.returncode) |
| |
| |
| def main(args): |
| parser = argparse.ArgumentParser(add_help=False) |
| parser.add_argument( |
| '--developer-dir', |
| help='path to developer dir to use for the invocation of xcrun') |
| |
| parsed, remaining_args = parser.parse_known_args(args) |
| xcrun(remaining_args, parsed.developer_dir) |
| |
| |
| if __name__ == '__main__': |
| main(sys.argv[1:]) |