42 lines
1.1 KiB
Python
Executable File
42 lines
1.1 KiB
Python
Executable File
#!/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)
|