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

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

Issue 14887003: xcode_emulation: work in the absence of xcodebuild Base URL: http://gyp.googlecode.com/svn/trunk
Patch Set: Created 7 years, 7 months 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 | no next file » | 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 gyp.common 10 import gyp.common
(...skipping 218 matching lines...) Expand 10 before | Expand all | Expand 10 after
229 if job.returncode != 0: 229 if job.returncode != 0:
230 sys.stderr.write(out + '\n') 230 sys.stderr.write(out + '\n')
231 raise GypError('Error %d running xcodebuild' % job.returncode) 231 raise GypError('Error %d running xcodebuild' % job.returncode)
232 return out.rstrip('\n') 232 return out.rstrip('\n')
233 233
234 def _SdkPath(self): 234 def _SdkPath(self):
235 sdk_root = self.GetPerTargetSetting('SDKROOT', default='macosx') 235 sdk_root = self.GetPerTargetSetting('SDKROOT', default='macosx')
236 if sdk_root.startswith('/'): 236 if sdk_root.startswith('/'):
237 return sdk_root 237 return sdk_root
238 if sdk_root not in XcodeSettings._sdk_path_cache: 238 if sdk_root not in XcodeSettings._sdk_path_cache:
239 XcodeSettings._sdk_path_cache[sdk_root] = self._GetSdkVersionInfoItem( 239 try:
240 sdk_root, 'Path') 240 XcodeSettings._sdk_path_cache[sdk_root] = self._GetSdkVersionInfoItem(
241 sdk_root, 'Path')
242 except:
243 # if this fails it's because xcodebuild failed, which means
244 # the user is probably on a CLT-only system, where there
245 # is no valid SDK root
246 XcodeSettings._sdk_path_cache[sdk_root] = None
241 return XcodeSettings._sdk_path_cache[sdk_root] 247 return XcodeSettings._sdk_path_cache[sdk_root]
242 248
243 def _AppendPlatformVersionMinFlags(self, lst): 249 def _AppendPlatformVersionMinFlags(self, lst):
244 self._Appendf(lst, 'MACOSX_DEPLOYMENT_TARGET', '-mmacosx-version-min=%s') 250 self._Appendf(lst, 'MACOSX_DEPLOYMENT_TARGET', '-mmacosx-version-min=%s')
245 if 'IPHONEOS_DEPLOYMENT_TARGET' in self._Settings(): 251 if 'IPHONEOS_DEPLOYMENT_TARGET' in self._Settings():
246 # TODO: Implement this better? 252 # TODO: Implement this better?
247 sdk_path_basename = os.path.basename(self._SdkPath()) 253 sdk_path_basename = os.path.basename(self._SdkPath())
248 if sdk_path_basename.lower().startswith('iphonesimulator'): 254 if sdk_path_basename.lower().startswith('iphonesimulator'):
249 self._Appendf(lst, 'IPHONEOS_DEPLOYMENT_TARGET', 255 self._Appendf(lst, 'IPHONEOS_DEPLOYMENT_TARGET',
250 '-mios-simulator-version-min=%s') 256 '-mios-simulator-version-min=%s')
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 if self._Test('GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS', 'YES', 339 if self._Test('GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS', 'YES',
334 default='NO'): 340 default='NO'):
335 cflags.append('-mssse3') # Note 3rd 's'. 341 cflags.append('-mssse3') # Note 3rd 's'.
336 if self._Test('GCC_ENABLE_SSE41_EXTENSIONS', 'YES', default='NO'): 342 if self._Test('GCC_ENABLE_SSE41_EXTENSIONS', 'YES', default='NO'):
337 cflags.append('-msse4.1') 343 cflags.append('-msse4.1')
338 if self._Test('GCC_ENABLE_SSE42_EXTENSIONS', 'YES', default='NO'): 344 if self._Test('GCC_ENABLE_SSE42_EXTENSIONS', 'YES', default='NO'):
339 cflags.append('-msse4.2') 345 cflags.append('-msse4.2')
340 346
341 cflags += self._Settings().get('WARNING_CFLAGS', []) 347 cflags += self._Settings().get('WARNING_CFLAGS', [])
342 348
343 config = self.spec['configurations'][self.configname] 349 if sdk_root:
344 framework_dirs = config.get('mac_framework_dirs', []) 350 config = self.spec['configurations'][self.configname]
345 for directory in framework_dirs: 351 framework_dirs = config.get('mac_framework_dirs', [])
346 cflags.append('-F' + directory.replace('$(SDKROOT)', sdk_root)) 352 for directory in framework_dirs:
353 cflags.append('-F' + directory.replace('$(SDKROOT)', sdk_root))
347 354
348 self.configname = None 355 self.configname = None
349 return cflags 356 return cflags
350 357
351 def GetCflagsC(self, configname): 358 def GetCflagsC(self, configname):
352 """Returns flags that need to be added to .c, and .m compilations.""" 359 """Returns flags that need to be added to .c, and .m compilations."""
353 self.configname = configname 360 self.configname = configname
354 cflags_c = [] 361 cflags_c = []
355 self._Appendf(cflags_c, 'GCC_C_LANGUAGE_STANDARD', '-std=%s') 362 self._Appendf(cflags_c, 'GCC_C_LANGUAGE_STANDARD', '-std=%s')
356 cflags_c += self._Settings().get('OTHER_CFLAGS', []) 363 cflags_c += self._Settings().get('OTHER_CFLAGS', [])
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
566 # Xcode adds the product directory by default. 573 # Xcode adds the product directory by default.
567 ldflags.append('-L' + product_dir) 574 ldflags.append('-L' + product_dir)
568 575
569 install_name = self.GetInstallName() 576 install_name = self.GetInstallName()
570 if install_name: 577 if install_name:
571 ldflags.append('-install_name ' + install_name.replace(' ', r'\ ')) 578 ldflags.append('-install_name ' + install_name.replace(' ', r'\ '))
572 579
573 for rpath in self._Settings().get('LD_RUNPATH_SEARCH_PATHS', []): 580 for rpath in self._Settings().get('LD_RUNPATH_SEARCH_PATHS', []):
574 ldflags.append('-Wl,-rpath,' + rpath) 581 ldflags.append('-Wl,-rpath,' + rpath)
575 582
576 config = self.spec['configurations'][self.configname] 583 if self._SdkPath():
577 framework_dirs = config.get('mac_framework_dirs', []) 584 config = self.spec['configurations'][self.configname]
578 for directory in framework_dirs: 585 framework_dirs = config.get('mac_framework_dirs', [])
579 ldflags.append('-F' + directory.replace('$(SDKROOT)', self._SdkPath())) 586 for directory in framework_dirs:
587 ldflags.append('-F' + directory.replace('$(SDKROOT)', self._SdkPath()))
580 588
581 self.configname = None 589 self.configname = None
582 return ldflags 590 return ldflags
583 591
584 def GetLibtoolflags(self, configname): 592 def GetLibtoolflags(self, configname):
585 """Returns flags that need to be passed to the static linker. 593 """Returns flags that need to be passed to the static linker.
586 594
587 Args: 595 Args:
588 configname: The name of the configuration to get ld flags for. 596 configname: The name of the configuration to get ld flags for.
589 """ 597 """
(...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after
694 702
695 def _AdjustLibrary(self, library): 703 def _AdjustLibrary(self, library):
696 if library.endswith('.framework'): 704 if library.endswith('.framework'):
697 l = '-framework ' + os.path.splitext(os.path.basename(library))[0] 705 l = '-framework ' + os.path.splitext(os.path.basename(library))[0]
698 else: 706 else:
699 m = self.library_re.match(library) 707 m = self.library_re.match(library)
700 if m: 708 if m:
701 l = '-l' + m.group(1) 709 l = '-l' + m.group(1)
702 else: 710 else:
703 l = library 711 l = library
704 return l.replace('$(SDKROOT)', self._SdkPath()) 712 if self._SdkPath():
713 return l.replace('$(SDKROOT)', self._SdkPath())
714 else:
715 return l
705 716
706 def AdjustLibraries(self, libraries): 717 def AdjustLibraries(self, libraries):
707 """Transforms entries like 'Cocoa.framework' in libraries into entries like 718 """Transforms entries like 'Cocoa.framework' in libraries into entries like
708 '-framework Cocoa', 'libcrypto.dylib' into '-lcrypto', etc. 719 '-framework Cocoa', 'libcrypto.dylib' into '-lcrypto', etc.
709 """ 720 """
710 libraries = [ self._AdjustLibrary(library) for library in libraries] 721 libraries = [ self._AdjustLibrary(library) for library in libraries]
711 return libraries 722 return libraries
712 723
713 724
714 class MacPrefixHeader(object): 725 class MacPrefixHeader(object):
(...skipping 360 matching lines...) Expand 10 before | Expand all | Expand 10 after
1075 def GetSpecPostbuildCommands(spec, quiet=False): 1086 def GetSpecPostbuildCommands(spec, quiet=False):
1076 """Returns the list of postbuilds explicitly defined on |spec|, in a form 1087 """Returns the list of postbuilds explicitly defined on |spec|, in a form
1077 executable by a shell.""" 1088 executable by a shell."""
1078 postbuilds = [] 1089 postbuilds = []
1079 for postbuild in spec.get('postbuilds', []): 1090 for postbuild in spec.get('postbuilds', []):
1080 if not quiet: 1091 if not quiet:
1081 postbuilds.append('echo POSTBUILD\\(%s\\) %s' % ( 1092 postbuilds.append('echo POSTBUILD\\(%s\\) %s' % (
1082 spec['target_name'], postbuild['postbuild_name'])) 1093 spec['target_name'], postbuild['postbuild_name']))
1083 postbuilds.append(gyp.common.EncodePOSIXShellList(postbuild['action'])) 1094 postbuilds.append(gyp.common.EncodePOSIXShellList(postbuild['action']))
1084 return postbuilds 1095 return postbuilds
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698