diff options
Diffstat (limited to 'third_party/python/gyp/test/lib/TestMac.py')
-rw-r--r-- | third_party/python/gyp/test/lib/TestMac.py | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/third_party/python/gyp/test/lib/TestMac.py b/third_party/python/gyp/test/lib/TestMac.py new file mode 100644 index 0000000000..d13afd5781 --- /dev/null +++ b/third_party/python/gyp/test/lib/TestMac.py @@ -0,0 +1,76 @@ +# Copyright (c) 2014 Google Inc. All rights reserved. +# Use of this source code is governed by a BSD-style license that can be +# found in the LICENSE file. + +""" +TestMac.py: a collection of helper function shared between test on Mac OS X. +""" + +from __future__ import print_function + +import re +import subprocess + +__all__ = ['Xcode', 'CheckFileType'] + + +def CheckFileType(test, file, archs): + """Check that |file| contains exactly |archs| or fails |test|.""" + proc = subprocess.Popen(['lipo', '-info', file], stdout=subprocess.PIPE) + o = proc.communicate()[0].decode('utf-8').strip() + assert not proc.returncode + if len(archs) == 1: + pattern = re.compile('^Non-fat file: (.*) is architecture: (.*)$') + else: + pattern = re.compile('^Architectures in the fat file: (.*) are: (.*)$') + match = pattern.match(o) + if match is None: + print('Ouput does not match expected pattern: %s' % (pattern.pattern)) + test.fail_test() + else: + found_file, found_archs = match.groups() + if found_file != file or set(found_archs.split()) != set(archs): + print('Expected file %s with arch %s, got %s with arch %s' % ( + file, ' '.join(archs), found_file, found_archs)) + test.fail_test() + + +class XcodeInfo(object): + """Simplify access to Xcode informations.""" + + def __init__(self): + self._cache = {} + + def _XcodeVersion(self): + lines = subprocess.check_output(['xcodebuild', '-version']).splitlines() + version = ''.join(lines[0].decode('utf-8').split()[-1].split('.')) + version = (version + '0' * (3 - len(version))).zfill(4) + return version, lines[-1].split()[-1] + + def Version(self): + if 'Version' not in self._cache: + self._cache['Version'], self._cache['Build'] = self._XcodeVersion() + return self._cache['Version'] + + def Build(self): + if 'Build' not in self._cache: + self._cache['Version'], self._cache['Build'] = self._XcodeVersion() + return self._cache['Build'] + + def SDKBuild(self): + if 'SDKBuild' not in self._cache: + self._cache['SDKBuild'] = subprocess.check_output( + ['xcodebuild', '-version', '-sdk', '', 'ProductBuildVersion']) + self._cache['SDKBuild'] = self._cache['SDKBuild'].decode('utf-8') + self._cache['SDKBuild'] = self._cache['SDKBuild'].rstrip('\n') + return self._cache['SDKBuild'] + + def SDKVersion(self): + if 'SDKVersion' not in self._cache: + self._cache['SDKVersion'] = subprocess.check_output( + ['xcodebuild', '-version', '-sdk', '', 'SDKVersion']) + self._cache['SDKVersion'] = self._cache['SDKVersion'].rstrip('\n') + return self._cache['SDKVersion'] + + +Xcode = XcodeInfo() |