gobject-introspection r237 - in trunk: . giscanner tests/parser tools
- From: johan svn gnome org
- To: svn-commits-list gnome org
- Subject: gobject-introspection r237 - in trunk: . giscanner tests/parser tools
- Date: Mon, 28 Apr 2008 02:21:28 +0100 (BST)
Author: johan
Date: Mon Apr 28 01:21:27 2008
New Revision: 237
URL: http://svn.gnome.org/viewvc/gobject-introspection?rev=237&view=rev
Log:
2008-04-27 Johan Dahlin <johan gnome org>
* configure.ac:
* giscanner/Makefile.am:
* giscanner/girparser.py:
* giscanner/glibtransformer.py:
* tests/parser/Foo-expected.gidl:
* tests/parser/Foo-expected.gir:
* tests/parser/Makefile.am:
* tests/parser/utility-expected.gidl:
* tests/parser/utility-expected.gir:
* tools/g-ir-scanner:
Switch over to GIR as the default format. Add a simple GIDL
parser.
Update tests and fix simplify makefiles by depending
on GNU make extensions.
Added:
trunk/giscanner/girparser.py
trunk/tests/parser/Foo-expected.gir
trunk/tests/parser/utility-expected.gir
Removed:
trunk/tests/parser/Foo-expected.gidl
trunk/tests/parser/utility-expected.gidl
Modified:
trunk/ChangeLog
trunk/configure.ac
trunk/giscanner/Makefile.am
trunk/giscanner/glibtransformer.py
trunk/tests/parser/ (props changed)
trunk/tests/parser/Makefile.am
trunk/tools/g-ir-scanner
Modified: trunk/configure.ac
==============================================================================
--- trunk/configure.ac (original)
+++ trunk/configure.ac Mon Apr 28 01:21:27 2008
@@ -3,7 +3,7 @@
AC_PREREQ(2.59)
AC_INIT(gobject-introspection, 0.1, http://bugzilla.gnome.org/enter_bug.cgi?product=glib)
-AM_INIT_AUTOMAKE([1.7])
+AM_INIT_AUTOMAKE([1.7 -Wno-portability])
AM_MAINTAINER_MODE
AC_CONFIG_HEADER([config.h])
Modified: trunk/giscanner/Makefile.am
==============================================================================
--- trunk/giscanner/Makefile.am (original)
+++ trunk/giscanner/Makefile.am Mon Apr 28 01:21:27 2008
@@ -32,6 +32,7 @@
gidlast.py \
gidlparser.py \
gidlwriter.py \
+ girparser.py \
girwriter.py \
glibtransformer.py \
odict.py \
Added: trunk/giscanner/girparser.py
==============================================================================
--- (empty file)
+++ trunk/giscanner/girparser.py Mon Apr 28 01:21:27 2008
@@ -0,0 +1,57 @@
+# -*- Mode: Python -*-
+# GObject-Introspection - a framework for introspecting GObject libraries
+# Copyright (C) 2008 Johan Dahlin
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+
+from xml.etree.ElementTree import parse
+
+from .glibast import GLibObject
+
+CORE = "{http://www.gtk.org/introspection/core/1.0}"
+GLIB = "{http://www.gtk.org/introspection/glib/1.0}"
+
+
+class GIRParser(object):
+ def __init__(self, filename):
+ self._nodes = []
+ self._namespace_name = None
+
+ tree = parse(filename)
+ self._parse_api(tree.getroot())
+
+ def _parse_api(self, root):
+ assert root.tag == '%srepository' % (CORE,), root
+ ns = root.find('%snamespace' % (CORE,))
+ self._namespace_name = ns.attrib['name']
+ for child in ns.getchildren():
+ if child.tag == '%sclass' % (CORE,):
+ self._parse_object(child)
+ else:
+ print 'PARSER: Unhandled %s' % (child.tag,)
+
+ def _parse_object(self, node):
+ gobj = GLibObject(node.attrib['name'],
+ node.attrib.get('parent'),
+ node.attrib['%stype-name' % (GLIB,)],
+ node.attrib['%sget-type' % (GLIB,)])
+ self._nodes.append(gobj)
+
+ def get_namespace_name(self):
+ return self._namespace_name
+
+ def get_nodes(self):
+ return self._nodes
Modified: trunk/giscanner/glibtransformer.py
==============================================================================
--- trunk/giscanner/glibtransformer.py (original)
+++ trunk/giscanner/glibtransformer.py Mon Apr 28 01:21:27 2008
@@ -82,8 +82,14 @@
self._pair_class_struct(node)
def register_include(self, filename):
- from .gidlparser import GIDLParser
- parser = GIDLParser(filename)
+ if filename.endswith('.gir'):
+ from .girparser import GIRParser
+ parser = GIRParser(filename)
+ elif filename.endswith('.gidl'):
+ from .gidlparser import GIDLParser
+ parser = GIDLParser(filename)
+ else:
+ raise NotImplementedError(filename)
nsname = parser.get_namespace_name()
for node in parser.get_nodes():
self._type_names[node.type_name] = (nsname, node)
Added: trunk/tests/parser/Foo-expected.gir
==============================================================================
--- (empty file)
+++ trunk/tests/parser/Foo-expected.gir Mon Apr 28 01:21:27 2008
@@ -0,0 +1,247 @@
+<repository version="1.0"
+ xmlns="http://www.gtk.org/introspection/core/1.0"
+ xmlns:c="http://www.gtk.org/introspection/c/1.0"
+ xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
+ <namespace name="Foo">
+ <interface name="Interface"
+ glib:type-name="FooInterface"
+ glib:get-type="foo_interface_get_type">
+ </interface>
+ <function name="init" c:identifier="foo_init">
+ <return-value c:identifer="gint">
+ <type name="gint"/>
+ </return-value>
+ </function>
+ <class name="Object"
+ parent="GLib.Object"
+ glib:type-name="FooObject"
+ glib:get-type="foo_object_get_type">
+ <constructor name="new" c:identifier="foo_object_new">
+ <return-value c:identifer="Object*">
+ <type name="Object*"/>
+ </return-value>
+ </constructor>
+ <method name="method" c:identifier="foo_object_method">
+ <return-value c:identifer="gint">
+ <type name="gint"/>
+ </return-value>
+ <parameters>
+ <parameter name="object">
+ <type name="Object*"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="external_type" c:identifier="foo_object_external_type">
+ <return-value c:identifer="utility.Object*">
+ <type name="utility.Object*"/>
+ </return-value>
+ <parameters>
+ <parameter name="object">
+ <type name="Object*"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="out" c:identifier="foo_object_out">
+ <return-value c:identifer="gint">
+ <type name="gint"/>
+ </return-value>
+ <parameters>
+ <parameter name="object">
+ <type name="Object*"/>
+ </parameter>
+ <parameter name="outarg" direction="out">
+ <type name="int*"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="create_object" c:identifier="foo_object_create_object">
+ <return-value c:identifer="GLib.Object*">
+ <type name="GLib.Object*"/>
+ </return-value>
+ <parameters>
+ <parameter name="object">
+ <type name="Object*"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="inout" c:identifier="foo_object_inout">
+ <return-value c:identifer="gint">
+ <type name="gint"/>
+ </return-value>
+ <parameters>
+ <parameter name="object">
+ <type name="Object*"/>
+ </parameter>
+ <parameter name="inoutarg" direction="inout">
+ <type name="int*"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="inout2" c:identifier="foo_object_inout2">
+ <return-value c:identifer="gint">
+ <type name="gint"/>
+ </return-value>
+ <parameters>
+ <parameter name="object">
+ <type name="Object*"/>
+ </parameter>
+ <parameter name="inoutarg">
+ <type name="int*"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="inout3" c:identifier="foo_object_inout3">
+ <return-value c:identifer="gint">
+ <type name="gint"/>
+ </return-value>
+ <parameters>
+ <parameter name="object">
+ <type name="Object*"/>
+ </parameter>
+ <parameter name="inoutarg" direction="inout">
+ <type name="int*"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="in" c:identifier="foo_object_in">
+ <return-value c:identifer="gint">
+ <type name="gint"/>
+ </return-value>
+ <parameters>
+ <parameter name="object">
+ <type name="Object*"/>
+ </parameter>
+ <parameter name="inarg">
+ <type name="int*"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="calleeowns" c:identifier="foo_object_calleeowns">
+ <return-value c:identifer="gint">
+ <type name="gint"/>
+ </return-value>
+ <parameters>
+ <parameter name="object">
+ <type name="Object*"/>
+ </parameter>
+ <parameter name="toown" transfer="full">
+ <type name="GLib.Object*"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="calleesowns" c:identifier="foo_object_calleesowns">
+ <return-value c:identifer="gint">
+ <type name="gint"/>
+ </return-value>
+ <parameters>
+ <parameter name="object">
+ <type name="Object*"/>
+ </parameter>
+ <parameter name="toown1" transfer="full">
+ <type name="GLib.Object*"/>
+ </parameter>
+ <parameter name="toown2" transfer="full">
+ <type name="GLib.Object*"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="get_strings" c:identifier="foo_object_get_strings">
+ <return-value c:identifer="GList*">
+ <sequence c:owner="caller">
+ <element-type c:identifier="char*"/>
+ </sequence>
+ </return-value>
+ <parameters>
+ <parameter name="object">
+ <type name="Object*"/>
+ </parameter>
+ </parameters>
+ </method>
+ <method name="get_objects" c:identifier="foo_object_get_objects">
+ <return-value c:identifer="GSList*">
+ <sequence c:owner="caller">
+ <element-type c:identifier="FooObject*"/>
+ </sequence>
+ </return-value>
+ <parameters>
+ <parameter name="object">
+ <type name="Object*"/>
+ </parameter>
+ </parameters>
+ </method>
+ <property name="string" prop="gchararray"/>
+ </class>
+ <class name="Subobject"
+ parent="Object"
+ glib:type-name="FooSubobject"
+ glib:get-type="foo_subobject_get_type">
+ <constructor name="new" c:identifier="foo_subobject_new">
+ <return-value c:identifer="Subobject*">
+ <type name="Subobject*"/>
+ </return-value>
+ </constructor>
+ </class>
+ <enumeration name="EnumType"
+ glib:type-name="FooEnumType"
+ glib:get-type="foo_enum_type_get_type">
+ <member name="FOO_ENUM_ALPHA" value="0" glib:nick="alpha"/>
+ <member name="FOO_ENUM_BETA" value="1" glib:nick="beta"/>
+ <member name="FOO_ENUM_DELTA" value="2" glib:nick="delta"/>
+ </enumeration>
+ <function name="enum_type_method" c:identifier="foo_enum_type_method">
+ <return-value c:identifer="int">
+ <type name="int"/>
+ </return-value>
+ <parameters>
+ <parameter name="foo_enum">
+ <type name="EnumType"/>
+ </parameter>
+ </parameters>
+ </function>
+ <bitfield name="FlagsType"
+ glib:type-name="FooFlagsType"
+ glib:get-type="foo_flags_type_get_type">
+ <member name="FOO_FLAGS_FIRST" value="1" glib:nick="first"/>
+ <member name="FOO_FLAGS_SECOND" value="2" glib:nick="second"/>
+ <member name="FOO_FLAGS_THIRD" value="4" glib:nick="third"/>
+ </bitfield>
+ <enumeration name="EnumNoType">
+ <member name="FOO_ENUM_UN" value="1"/>
+ <member name="FOO_ENUM_DEUX" value="2"/>
+ <member name="FOO_ENUM_TROIS" value="3"/>
+ </enumeration>
+ <glib:boxed glib:name="Boxed" glib:type-name="FooBoxed" glib:get-type="foo_boxed_get_type">
+ <constructor name="new" c:identifier="foo_boxed_new">
+ <return-value c:identifer="Boxed*">
+ <type name="Boxed*"/>
+ </return-value>
+ </constructor>
+ <method name="method" c:identifier="foo_boxed_method">
+ <return-value c:identifer="void">
+ <type name="void"/>
+ </return-value>
+ <parameters>
+ <parameter name="boxed">
+ <type name="Boxed*"/>
+ </parameter>
+ </parameters>
+ </method>
+ </glib:boxed>
+ <callback name="FooCallback">
+ <return-value c:identifer="gboolean">
+ <type name="gboolean"/>
+ </return-value>
+ <parameters>
+ <parameter name="foo">
+ <type name="FooObject*"/>
+ </parameter>
+ <parameter name="b">
+ <type name="gboolean"/>
+ </parameter>
+ <parameter name="data">
+ <type name="gpointer"/>
+ </parameter>
+ </parameters>
+ </callback>
+ </namespace>
+</repository>
Modified: trunk/tests/parser/Makefile.am
==============================================================================
--- trunk/tests/parser/Makefile.am (original)
+++ trunk/tests/parser/Makefile.am Mon Apr 28 01:21:27 2008
@@ -12,29 +12,37 @@
libutility_la_LDFLAGS = -module -avoid-version
libutility_la_LIBADD = $(GOBJECT_LIBS)
-CLEANFILES = utility.gidl Foo.gidl
-EXTRA_DIST = utility-expected.gidl Foo-expected.gidl
+CLEANFILES = utility.gir Foo.gir
+EXTRA_DIST = utility-expected.gir Foo-expected.gir
-utility.gidl: libutility.la utility.h $(top_builddir)/tools/g-idl-scanner
- G_DEBUG=fatal_warnings $(top_builddir)/tools/g-idl-scanner -v \
+SCANNER = $(top_builddir)/tools/g-ir-scanner
+utility.gir: libutility.la utility.h $(SCANNER)
+ @PYTHONPATH=$(top_srcdir) $(SCANNER) -v \
+ --include=$(top_srcdir)/gidl/gobject-2.0.gidl \
+ --library=libutility.la \
--namespace=utility \
- --include-idl=$(top_srcdir)/gidl/gobject-2.0.gidl \
- $(libutility_la_SOURCES) -I$(srcdir) $(GOBJECT_CFLAGS) \
- libutility.la --output $@
+ --pkg gobject-2.0 \
+ $(libutility_la_SOURCES) --output $@
-Foo.gidl: libfoo.la foo-object.h $(top_builddir)/tools/g-idl-scanner
- G_DEBUG=fatal_warnings $(top_builddir)/tools/g-idl-scanner -v \
+Foo.gir: libfoo.la foo-object.h $(SCANNER)
+ @PYTHONPATH=$(top_srcdir) $(SCANNER) -v \
+ --include=$(top_srcdir)/gidl/gobject-2.0.gidl \
+ --include=$(srcdir)/utility.gir \
--namespace=Foo \
- --include-idl=$(top_srcdir)/gidl/gobject-2.0.gidl \
- --include-idl=$(srcdir)/utility.gidl \
- $(libfoo_la_SOURCES) -I$(srcdir) $(GOBJECT_CFLAGS) \
- libfoo.la --output $@
-
-check-local: utility.gidl Foo.gidl
- @diff -u -U 10 $(srcdir)/utility-expected.gidl utility.gidl && echo "utility.gidl"
- @diff -u -U 10 $(srcdir)/Foo-expected.gidl Foo.gidl && echo "Foo.gidl"
+ --library=libfoo.la \
+ --pkg gobject-2.0 \
+ $(libfoo_la_SOURCES) \
+ --output $@
+
+check-%.gir: %.gir
+ @diff -u -U 10 $(srcdir)/$*-expected.gir $*.gir && echo "* $*.gir"
+
+pre-check:
+ @echo "Running parser checks..."
+
+check-local: pre-check check-utility.gir check-Foo.gir
@echo "======================="
@echo "All parser tests passed"
@echo "======================="
-.PHONY: Foo.gidl
+.PHONY: utility.gir Foo.gir
Added: trunk/tests/parser/utility-expected.gir
==============================================================================
--- (empty file)
+++ trunk/tests/parser/utility-expected.gir Mon Apr 28 01:21:27 2008
@@ -0,0 +1,12 @@
+<repository version="1.0"
+ xmlns="http://www.gtk.org/introspection/core/1.0"
+ xmlns:c="http://www.gtk.org/introspection/c/1.0"
+ xmlns:glib="http://www.gtk.org/introspection/glib/1.0">
+ <namespace name="utility">
+ <class name="Object"
+ parent="GLib.Object"
+ glib:type-name="UtilityObject"
+ glib:get-type="utility_object_get_type">
+ </class>
+ </namespace>
+</repository>
Modified: trunk/tools/g-ir-scanner
==============================================================================
--- trunk/tools/g-ir-scanner (original)
+++ trunk/tools/g-ir-scanner Mon Apr 28 01:21:27 2008
@@ -33,7 +33,7 @@
parser = optparse.OptionParser('%prog [options] sources')
parser.add_option("", "--format",
action="store", dest="format",
- default="gidl",
+ default="gir",
help="format to use, one of gidl, gir")
parser.add_option("-i", "--include",
action="append", dest="includes", default=[],
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]