gobject-introspection r237 - in trunk: . giscanner tests/parser tools



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]