]> code.delx.au - pulseaudio/blob - src/depmod.py
add dependency script
[pulseaudio] / src / depmod.py
1 #!/usr/bin/python
2 # $Id$
3
4 import sys, os, string
5
6 exported_symbols = {}
7 imported_symbols = {}
8
9 for fn in sys.argv[1:]:
10 f = os.popen("nm '%s'" % fn, "r")
11
12 imported_symbols[fn] = []
13
14 for line in f:
15 sym_address = line[:7].strip()
16 sym_type = line[9].strip()
17 sym_name = line[11:].strip()
18
19 if sym_name in ('_fini', '_init'):
20 continue
21
22 if sym_type in ('T', 'B', 'R', 'D' 'G', 'S', 'D'):
23 if exported_symbols.has_key(sym_name):
24 sys.stderr.write("CONFLICT: %s defined in both '%s' and '%s'.\n" % (sym_name, fn, exported_symbols[sym_name]))
25 else:
26 exported_symbols[sym_name] = fn
27 elif sym_type in ('U',):
28 if sym_name[:3] == 'pa_':
29 imported_symbols[fn].append(sym_name)
30
31 f.close()
32
33 dependencies = {}
34 unresolved_symbols = {}
35
36 for fn in imported_symbols:
37 dependencies[fn] = []
38
39 for sym in imported_symbols[fn]:
40 if exported_symbols.has_key(sym):
41 if exported_symbols[sym] not in dependencies[fn]:
42 dependencies[fn].append(exported_symbols[sym])
43 else:
44 if unresolved_symbols.has_key(sym):
45 unresolved_symbols[sym].append(fn)
46 else:
47 unresolved_symbols[sym] = [fn]
48
49 for sym, files in unresolved_symbols.iteritems():
50 print "WARNING: Unresolved symbol '%s' in %s" % (sym, `files`)
51
52 k = dependencies.keys()
53 k.sort()
54 for fn in k:
55 dependencies[fn].sort()
56 print "%s: %s" % (fn, string.join(dependencies[fn], " "))