| 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 |  | 
| 18 import plistlib | 17 import plistlib | 
| 19 import shutil | 18 import shutil | 
| 20 import subprocess | 19 import subprocess | 
| 21 import sys | 20 import sys | 
| 22 import tarfile | 21 import tarfile | 
| 23 import time | 22 import time | 
| 24 import tempfile | 23 import tempfile | 
| 25 import urllib2 | 24 import urllib2 | 
| 26 | 25 | 
| 27 # This can be changed after running /build/package_mac_toolchain.py. | 26 # This can be changed after running /build/package_mac_toolchain.py. | 
| 28 MAC_TOOLCHAIN_VERSION = '8E2002' | 27 MAC_TOOLCHAIN_VERSION = '5B1008' | 
| 29 MAC_TOOLCHAIN_SUB_REVISION = 3 | 28 MAC_TOOLCHAIN_SUB_REVISION = 3 | 
| 30 MAC_TOOLCHAIN_VERSION = '%s-%s' % (MAC_TOOLCHAIN_VERSION, | 29 MAC_TOOLCHAIN_VERSION = '%s-%s' % (MAC_TOOLCHAIN_VERSION, | 
| 31                                    MAC_TOOLCHAIN_SUB_REVISION) | 30                                    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 |  | 
| 36 IOS_TOOLCHAIN_VERSION = '8C1002' | 31 IOS_TOOLCHAIN_VERSION = '8C1002' | 
| 37 IOS_TOOLCHAIN_SUB_REVISION = 1 | 32 IOS_TOOLCHAIN_SUB_REVISION = 1 | 
| 38 IOS_TOOLCHAIN_VERSION = '%s-%s' % (IOS_TOOLCHAIN_VERSION, | 33 IOS_TOOLCHAIN_VERSION = '%s-%s' % (IOS_TOOLCHAIN_VERSION, | 
| 39                                    IOS_TOOLCHAIN_SUB_REVISION) | 34                                    IOS_TOOLCHAIN_SUB_REVISION) | 
| 40 | 35 | 
| 41 # Absolute path to src/ directory. | 36 # Absolute path to src/ directory. | 
| 42 REPO_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) | 37 REPO_ROOT = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) | 
| 43 | 38 | 
| 44 # Absolute path to a file with gclient solutions. | 39 # Absolute path to a file with gclient solutions. | 
| 45 GCLIENT_CONFIG = os.path.join(os.path.dirname(REPO_ROOT), '.gclient') | 40 GCLIENT_CONFIG = os.path.join(os.path.dirname(REPO_ROOT), '.gclient') | 
| 46 | 41 | 
| 47 BASE_DIR = os.path.abspath(os.path.dirname(__file__)) | 42 BASE_DIR = os.path.abspath(os.path.dirname(__file__)) | 
| 48 TOOLCHAIN_BUILD_DIR = os.path.join(BASE_DIR, '%s_files', 'Xcode.app') | 43 TOOLCHAIN_BUILD_DIR = os.path.join(BASE_DIR, '%s_files', 'Xcode.app') | 
| 49 STAMP_FILE = os.path.join(BASE_DIR, '%s_files', 'toolchain_build_revision') | 44 STAMP_FILE = os.path.join(BASE_DIR, '%s_files', 'toolchain_build_revision') | 
| 50 TOOLCHAIN_URL = 'gs://chrome-mac-sdk/' | 45 TOOLCHAIN_URL = 'gs://chrome-mac-sdk/' | 
| 51 | 46 | 
| 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 |  | 
| 59 def GetPlatforms(): | 47 def GetPlatforms(): | 
| 60   default_target_os = ["mac"] | 48   default_target_os = ["mac"] | 
| 61   try: | 49   try: | 
| 62     env = {} | 50     env = {} | 
| 63     execfile(GCLIENT_CONFIG, env, env) | 51     execfile(GCLIENT_CONFIG, env, env) | 
| 64     return env.get('target_os', default_target_os) | 52     return env.get('target_os', default_target_os) | 
| 65   except: | 53   except: | 
| 66     pass | 54     pass | 
| 67   return default_target_os | 55   return default_target_os | 
| 68 | 56 | 
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 237     print 'Exception %s' % e | 225     print 'Exception %s' % e | 
| 238     print 'Exiting.' | 226     print 'Exiting.' | 
| 239     return 1 | 227     return 1 | 
| 240 | 228 | 
| 241 | 229 | 
| 242 def main(): | 230 def main(): | 
| 243   if sys.platform != 'darwin': | 231   if sys.platform != 'darwin': | 
| 244     return 0 | 232     return 0 | 
| 245 | 233 | 
| 246   for target_os in GetPlatforms(): | 234   for target_os in GetPlatforms(): | 
| 247     if not PlatformMeetsHermeticXcodeRequirements(target_os): |  | 
| 248       print 'OS version does not support toolchain.' |  | 
| 249       continue |  | 
| 250 |  | 
| 251     if target_os == 'ios': | 235     if target_os == 'ios': | 
| 252       default_version = IOS_TOOLCHAIN_VERSION | 236       default_version = IOS_TOOLCHAIN_VERSION | 
| 253       toolchain_filename = 'ios-toolchain-%s.tgz' | 237       toolchain_filename = 'ios-toolchain-%s.tgz' | 
| 254     else: | 238     else: | 
| 255       default_version = MAC_TOOLCHAIN_VERSION | 239       default_version = MAC_TOOLCHAIN_VERSION | 
| 256       toolchain_filename = 'toolchain-%s.tgz' | 240       toolchain_filename = 'toolchain-%s.tgz' | 
| 257 | 241 | 
| 258     return_value = DownloadHermeticBuild( | 242     return_value = DownloadHermeticBuild( | 
| 259         target_os, default_version, toolchain_filename) | 243         target_os, default_version, toolchain_filename) | 
| 260     if return_value: | 244     if return_value: | 
| 261       return return_value | 245       return return_value | 
| 262 | 246 | 
| 263   return 0 | 247   return 0 | 
| 264 | 248 | 
| 265 | 249 | 
| 266 if __name__ == '__main__': | 250 if __name__ == '__main__': | 
| 267   sys.exit(main()) | 251   sys.exit(main()) | 
| OLD | NEW | 
|---|