[babl] Bug 673422 - Babl C type not accessible to introspection bindings



commit dc754cdd46bf89506ccbacd9e1edf4f18319ba6f
Author: Jon Nordby <jononor gmail com>
Date:   Fri Jul 27 22:00:46 2012 +0200

    Bug 673422 - Babl C type not accessible to introspection bindings
    
    https://bugzilla.gnome.org/show_bug.cgi?id=673422
    Annotate Babl C type to be Babl.Object in GIR using the
    "rename to" annotation in GI 1.33.5+. For earlier versions,
    use a static .gir file to achieve the same.

 babl/Babl-0.1.gir.static |  457 ++++++++++++++++++++++++++++++++++++++++++++++
 babl/Makefile.am         |   11 +
 babl/babl-types.h        |    7 +-
 configure.ac             |    7 +
 4 files changed, 480 insertions(+), 2 deletions(-)
---
diff --git a/babl/Babl-0.1.gir.static b/babl/Babl-0.1.gir.static
new file mode 100644
index 0000000..7481f62
--- /dev/null
+++ b/babl/Babl-0.1.gir.static
@@ -0,0 +1,457 @@
+<?xml version="1.0"?>
+<!-- This file was automatically generated from C sources - DO NOT EDIT!
+To affect the contents of this file, edit the original C definitions,
+and/or use gtk-doc annotations.  -->
+<repository version="1.2"
+            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="Babl"
+             version="0.1"
+             shared-library="libbabl-0.1.so.0"
+             c:identifier-prefixes="Babl"
+             c:symbol-prefixes="babl">
+    <record name="BablObject" c:type="Babl" disguised="1">
+      <doc xml:whitespace="preserve">The babl API is based around polymorphism and almost everything is
+a Babl object.</doc>
+    </record>
+    <callback name="FuncLinear" c:type="BablFuncLinear">
+      <return-value transfer-ownership="none">
+        <type name="glong" c:type="long"/>
+      </return-value>
+      <parameters>
+        <parameter name="src" transfer-ownership="none">
+          <type name="utf8" c:type="const char*"/>
+        </parameter>
+        <parameter name="dst" transfer-ownership="none">
+          <type name="utf8" c:type="char*"/>
+        </parameter>
+        <parameter name="n" transfer-ownership="none">
+          <type name="glong" c:type="long"/>
+        </parameter>
+        <parameter name="user_data" transfer-ownership="none" closure="3">
+          <type name="gpointer" c:type="void*"/>
+        </parameter>
+      </parameters>
+    </callback>
+    <callback name="FuncPlanar" c:type="BablFuncPlanar">
+      <return-value transfer-ownership="none">
+        <type name="glong" c:type="long"/>
+      </return-value>
+      <parameters>
+        <parameter name="src_bands" transfer-ownership="none">
+          <type name="gint" c:type="int"/>
+        </parameter>
+        <parameter name="src" transfer-ownership="none">
+          <type name="utf8" c:type="const char*"/>
+        </parameter>
+        <parameter name="src_pitch" transfer-ownership="none">
+          <type name="gint" c:type="int"/>
+        </parameter>
+        <parameter name="dst_bands" transfer-ownership="none">
+          <type name="gint" c:type="int"/>
+        </parameter>
+        <parameter name="dst" transfer-ownership="none">
+          <type name="utf8" c:type="char*"/>
+        </parameter>
+        <parameter name="dst_pitch" transfer-ownership="none">
+          <type name="gint" c:type="int"/>
+        </parameter>
+        <parameter name="n" transfer-ownership="none">
+          <type name="glong" c:type="long"/>
+        </parameter>
+        <parameter name="user_data" transfer-ownership="none" closure="7">
+          <type name="gpointer" c:type="void*"/>
+        </parameter>
+      </parameters>
+    </callback>
+    <constant name="MAJOR_VERSION" value="0" c:type="BABL_MAJOR_VERSION">
+      <type name="gint" c:type="gint"/>
+    </constant>
+    <constant name="MICRO_VERSION" value="11" c:type="BABL_MICRO_VERSION">
+      <type name="gint" c:type="gint"/>
+    </constant>
+    <constant name="MINOR_VERSION" value="1" c:type="BABL_MINOR_VERSION">
+      <type name="gint" c:type="gint"/>
+    </constant>
+    <function name="component"
+              c:identifier="babl_component"
+              introspectable="0">
+      <return-value transfer-ownership="none">
+        <type name="BablObject" c:type="const Babl*"/>
+      </return-value>
+      <parameters>
+        <parameter name="name" transfer-ownership="none">
+          <type name="utf8" c:type="const char*"/>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="component_new"
+              c:identifier="babl_component_new"
+              introspectable="0">
+      <return-value transfer-ownership="none">
+        <type name="BablObject" c:type="const Babl*"/>
+      </return-value>
+      <parameters>
+        <parameter name="first_arg" transfer-ownership="none">
+          <type name="gpointer" c:type="void*"/>
+        </parameter>
+        <parameter transfer-ownership="none">
+          <varargs>
+          </varargs>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="conversion_new"
+              c:identifier="babl_conversion_new"
+              introspectable="0">
+      <return-value transfer-ownership="none">
+        <type name="BablObject" c:type="const Babl*"/>
+      </return-value>
+      <parameters>
+        <parameter name="first_arg" transfer-ownership="none">
+          <type name="gpointer" c:type="void*"/>
+        </parameter>
+        <parameter transfer-ownership="none">
+          <varargs>
+          </varargs>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="exit" c:identifier="babl_exit">
+      <return-value transfer-ownership="none">
+        <type name="none" c:type="void"/>
+      </return-value>
+    </function>
+    <function name="fish" c:identifier="babl_fish" introspectable="0">
+      <return-value transfer-ownership="none">
+        <type name="BablObject" c:type="const Babl*"/>
+      </return-value>
+      <parameters>
+        <parameter name="source_format" transfer-ownership="none">
+          <type name="gpointer" c:type="void*"/>
+        </parameter>
+        <parameter name="destination_format" transfer-ownership="none">
+          <type name="gpointer" c:type="void*"/>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="format" c:identifier="babl_format" introspectable="0">
+      <return-value transfer-ownership="none">
+        <type name="BablObject" c:type="const Babl*"/>
+      </return-value>
+      <parameters>
+        <parameter name="name" transfer-ownership="none">
+          <type name="utf8" c:type="const char*"/>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="format_get_bytes_per_pixel"
+              c:identifier="babl_format_get_bytes_per_pixel"
+              introspectable="0">
+      <return-value transfer-ownership="none">
+        <type name="gint" c:type="int"/>
+      </return-value>
+      <parameters>
+        <parameter name="format" transfer-ownership="none">
+          <type name="BablObject" c:type="const Babl*"/>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="format_get_model"
+              c:identifier="babl_format_get_model"
+              introspectable="0">
+      <return-value transfer-ownership="none">
+        <type name="BablObject" c:type="const Babl*"/>
+      </return-value>
+      <parameters>
+        <parameter name="format" transfer-ownership="none">
+          <type name="BablObject" c:type="const Babl*"/>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="format_get_n_components"
+              c:identifier="babl_format_get_n_components"
+              introspectable="0">
+      <return-value transfer-ownership="none">
+        <type name="gint" c:type="int"/>
+      </return-value>
+      <parameters>
+        <parameter name="format" transfer-ownership="none">
+          <type name="BablObject" c:type="const Babl*"/>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="format_get_type"
+              c:identifier="babl_format_get_type"
+              introspectable="0">
+      <return-value transfer-ownership="none">
+        <type name="BablObject" c:type="const Babl*"/>
+      </return-value>
+      <parameters>
+        <parameter name="format" transfer-ownership="none">
+          <type name="BablObject" c:type="const Babl*"/>
+        </parameter>
+        <parameter name="component_index" transfer-ownership="none">
+          <type name="gint" c:type="int"/>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="format_has_alpha"
+              c:identifier="babl_format_has_alpha"
+              introspectable="0">
+      <return-value transfer-ownership="none">
+        <type name="gint" c:type="int"/>
+      </return-value>
+      <parameters>
+        <parameter name="format" transfer-ownership="none">
+          <type name="BablObject" c:type="const Babl*"/>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="format_is_format_n"
+              c:identifier="babl_format_is_format_n"
+              introspectable="0">
+      <return-value transfer-ownership="none">
+        <type name="gint" c:type="int"/>
+      </return-value>
+      <parameters>
+        <parameter name="format" transfer-ownership="none">
+          <type name="BablObject" c:type="const Babl*"/>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="format_is_palette"
+              c:identifier="babl_format_is_palette"
+              introspectable="0">
+      <return-value transfer-ownership="none">
+        <type name="gint" c:type="int"/>
+      </return-value>
+      <parameters>
+        <parameter name="format" transfer-ownership="none">
+          <type name="BablObject" c:type="const Babl*"/>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="format_n" c:identifier="babl_format_n" introspectable="0">
+      <return-value transfer-ownership="none">
+        <type name="BablObject" c:type="const Babl*"/>
+      </return-value>
+      <parameters>
+        <parameter name="type" transfer-ownership="none">
+          <type name="BablObject" c:type="const Babl*"/>
+        </parameter>
+        <parameter name="components" transfer-ownership="none">
+          <type name="gint" c:type="int"/>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="format_new"
+              c:identifier="babl_format_new"
+              introspectable="0">
+      <return-value transfer-ownership="none">
+        <type name="BablObject" c:type="const Babl*"/>
+      </return-value>
+      <parameters>
+        <parameter name="first_arg" transfer-ownership="none">
+          <type name="gpointer" c:type="void*"/>
+        </parameter>
+        <parameter transfer-ownership="none">
+          <varargs>
+          </varargs>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="get_name" c:identifier="babl_get_name" introspectable="0">
+      <return-value transfer-ownership="none">
+        <type name="utf8" c:type="const char*"/>
+      </return-value>
+      <parameters>
+        <parameter name="babl" transfer-ownership="none">
+          <type name="BablObject" c:type="const Babl*"/>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="get_user_data"
+              c:identifier="babl_get_user_data"
+              introspectable="0">
+      <return-value>
+        <type name="gpointer" c:type="void*"/>
+      </return-value>
+      <parameters>
+        <parameter name="babl" transfer-ownership="none">
+          <type name="BablObject" c:type="const Babl*"/>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="get_version" c:identifier="babl_get_version">
+      <return-value transfer-ownership="none">
+        <type name="none" c:type="void"/>
+      </return-value>
+      <parameters>
+        <parameter name="major" transfer-ownership="none">
+          <type name="gint" c:type="int*"/>
+        </parameter>
+        <parameter name="minor" transfer-ownership="none">
+          <type name="gint" c:type="int*"/>
+        </parameter>
+        <parameter name="micro" transfer-ownership="none">
+          <type name="gint" c:type="int*"/>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="init" c:identifier="babl_init">
+      <return-value transfer-ownership="none">
+        <type name="none" c:type="void"/>
+      </return-value>
+    </function>
+    <function name="model" c:identifier="babl_model" introspectable="0">
+      <return-value transfer-ownership="none">
+        <type name="BablObject" c:type="const Babl*"/>
+      </return-value>
+      <parameters>
+        <parameter name="name" transfer-ownership="none">
+          <type name="utf8" c:type="const char*"/>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="model_new"
+              c:identifier="babl_model_new"
+              introspectable="0">
+      <return-value transfer-ownership="none">
+        <type name="BablObject" c:type="const Babl*"/>
+      </return-value>
+      <parameters>
+        <parameter name="first_arg" transfer-ownership="none">
+          <type name="gpointer" c:type="void*"/>
+        </parameter>
+        <parameter transfer-ownership="none">
+          <varargs>
+          </varargs>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="new_palette"
+              c:identifier="babl_new_palette"
+              introspectable="0">
+      <return-value transfer-ownership="none">
+        <type name="BablObject" c:type="const Babl*"/>
+      </return-value>
+      <parameters>
+        <parameter name="name" transfer-ownership="none">
+          <type name="utf8" c:type="const char*"/>
+        </parameter>
+        <parameter name="format_u8" transfer-ownership="none">
+          <type name="BablObject" c:type="const Babl**"/>
+        </parameter>
+        <parameter name="format_u8_with_alpha" transfer-ownership="none">
+          <type name="BablObject" c:type="const Babl**"/>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="palette_reset"
+              c:identifier="babl_palette_reset"
+              introspectable="0">
+      <return-value transfer-ownership="none">
+        <type name="none" c:type="void"/>
+      </return-value>
+      <parameters>
+        <parameter name="babl" transfer-ownership="none">
+          <type name="BablObject" c:type="const Babl*"/>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="palette_set_palette"
+              c:identifier="babl_palette_set_palette"
+              introspectable="0">
+      <return-value transfer-ownership="none">
+        <type name="none" c:type="void"/>
+      </return-value>
+      <parameters>
+        <parameter name="babl" transfer-ownership="none">
+          <type name="BablObject" c:type="const Babl*"/>
+        </parameter>
+        <parameter name="format" transfer-ownership="none">
+          <type name="BablObject" c:type="const Babl*"/>
+        </parameter>
+        <parameter name="data" transfer-ownership="none">
+          <type name="gpointer" c:type="void*"/>
+        </parameter>
+        <parameter name="count" transfer-ownership="none">
+          <type name="gint" c:type="int"/>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="process" c:identifier="babl_process" introspectable="0">
+      <return-value transfer-ownership="none">
+        <type name="glong" c:type="long"/>
+      </return-value>
+      <parameters>
+        <parameter name="babl_fish" transfer-ownership="none">
+          <type name="BablObject" c:type="const Babl*"/>
+        </parameter>
+        <parameter name="source" transfer-ownership="none">
+          <type name="gpointer" c:type="void*"/>
+        </parameter>
+        <parameter name="destination" transfer-ownership="none">
+          <type name="gpointer" c:type="void*"/>
+        </parameter>
+        <parameter name="n" transfer-ownership="none">
+          <type name="glong" c:type="long"/>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="sampling" c:identifier="babl_sampling" introspectable="0">
+      <return-value transfer-ownership="none">
+        <type name="BablObject" c:type="const Babl*"/>
+      </return-value>
+      <parameters>
+        <parameter name="horizontal" transfer-ownership="none">
+          <type name="gint" c:type="int"/>
+        </parameter>
+        <parameter name="vertical" transfer-ownership="none">
+          <type name="gint" c:type="int"/>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="set_user_data"
+              c:identifier="babl_set_user_data"
+              introspectable="0">
+      <return-value transfer-ownership="none">
+        <type name="none" c:type="void"/>
+      </return-value>
+      <parameters>
+        <parameter name="babl" transfer-ownership="none">
+          <type name="BablObject" c:type="const Babl*"/>
+        </parameter>
+        <parameter name="data" transfer-ownership="none">
+          <type name="gpointer" c:type="void*"/>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="type" c:identifier="babl_type" introspectable="0">
+      <return-value transfer-ownership="none">
+        <type name="BablObject" c:type="const Babl*"/>
+      </return-value>
+      <parameters>
+        <parameter name="name" transfer-ownership="none">
+          <type name="utf8" c:type="const char*"/>
+        </parameter>
+      </parameters>
+    </function>
+    <function name="type_new" c:identifier="babl_type_new" introspectable="0">
+      <return-value transfer-ownership="none">
+        <type name="BablObject" c:type="const Babl*"/>
+      </return-value>
+      <parameters>
+        <parameter name="first_arg" transfer-ownership="none">
+          <type name="gpointer" c:type="void*"/>
+        </parameter>
+        <parameter transfer-ownership="none">
+          <varargs>
+          </varargs>
+        </parameter>
+      </parameters>
+    </function>
+  </namespace>
+</repository>
diff --git a/babl/Makefile.am b/babl/Makefile.am
index 03115a3..d5cf950 100644
--- a/babl/Makefile.am
+++ b/babl/Makefile.am
@@ -93,6 +93,8 @@ INTROSPECTION_SCANNER_ARGS = --add-include-path=$(srcdir)
 INTROSPECTION_COMPILER_ARGS = --includedir=$(srcdir)
 
 if HAVE_INTROSPECTION
