1 #!/usr/bin/env python 2 3 # Copyright (c) 2012 Google Inc. All rights reserved. 4 # Use of this source code is governed by a BSD-style license that can be 5 # found in the LICENSE file. 6 7 """ 8 Verifies that stripping works. 9 """ 10 11 import TestGyp 12 import TestMac 13 14 import re 15 import subprocess 16 import sys 17 import time 18 19 if sys.platform == 'darwin': 20 test = TestGyp.TestGyp(formats=['ninja', 'make', 'xcode']) 21 22 test.run_gyp('test.gyp', chdir='strip') 23 24 test.build('test.gyp', test.ALL, chdir='strip') 25 26 # Lightweight check if stripping was done. 27 def OutPath(s): 28 return test.built_file_path(s, type=test.SHARED_LIB, chdir='strip') 29 30 def CheckNsyms(p, n_expected): 31 r = re.compile(r'nsyms\s+(\d+)') 32 o = subprocess.check_output(['otool', '-l', p]) 33 m = r.search(o) 34 n = int(m.group(1)) 35 if n != n_expected: 36 print 'Stripping: Expected %d symbols, got %d' % (n_expected, n) 37 test.fail_test() 38 39 # Starting with Xcode 5.0, clang adds an additional symbols to the compiled 40 # file when using a relative path to the input file. So when using ninja 41 # with Xcode 5.0 or higher, take this additional symbol into consideration 42 # for unstripped builds (it is stripped by all strip commands). 43 expected_extra_symbol_count = 0 44 if test.format == 'ninja' and TestMac.Xcode.Version() >= '0500': 45 expected_extra_symbol_count = 1 46 47 # The actual numbers here are not interesting, they just need to be the same 48 # in both the xcode and the make build. 49 CheckNsyms(OutPath('no_postprocess'), 29 + expected_extra_symbol_count) 50 CheckNsyms(OutPath('no_strip'), 29 + expected_extra_symbol_count) 51 CheckNsyms(OutPath('strip_all'), 0) 52 CheckNsyms(OutPath('strip_nonglobal'), 6) 53 CheckNsyms(OutPath('strip_debugging'), 7) 54 CheckNsyms(OutPath('strip_all_custom_flags'), 0) 55 CheckNsyms(test.built_file_path( 56 'strip_all_bundle.framework/Versions/A/strip_all_bundle', chdir='strip'), 57 0) 58 CheckNsyms(OutPath('strip_save'), 7) 59 60 test.pass_test() 61