15f9996aaSopenharmony_ci#!/usr/bin/env python 25f9996aaSopenharmony_ci# -*- coding: utf-8 -*- 35f9996aaSopenharmony_ci# Copyright 2014 The Chromium Authors. All rights reserved. 45f9996aaSopenharmony_ci# Use of this source code is governed by a BSD-style license that can be 55f9996aaSopenharmony_ci# found in the LICENSE file. 65f9996aaSopenharmony_ci 75f9996aaSopenharmony_ciimport argparse 85f9996aaSopenharmony_ciimport doctest 95f9996aaSopenharmony_ciimport itertools 105f9996aaSopenharmony_ciimport os 115f9996aaSopenharmony_ciimport subprocess 125f9996aaSopenharmony_ciimport sys 135f9996aaSopenharmony_ci 145f9996aaSopenharmony_ci# This script prints information about the build system, the operating 155f9996aaSopenharmony_ci# system and the iOS or Mac SDK (depending on the platform "iphonesimulator", 165f9996aaSopenharmony_ci# "iphoneos" or "macosx" generally). 175f9996aaSopenharmony_ci 185f9996aaSopenharmony_ci 195f9996aaSopenharmony_cidef split_version(version: str or bytes): 205f9996aaSopenharmony_ci """ 215f9996aaSopenharmony_ci Splits the Xcode version to 3 values. 225f9996aaSopenharmony_ci 235f9996aaSopenharmony_ci >>> list(split_version('8.2.1.1')) 245f9996aaSopenharmony_ci ['8', '2', '1'] 255f9996aaSopenharmony_ci >>> list(split_version('9.3')) 265f9996aaSopenharmony_ci ['9', '3', '0'] 275f9996aaSopenharmony_ci >>> list(split_version('10.0')) 285f9996aaSopenharmony_ci ['10', '0', '0'] 295f9996aaSopenharmony_ci """ 305f9996aaSopenharmony_ci if isinstance(version, bytes): 315f9996aaSopenharmony_ci version = version.decode() 325f9996aaSopenharmony_ci version = version.split('.') 335f9996aaSopenharmony_ci return itertools.islice(itertools.chain(version, itertools.repeat('0')), 0, 3) 345f9996aaSopenharmony_ci 355f9996aaSopenharmony_ci 365f9996aaSopenharmony_cidef format_version(version: str or bytes): 375f9996aaSopenharmony_ci """ 385f9996aaSopenharmony_ci Converts Xcode version to a format required for DTXcode in Info.plist 395f9996aaSopenharmony_ci 405f9996aaSopenharmony_ci >>> format_version('8.2.1') 415f9996aaSopenharmony_ci '0821' 425f9996aaSopenharmony_ci >>> format_version('9.3') 435f9996aaSopenharmony_ci '0930' 445f9996aaSopenharmony_ci >>> format_version('10.0') 455f9996aaSopenharmony_ci '1000' 465f9996aaSopenharmony_ci """ 475f9996aaSopenharmony_ci major, minor, patch = split_version(version) 485f9996aaSopenharmony_ci return ('%2s%s%s' % (major, minor, patch)).replace(' ', '0') 495f9996aaSopenharmony_ci 505f9996aaSopenharmony_ci 515f9996aaSopenharmony_cidef fill_xcode_version(fill_settings: dict) -> dict: 525f9996aaSopenharmony_ci """Fills the Xcode version and build number into |fill_settings|.""" 535f9996aaSopenharmony_ci 545f9996aaSopenharmony_ci try: 555f9996aaSopenharmony_ci lines = subprocess.check_output(['xcodebuild', '-version']).splitlines() 565f9996aaSopenharmony_ci fill_settings['xcode_version'] = format_version(lines[0].split()[-1]) 575f9996aaSopenharmony_ci fill_settings['xcode_version_int'] = int(fill_settings['xcode_version'], 10) 585f9996aaSopenharmony_ci fill_settings['xcode_build'] = lines[-1].split()[-1] 595f9996aaSopenharmony_ci except subprocess.CalledProcessError as cpe: 605f9996aaSopenharmony_ci print(f"Failed to run xcodebuild -version: {cpe}") 615f9996aaSopenharmony_ci 625f9996aaSopenharmony_ci 635f9996aaSopenharmony_cidef fill_machine_os_build(fill_settings: dict): 645f9996aaSopenharmony_ci """Fills OS build number into |fill_settings|.""" 655f9996aaSopenharmony_ci fill_settings['machine_os_build'] = subprocess.check_output( 665f9996aaSopenharmony_ci ['sw_vers', '-buildVersion']).strip() 675f9996aaSopenharmony_ci 685f9996aaSopenharmony_ci 695f9996aaSopenharmony_cidef fill_sdk_path_and_version(fill_settings: dict, platform: str, xcode_version: str or bytes): 705f9996aaSopenharmony_ci """Fills the SDK path and version for |platform| into |fill_settings|.""" 715f9996aaSopenharmony_ci fill_settings['sdk_path'] = subprocess.check_output([ 725f9996aaSopenharmony_ci 'xcrun', '-sdk', platform, '--show-sdk-path']).strip() 735f9996aaSopenharmony_ci fill_settings['sdk_version'] = subprocess.check_output([ 745f9996aaSopenharmony_ci 'xcrun', '-sdk', platform, '--show-sdk-version']).strip() 755f9996aaSopenharmony_ci fill_settings['sdk_platform_path'] = subprocess.check_output([ 765f9996aaSopenharmony_ci 'xcrun', '-sdk', platform, '--show-sdk-platform-path']).strip() 775f9996aaSopenharmony_ci if xcode_version >= '0720': 785f9996aaSopenharmony_ci fill_settings['sdk_build'] = subprocess.check_output([ 795f9996aaSopenharmony_ci 'xcrun', '-sdk', platform, '--show-sdk-build-version']).strip() 805f9996aaSopenharmony_ci else: 815f9996aaSopenharmony_ci fill_settings['sdk_build'] = fill_settings['sdk_version'] 825f9996aaSopenharmony_ci 835f9996aaSopenharmony_ci 845f9996aaSopenharmony_ciif __name__ == '__main__': 855f9996aaSopenharmony_ci doctest.testmod() 865f9996aaSopenharmony_ci 875f9996aaSopenharmony_ci parser = argparse.ArgumentParser() 885f9996aaSopenharmony_ci parser.add_argument("--developer_dir", required=False) 895f9996aaSopenharmony_ci args, unknownargs = parser.parse_known_args() 905f9996aaSopenharmony_ci if args.developer_dir: 915f9996aaSopenharmony_ci os.environ['DEVELOPER_DIR'] = args.developer_dir 925f9996aaSopenharmony_ci 935f9996aaSopenharmony_ci if len(unknownargs) != 1: 945f9996aaSopenharmony_ci sys.stderr.write( 955f9996aaSopenharmony_ci 'usage: %s [iphoneos|iphonesimulator|macosx]\n' % 965f9996aaSopenharmony_ci os.path.basename(sys.argv[0])) 975f9996aaSopenharmony_ci sys.exit(1) 985f9996aaSopenharmony_ci 995f9996aaSopenharmony_ci settings = {} 1005f9996aaSopenharmony_ci fill_machine_os_build(settings) 1015f9996aaSopenharmony_ci fill_xcode_version(settings) 1025f9996aaSopenharmony_ci try: 1035f9996aaSopenharmony_ci fill_sdk_path_and_version(settings, unknownargs[0], settings.get('xcode_version')) 1045f9996aaSopenharmony_ci except ValueError as vle: 1055f9996aaSopenharmony_ci print(f"Error: {vle}") 1065f9996aaSopenharmony_ci 1075f9996aaSopenharmony_ci for key in sorted(settings): 1085f9996aaSopenharmony_ci value = settings.get(key) 1095f9996aaSopenharmony_ci if isinstance(value, bytes): 1105f9996aaSopenharmony_ci value = value.decode() 1115f9996aaSopenharmony_ci if key != 'xcode_version_int': 1125f9996aaSopenharmony_ci value = '"%s"' % value 1135f9996aaSopenharmony_ci print('%s=%s' % (key, value)) 1145f9996aaSopenharmony_ci else: 1155f9996aaSopenharmony_ci print('%s=%d' % (key, value)) 116