Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2312)

Side by Side Diff: pylib/gyp/xcode_emulation.py

Issue 83463003: Fix gyptest-app for Xcode 5.0.2 (Closed) Base URL: http://gyp.googlecode.com/svn/trunk
Patch Set: Rebase Created 7 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | test/mac/gyptest-app.py » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
11 import gyp.common 11 import gyp.common
12 import os 12 import os
13 import os.path 13 import os.path
14 import re 14 import re
15 import shlex 15 import shlex
16 import subprocess 16 import subprocess
17 import sys 17 import sys
18 import tempfile 18 import tempfile
19 from gyp.common import GypError 19 from gyp.common import GypError
20 20
21 class XcodeSettings(object): 21 class XcodeSettings(object):
22 """A class that understands the gyp 'xcode_settings' object.""" 22 """A class that understands the gyp 'xcode_settings' object."""
23 23
24 # Populated lazily by _SdkPath(). Shared by all XcodeSettings, so cached 24 # Populated lazily by _SdkPath(). Shared by all XcodeSettings, so cached
25 # at class-level for efficiency. 25 # at class-level for efficiency.
26 _sdk_path_cache = {} 26 _sdk_path_cache = {}
27 _sdk_root_cache = {}
27 28
28 # Populated lazily by GetExtraPlistItems(). Shared by all XcodeSettings, so 29 # Populated lazily by GetExtraPlistItems(). Shared by all XcodeSettings, so
29 # cached at class-level for efficiency. 30 # cached at class-level for efficiency.
30 _plist_cache = {} 31 _plist_cache = {}
31 32
32 # Populated lazily by GetIOSPostbuilds. Shared by all XcodeSettings, so 33 # Populated lazily by GetIOSPostbuilds. Shared by all XcodeSettings, so
33 # cached at class-level for efficiency. 34 # cached at class-level for efficiency.
34 _codesigning_key_cache = {} 35 _codesigning_key_cache = {}
35 36
36 # Populated lazily by _XcodeVersion. Shared by all XcodeSettings, so cached 37 # Populated lazily by _XcodeVersion. Shared by all XcodeSettings, so cached
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
283 284
284 def _SdkRoot(self, configname): 285 def _SdkRoot(self, configname):
285 if configname is None: 286 if configname is None:
286 configname = self.configname 287 configname = self.configname
287 return self.GetPerConfigSetting('SDKROOT', configname, default='') 288 return self.GetPerConfigSetting('SDKROOT', configname, default='')
288 289
289 def _SdkPath(self, configname=None): 290 def _SdkPath(self, configname=None):
290 sdk_root = self._SdkRoot(configname) 291 sdk_root = self._SdkRoot(configname)
291 if sdk_root.startswith('/'): 292 if sdk_root.startswith('/'):
292 return sdk_root 293 return sdk_root
294 return self._XcodeSdkPath(sdk_root)
295
296 def _XcodeSdkPath(self, sdk_root):
293 if sdk_root not in XcodeSettings._sdk_path_cache: 297 if sdk_root not in XcodeSettings._sdk_path_cache:
294 XcodeSettings._sdk_path_cache[sdk_root] = self._GetSdkVersionInfoItem( 298 sdk_path = self._GetSdkVersionInfoItem(sdk_root, 'Path')
295 sdk_root, 'Path') 299 XcodeSettings._sdk_path_cache[sdk_root] = sdk_path
300 if sdk_root:
301 XcodeSettings._sdk_root_cache[sdk_path] = sdk_root
296 return XcodeSettings._sdk_path_cache[sdk_root] 302 return XcodeSettings._sdk_path_cache[sdk_root]
297 303
298 def _AppendPlatformVersionMinFlags(self, lst): 304 def _AppendPlatformVersionMinFlags(self, lst):
299 self._Appendf(lst, 'MACOSX_DEPLOYMENT_TARGET', '-mmacosx-version-min=%s') 305 self._Appendf(lst, 'MACOSX_DEPLOYMENT_TARGET', '-mmacosx-version-min=%s')
300 if 'IPHONEOS_DEPLOYMENT_TARGET' in self._Settings(): 306 if 'IPHONEOS_DEPLOYMENT_TARGET' in self._Settings():
301 # TODO: Implement this better? 307 # TODO: Implement this better?
302 sdk_path_basename = os.path.basename(self._SdkPath()) 308 sdk_path_basename = os.path.basename(self._SdkPath())
303 if sdk_path_basename.lower().startswith('iphonesimulator'): 309 if sdk_path_basename.lower().startswith('iphonesimulator'):
304 self._Appendf(lst, 'IPHONEOS_DEPLOYMENT_TARGET', 310 self._Appendf(lst, 'IPHONEOS_DEPLOYMENT_TARGET',
305 '-mios-simulator-version-min=%s') 311 '-mios-simulator-version-min=%s')
(...skipping 572 matching lines...) Expand 10 before | Expand all | Expand 10 after
878 """Returns a dictionary with extra items to insert into Info.plist.""" 884 """Returns a dictionary with extra items to insert into Info.plist."""
879 if configname not in XcodeSettings._plist_cache: 885 if configname not in XcodeSettings._plist_cache:
880 cache = {} 886 cache = {}
881 cache['BuildMachineOSBuild'] = self._BuildMachineOSBuild() 887 cache['BuildMachineOSBuild'] = self._BuildMachineOSBuild()
882 888
883 xcode, xcode_build = self._XcodeVersion() 889 xcode, xcode_build = self._XcodeVersion()
884 cache['DTXcode'] = xcode 890 cache['DTXcode'] = xcode
885 cache['DTXcodeBuild'] = xcode_build 891 cache['DTXcodeBuild'] = xcode_build
886 892
887 sdk_root = self._SdkRoot(configname) 893 sdk_root = self._SdkRoot(configname)
894 if not sdk_root:
895 sdk_root = self._DefaultSdkRoot()
888 cache['DTSDKName'] = sdk_root 896 cache['DTSDKName'] = sdk_root
889 if xcode >= '0430': 897 if xcode >= '0430':
890 cache['DTSDKBuild'] = self._GetSdkVersionInfoItem( 898 cache['DTSDKBuild'] = self._GetSdkVersionInfoItem(
891 sdk_root, 'ProductBuildVersion') 899 sdk_root, 'ProductBuildVersion')
892 else: 900 else:
893 cache['DTSDKBuild'] = cache['BuildMachineOSBuild'] 901 cache['DTSDKBuild'] = cache['BuildMachineOSBuild']
894 902
895 if self.isIOS: 903 if self.isIOS:
896 cache['DTPlatformName'] = cache['DTSDKName'] 904 cache['DTPlatformName'] = cache['DTSDKName']
897 if configname.endswith("iphoneos"): 905 if configname.endswith("iphoneos"):
898 cache['DTPlatformVersion'] = self._GetSdkVersionInfoItem( 906 cache['DTPlatformVersion'] = self._GetSdkVersionInfoItem(
899 sdk_root, 'ProductVersion') 907 sdk_root, 'ProductVersion')
900 cache['CFBundleSupportedPlatforms'] = ['iPhoneOS'] 908 cache['CFBundleSupportedPlatforms'] = ['iPhoneOS']
901 else: 909 else:
902 cache['CFBundleSupportedPlatforms'] = ['iPhoneSimulator'] 910 cache['CFBundleSupportedPlatforms'] = ['iPhoneSimulator']
903 XcodeSettings._plist_cache[configname] = cache 911 XcodeSettings._plist_cache[configname] = cache
904 912
905 # Include extra plist items that are per-target, not per global 913 # Include extra plist items that are per-target, not per global
906 # XcodeSettings. 914 # XcodeSettings.
907 items = dict(XcodeSettings._plist_cache[configname]) 915 items = dict(XcodeSettings._plist_cache[configname])
908 if self.isIOS: 916 if self.isIOS:
909 items['UIDeviceFamily'] = self._XcodeIOSDeviceFamily(configname) 917 items['UIDeviceFamily'] = self._XcodeIOSDeviceFamily(configname)
910 return items 918 return items
911 919
920 def _DefaultSdkRoot(self):
921 """Returns the default SDKROOT to use.
922
923 Prior to version 5.0.0, if SDKROOT was not explicitly set in the Xcode
924 project, then the environment variable was empty. Starting with this
925 version, Xcode uses the name of the newest SDK installed.
926 """
927 if self._XcodeVersion() < '0500':
928 return ''
929 default_sdk_path = self._XcodeSdkPath('')
930 default_sdk_root = XcodeSettings._sdk_root_cache.get(default_sdk_path)
931 if default_sdk_root:
932 return default_sdk_root
933 all_sdks = self._GetStdout(['xcodebuild', '-showsdks'])
934 for line in all_sdks.splitlines():
935 items = line.split()
936 if len(items) >= 3 and items[-2] == '-sdk':
937 sdk_root = items[-1]
938 sdk_path = self._XcodeSdkPath(sdk_root)
939 if sdk_path == default_sdk_path:
940 return sdk_root
941 return ''
942
912 def _DefaultArch(self): 943 def _DefaultArch(self):
913 # For Mac projects, Xcode changed the default value used when ARCHS is not 944 # For Mac projects, Xcode changed the default value used when ARCHS is not
914 # set from "i386" to "x86_64". 945 # set from "i386" to "x86_64".
915 # 946 #
916 # For iOS projects, if ARCHS is unset, it defaults to "armv7 armv7s" when 947 # For iOS projects, if ARCHS is unset, it defaults to "armv7 armv7s" when
917 # building for a device, and the simulator binaries are always build for 948 # building for a device, and the simulator binaries are always build for
918 # "i386". 949 # "i386".
919 # 950 #
920 # For new projects, ARCHS is set to $(ARCHS_STANDARD_INCLUDING_64_BIT), 951 # For new projects, ARCHS is set to $(ARCHS_STANDARD_INCLUDING_64_BIT),
921 # which correspond to "armv7 armv7s arm64", and when building the simulator 952 # which correspond to "armv7 armv7s arm64", and when building the simulator
(...skipping 416 matching lines...) Expand 10 before | Expand all | Expand 10 after
1338 new_config_dict['xcode_settings']['SDKROOT'] = 'iphoneos' 1369 new_config_dict['xcode_settings']['SDKROOT'] = 'iphoneos'
1339 target_dict['configurations'][new_config_name] = new_config_dict 1370 target_dict['configurations'][new_config_name] = new_config_dict
1340 return targets 1371 return targets
1341 1372
1342 def CloneConfigurationForDeviceAndEmulator(target_dicts): 1373 def CloneConfigurationForDeviceAndEmulator(target_dicts):
1343 """If |target_dicts| contains any iOS targets, automatically create -iphoneos 1374 """If |target_dicts| contains any iOS targets, automatically create -iphoneos
1344 targets for iOS device builds.""" 1375 targets for iOS device builds."""
1345 if _HasIOSTarget(target_dicts): 1376 if _HasIOSTarget(target_dicts):
1346 return _AddIOSDeviceConfigurations(target_dicts) 1377 return _AddIOSDeviceConfigurations(target_dicts)
1347 return target_dicts 1378 return target_dicts
OLDNEW
« no previous file with comments | « no previous file | test/mac/gyptest-app.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698