#!/usr/bin/env fuchsia-vendored-python
# 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())
