From: Johan Dahlin Date: Tue, 25 Nov 2008 13:01:58 +0000 (+0000) Subject: Execute the dumper program through libtool if it's installed, so we avoid X-Git-Tag: GOBJECT_INTROSPECTION_0_6_1~9 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=5f9faf55884a8a32c47ff56165020b6988cc7aa0;p=platform%2Fupstream%2Fgobject-introspection.git Execute the dumper program through libtool if it's installed, so we avoid 2008-11-25 Johan Dahlin * giscanner/glibtransformer.py: * tools/g-ir-scanner: Execute the dumper program through libtool if it's installed, so we avoid loading the installed version. svn path=/trunk/; revision=964 --- diff --git a/ChangeLog b/ChangeLog index ca93f70..d3f1a21 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,10 @@ +2008-11-25 Johan Dahlin + + * 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 * girepository/gdump.c (dump_type): Remove a warning, diff --git a/giscanner/glibtransformer.py b/giscanner/glibtransformer.py index 263f6dc..33983e3 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 0f46018..0e2d414 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()