<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>glib-genmarshal</title> <meta name="generator" content="DocBook XSL Stylesheets V1.77.1"> <link rel="home" href="index.html" title="GObject Reference Manual"> <link rel="up" href="rn02.html" title="Tools Reference"> <link rel="prev" href="glib-mkenums.html" title="glib-mkenums"> <link rel="next" href="gobject-query.html" title="gobject-query"> <meta name="generator" content="GTK-Doc V1.18 (XML mode)"> <link rel="stylesheet" href="style.css" type="text/css"> </head> <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"> <table class="navigation" id="top" width="100%" summary="Navigation header" cellpadding="2" cellspacing="2"><tr valign="middle"> <td><a accesskey="p" href="glib-mkenums.html"><img src="left.png" width="24" height="24" border="0" alt="Prev"></a></td> <td><a accesskey="u" href="rn02.html"><img src="up.png" width="24" height="24" border="0" alt="Up"></a></td> <td><a accesskey="h" href="index.html"><img src="home.png" width="24" height="24" border="0" alt="Home"></a></td> <th width="100%" align="center">GObject Reference Manual</th> <td><a accesskey="n" href="gobject-query.html"><img src="right.png" width="24" height="24" border="0" alt="Next"></a></td> </tr></table> <div lang="en" class="refentry"> <a name="glib-genmarshal"></a><div class="titlepage"></div> <div class="refnamediv"><table width="100%"><tr> <td valign="top"> <h2><span class="refentrytitle">glib-genmarshal</span></h2> <p>glib-genmarshal — C code marshaller generation utility for GLib closures</p> </td> <td valign="top" align="right"></td> </tr></table></div> <div class="refsynopsisdiv"> <h2>Synopsis</h2> <div class="cmdsynopsis"><p><code class="command">glib-genmarshal</code> [OPTION...] [FILE...]</p></div> </div> <div class="refsect1"> <a name="idp6641136"></a><h2>Description</h2> <p><span class="command"><strong>glib-genmarshal</strong></span> is a small utility that generates C code marshallers for callback functions of the GClosure mechanism in the GObject sublibrary of GLib. The marshaller functions have a standard signature, they get passed in the invoking closure, an array of value structures holding the callback function parameters and a value structure for the return value of the callback. The marshaller is then responsible to call the respective C code function of the closure with all the parameters on the stack and to collect its return value. </p> <p><span class="command"><strong>glib-genmarshal</strong></span> takes a list of marshallers to generate as input. The marshaller list is either read from standard input or from files passed as additional arguments on the command line. </p> <div class="refsect2"> <a name="idp6353456"></a><h3>Marshaller list format</h3> <p> The marshaller lists are processed line by line, a line can contain a comment in the form of </p> <pre class="programlisting"> # this is a comment </pre> <p> or a marshaller specification of the form </p> <pre class="programlisting"> <em class="replaceable"><code>RTYPE</code></em>:<em class="replaceable"><code>PTYPE</code></em> <em class="replaceable"><code>RTYPE</code></em>:<em class="replaceable"><code>PTYPE</code></em>,<em class="replaceable"><code>PTYPE</code></em> <em class="replaceable"><code>RTYPE</code></em>:<em class="replaceable"><code>PTYPE</code></em>,<em class="replaceable"><code>PTYPE</code></em>,<em class="replaceable"><code>PTYPE</code></em> </pre> <p> (up to 16 <em class="replaceable"><code>PTYPE</code></em>s may be present). </p> <p> The <em class="replaceable"><code>RTYPE</code></em> part specifies the callback's return type and the <em class="replaceable"><code>PTYPE</code></em>s right to the colon specify the callback's parameter list, except for the first and the last arguments which are always pointers. </p> </div> <hr> <div class="refsect2"> <a name="idp4839200"></a><h3>Parameter types</h3> <p> Currently, the following types are supported: </p> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> <col> </colgroup> <tbody> <tr> <td><p><span class="term"><em class="replaceable"><code>VOID</code></em></span></p></td> <td><p> indicates no return type, or no extra parameters. If <em class="replaceable"><code>VOID</code></em> is used as the parameter list, no additional parameters may be present. </p></td> </tr> <tr> <td><p><span class="term"><em class="replaceable"><code>BOOLEAN</code></em></span></p></td> <td><p> for boolean types (gboolean) </p></td> </tr> <tr> <td><p><span class="term"><em class="replaceable"><code>CHAR</code></em></span></p></td> <td><p> for signed char types (gchar) </p></td> </tr> <tr> <td><p><span class="term"><em class="replaceable"><code>UCHAR</code></em></span></p></td> <td><p> for unsigned char types (guchar) </p></td> </tr> <tr> <td><p><span class="term"><em class="replaceable"><code>INT</code></em></span></p></td> <td><p> for signed integer types (gint) </p></td> </tr> <tr> <td><p><span class="term"><em class="replaceable"><code>UINT</code></em></span></p></td> <td><p> for unsigned integer types (guint) </p></td> </tr> <tr> <td><p><span class="term"><em class="replaceable"><code>LONG</code></em></span></p></td> <td><p> for signed long integer types (glong) </p></td> </tr> <tr> <td><p><span class="term"><em class="replaceable"><code>ULONG</code></em></span></p></td> <td><p> for unsigned long integer types (gulong) </p></td> </tr> <tr> <td><p><span class="term"><em class="replaceable"><code>INT64</code></em></span></p></td> <td><p> for signed 64bit integer types (gint64) </p></td> </tr> <tr> <td><p><span class="term"><em class="replaceable"><code>UINT64</code></em></span></p></td> <td><p> for unsigned 64bit integer types (guint64) </p></td> </tr> <tr> <td><p><span class="term"><em class="replaceable"><code>ENUM</code></em></span></p></td> <td><p> for enumeration types (gint) </p></td> </tr> <tr> <td><p><span class="term"><em class="replaceable"><code>FLAGS</code></em></span></p></td> <td><p> for flag enumeration types (guint) </p></td> </tr> <tr> <td><p><span class="term"><em class="replaceable"><code>FLOAT</code></em></span></p></td> <td><p> for single-precision float types (gfloat) </p></td> </tr> <tr> <td><p><span class="term"><em class="replaceable"><code>DOUBLE</code></em></span></p></td> <td><p> for double-precision float types (gdouble) </p></td> </tr> <tr> <td><p><span class="term"><em class="replaceable"><code>STRING</code></em></span></p></td> <td><p> for string types (gchar*) </p></td> </tr> <tr> <td><p><span class="term"><em class="replaceable"><code>BOXED</code></em></span></p></td> <td><p> for boxed (anonymous but reference counted) types (GBoxed*) </p></td> </tr> <tr> <td><p><span class="term"><em class="replaceable"><code>PARAM</code></em></span></p></td> <td><p> for GParamSpec or derived types (GParamSpec*) </p></td> </tr> <tr> <td><p><span class="term"><em class="replaceable"><code>POINTER</code></em></span></p></td> <td><p> for anonymous pointer types (gpointer) </p></td> </tr> <tr> <td><p><span class="term"><em class="replaceable"><code>OBJECT</code></em></span></p></td> <td><p> for GObject or derived types (GObject*) </p></td> </tr> <tr> <td><p><span class="term"><em class="replaceable"><code>VARIANT</code></em></span></p></td> <td><p> for GVariant types (GVariant*) </p></td> </tr> <tr> <td><p><span class="term"><em class="replaceable"><code>NONE</code></em></span></p></td> <td><p> deprecated alias for <em class="replaceable"><code>VOID</code></em> </p></td> </tr> <tr> <td><p><span class="term"><em class="replaceable"><code>BOOL</code></em></span></p></td> <td><p> deprecated alias for <em class="replaceable"><code>BOOLEAN</code></em> </p></td> </tr> </tbody> </table></div> <p> </p> </div> </div> <div class="refsect1"> <a name="idp9900720"></a><h2>Options</h2> <div class="variablelist"><table border="0" class="variablelist"> <colgroup> <col align="left" valign="top"> <col> </colgroup> <tbody> <tr> <td><p><span class="term"><code class="option">--header</code></span></p></td> <td><p> Generate header file contents of the marshallers. </p></td> </tr> <tr> <td><p><span class="term"><code class="option">--body</code></span></p></td> <td><p> Generate C code file contents of the marshallers. </p></td> </tr> <tr> <td><p><span class="term"><code class="option">--prefix=<em class="replaceable"><code>PREFIX</code></em></code></span></p></td> <td><p> Specify marshaller prefix. The default prefix is <code class="literal">`g_cclosure_marshal'</code>. </p></td> </tr> <tr> <td><p><span class="term"><code class="option">--skip-source</code></span></p></td> <td><p> Skip source location remarks in generated comments. </p></td> </tr> <tr> <td><p><span class="term"><code class="option">--nostdinc</code></span></p></td> <td><p> Do not use the standard marshallers of the GObject library, and skip <code class="filename">gmarshal.h</code> include directive in generated header files. </p></td> </tr> <tr> <td><p><span class="term"><code class="option">--internal</code></span></p></td> <td><p> Mark generated functions as internal, using G_GNUC_INTERNAL. </p></td> </tr> <tr> <td><p><span class="term"><code class="option">--valist-marshallers</code></span></p></td> <td><p> Generate valist marshallers, for use with g_signal_set_va_marshaller(). </p></td> </tr> <tr> <td><p><span class="term"><code class="option">-v</code>, <code class="option">--version</code></span></p></td> <td><p> Print version information. </p></td> </tr> <tr> <td><p><span class="term"><code class="option">--g-fatal-warnings</code></span></p></td> <td><p> Make warnings fatal, that is, exit immediately once a warning occurs. </p></td> </tr> <tr> <td><p><span class="term"><code class="option">-h</code>, <code class="option">--help</code></span></p></td> <td><p> Print brief help and exit. </p></td> </tr> <tr> <td><p><span class="term"><code class="option">-v</code>, <code class="option">--version</code></span></p></td> <td><p> Print version and exit. </p></td> </tr> </tbody> </table></div> </div> <div class="refsect1"> <a name="idp12559536"></a><h2>Example</h2> <p> To generate marshallers for the following callback functions: </p> <pre class="programlisting"> void foo (gpointer data1, gpointer data2); void bar (gpointer data1, gint param1, gpointer data2); gfloat baz (gpointer data1, gboolean param1, guchar param2, gpointer data2); </pre> <p> The <code class="filename">marshaller.list</code> file has to look like this: </p> <pre class="programlisting"> VOID:VOID VOID:INT FLOAT:BOOLEAN,UCHAR </pre> <p> and you call glib-genmarshal like this: </p> <pre class="programlisting"> glib-genmarshal --header marshaller.list > marshaller.h glib-genmarshal --body marshaller.list > marshaller.c </pre> <p> The generated marshallers have the arguments encoded in their function name. For this particular list, they are </p> <pre class="programlisting"> g_cclosure_user_marshal_VOID__VOID(), g_cclosure_user_marshal_VOID__INT(), g_cclosure_user_marshal_FLOAT__BOOLEAN_UCHAR(). </pre> <p> They can be used directly for GClosures or be passed in as the GSignalCMarshaller c_marshaller; argument upon creation of signals: </p> <pre class="programlisting"> GClosure *cc_foo, *cc_bar, *cc_baz; cc_foo = g_cclosure_new (NULL, foo, NULL); g_closure_set_marshal (cc_foo, g_cclosure_user_marshal_VOID__VOID); cc_bar = g_cclosure_new (NULL, bar, NULL); g_closure_set_marshal (cc_bar, g_cclosure_user_marshal_VOID__INT); cc_baz = g_cclosure_new (NULL, baz, NULL); g_closure_set_marshal (cc_baz, g_cclosure_user_marshal_FLOAT__BOOLEAN_UCHAR); </pre> </div> <div class="refsect1"> <a name="idp7264864"></a><h2>See also</h2> <p> <span class="citerefentry"><span class="refentrytitle">glib-mkenums</span>(1)</span> </p> </div> </div> <div class="footer"> <hr> Generated by GTK-Doc V1.18</div> </body> </html>