gobject-introspection r964 - in trunk: . giscanner tools



Author: johan
Date: Tue Nov 25 13:01:58 2008
New Revision: 964
URL: http://svn.gnome.org/viewvc/gobject-introspection?rev=964&view=rev

Log:
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.



Modified:
   trunk/ChangeLog
   trunk/giscanner/glibtransformer.py
   trunk/tools/g-ir-scanner

Modified: trunk/giscanner/glibtransformer.py
==============================================================================
--- trunk/giscanner/glibtransformer.py	(original)
+++ trunk/giscanner/glibtransformer.py	Tue Nov 25 13:01:58 2008
@@ -82,8 +82,10 @@
 
 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 @@
         self._failed_types = {}
         self._boxed_types = {}
         self._private_internal_types = {}
-        self._noclosure = noclosure
         self._validating = False
 
     # Public API
@@ -213,6 +214,19 @@
         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 @@
         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)

Modified: trunk/tools/g-ir-scanner
==============================================================================
--- trunk/tools/g-ir-scanner	(original)
+++ trunk/tools/g-ir-scanner	Tue Nov 25 13:01:58 2008
@@ -304,7 +304,9 @@
 
     # 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()



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]