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)