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