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

Unified Diff: pylib/gyp/xcode_emulation.py

Issue 170773002: Cache Xcode version at the module level (Closed) Base URL: http://gyp.googlecode.com/svn/trunk
Patch Set: Created 6 years, 10 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pylib/gyp/xcode_emulation.py
diff --git a/pylib/gyp/xcode_emulation.py b/pylib/gyp/xcode_emulation.py
index 87edc0a2753fe938c2f45be3165f8ef118fa68f6..3fe8ed6c539d6ac6014040572f5f55b58ae4558f 100644
--- a/pylib/gyp/xcode_emulation.py
+++ b/pylib/gyp/xcode_emulation.py
@@ -18,6 +18,11 @@ import sys
import tempfile
from gyp.common import GypError
+# Populated lazily by XcodeVersion, for efficiency, and to fix an issue when
+# "xcodebuild" is called too quickly (it has been found to return incorrect
+# version number).
+XCODE_VERSION_CACHE = []
+
class XcodeSettings(object):
"""A class that understands the gyp 'xcode_settings' object."""
@@ -34,10 +39,6 @@ class XcodeSettings(object):
# cached at class-level for efficiency.
_codesigning_key_cache = {}
- # Populated lazily by _XcodeVersion. Shared by all XcodeSettings, so cached
- # at class-level for efficiency.
- _xcode_version_cache = ()
-
def __init__(self, spec):
self.spec = spec
@@ -868,11 +869,6 @@ class XcodeSettings(object):
def _BuildMachineOSBuild(self):
return GetStdout(['sw_vers', '-buildVersion'])
- def _XcodeVersion(self):
- if len(XcodeSettings._xcode_version_cache) == 0:
- XcodeSettings._xcode_version_cache = XcodeVersion()
- return XcodeSettings._xcode_version_cache
-
def _XcodeIOSDeviceFamily(self, configname):
family = self.xcode_settings[configname].get('TARGETED_DEVICE_FAMILY', '1')
return [int(x) for x in family.split(',')]
@@ -883,7 +879,7 @@ class XcodeSettings(object):
cache = {}
cache['BuildMachineOSBuild'] = self._BuildMachineOSBuild()
- xcode, xcode_build = self._XcodeVersion()
+ xcode, xcode_build = XcodeVersion()
cache['DTXcode'] = xcode
cache['DTXcodeBuild'] = xcode_build
@@ -921,7 +917,7 @@ class XcodeSettings(object):
project, then the environment variable was empty. Starting with this
version, Xcode uses the name of the newest SDK installed.
"""
- xcode_version, xcode_build = self._XcodeVersion()
+ xcode_version, xcode_build = XcodeVersion()
if xcode_version < '0500':
return ''
default_sdk_path = self._XcodeSdkPath('')
@@ -960,7 +956,7 @@ class XcodeSettings(object):
# does not set ARCHS if it is not set in the .gyp file.
if self.isIOS:
return 'i386'
- version, build = self._XcodeVersion()
+ version, build = XcodeVersion()
if version >= '0500':
return 'x86_64'
return 'i386'
@@ -1081,6 +1077,9 @@ def XcodeVersion():
# Component versions: DevToolsCore-1809.0; DevToolsSupport-1806.0
# BuildVersion: 10M2518
# Convert that to '0463', '4H1503'.
+ if XCODE_VERSION_CACHE:
+ assert len(XCODE_VERSION_CACHE) >= 2
+ return tuple(XCODE_VERSION_CACHE[:2])
try:
version_list = GetStdout(['xcodebuild', '-version']).splitlines()
# In some circumstances xcodebuild exits 0 but doesn't return
@@ -1105,6 +1104,7 @@ def XcodeVersion():
version = (version + '0' * (3 - len(version))).zfill(4)
if build:
build = build.split()[-1]
+ XCODE_VERSION_CACHE.extend((version, build))
return version, build
« 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