blob: dd0053c3c6f441107ec66f301956c22f2ff3a3a1 [file] [log] [blame]
'\" t
.\" Title: glib-genmarshal
.\" Author: Tim Janik
.\" Generator: DocBook XSL Stylesheets v1.79.1 <http://docbook.sf.net/>
.\" Date: 07/20/2016
.\" Manual: User Commands
.\" Source: GObject
.\" Language: English
.\"
.TH "GLIB\-GENMARSHAL" "1" "" "GObject" "User Commands"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.\" http://bugs.debian.org/507673
.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html
.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.ie \n(.g .ds Aq \(aq
.el .ds Aq '
.\" -----------------------------------------------------------------
.\" * set default formatting
.\" -----------------------------------------------------------------
.\" disable hyphenation
.nh
.\" disable justification (adjust text to left margin only)
.ad l
.\" -----------------------------------------------------------------
.\" * MAIN CONTENT STARTS HERE *
.\" -----------------------------------------------------------------
.SH "NAME"
glib-genmarshal \- C code marshaller generation utility for GLib closures
.SH "SYNOPSIS"
.HP \w'\fBglib\-genmarshal\fR\ 'u
\fBglib\-genmarshal\fR [OPTION...] [FILE...]
.SH "DESCRIPTION"
.PP
\fBglib\-genmarshal\fR
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\&.
.PP
\fBglib\-genmarshal\fR
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\&.
.SS "Marshaller list format"
.PP
The marshaller lists are processed line by line, a line can contain a comment in the form of
.sp .if n \{\ .RS 4 .\} .nf # this is a comment .fi .if n \{\ .RE .\}
or a marshaller specification of the form
.sp
.if n \{\
.RS 4
.\}
.nf
\fIRTYPE\fR:\fIPTYPE\fR
\fIRTYPE\fR:\fIPTYPE\fR,\fIPTYPE\fR
\fIRTYPE\fR:\fIPTYPE\fR,\fIPTYPE\fR,\fIPTYPE\fR
.fi
.if n \{\
.RE
.\}
.sp
(up to 16
\fIPTYPE\fRs may be present)\&.
.PP
The
\fIRTYPE\fR
part specifies the callback\*(Aqs return type and the
\fIPTYPE\fRs right to the colon specify the callback\*(Aqs parameter list, except for the first and the last arguments which are always pointers\&.
.SS "Parameter types"
.PP
Currently, the following types are supported:
.PP
\fIVOID\fR
.RS 4
indicates no return type, or no extra parameters\&. If
\fIVOID\fR
is used as the parameter list, no additional parameters may be present\&.
.RE
.PP
\fIBOOLEAN\fR
.RS 4
for boolean types (gboolean)
.RE
.PP
\fICHAR\fR
.RS 4
for signed char types (gchar)
.RE
.PP
\fIUCHAR\fR
.RS 4
for unsigned char types (guchar)
.RE
.PP
\fIINT\fR
.RS 4
for signed integer types (gint)
.RE
.PP
\fIUINT\fR
.RS 4
for unsigned integer types (guint)
.RE
.PP
\fILONG\fR
.RS 4
for signed long integer types (glong)
.RE
.PP
\fIULONG\fR
.RS 4
for unsigned long integer types (gulong)
.RE
.PP
\fIINT64\fR
.RS 4
for signed 64bit integer types (gint64)
.RE
.PP
\fIUINT64\fR
.RS 4
for unsigned 64bit integer types (guint64)
.RE
.PP
\fIENUM\fR
.RS 4
for enumeration types (gint)
.RE
.PP
\fIFLAGS\fR
.RS 4
for flag enumeration types (guint)
.RE
.PP
\fIFLOAT\fR
.RS 4
for single\-precision float types (gfloat)
.RE
.PP
\fIDOUBLE\fR
.RS 4
for double\-precision float types (gdouble)
.RE
.PP
\fISTRING\fR
.RS 4
for string types (gchar*)
.RE
.PP
\fIBOXED\fR
.RS 4
for boxed (anonymous but reference counted) types (GBoxed*)
.RE
.PP
\fIPARAM\fR
.RS 4
for GParamSpec or derived types (GParamSpec*)
.RE
.PP
\fIPOINTER\fR
.RS 4
for anonymous pointer types (gpointer)
.RE
.PP
\fIOBJECT\fR
.RS 4
for GObject or derived types (GObject*)
.RE
.PP
\fIVARIANT\fR
.RS 4
for GVariant types (GVariant*)
.RE
.PP
\fINONE\fR
.RS 4
deprecated alias for
\fIVOID\fR
.RE
.PP
\fIBOOL\fR
.RS 4
deprecated alias for
\fIBOOLEAN\fR
.RE
.SH "OPTIONS"
.PP
\fB\-\-header\fR
.RS 4
Generate header file contents of the marshallers\&.
.RE
.PP
\fB\-\-body\fR
.RS 4
Generate C code file contents of the marshallers\&.
.RE
.PP
\fB\-\-prefix=\fR\fB\fIPREFIX\fR\fR
.RS 4
Specify marshaller prefix\&. The default prefix is
`g_cclosure_marshal\*(Aq\&.
.RE
.PP
\fB\-\-skip\-source\fR
.RS 4
Skip source location remarks in generated comments\&.
.RE
.PP
\fB\-\-stdinc\fR
.RS 4
Use the standard marshallers of the GObject library, and include
gmarshal\&.h
in generated header files\&.
.RE
.PP
\fB\-\-nostdinc\fR
.RS 4
Do not use the standard marshallers of the GObject library, and skip
gmarshal\&.h
include directive in generated header files\&.
.RE
.PP
\fB\-\-internal\fR
.RS 4
Mark generated functions as internal, using G_GNUC_INTERNAL\&.
.RE
.PP
\fB\-\-valist\-marshallers\fR
.RS 4
Generate valist marshallers, for use with g_signal_set_va_marshaller()\&.
.RE
.PP
\fB\-v\fR, \fB\-\-version\fR
.RS 4
Print version information\&.
.RE
.PP
\fB\-\-g\-fatal\-warnings\fR
.RS 4
Make warnings fatal, that is, exit immediately once a warning occurs\&.
.RE
.PP
\fB\-h\fR, \fB\-\-help\fR
.RS 4
Print brief help and exit\&.
.RE
.PP
\fB\-v\fR, \fB\-\-version\fR
.RS 4
Print version and exit\&.
.RE
.SH "EXAMPLE"
.PP
To generate marshallers for the following callback functions:
.sp
.if n \{\
.RS 4
.\}
.nf
void foo (gpointer data1,
gpointer data2);
void bar (gpointer data1,
gint param1,
gpointer data2);
gfloat baz (gpointer data1,
gboolean param1,
guchar param2,
gpointer data2);
.fi
.if n \{\
.RE
.\}
.PP
The
marshaller\&.list
file has to look like this:
.sp
.if n \{\
.RS 4
.\}
.nf
VOID:VOID
VOID:INT
FLOAT:BOOLEAN,UCHAR
.fi
.if n \{\
.RE
.\}
.PP
and you call glib\-genmarshal like this:
.sp
.if n \{\
.RS 4
.\}
.nf
glib\-genmarshal \-\-header marshaller\&.list > marshaller\&.h
glib\-genmarshal \-\-body marshaller\&.list > marshaller\&.c
.fi
.if n \{\
.RE
.\}
.PP
The generated marshallers have the arguments encoded in their function name\&. For this particular list, they are
.sp
.if n \{\
.RS 4
.\}
.nf
g_cclosure_user_marshal_VOID__VOID(),
g_cclosure_user_marshal_VOID__INT(),
g_cclosure_user_marshal_FLOAT__BOOLEAN_UCHAR()\&.
.fi
.if n \{\
.RE
.\}
.PP
They can be used directly for GClosures or be passed in as the GSignalCMarshaller c_marshaller; argument upon creation of signals:
.sp
.if n \{\
.RS 4
.\}
.nf
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);
.fi
.if n \{\
.RE
.\}
.SH "SEE ALSO"
.PP
\fBglib-mkenums\fR(1)