diff options
author | Colin Walters <walters@src.gnome.org> | 2008-10-16 01:40:29 +0000 |
---|---|---|
committer | Colin Walters <walters@src.gnome.org> | 2008-10-16 01:40:29 +0000 |
commit | c3d732b2c2393a14ed9bda1e5a2e17745c94ca54 (patch) | |
tree | 3dd71bc56c4defb6d7f1a0ef7597922ab8dd17bb /giscanner | |
parent | 1f1ca54b3a41713b9328f0824f59d18c3ef7ffd2 (diff) | |
download | gobject-introspection-c3d732b2c2393a14ed9bda1e5a2e17745c94ca54.tar.gz |
Merge branch 'bug556331-includecleanup'
svn path=/trunk/; revision=724
Diffstat (limited to 'giscanner')
-rw-r--r-- | giscanner/ast.py | 26 | ||||
-rw-r--r-- | giscanner/girparser.py | 6 | ||||
-rw-r--r-- | giscanner/girwriter.py | 2 | ||||
-rw-r--r-- | giscanner/transformer.py | 29 |
4 files changed, 40 insertions, 23 deletions
diff --git a/giscanner/ast.py b/giscanner/ast.py index 8ee6f7a8..f4bc05c7 100644 --- a/giscanner/ast.py +++ b/giscanner/ast.py @@ -155,6 +155,32 @@ class Namespace(Node): self.version, self.nodes) +class Include(Node): + + def __init__(self, name, version): + Node.__init__(self, 'include') + self.name = name + self.version = version + + @classmethod + def from_string(self, string): + return Include(*string.split('-', 1)) + + def __cmp__(self, other): + if not isinstance(other, Include): + return cmp(self, other) + namecmp = cmp(self.name, other.name) + if namecmp != 0: + return namecmp + return cmp(self.version, other.version) + + def __hash__(self): + return hash((self.name, self.version)) + + def __str__(self): + return '%s-%s' % (self.name, self.version) + + class Function(Node): def __init__(self, name, retval, parameters, symbol): diff --git a/giscanner/girparser.py b/giscanner/girparser.py index 7fca083c..5649e036 100644 --- a/giscanner/girparser.py +++ b/giscanner/girparser.py @@ -22,7 +22,7 @@ from xml.etree.cElementTree import parse from .ast import (Alias, Array, Callback, Constant, Enum, Function, Field, Namespace, Parameter, Property, Return, Union, Struct, Type, - Varargs) + Varargs, Include) from .glibast import (GLibEnum, GLibEnumMember, GLibFlags, GLibInterface, GLibObject, GLibBoxedStruct, GLibBoxedUnion, GLibBoxedOther) @@ -85,7 +85,9 @@ class GIRParser(object): assert root.tag == _corens('repository') for node in root.getchildren(): if node.tag == _corens('include'): - self._includes.add((node.attrib['name'])) + include = Include(node.attrib['name'], + node.attrib['version']) + self._includes.add(include) ns = root.find(_corens('namespace')) assert ns is not None self._namespace = Namespace(ns.attrib['name'], ns.attrib['version']) diff --git a/giscanner/girwriter.py b/giscanner/girwriter.py index 1ccbbefb..f6df49df 100644 --- a/giscanner/girwriter.py +++ b/giscanner/girwriter.py @@ -48,7 +48,7 @@ class GIRWriter(XMLWriter): self._write_namespace(namespace, shlibs) def _write_include(self, include): - attrs = [('name', include)] + attrs = [('name', include.name), ('version', include.version)] self.write_tag('include', attrs) def _write_namespace(self, namespace, shlibs): diff --git a/giscanner/transformer.py b/giscanner/transformer.py index c1609aa4..29111db7 100644 --- a/giscanner/transformer.py +++ b/giscanner/transformer.py @@ -96,24 +96,15 @@ class Transformer(object): self._add_node(node) return self._namespace - def register_include(self, filename): - (dirname, basename) = os.path.split(filename) - if dirname: - path = filename - (name, suffix) = os.path.splitext(basename) - else: - path = None - name = filename - if name.endswith('.gir'): - (name, suffix) = os.path.splitext(name) - if name in self._includes: - return - source = filename + def set_include_paths(self, paths): + self._includepaths = list(paths) + + def register_include(self, include, path=None): if path is None: - girname = name + '.gir' - searchdirs = [os.path.join(d, 'gir') for d \ - in _xdg_data_dirs] - searchdirs.extend(self._includepaths) + girname = '%s-%s.gir' % (include.name, include.version) + searchdirs = list(self._includepaths) + searchdirs.extend([os.path.join(d, 'gir') + for d in _xdg_data_dirs]) for d in searchdirs: path = os.path.join(d, girname) if os.path.exists(path): @@ -123,9 +114,7 @@ class Transformer(object): raise ValueError("Couldn't find include %r (search path: %r)"\ % (girname, searchdirs)) d = os.path.dirname(path) - if d not in self._includepaths: - self._includepaths.append(d) - self._includes.add(name) + self._includes.add(include) from .girparser import GIRParser parser = GIRParser(path) for include in parser.get_includes(): |