summaryrefslogtreecommitdiff
path: root/giscanner
diff options
context:
space:
mode:
authorColin Walters <walters@src.gnome.org>2008-10-16 01:40:29 +0000
committerColin Walters <walters@src.gnome.org>2008-10-16 01:40:29 +0000
commitc3d732b2c2393a14ed9bda1e5a2e17745c94ca54 (patch)
tree3dd71bc56c4defb6d7f1a0ef7597922ab8dd17bb /giscanner
parent1f1ca54b3a41713b9328f0824f59d18c3ef7ffd2 (diff)
downloadgobject-introspection-c3d732b2c2393a14ed9bda1e5a2e17745c94ca54.tar.gz
Merge branch 'bug556331-includecleanup'
svn path=/trunk/; revision=724
Diffstat (limited to 'giscanner')
-rw-r--r--giscanner/ast.py26
-rw-r--r--giscanner/girparser.py6
-rw-r--r--giscanner/girwriter.py2
-rw-r--r--giscanner/transformer.py29
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():