Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 # Copyright (c) 2012 Google Inc. All rights reserved. | 1 # Copyright (c) 2012 Google Inc. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 """ | 5 """ |
| 6 This module contains classes that help to emulate xcodebuild behavior on top of | 6 This module contains classes that help to emulate xcodebuild behavior on top of |
| 7 other build systems, such as make and ninja. | 7 other build systems, such as make and ninja. |
| 8 """ | 8 """ |
| 9 | 9 |
| 10 import copy | 10 import copy |
| (...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 108 For "iphoneos" and "iphonesimulator" SDKROOT, 64-bit architectures are part | 108 For "iphoneos" and "iphonesimulator" SDKROOT, 64-bit architectures are part |
| 109 of $(ARCHS_STANDARD_INCLUDING_64_BIT) from Xcode 5.0. From Xcode 5.1, they | 109 of $(ARCHS_STANDARD_INCLUDING_64_BIT) from Xcode 5.0. From Xcode 5.1, they |
| 110 are also part of $(ARCHS_STANDARD). | 110 are also part of $(ARCHS_STANDARD). |
| 111 | 111 |
| 112 All thoses rules are coded in the construction of the |XcodeArchsDefault| | 112 All thoses rules are coded in the construction of the |XcodeArchsDefault| |
| 113 object to use depending on the version of Xcode detected. The object is | 113 object to use depending on the version of Xcode detected. The object is |
| 114 for performance reason.""" | 114 for performance reason.""" |
| 115 global XCODE_ARCHS_DEFAULT_CACHE | 115 global XCODE_ARCHS_DEFAULT_CACHE |
| 116 if XCODE_ARCHS_DEFAULT_CACHE: | 116 if XCODE_ARCHS_DEFAULT_CACHE: |
| 117 return XCODE_ARCHS_DEFAULT_CACHE | 117 return XCODE_ARCHS_DEFAULT_CACHE |
| 118 # pylint: disable=unpacking-non-sequence | |
| 118 xcode_version, _ = XcodeVersion() | 119 xcode_version, _ = XcodeVersion() |
| 119 if xcode_version < '0500': | 120 if xcode_version < '0500': |
| 120 XCODE_ARCHS_DEFAULT_CACHE = XcodeArchsDefault( | 121 XCODE_ARCHS_DEFAULT_CACHE = XcodeArchsDefault( |
| 121 '$(ARCHS_STANDARD)', | 122 '$(ARCHS_STANDARD)', |
| 122 XcodeArchsVariableMapping(['i386']), | 123 XcodeArchsVariableMapping(['i386']), |
| 123 XcodeArchsVariableMapping(['i386']), | 124 XcodeArchsVariableMapping(['i386']), |
| 124 XcodeArchsVariableMapping(['armv7'])) | 125 XcodeArchsVariableMapping(['armv7'])) |
| 125 elif xcode_version < '0510': | 126 elif xcode_version < '0510': |
| 126 XCODE_ARCHS_DEFAULT_CACHE = XcodeArchsDefault( | 127 XCODE_ARCHS_DEFAULT_CACHE = XcodeArchsDefault( |
| 127 '$(ARCHS_STANDARD_INCLUDING_64_BIT)', | 128 '$(ARCHS_STANDARD_INCLUDING_64_BIT)', |
| (...skipping 578 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 706 return install_name | 707 return install_name |
| 707 | 708 |
| 708 def _MapLinkerFlagFilename(self, ldflag, gyp_to_build_path): | 709 def _MapLinkerFlagFilename(self, ldflag, gyp_to_build_path): |
| 709 """Checks if ldflag contains a filename and if so remaps it from | 710 """Checks if ldflag contains a filename and if so remaps it from |
| 710 gyp-directory-relative to build-directory-relative.""" | 711 gyp-directory-relative to build-directory-relative.""" |
| 711 # This list is expanded on demand. | 712 # This list is expanded on demand. |
| 712 # They get matched as: | 713 # They get matched as: |
| 713 # -exported_symbols_list file | 714 # -exported_symbols_list file |
| 714 # -Wl,exported_symbols_list file | 715 # -Wl,exported_symbols_list file |
| 715 # -Wl,exported_symbols_list,file | 716 # -Wl,exported_symbols_list,file |
| 716 LINKER_FILE = '(\S+)' | 717 LINKER_FILE = r'r(\S+)' |
| 717 WORD = '\S+' | 718 WORD = r'r\S+' |
| 718 linker_flags = [ | 719 linker_flags = [ |
| 719 ['-exported_symbols_list', LINKER_FILE], # Needed for NaCl. | 720 ['-exported_symbols_list', LINKER_FILE], # Needed for NaCl. |
| 720 ['-unexported_symbols_list', LINKER_FILE], | 721 ['-unexported_symbols_list', LINKER_FILE], |
| 721 ['-reexported_symbols_list', LINKER_FILE], | 722 ['-reexported_symbols_list', LINKER_FILE], |
| 722 ['-sectcreate', WORD, WORD, LINKER_FILE], # Needed for remoting. | 723 ['-sectcreate', WORD, WORD, LINKER_FILE], # Needed for remoting. |
| 723 ] | 724 ] |
| 724 for flag_pattern in linker_flags: | 725 for flag_pattern in linker_flags: |
| 725 regex = re.compile('(?:-Wl,)?' + '[ ,]'.join(flag_pattern)) | 726 regex = re.compile('(?:-Wl,)?' + '[ ,]'.join(flag_pattern)) |
| 726 m = regex.match(ldflag) | 727 m = regex.match(ldflag) |
| 727 if m: | 728 if m: |
| (...skipping 291 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1019 def _XcodeIOSDeviceFamily(self, configname): | 1020 def _XcodeIOSDeviceFamily(self, configname): |
| 1020 family = self.xcode_settings[configname].get('TARGETED_DEVICE_FAMILY', '1') | 1021 family = self.xcode_settings[configname].get('TARGETED_DEVICE_FAMILY', '1') |
| 1021 return [int(x) for x in family.split(',')] | 1022 return [int(x) for x in family.split(',')] |
| 1022 | 1023 |
| 1023 def GetExtraPlistItems(self, configname=None): | 1024 def GetExtraPlistItems(self, configname=None): |
| 1024 """Returns a dictionary with extra items to insert into Info.plist.""" | 1025 """Returns a dictionary with extra items to insert into Info.plist.""" |
| 1025 if configname not in XcodeSettings._plist_cache: | 1026 if configname not in XcodeSettings._plist_cache: |
| 1026 cache = {} | 1027 cache = {} |
| 1027 cache['BuildMachineOSBuild'] = self._BuildMachineOSBuild() | 1028 cache['BuildMachineOSBuild'] = self._BuildMachineOSBuild() |
| 1028 | 1029 |
| 1030 # pylint: disable=unpacking-non-sequence | |
|
scottmg
2014/11/20 07:29:12
there seems to be enough of these, maybe it would
Shezan Baig (Bloomberg)
2014/11/20 07:48:22
Makes sense, will do.
| |
| 1029 xcode, xcode_build = XcodeVersion() | 1031 xcode, xcode_build = XcodeVersion() |
| 1030 cache['DTXcode'] = xcode | 1032 cache['DTXcode'] = xcode |
| 1031 cache['DTXcodeBuild'] = xcode_build | 1033 cache['DTXcodeBuild'] = xcode_build |
| 1032 | 1034 |
| 1033 sdk_root = self._SdkRoot(configname) | 1035 sdk_root = self._SdkRoot(configname) |
| 1034 if not sdk_root: | 1036 if not sdk_root: |
| 1035 sdk_root = self._DefaultSdkRoot() | 1037 sdk_root = self._DefaultSdkRoot() |
| 1036 cache['DTSDKName'] = sdk_root | 1038 cache['DTSDKName'] = sdk_root |
| 1037 if xcode >= '0430': | 1039 if xcode >= '0430': |
| 1038 cache['DTSDKBuild'] = self._GetSdkVersionInfoItem( | 1040 cache['DTSDKBuild'] = self._GetSdkVersionInfoItem( |
| (...skipping 18 matching lines...) Expand all Loading... | |
| 1057 items['UIDeviceFamily'] = self._XcodeIOSDeviceFamily(configname) | 1059 items['UIDeviceFamily'] = self._XcodeIOSDeviceFamily(configname) |
| 1058 return items | 1060 return items |
| 1059 | 1061 |
| 1060 def _DefaultSdkRoot(self): | 1062 def _DefaultSdkRoot(self): |
| 1061 """Returns the default SDKROOT to use. | 1063 """Returns the default SDKROOT to use. |
| 1062 | 1064 |
| 1063 Prior to version 5.0.0, if SDKROOT was not explicitly set in the Xcode | 1065 Prior to version 5.0.0, if SDKROOT was not explicitly set in the Xcode |
| 1064 project, then the environment variable was empty. Starting with this | 1066 project, then the environment variable was empty. Starting with this |
| 1065 version, Xcode uses the name of the newest SDK installed. | 1067 version, Xcode uses the name of the newest SDK installed. |
| 1066 """ | 1068 """ |
| 1069 # pylint: disable=unpacking-non-sequence | |
| 1067 xcode_version, xcode_build = XcodeVersion() | 1070 xcode_version, xcode_build = XcodeVersion() |
| 1068 if xcode_version < '0500': | 1071 if xcode_version < '0500': |
| 1069 return '' | 1072 return '' |
| 1070 default_sdk_path = self._XcodeSdkPath('') | 1073 default_sdk_path = self._XcodeSdkPath('') |
| 1071 default_sdk_root = XcodeSettings._sdk_root_cache.get(default_sdk_path) | 1074 default_sdk_root = XcodeSettings._sdk_root_cache.get(default_sdk_path) |
| 1072 if default_sdk_root: | 1075 if default_sdk_root: |
| 1073 return default_sdk_root | 1076 return default_sdk_root |
| 1074 try: | 1077 try: |
| 1075 all_sdks = GetStdout(['xcodebuild', '-showsdks']) | 1078 all_sdks = GetStdout(['xcodebuild', '-showsdks']) |
| 1076 except: | 1079 except: |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1206 if XCODE_VERSION_CACHE: | 1209 if XCODE_VERSION_CACHE: |
| 1207 return XCODE_VERSION_CACHE | 1210 return XCODE_VERSION_CACHE |
| 1208 try: | 1211 try: |
| 1209 version_list = GetStdout(['xcodebuild', '-version']).splitlines() | 1212 version_list = GetStdout(['xcodebuild', '-version']).splitlines() |
| 1210 # In some circumstances xcodebuild exits 0 but doesn't return | 1213 # In some circumstances xcodebuild exits 0 but doesn't return |
| 1211 # the right results; for example, a user on 10.7 or 10.8 with | 1214 # the right results; for example, a user on 10.7 or 10.8 with |
| 1212 # a bogus path set via xcode-select | 1215 # a bogus path set via xcode-select |
| 1213 # In that case this may be a CLT-only install so fall back to | 1216 # In that case this may be a CLT-only install so fall back to |
| 1214 # checking that version. | 1217 # checking that version. |
| 1215 if len(version_list) < 2: | 1218 if len(version_list) < 2: |
| 1216 raise GypError, "xcodebuild returned unexpected results" | 1219 raise GypError("xcodebuild returned unexpected results") |
| 1217 except: | 1220 except: |
| 1218 version = CLTVersion() | 1221 version = CLTVersion() |
| 1219 if version: | 1222 if version: |
| 1220 version = re.match('(\d\.\d\.?\d*)', version).groups()[0] | 1223 version = re.match(r'(\d\.\d\.?\d*)', version).groups()[0] |
| 1221 else: | 1224 else: |
| 1222 raise GypError, "No Xcode or CLT version detected!" | 1225 raise GypError("No Xcode or CLT version detected!") |
| 1223 # The CLT has no build information, so we return an empty string. | 1226 # The CLT has no build information, so we return an empty string. |
| 1224 version_list = [version, ''] | 1227 version_list = [version, ''] |
| 1225 version = version_list[0] | 1228 version = version_list[0] |
| 1226 build = version_list[-1] | 1229 build = version_list[-1] |
| 1227 # Be careful to convert "4.2" to "0420": | 1230 # Be careful to convert "4.2" to "0420": |
| 1228 version = version.split()[-1].replace('.', '') | 1231 version = version.split()[-1].replace('.', '') |
| 1229 version = (version + '0' * (3 - len(version))).zfill(4) | 1232 version = (version + '0' * (3 - len(version))).zfill(4) |
| 1230 if build: | 1233 if build: |
| 1231 build = build.split()[-1] | 1234 build = build.split()[-1] |
| 1232 XCODE_VERSION_CACHE = (version, build) | 1235 XCODE_VERSION_CACHE = (version, build) |
| (...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1572 if toolset == 'target': | 1575 if toolset == 'target': |
| 1573 iphoneos_config_dict['xcode_settings']['SDKROOT'] = 'iphoneos' | 1576 iphoneos_config_dict['xcode_settings']['SDKROOT'] = 'iphoneos' |
| 1574 return targets | 1577 return targets |
| 1575 | 1578 |
| 1576 def CloneConfigurationForDeviceAndEmulator(target_dicts): | 1579 def CloneConfigurationForDeviceAndEmulator(target_dicts): |
| 1577 """If |target_dicts| contains any iOS targets, automatically create -iphoneos | 1580 """If |target_dicts| contains any iOS targets, automatically create -iphoneos |
| 1578 targets for iOS device builds.""" | 1581 targets for iOS device builds.""" |
| 1579 if _HasIOSTarget(target_dicts): | 1582 if _HasIOSTarget(target_dicts): |
| 1580 return _AddIOSDeviceConfigurations(target_dicts) | 1583 return _AddIOSDeviceConfigurations(target_dicts) |
| 1581 return target_dicts | 1584 return target_dicts |
| OLD | NEW |