xref: /aosp_15_r20/external/cronet/build/apple/xcrun.py (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker#!/usr/bin/env python3
2*6777b538SAndroid Build Coastguard Worker# Copyright 2020 The Chromium Authors
3*6777b538SAndroid Build Coastguard Worker# Use of this source code is governed by a BSD-style license that can be
4*6777b538SAndroid Build Coastguard Worker# found in the LICENSE file.
5*6777b538SAndroid Build Coastguard Worker"""
6*6777b538SAndroid Build Coastguard WorkerWrapper around xcrun adding support for --developer-dir parameter to set
7*6777b538SAndroid Build Coastguard Workerthe DEVELOPER_DIR environment variable, and for converting paths relative
8*6777b538SAndroid Build Coastguard Workerto absolute (since this is required by most of the tool run via xcrun).
9*6777b538SAndroid Build Coastguard Worker"""
10*6777b538SAndroid Build Coastguard Worker
11*6777b538SAndroid Build Coastguard Workerimport argparse
12*6777b538SAndroid Build Coastguard Workerimport os
13*6777b538SAndroid Build Coastguard Workerimport subprocess
14*6777b538SAndroid Build Coastguard Workerimport sys
15*6777b538SAndroid Build Coastguard Worker
16*6777b538SAndroid Build Coastguard Worker
17*6777b538SAndroid Build Coastguard Workerdef xcrun(command, developer_dir):
18*6777b538SAndroid Build Coastguard Worker  environ = dict(os.environ)
19*6777b538SAndroid Build Coastguard Worker  if developer_dir:
20*6777b538SAndroid Build Coastguard Worker    environ['DEVELOPER_DIR'] = os.path.abspath(developer_dir)
21*6777b538SAndroid Build Coastguard Worker
22*6777b538SAndroid Build Coastguard Worker  processed_args = ['/usr/bin/xcrun']
23*6777b538SAndroid Build Coastguard Worker  for arg in command:
24*6777b538SAndroid Build Coastguard Worker    if os.path.exists(arg):
25*6777b538SAndroid Build Coastguard Worker      arg = os.path.abspath(arg)
26*6777b538SAndroid Build Coastguard Worker    processed_args.append(arg)
27*6777b538SAndroid Build Coastguard Worker
28*6777b538SAndroid Build Coastguard Worker  process = subprocess.Popen(processed_args,
29*6777b538SAndroid Build Coastguard Worker                             stdout=subprocess.PIPE,
30*6777b538SAndroid Build Coastguard Worker                             stderr=subprocess.PIPE,
31*6777b538SAndroid Build Coastguard Worker                             universal_newlines=True,
32*6777b538SAndroid Build Coastguard Worker                             env=environ)
33*6777b538SAndroid Build Coastguard Worker
34*6777b538SAndroid Build Coastguard Worker  stdout, stderr = process.communicate()
35*6777b538SAndroid Build Coastguard Worker  sys.stdout.write(stdout)
36*6777b538SAndroid Build Coastguard Worker  if process.returncode:
37*6777b538SAndroid Build Coastguard Worker    sys.stderr.write(stderr)
38*6777b538SAndroid Build Coastguard Worker    sys.exit(process.returncode)
39*6777b538SAndroid Build Coastguard Worker
40*6777b538SAndroid Build Coastguard Worker
41*6777b538SAndroid Build Coastguard Workerdef main(args):
42*6777b538SAndroid Build Coastguard Worker  parser = argparse.ArgumentParser(add_help=False)
43*6777b538SAndroid Build Coastguard Worker  parser.add_argument(
44*6777b538SAndroid Build Coastguard Worker      '--developer-dir',
45*6777b538SAndroid Build Coastguard Worker      help='path to developer dir to use for the invocation of xcrun')
46*6777b538SAndroid Build Coastguard Worker
47*6777b538SAndroid Build Coastguard Worker  parsed, remaining_args = parser.parse_known_args(args)
48*6777b538SAndroid Build Coastguard Worker  xcrun(remaining_args, parsed.developer_dir)
49*6777b538SAndroid Build Coastguard Worker
50*6777b538SAndroid Build Coastguard Worker
51*6777b538SAndroid Build Coastguard Workerif __name__ == '__main__':
52*6777b538SAndroid Build Coastguard Worker  main(sys.argv[1:])
53