Skip to content
This repository has been archived by the owner on Nov 17, 2020. It is now read-only.

Commit

Permalink
Execute the dumper program through libtool if it's installed, so we a…
Browse files Browse the repository at this point in the history
…void

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.


svn path=/trunk/; revision=964
  • Loading branch information
Johan Dahlin authored and Johan Dahlin committed Nov 25, 2008
1 parent 6087c1a commit 5f9faf5
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 6 deletions.
7 changes: 7 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -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,
Expand Down
27 changes: 22 additions & 5 deletions giscanner/glibtransformer.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -95,7 +97,6 @@ def __init__(self, transformer, noclosure=False):
self._failed_types = {}
self._boxed_types = {}
self._private_internal_types = {}
self._noclosure = noclosure
self._validating = False

# Public API
Expand Down Expand Up @@ -213,6 +214,19 @@ def _resolve_gtypename(self, gtype_name):
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')
Expand All @@ -222,9 +236,12 @@ def _execute_binary(self):
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)
Expand Down
4 changes: 3 additions & 1 deletion tools/g-ir-scanner
Original file line number Diff line number Diff line change
Expand Up @@ -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()
Expand Down

0 comments on commit 5f9faf5

Please sign in to comment.