diff options
author | der richter <der.richter@gmx.de> | 2023-11-07 21:47:30 +0100 |
---|---|---|
committer | der richter <der.richter@gmx.de> | 2023-11-10 14:28:39 +0100 |
commit | 1c98ab623955957c8fa9aea4c39b1f48379e3c92 (patch) | |
tree | b4aed338a3025a64eb1dd426f4f8f1cec043ce5c /TOOLS | |
parent | b4e14b9420f1d419b3a32f287a8ff9d0911ebc85 (diff) | |
download | mpv-1c98ab623955957c8fa9aea4c39b1f48379e3c92.tar.bz2 mpv-1c98ab623955957c8fa9aea4c39b1f48379e3c92.tar.xz |
TOOLS/macos-sdk-version: remove legacy sdk version retrieval
older macOS dev tools were inconsistent with the way how SDK versions
were returned, some truncated the minor versions. in those cases the
SDK version had to be retrieved through the SDK build version.
recently the scheme for the SDK build version changed that our heuristic
for converting it to an SDK version produced wrong version strings.
the stride of the minor version changed from 1 to 2, so SDK versions
ended up higher than they actually were. furthermore macOS 11 was
hardcoded.
since Xcode 12 Apple fixed the SDK version retrieval and it is no longer
truncated when using Xcode as dev tools. Xcode 12 is also the latest
supported version on macOS 10.15, which is also our oldest supported
version. we can remove the old SDK build version conversation and use
the Xcode only tool to retrieve the SDK version in the case Xcode is
used as dev tools. furthermore this als keeps support for Xcode 11 where
the problem wasn't fixed yet, but is still a supported version on macOS
10.15.
Fixes #9907
Diffstat (limited to 'TOOLS')
-rwxr-xr-x | TOOLS/macos-sdk-version.py | 35 |
1 files changed, 10 insertions, 25 deletions
diff --git a/TOOLS/macos-sdk-version.py b/TOOLS/macos-sdk-version.py index fc800fb67e..12e1071d75 100755 --- a/TOOLS/macos-sdk-version.py +++ b/TOOLS/macos-sdk-version.py @@ -6,6 +6,7 @@ import re import os import string +import subprocess import sys from shutil import which from subprocess import check_output @@ -13,11 +14,11 @@ from subprocess import check_output def find_macos_sdk(): sdk = os.environ.get('MACOS_SDK', '') sdk_version = os.environ.get('MACOS_SDK_VERSION', '0.0') - build_version = '0.0' xcrun = which('xcrun') + xcodebuild = which('xcodebuild') if not xcrun: - return sdk,sdk_version,build_version + return sdk,sdk_version if not sdk: sdk = check_output([xcrun, '--sdk', 'macosx', '--show-sdk-path'], @@ -25,36 +26,20 @@ def find_macos_sdk(): # find macOS SDK paths and version if sdk_version == '0.0': - # show-sdk-build-version: is not available on older command line tools, but returns a build version (eg 17A360) - # show-sdk-version: is always available, but on older dev tools it's only the major version - sdk_build_version = check_output([xcrun, '--sdk', 'macosx', - '--show-sdk-build-version'], encoding="UTF-8") - sdk_version = check_output([xcrun, '--sdk', 'macosx', '--show-sdk-version'], encoding="UTF-8") - if sdk: - build_version = '10.10.0' - - # convert build version to a version string - # first 2 two digits are the major version, starting with 15 which is 10.11 (offset of 4) - # 1 char is the minor version, A => 0, B => 1 and ongoing - # last digits are bugfix version, which are not relevant for us - # eg 16E185 => 10.12.4, 17A360 => 10.13, 18B71 => 10.14.1 - if sdk_build_version and isinstance(sdk_build_version, str): - verRe = re.compile("(\d+)(\D+)(\d+)") - version_parts = verRe.search(sdk_build_version) - major = int(version_parts.group(1)) - 4 - minor = string.ascii_lowercase.index(version_parts.group(2).lower()) - build_version = '10.' + str(major) + '.' + str(minor) - # from 20 onwards macOS 11.0 starts - if int(version_parts.group(1)) >= 20: - build_version = '11.' + str(minor) + # use xcode tools when installed, still necessary for xcode versions <12.0 + try: + sdk_version = check_output([xcodebuild, '-sdk', 'macosx', '-version', 'ProductVersion'], + encoding="UTF-8", stderr=subprocess.DEVNULL) + except: + pass if not isinstance(sdk_version, str): sdk_version = '10.10.0' - return sdk,sdk_version,build_version + return sdk.strip(),sdk_version.strip() if __name__ == "__main__": sdk_info = find_macos_sdk() |