+
+if HAVE_GI_RENAME_TO
 Babl-$(BABL_API_VERSION).gir: $(G_IR_SCANNER) $(library_include_HEADERS) $(c_sources) $(srcdir)/Makefile.am libbabl- BABL_API_VERSION@.la
 	$(INTROSPECTION_SCANNER) -v --namespace Babl --nsversion=$(BABL_API_VERSION) \
             --add-include-path=$(srcdir) --add-include-path=. \
@@ -106,6 +108,15 @@ Babl-$(BABL_API_VERSION).gir: $(G_IR_SCANNER) $(library_include_HEADERS) $(c_sou
 	    $(addprefix $(builddir)/, $(libinc_generated_hdrs)) \
 	    $(addprefix $(srcdir)/, $(c_sources))
 
+else # HAVE_GI_RENAME_TO
+# If the "rename to" gobject introspection annotation is not respected (GI <= 1.33.4)
+# we have to use a pre-generated .gir file. See https://bugzilla.gnome.org/show_bug.cgi?id=673422
+# and https://bugzilla.gnome.org/show_bug.cgi?id=675985
+Babl-$(BABL_API_VERSION).gir:
+	cp $  static $@
+
+endif # HAVE_GI_RENAME_TO
+
 girdir = $(datadir)/gir-1.0
 gir_DATA = Babl-$(BABL_API_VERSION).gir
 
diff --git a/babl/babl-types.h b/babl/babl-types.h
index 9729e04..62c0c4a 100644
--- a/babl/babl-types.h
+++ b/babl/babl-types.h
@@ -23,11 +23,14 @@
 #error "babl-version.h must not be included directly, include babl.h instead."
 #endif
 
-
 /**
+ * Babl:
+ *
  * The babl API is based around polymorphism and almost everything is
  * a Babl object.
- */
+ *
+ * Rename to: BablObject
+ **/
 typedef union _Babl Babl;
 
 /* Conversion function between linear data of a either a data types or
diff --git a/configure.ac b/configure.ac
index 1bf9a71..12cc388 100644
--- a/configure.ac
+++ b/configure.ac
@@ -64,6 +64,13 @@ AC_SUBST(BABL_RELEASE)
 # GObject Introspection
 GOBJECT_INTROSPECTION_CHECK([0.10])
 
+# Check whether g-ir-scanner respects "rename to" annotation
+PKG_CHECK_MODULES([GI_1_33_5], [gobject-introspection-1.0 >=1.33.5],
+   [have_gi_rename_to=true],
+   [have_gi_rename_to=false]
+)
+AM_CONDITIONAL(HAVE_GI_RENAME_TO, [test x$have_gi_rename_to = xtrue])
+
 # Vala
 AC_ARG_WITH(vala, [  --without-vala         build without Vala support])
 



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]