mirror of
https://gitlab.gnome.org/GNOME/glib.git
synced 2024-12-27 07:56:14 +01:00
031e65808d
So they are consistent with the way we’re building man pages in other projects, and because some people are allergic to XML. This changes the build-time dependencies from `xsltproc` to `rst2man`, and also takes the opportunity to change the `-Dman` Meson option from a boolean to a feature (so you should use `-Dman-pages={enabled,disabled}` now, rather than `-Dman={true,false}`). Signed-off-by: Philip Withnall <pwithnall@gnome.org> Helps: #3037
390 lines
11 KiB
ReStructuredText
390 lines
11 KiB
ReStructuredText
.. _glib-genmarshal(1):
|
||
.. meta::
|
||
:copyright: Copyright 2003 Matthias Clasen
|
||
:copyright: Copyright 2005, 2012, 2013, 2016 Red Hat, Inc.
|
||
:copyright: Copyright 2010 Christian Persch
|
||
:copyright: Copyright 2017, 2019, 2020 Emmanuele Bassi
|
||
:copyright: Copyright 2020 Centricular
|
||
:license: LGPL-2.1-or-later
|
||
..
|
||
This has to be duplicated from above to make it machine-readable by `reuse`:
|
||
SPDX-FileCopyrightText: 2003 Matthias Clasen
|
||
SPDX-FileCopyrightText: 2005, 2012, 2013, 2016 Red Hat, Inc.
|
||
SPDX-FileCopyrightText: 2010 Christian Persch
|
||
SPDX-FileCopyrightText: 2017, 2019, 2020 Emmanuele Bassi
|
||
SPDX-FileCopyrightText: 2020 Centricular
|
||
SPDX-License-Identifier: LGPL-2.1-or-later
|
||
|
||
===============
|
||
glib-genmarshal
|
||
===============
|
||
|
||
------------------------------------------------------
|
||
C code marshaller generation utility for GLib closures
|
||
------------------------------------------------------
|
||
|
||
SYNOPSIS
|
||
--------
|
||
|
||
| **glib-genmarshal** [OPTION…] [FILE…]
|
||
|
||
DESCRIPTION
|
||
-----------
|
||
|
||
``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.
|
||
|
||
MARSHALLER LIST FORMAT
|
||
^^^^^^^^^^^^^^^^^^^^^^
|
||
|
||
The marshaller lists are processed line by line, a line can contain a comment in
|
||
the form of::
|
||
|
||
# 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``
|
||
instances right of the colon specify the callback’s parameter list, except for
|
||
the first and the last arguments which are always pointers.
|
||
|
||
PARAMETER TYPES
|
||
^^^^^^^^^^^^^^^
|
||
|
||
Currently, the following types are supported:
|
||
|
||
``VOID``
|
||
|
||
Indicates no return type, or no extra parameters. If ``VOID`` is used as the
|
||
parameter list, no additional parameters may be present.
|
||
|
||
``BOOLEAN``
|
||
|
||
For boolean types (``gboolean``).
|
||
|
||
``CHAR``
|
||
|
||
For signed char types (``gchar``).
|
||
|
||
``UCHAR``
|
||
|
||
For unsigned char types (``guchar``).
|
||
|
||
``INT``
|
||
|
||
For signed integer types (``gint``).
|
||
|
||
``UINT``
|
||
|
||
For unsigned integer types (``guint``).
|
||
|
||
``LONG``
|
||
|
||
For signed long integer types (``glong``).
|
||
|
||
``ULONG``
|
||
|
||
For unsigned long integer types (``gulong``).
|
||
|
||
``INT64``
|
||
|
||
For signed 64-bit integer types (``gint64``).
|
||
|
||
``UINT64``
|
||
|
||
For unsigned 64-bit integer types (``guint64``).
|
||
|
||
``ENUM``
|
||
|
||
For enumeration types (``gint``).
|
||
|
||
``FLAGS``
|
||
|
||
For flag enumeration types (``guint``).
|
||
|
||
``FLOAT``
|
||
|
||
For single-precision float types (``gfloat``).
|
||
|
||
``DOUBLE``
|
||
|
||
For double-precision float types (``gdouble``).
|
||
|
||
``STRING``
|
||
|
||
For string types (``gchar*``).
|
||
|
||
``BOXED``
|
||
|
||
For boxed (anonymous but reference counted) types (``GBoxed*``).
|
||
|
||
``PARAM``
|
||
|
||
For ``GParamSpec`` or derived types (``GParamSpec*``).
|
||
|
||
``POINTER``
|
||
|
||
For anonymous pointer types (``gpointer``).
|
||
|
||
``OBJECT``
|
||
|
||
For ``GObject`` or derived types (``GObject*``).
|
||
|
||
``VARIANT``
|
||
|
||
For ``GVariant`` types (``GVariant*``).
|
||
|
||
``NONE``
|
||
|
||
Deprecated alias for ``VOID``.
|
||
|
||
``BOOL``
|
||
|
||
Deprecated alias for ``BOOLEAN``.
|
||
|
||
OPTIONS
|
||
-------
|
||
|
||
``--header``
|
||
|
||
Generate header file contents of the marshallers. This option is mutually
|
||
exclusive with the ``--body`` option.
|
||
|
||
``--body``
|
||
|
||
Generate C code file contents of the marshallers. This option is mutually
|
||
exclusive with the ``--header`` option.
|
||
|
||
``--prefix <PREFIX>``
|
||
|
||
Specify marshaller prefix. The default prefix is ``g_cclosure_user_marshal``.
|
||
|
||
``--skip-source``
|
||
|
||
Skip source location remarks in generated comments.
|
||
|
||
``--stdinc``
|
||
|
||
Use the standard marshallers of the GObject library, and include
|
||
``glib-object.h`` in generated header files. This option is mutually exclusive
|
||
with the ``--nostdinc`` option.
|
||
|
||
``--nostdinc``
|
||
|
||
Do not use the standard marshallers of the GObject library, and skip the
|
||
``glib-object.h`` include directive in generated header files.
|
||
This option is mutually exclusive with the ``--stdinc`` option.
|
||
|
||
``--internal``
|
||
|
||
Mark generated functions as internal, using ``G_GNUC_INTERNAL``.
|
||
|
||
``-valist-marshallers``
|
||
|
||
Generate ``valist`` marshallers, for use with
|
||
``g_signal_set_va_marshaller()``.
|
||
|
||
``-v``, ``--version``
|
||
|
||
Print version information and exit.
|
||
|
||
``--g-fatal-warnings``
|
||
|
||
Make warnings fatal. That is, exit immediately once a warning occurs.
|
||
|
||
``-h``, ``--help``
|
||
|
||
Print brief help and exit.
|
||
|
||
``--output <FILE>``
|
||
|
||
Write output to ``FILE`` instead of the standard output.
|
||
|
||
``--prototypes``
|
||
|
||
Generate function prototypes before the function definition in the C source
|
||
file, in order to avoid a ``missing-prototypes`` compiler warning. This option
|
||
is only useful when using the ``--body`` option.
|
||
|
||
``--pragma-once``
|
||
|
||
Use the ``once`` pragma instead of an old style header guard
|
||
when generating the C header file. This option is only useful when using the
|
||
``--header`` option.
|
||
|
||
``--include-header <HEADER>``
|
||
|
||
Adds a ``#include`` directive for the given file in the C source file. This
|
||
option is only useful when using the ``--body`` option.
|
||
|
||
``-D <SYMBOL>[=<VALUE>]``
|
||
|
||
Adds a ``#define`` C pre-processor directive for ``SYMBOL`` and its given
|
||
``VALUE``, or ``"1"`` if the value is unset. You can use this option multiple
|
||
times; if you do, all the symbols will be defined in the same order given on
|
||
the command line, before the symbols undefined using the ``-U`` option. This
|
||
option is only useful when using the ``--body`` option.
|
||
|
||
``-U <SYMBOL>``
|
||
|
||
Adds a ``#undef`` C pre-processor directive to undefine the given ``SYMBOL``.
|
||
You can use this option multiple times; if you do, all the symbols will be
|
||
undefined in the same order given on the command line, after the symbols
|
||
defined using the ``-D`` option. This option is only useful when using the
|
||
``--body`` option.
|
||
|
||
``--quiet``
|
||
|
||
Minimizes the output of ``glib-genmarshal``, by printing only warnings and
|
||
errors. This option is mutually exclusive with the ``--verbose`` option.
|
||
|
||
``--verbose``
|
||
|
||
Increases the verbosity of ``glib-genmarshal``, by printing debugging
|
||
information. This option is mutually exclusive with the ``--quiet`` option.
|
||
|
||
USING GLIB-GENMARSHAL WITH MESON
|
||
--------------------------------
|
||
|
||
Meson supports generating closure marshallers using ``glib-genmarshal`` out of
|
||
the box in its ``gnome`` module.
|
||
|
||
In your ``meson.build`` file you will typically call the ``gnome.genmarshal()``
|
||
method with the source list of marshallers to generate::
|
||
|
||
gnome = import('gnome')
|
||
marshal_files = gnome.genmarshal('marshal',
|
||
sources: 'marshal.list',
|
||
internal: true,
|
||
)
|
||
|
||
The ``marshal_files`` variable will contain an array of two elements in the
|
||
following order:
|
||
|
||
* a build target for the source file
|
||
* a build target for the header file
|
||
|
||
You should use the returned objects to provide a dependency on every other
|
||
build target that references the source or header file; for instance, if you
|
||
are using the source to build a library::
|
||
|
||
mainlib = library('project',
|
||
sources: project_sources + marshal_files,
|
||
…
|
||
)
|
||
|
||
Additionally, if you are including the generated header file inside a build
|
||
target that depends on the library you just built, you must ensure that the
|
||
internal dependency includes the generated header as a required source file::
|
||
|
||
mainlib_dep = declare_dependency(sources: marshal_files[1], link_with: mainlib)
|
||
|
||
You should not include the generated source file as well, otherwise it will
|
||
be built separately for every target that depends on it, causing build
|
||
failures. To know more about why all this is required, please refer to the
|
||
`corresponding Meson FAQ entry <https://mesonbuild.com/FAQ.html#how-do-i-tell-meson-that-my-sources-use-generated-headers>`_.
|
||
|
||
For more information on how to use the method, see the
|
||
`Meson documentation <https://mesonbuild.com/Gnome-module.html#gnomegenmarshal>`_
|
||
for ``gnome.genmarshal()``.
|
||
|
||
USING GLIB-GENMARSHAL WITH AUTOTOOLS
|
||
------------------------------------
|
||
|
||
In order to use ``glib-genmarshal`` in your project when using Autotools as the
|
||
build system, you will first need to modify your ``configure.ac`` file to ensure
|
||
you find the appropriate command using ``pkg-config``, similarly as to how you
|
||
discover the compiler and linker flags for GLib::
|
||
|
||
PKG_PROG_PKG_CONFIG([0.28])
|
||
|
||
PKG_CHECK_VAR([GLIB_GENMARSHAL], [glib-2.0], [glib_genmarshal])
|
||
|
||
In your ``Makefile.am`` file you will typically need very simple rules to
|
||
generate the C files needed for the build::
|
||
|
||
marshal.h: marshal.list
|
||
$(AM_V_GEN)$(GLIB_GENMARSHAL) \
|
||
--header \
|
||
--output=$@ \
|
||
$<
|
||
|
||
marshal.c: marshal.list marshal.h
|
||
$(AM_V_GEN)$(GLIB_GENMARSHAL) \
|
||
--include-header=marshal.h \
|
||
--body \
|
||
--output=$@ \
|
||
$<
|
||
|
||
BUILT_SOURCES += marshal.h marshal.c
|
||
CLEANFILES += marshal.h marshal.c
|
||
EXTRA_DIST += marshal.list
|
||
|
||
In the example above, the first rule generates the header file and depends on
|
||
a ``marshal.list`` file in order to regenerate the result in case the
|
||
marshallers list is updated. The second rule generates the source file for the
|
||
same ``marshal.list``, and includes the file generated by the header rule.
|
||
|
||
EXAMPLE
|
||
-------
|
||
|
||
To generate marshallers for the following callback functions::
|
||
|
||
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::
|
||
|
||
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);
|
||
|
||
SEE ALSO
|
||
--------
|
||
|
||
`glib-mkenums(1) <man:glib-mkenums(1)>`_ |