| #!/usr/bin/env python3.8 |
| # Copyright 2017 The Fuchsia Authors. All rights reserved. |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| """Prints the lowest locally available SDK version greater than or equal to a |
| given minimum sdk version to standard output. If --developer-dir is passed, then |
| the script will use the Xcode toolchain located at DEVELOPER_DIR. |
| |
| Usage: |
| python find_sdk.py [--developer-dir DEVELOPER_DIR] 10.12 |
| """ |
| |
| import argparse |
| import os |
| import re |
| import subprocess |
| import sys |
| |
| |
| def parse_version(version_str): |
| """'10.6' => [10, 6]""" |
| return list(map(int, re.findall(r'(\d+)', version_str))) |
| |
| |
| def main(): |
| parser = argparse.ArgumentParser() |
| parser.add_argument( |
| "--print-sdk-path", |
| action="store_true", |
| dest="print_sdk_path", |
| default=False, |
| help="Print the path to the SDK") |
| parser.add_argument("--developer-dir", help='Path to Xcode') |
| parser.add_argument("min_sdk_version", help="Minimum SDK version") |
| args = parser.parse_args() |
| |
| if args.developer_dir: |
| os.environ['DEVELOPER_DIR'] = args.developer_dir |
| |
| # 'xcrun' always returns the latest available SDK |
| version = subprocess.check_output( |
| ['xcrun', '--sdk', 'macosx', '--show-sdk-version']).strip() |
| version = version.decode() |
| if parse_version(version) < parse_version(args.min_sdk_version): |
| raise Exception( |
| 'SDK version %s is before minimum version %s' % |
| (version, args.min_sdk_version)) |
| if args.print_sdk_path: |
| print(subprocess.check_output( |
| ['xcrun', '--sdk', 'macosx', '--show-sdk-path']).decode().strip()) |
| print(version) |
| |
| return 0 |
| |
| |
| if __name__ == '__main__': |
| if sys.platform != 'darwin': |
| raise Exception("This script only runs on Mac") |
| sys.exit(main()) |