#!/usr/bin/env python3 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, encoding="ascii") 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)