glib-genmarshalglib-genmarshal — C code marshaller generation utility for GLib closures |
glib-genmarshal
[OPTION...] [FILE...]
glib-genmarshal 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.
glib-genmarshal takes a list of marshallers to generate as
input. The marshaller list is either read from files passed as additional arguments
on the command line; or from standard input, by using -
as the
input file.
The marshaller lists are processed line by line, a line can contain a comment in the form of
1 |
# this is a comment |
or a marshaller specification of the form
RTYPE
:PTYPE
RTYPE
:PTYPE
,PTYPE
RTYPE
:PTYPE
,PTYPE
,PTYPE
The RTYPE
part specifies the callback's return
type and the PTYPE
s right to the colon specify
the callback's parameter list, except for the first and the last arguments
which are always pointers.
Currently, the following types are supported:
|
indicates no return type, or no extra parameters.
If |
|
for boolean types (gboolean) |
|
for signed char types (gchar) |
|
for unsigned char types (guchar) |
|
for signed integer types (gint) |
|
for unsigned integer types (guint) |
|
for signed long integer types (glong) |
|
for unsigned long integer types (gulong) |
|
for signed 64bit integer types (gint64) |
|
for unsigned 64bit integer types (guint64) |
|
for enumeration types (gint) |
|
for flag enumeration types (guint) |
|
for single-precision float types (gfloat) |
|
for double-precision float types (gdouble) |
|
for string types (gchar*) |
|
for boxed (anonymous but reference counted) types (GBoxed*) |
|
for GParamSpec or derived types (GParamSpec*) |
|
for anonymous pointer types (gpointer) |
|
for GObject or derived types (GObject*) |
|
for GVariant types (GVariant*) |
|
deprecated alias for |
|
deprecated alias for |
|
Generate header file contents of the marshallers. This option is mutually
exclusive with the |
|
Generate C code file contents of the marshallers. This option is mutually
exclusive with the |
|
Specify marshaller prefix. The default prefix is |
|
Skip source location remarks in generated comments. |
|
Use the standard marshallers of the GObject library, and include
|
|
Do not use the standard marshallers of the GObject library, and skip
|
|
Mark generated functions as internal, using |
|
Generate valist marshallers, for use with |
|
Print version information. |
|
Make warnings fatal, that is, exit immediately once a warning occurs. |
|
Print brief help and exit. |
|
Print version and exit. |
|
Write output to |
|
Generate function prototypes before the function definition in the C source
file, in order to avoid a |
|
Use the |
|
Adds a |
|
Adds a |
|
Adds a |
|
Minimizes the output of glib-genmarshal, by printing only
warnings and errors. This option is mutually exclusive with the
|
|
Increases the verbosity of glib-genmarshal, by printing
debugging information. This option is mutually exclusive with the
|
To generate marshallers for the following callback functions:
1 2 3 4 5 6 7 8 9 |
void foo (gpointer data1, gpointer data2); void bar (gpointer data1, gint param1, gpointer data2); gfloat baz (gpointer data1, gboolean param1, guchar param2, gpointer data2); |
The marshaller.list
file has to look like this:
VOID:VOID VOID:INT FLOAT:BOOLEAN,UCHAR
and you call glib-genmarshal like this:
glib-genmarshal --header marshaller.list > marshaller.h glib-genmarshal --body marshaller.list > marshaller.c
The generated marshallers have the arguments encoded in their function name. For this particular list, they are
g_cclosure_user_marshal_VOID__VOID(...), g_cclosure_user_marshal_VOID__INT(...), g_cclosure_user_marshal_FLOAT__BOOLEAN_UCHAR(...).
They can be used directly for GClosures or be passed in as the GSignalCMarshaller c_marshaller; argument upon creation of signals:
1 2 3 4 5 6 7 8 |
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); |