diff options
-rw-r--r-- | ChangeLog | 7 | ||||
-rw-r--r-- | giscanner/glibtransformer.py | 27 | ||||
-rwxr-xr-x | tools/g-ir-scanner | 4 |
3 files changed, 32 insertions, 6 deletions
@@ -1,3 +1,10 @@ +2008-11-25 Johan Dahlin <jdahlin@async.com.br> + + * giscanner/glibtransformer.py: + * tools/g-ir-scanner: + Execute the dumper program through libtool if it's installed, + so we avoid loading the installed version. + 2008-11-24 Johan Dahlin <jdahlin@async.com.br> * girepository/gdump.c (dump_type): Remove a warning, diff --git a/giscanner/glibtransformer.py b/giscanner/glibtransformer.py index 263f6dcb..33983e36 100644 --- a/giscanner/glibtransformer.py +++ b/giscanner/glibtransformer.py @@ -82,8 +82,10 @@ class UnknownTypeError(Exception): class GLibTransformer(object): - def __init__(self, transformer, noclosure=False): + def __init__(self, transformer, noclosure=False, nolibtool=False): self._transformer = transformer + self._noclosure = noclosure + self._nolibtool = nolibtool self._transformer.set_container_types(['GList*', 'GSList*'], ['GHashTable*']) self._namespace_name = None @@ -95,7 +97,6 @@ class GLibTransformer(object): self._failed_types = {} self._boxed_types = {} self._private_internal_types = {} - self._noclosure = noclosure self._validating = False # Public API @@ -213,6 +214,19 @@ class GLibTransformer(object): except KeyError, e: return Unresolved(gtype_name) + def _use_libtool_infection(self): + libtool_infection = not self._nolibtool + if not libtool_infection: + return False + + try: + subprocess.check_call(['libtool', '--version']) + except subprocess.CalledProcessError, e: + # If libtool's not installed, assume we don't need it + return False + + return True + def _execute_binary(self): in_path = os.path.join(self._binary.tmpdir, 'types.txt') f = open(in_path, 'w') @@ -222,9 +236,12 @@ class GLibTransformer(object): f.close() out_path = os.path.join(self._binary.tmpdir, 'dump.xml') - introspect_arg = '--introspect-dump=%s,%s' % (in_path, out_path) - args = self._binary.args - args.append(introspect_arg) + args = [] + if self._use_libtool_infection(): + args.extend(['libtool', '--mode=execute']) + args.extend(self._binary.args) + args.append('--introspect-dump=%s,%s' % (in_path, out_path)) + # Invoke the binary, having written our get_type functions to types.txt subprocess.check_call(args, stdout=sys.stdout, stderr=sys.stderr) self._read_introspect_dump(out_path) diff --git a/tools/g-ir-scanner b/tools/g-ir-scanner index 0f460183..0e2d4148 100755 --- a/tools/g-ir-scanner +++ b/tools/g-ir-scanner @@ -304,7 +304,9 @@ def main(args): # Transform the C AST nodes into higher level # GLib/GObject nodes - glibtransformer = GLibTransformer(transformer, noclosure=options.noclosure) + glibtransformer = GLibTransformer(transformer, + noclosure=options.noclosure, + nolibtool=options.nolibtool) glibtransformer.set_introspection_binary(binary) namespace = glibtransformer.parse() |