Fix test/mac/gyptest-strip.py with Xcode 5.0 or higher
The version of clang that ships with Xcode 5.0 and higher add an extra
symbol if the command-line use a relative path with more than one
component to reference the source file (like ./file.c). This extra
symbol is not present if using an absolute path to the file, and cause
a difference of behaviour between xcodebuild and ninja.
Account for the extra symbol in the un-stripped binaries when building
with ninja and using Xcode 5.0 or higher. A possible alternative would
be to always use absolute path with ninja, but it would make the build
environment non-relocatable.
BUG=gyp:381
R=mark@chromium.org
Review URL: https://codereview.chromium.org/197073002
git-svn-id: http://gyp.googlecode.com/svn/trunk@1869 78cadc50-ecff-11dd-a971-7dbc132099af
diff --git a/test/mac/gyptest-strip.py b/test/mac/gyptest-strip.py
index 9ab26a5..e2c06c1 100755
--- a/test/mac/gyptest-strip.py
+++ b/test/mac/gyptest-strip.py
@@ -9,6 +9,7 @@
"""
import TestGyp
+import TestMac
import re
import subprocess
@@ -28,19 +29,25 @@
def CheckNsyms(p, n_expected):
r = re.compile(r'nsyms\s+(\d+)')
- proc = subprocess.Popen(['otool', '-l', p], stdout=subprocess.PIPE)
- o = proc.communicate()[0]
- assert not proc.returncode
+ o = subprocess.check_output(['otool', '-l', p])
m = r.search(o)
n = int(m.group(1))
if n != n_expected:
print 'Stripping: Expected %d symbols, got %d' % (n_expected, n)
test.fail_test()
+ # Starting with Xcode 5.0, clang adds an additional symbols to the compiled
+ # file when using a relative path to the input file. So when using ninja
+ # with Xcode 5.0 or higher, take this additional symbol into consideration
+ # for unstripped builds (it is stripped by all strip commands).
+ expected_extra_symbol_count = 0
+ if test.format == 'ninja' and TestMac.Xcode.Version() >= '0500':
+ expected_extra_symbol_count = 1
+
# The actual numbers here are not interesting, they just need to be the same
# in both the xcode and the make build.
- CheckNsyms(OutPath('no_postprocess'), 29)
- CheckNsyms(OutPath('no_strip'), 29)
+ CheckNsyms(OutPath('no_postprocess'), 29 + expected_extra_symbol_count)
+ CheckNsyms(OutPath('no_strip'), 29 + expected_extra_symbol_count)
CheckNsyms(OutPath('strip_all'), 0)
CheckNsyms(OutPath('strip_nonglobal'), 6)
CheckNsyms(OutPath('strip_debugging'), 7)