| #!/usr/bin/env python |
| |
| import subprocess |
| import sys |
| |
| def script_symbols(script): |
| symbols = [] |
| in_symbols = False |
| with open(script, 'r') as f: |
| for line in f.readlines(): |
| if in_symbols: |
| if line.lstrip() == '};\n': |
| break |
| line = line.lstrip() |
| line = line.rstrip('\n') |
| line = line.rstrip(';') |
| symbols.append(line.strip('"')) |
| elif line.lstrip() == 'extern "C++" {\n': |
| in_symbols = True |
| return symbols |
| |
| if len(sys.argv) < 3: |
| print "Usage: %s script lib" % sys.argv[0] |
| sys.exit(1) |
| |
| |
| symbols = script_symbols(sys.argv[1]) |
| p = subprocess.Popen(['objdump', '-t', '-C', sys.argv[2]], stdout=subprocess.PIPE) |
| data = p.communicate()[0] |
| |
| symbols = [] |
| for symbol in script_symbols(sys.argv[1]): |
| if symbol not in data: |
| symbols.append(symbol) |
| |
| if symbols: |
| print 'The following symbols are in version script %s and not in library %s' % (sys.argv[1], sys.argv[2]) |
| print '\n'.join(sorted(symbols)) |
| sys.exit(1) |
| |
| sys.exit(0) |