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