OLD | NEW |
1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
2 # Copyright 2016 The Chromium Authors. All rights reserved. | 2 # Copyright 2016 The Chromium Authors. All rights reserved. |
3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
5 | 5 |
6 """ | 6 """ |
7 If should_use_hermetic_xcode.py emits "1", and the current toolchain is out of | 7 If should_use_hermetic_xcode.py emits "1", and the current toolchain is out of |
8 date: | 8 date: |
9 * Downloads the hermetic mac toolchain | 9 * Downloads the hermetic mac toolchain |
10 * Requires gsutil to be configured. | 10 * Requires gsutil to be configured. |
11 * Accepts the license. | 11 * Accepts the license. |
12 * If xcode-select and xcodebuild are not passwordless in sudoers, requires | 12 * If xcode-select and xcodebuild are not passwordless in sudoers, requires |
13 user interaction. | 13 user interaction. |
14 """ | 14 """ |
15 | 15 |
16 import os | 16 import os |
| 17 import platform |
17 import plistlib | 18 import plistlib |
18 import shutil | 19 import shutil |
19 import subprocess | 20 import subprocess |
20 import sys | 21 import sys |
21 import tarfile | 22 import tarfile |
22 import time | 23 import time |
23 import tempfile | 24 import tempfile |
24 import urllib2 | 25 import urllib2 |
25 | 26 |
26 # This can be changed after running /build/package_mac_toolchain.py. | 27 # This can be changed after running /build/package_mac_toolchain.py. |
27 MAC_TOOLCHAIN_VERSION = '5B1008' | 28 MAC_TOOLCHAIN_VERSION = '8E2002' |
28 MAC_TOOLCHAIN_SUB_REVISION = 3 | 29 MAC_TOOLCHAIN_SUB_REVISION = 3 |
29 MAC_TOOLCHAIN_VERSION = '%s-%s' % (MAC_TOOLCHAIN_VERSION, | 30 MAC_TOOLCHAIN_VERSION = '%s-%s' % (MAC_TOOLCHAIN_VERSION, |
30 MAC_TOOLCHAIN_SUB_REVISION) | 31 MAC_TOOLCHAIN_SUB_REVISION) |
| 32 # The toolchain will not be downloaded if the minimum OS version is not met. |
| 33 # 16 is the major version number for macOS 10.12. |
| 34 MAC_MINIMUM_OS_VERSION = 16 |
| 35 |
31 IOS_TOOLCHAIN_VERSION = '8C1002' | 36 IOS_TOOLCHAIN_VERSION = '8C1002' |
32 IOS_TOOLCHAIN_SUB_REVISION = 1 | 37 IOS_TOOLCHAIN_SUB_REVISION = 1 |
33 IOS_TOOLCHAIN_VERSION = '%s-%s' % (IOS_TOOLCHAIN_VERSION, | 38 IOS_TOOLCHAIN_VERSION = '%s-%s' % (IOS_TOOLCHAIN_VERSION, |
34 IOS_TOOLCHAIN_SUB_REVISION) | 39 IOS_TOOLCHAIN_SUB_REVISION) |
35 | 40 |
36 # Absolute path to src/ directory. | 41 # Absolute path to src/ directory. |
37 REPO_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) | 42 REPO_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) |
38 | 43 |
39 # Absolute path to a file with gclient solutions. | 44 # Absolute path to a file with gclient solutions. |
40 GCLIENT_CONFIG = os.path.join(os.path.dirname(REPO_ROOT), '.gclient') | 45 GCLIENT_CONFIG = os.path.join(os.path.dirname(REPO_ROOT), '.gclient') |
41 | 46 |
42 BASE_DIR = os.path.abspath(os.path.dirname(__file__)) | 47 BASE_DIR = os.path.abspath(os.path.dirname(__file__)) |
43 TOOLCHAIN_BUILD_DIR = os.path.join(BASE_DIR, '%s_files', 'Xcode.app') | 48 TOOLCHAIN_BUILD_DIR = os.path.join(BASE_DIR, '%s_files', 'Xcode.app') |
44 STAMP_FILE = os.path.join(BASE_DIR, '%s_files', 'toolchain_build_revision') | 49 STAMP_FILE = os.path.join(BASE_DIR, '%s_files', 'toolchain_build_revision') |
45 TOOLCHAIN_URL = 'gs://chrome-mac-sdk/' | 50 TOOLCHAIN_URL = 'gs://chrome-mac-sdk/' |
46 | 51 |
| 52 |
| 53 def PlatformMeetsHermeticXcodeRequirements(target_os): |
| 54 if target_os == 'ios': |
| 55 return True |
| 56 return int(platform.release().split('.')[0]) >= MAC_MINIMUM_OS_VERSION |
| 57 |
| 58 |
47 def GetPlatforms(): | 59 def GetPlatforms(): |
48 default_target_os = ["mac"] | 60 default_target_os = ["mac"] |
49 try: | 61 try: |
50 env = {} | 62 env = {} |
51 execfile(GCLIENT_CONFIG, env, env) | 63 execfile(GCLIENT_CONFIG, env, env) |
52 return env.get('target_os', default_target_os) | 64 return env.get('target_os', default_target_os) |
53 except: | 65 except: |
54 pass | 66 pass |
55 return default_target_os | 67 return default_target_os |
56 | 68 |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
225 print 'Exception %s' % e | 237 print 'Exception %s' % e |
226 print 'Exiting.' | 238 print 'Exiting.' |
227 return 1 | 239 return 1 |
228 | 240 |
229 | 241 |
230 def main(): | 242 def main(): |
231 if sys.platform != 'darwin': | 243 if sys.platform != 'darwin': |
232 return 0 | 244 return 0 |
233 | 245 |
234 for target_os in GetPlatforms(): | 246 for target_os in GetPlatforms(): |
| 247 if not PlatformMeetsHermeticXcodeRequirements(target_os): |
| 248 print 'OS version does not support toolchain.' |
| 249 continue |
| 250 |
235 if target_os == 'ios': | 251 if target_os == 'ios': |
236 default_version = IOS_TOOLCHAIN_VERSION | 252 default_version = IOS_TOOLCHAIN_VERSION |
237 toolchain_filename = 'ios-toolchain-%s.tgz' | 253 toolchain_filename = 'ios-toolchain-%s.tgz' |
238 else: | 254 else: |
239 default_version = MAC_TOOLCHAIN_VERSION | 255 default_version = MAC_TOOLCHAIN_VERSION |
240 toolchain_filename = 'toolchain-%s.tgz' | 256 toolchain_filename = 'toolchain-%s.tgz' |
241 | 257 |
242 return_value = DownloadHermeticBuild( | 258 return_value = DownloadHermeticBuild( |
243 target_os, default_version, toolchain_filename) | 259 target_os, default_version, toolchain_filename) |
244 if return_value: | 260 if return_value: |
245 return return_value | 261 return return_value |
246 | 262 |
247 return 0 | 263 return 0 |
248 | 264 |
249 | 265 |
250 if __name__ == '__main__': | 266 if __name__ == '__main__': |
251 sys.exit(main()) | 267 sys.exit(main()) |
OLD | NEW |