mirror of
				https://gitlab.gnome.org/GNOME/glib.git
				synced 2025-11-04 01:58:54 +01:00 
			
		
		
		
	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)>`_ |