From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Samuel Attard Date: Wed, 5 Oct 2022 06:03:23 +0000 Subject: build: set DTSDKBuild correctly when generating plist files Currently we set DTSDKBuild to the version of the SDK used to build Chromium. This value is supposed to be the build version (this is what xcode sets it to for instance). We read this value out of the SDK directly and use it instead. Change-Id: Ieb7990f13095683ad8c026f027b2605ae39523a4 diff --git a/build/config/mac/mac_sdk.gni b/build/config/mac/mac_sdk.gni index 98bedab98c2cd808387bca779221fab7297b37ee..d39350ed74d5c9493006266375664a9808e97af7 100644 --- a/build/config/mac/mac_sdk.gni +++ b/build/config/mac/mac_sdk.gni @@ -40,6 +40,11 @@ declare_args() { # will fail. mac_sdk_official_version = "12.3" + # The SDK build version used when making official builds. This is a single + # exact version found at "System/Library/CoreServices/SystemVersion.plist" + # inside the SDK. + mac_sdk_official_build_version = "21E226" + # Production builds should use hermetic Xcode. If you want to do production # builds with system Xcode to test new SDKs, set this. # Don't set this on any bots. @@ -103,11 +108,13 @@ if (use_system_xcode) { find_sdk_args = [ "--print_sdk_path", "--print_bin_path", + "--print_sdk_build", mac_sdk_min, ] find_sdk_lines = exec_script("//build/mac/find_sdk.py", find_sdk_args, "list lines") - mac_sdk_version = find_sdk_lines[2] + mac_sdk_version = find_sdk_lines[3] + mac_sdk_build_version = find_sdk_lines[2] if (mac_sdk_path == "") { mac_sdk_path = find_sdk_lines[0] mac_bin_path = find_sdk_lines[1] @@ -116,6 +123,7 @@ if (use_system_xcode) { } } else { mac_sdk_version = mac_sdk_official_version + mac_sdk_build_version = mac_sdk_official_build_version _dev = _hermetic_xcode_path + "/Contents/Developer" _sdk = "MacOSX${mac_sdk_version}.sdk" mac_sdk_path = _dev + "/Platforms/MacOSX.platform/Developer/SDKs/$_sdk" diff --git a/build/config/mac/rules.gni b/build/config/mac/rules.gni index fbd84cc68bf6b19cf99d4010331bb469a1d33194..f613a049bdfa643d01b05e3cfcae72dc5ad9da97 100644 --- a/build/config/mac/rules.gni +++ b/build/config/mac/rules.gni @@ -41,7 +41,7 @@ template("mac_info_plist") { apple_info_plist(target_name) { format = "xml1" extra_substitutions = [ - "MAC_SDK_BUILD=$mac_sdk_version", + "MAC_SDK_BUILD=$mac_sdk_build_version", "MAC_SDK_NAME=$mac_sdk_name$mac_sdk_version", "MACOSX_DEPLOYMENT_TARGET=$mac_deployment_target", "CHROMIUM_MIN_SYSTEM_VERSION=$mac_min_system_version", diff --git a/build/mac/find_sdk.py b/build/mac/find_sdk.py index bb36874fd44d441d07c9f150288c1d21b215d550..50c1e3c1db90ede392ba6f7903fe48e8e5de2d77 100755 --- a/build/mac/find_sdk.py +++ b/build/mac/find_sdk.py @@ -24,6 +24,7 @@ Sample Output: from __future__ import print_function import os +import plistlib import re import subprocess import sys @@ -51,6 +52,9 @@ def main(): parser.add_option("--print_bin_path", action="store_true", dest="print_bin_path", default=False, help="Additionally print the path the toolchain bin dir.") + parser.add_option("--print_sdk_build", + action="store_true", dest="print_sdk_build", default=False, + help="Additionally print the build version of the SDK.") options, args = parser.parse_args() if len(args) != 1: parser.error('Please specify a minimum SDK version') @@ -80,20 +84,30 @@ def main(): if not sdks: raise Exception('No %s+ SDK found' % min_sdk_version) best_sdk = sorted(sdks, key=parse_version)[0] + sdk_name = 'MacOSX' + best_sdk + '.sdk' + sdk_path = os.path.join(sdk_dir, sdk_name) if options.print_sdk_path: - sdk_name = 'MacOSX' + best_sdk + '.sdk' - print(os.path.join(sdk_dir, sdk_name)) + print(sdk_path) if options.print_bin_path: bin_path = 'Toolchains/XcodeDefault.xctoolchain/usr/bin/' print(os.path.join(dev_dir, bin_path)) - return best_sdk + if options.print_sdk_build: + system_version_plist = os.path.join(sdk_path, + 'System/Library/CoreServices/SystemVersion.plist') + with open(system_version_plist, 'rb') as f: + system_version_info = plistlib.load(f) + if 'ProductBuildVersion' not in system_version_info: + raise Exception('Failed to determine ProductBuildVersion' + + 'for SDK at path %s' % system_version_plist) + print(system_version_info['ProductBuildVersion']) + + print(best_sdk) if __name__ == '__main__': if sys.platform != 'darwin': raise Exception("This script only runs on Mac") - print(main()) - sys.exit(0) + sys.exit(main())