summaryrefslogtreecommitdiffstats
path: root/codegen/code-coverage.py
diff options
context:
space:
mode:
authorJohan Dahlin <johan@gnome.org>2008-01-19 12:49:29 +0000
committerJohan Dahlin <johan@src.gnome.org>2008-01-19 12:49:29 +0000
commit9c43da820eb2bd872e58ad12d65ed6c89d556893 (patch)
treee4f897f87a5cc9585495b7e41170bf770ebb56a2 /codegen/code-coverage.py
parent23df5efb74f6b9b6c5da7a8db89ccd612533327d (diff)
downloadpygobject-9c43da820eb2bd872e58ad12d65ed6c89d556893.tar.gz
pygobject-9c43da820eb2bd872e58ad12d65ed6c89d556893.tar.xz
pygobject-9c43da820eb2bd872e58ad12d65ed6c89d556893.zip
Import codegen from pygtk. Add initial gio and gio.unix bindings.
2008-01-19 Johan Dahlin <johan@gnome.org> * Makefile.am: * codegen/Makefile.am: * codegen/README.defs: * codegen/__init__.py: * codegen/argtypes.py: * codegen/code-coverage.py: * codegen/codegen.py: * codegen/createdefs.py: * codegen/definitions.py: * codegen/defsconvert.py: * codegen/defsgen.py: * codegen/defsparser.py: * codegen/docextract.py: * codegen/docextract_to_xml.py: * codegen/docgen.py: * codegen/h2def.py: * codegen/mergedefs.py: * codegen/missingdefs.py: * codegen/mkskel.py: * codegen/override.py: * codegen/pygtk-codegen-2.0.in: * codegen/reversewrapper.py: * codegen/scanvirtuals.py: * codegen/scmexpr.py: * configure.ac: * gio/Makefile.am: * gio/__init__.py: * gio/gio-types.defs: * gio/gio.defs: * gio/gio.override: * gio/giomodule.c: (init_gio): * gio/unix-types.defs: * gio/unix.defs: * gio/unix.override: * gio/unixmodule.c: (initunix): Import codegen from pygtk. Add initial gio and gio.unix bindings. svn path=/trunk/; revision=730
Diffstat (limited to 'codegen/code-coverage.py')
-rwxr-xr-xcodegen/code-coverage.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/codegen/code-coverage.py b/codegen/code-coverage.py
new file mode 100755
index 0000000..fd15034
--- /dev/null
+++ b/codegen/code-coverage.py
@@ -0,0 +1,42 @@
+from __future__ import generators
+import sys, os
+
+def read_symbols(file, type=None, dynamic=0):
+ if dynamic:
+ cmd = 'nm -D %s' % file
+ else:
+ cmd = 'nm %s' % file
+ for line in os.popen(cmd, 'r'):
+ if line[0] != ' ': # has an address as first bit of line
+ while line[0] != ' ':
+ line = line[1:]
+ while line[0] == ' ':
+ line = line[1:]
+ # we should be up to "type symbolname" now
+ sym_type = line[0]
+ symbol = line[1:].strip()
+
+ if not type or type == sym_type:
+ yield symbol
+
+def main():
+ if len(sys.argv) != 3:
+ sys.stderr.write('usage: coverage-check library.so wrapper.so\n')
+ sys.exit(1)
+ library = sys.argv[1]
+ wrapper = sys.argv[2]
+
+ # first create a dict with all referenced symbols in the wrapper
+ # should really be a set, but a dict will do ...
+ wrapper_symbols = {}
+ for symbol in read_symbols(wrapper, type='U', dynamic=1):
+ wrapper_symbols[symbol] = 1
+
+ # now go through the library looking for matches on the defined symbols:
+ for symbol in read_symbols(library, type='T', dynamic=1):
+ if symbol[0] == '_': continue
+ if symbol not in wrapper_symbols:
+ print symbol
+
+if __name__ == '__main__':
+ main()