mirror of
				https://gitlab.gnome.org/GNOME/glib.git
				synced 2025-11-04 01:58:54 +01:00 
			
		
		
		
	
		
			
	
	
		
			491 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
		
		
			
		
	
	
			491 lines
		
	
	
		
			15 KiB
		
	
	
	
		
			ReStructuredText
		
	
	
	
	
	
| 
								 | 
							
								.. _glib-mkenums(1):
							 | 
						|||
| 
								 | 
							
								.. meta::
							 | 
						|||
| 
								 | 
							
								   :copyright: Copyright 2003 Matthias Clasen
							 | 
						|||
| 
								 | 
							
								   :copyright: Copyright 2009 Christian Persch
							 | 
						|||
| 
								 | 
							
								   :copyright: Copyright 2010 Allison Karlitskaya
							 | 
						|||
| 
								 | 
							
								   :copyright: Copyright 2012, 2013, 2016 Red Hat, Inc.
							 | 
						|||
| 
								 | 
							
								   :copyright: Copyright 2017, 2019, 2022 Emmanuele Bassi
							 | 
						|||
| 
								 | 
							
								   :copyright: Copyright 2018, 2020 Centricular
							 | 
						|||
| 
								 | 
							
								   :copyright: Copyright 2020 Aleksander Morgado
							 | 
						|||
| 
								 | 
							
								   :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: 2009 Christian Persch
							 | 
						|||
| 
								 | 
							
								   SPDX-FileCopyrightText: 2010 Allison Karlitskaya
							 | 
						|||
| 
								 | 
							
								   SPDX-FileCopyrightText: 2012, 2013, 2016 Red Hat, Inc.
							 | 
						|||
| 
								 | 
							
								   SPDX-FileCopyrightText: 2017, 2019, 2022 Emmanuele Bassi
							 | 
						|||
| 
								 | 
							
								   SPDX-FileCopyrightText: 2018, 2020 Centricular
							 | 
						|||
| 
								 | 
							
								   SPDX-FileCopyrightText: 2020 Aleksander Morgado
							 | 
						|||
| 
								 | 
							
								   SPDX-License-Identifier: LGPL-2.1-or-later
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								============
							 | 
						|||
| 
								 | 
							
								glib-mkenums
							 | 
						|||
| 
								 | 
							
								============
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								----------------------------------------------
							 | 
						|||
| 
								 | 
							
								C language enum description generation utility
							 | 
						|||
| 
								 | 
							
								----------------------------------------------
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								SYNOPSIS
							 | 
						|||
| 
								 | 
							
								--------
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								|  **glib-mkenums** [OPTION…] [FILE…]
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								DESCRIPTION
							 | 
						|||
| 
								 | 
							
								-----------
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``glib-mkenums`` is a small utility that parses C code to extract enum
							 | 
						|||
| 
								 | 
							
								definitions and produces enum descriptions based on text templates specified by
							 | 
						|||
| 
								 | 
							
								the user. Typically, you can use this tool to generate enumeration
							 | 
						|||
| 
								 | 
							
								types for the GType type system, for GObject properties and signal marshalling;
							 | 
						|||
| 
								 | 
							
								additionally, you can use it to generate enumeration values of GSettings
							 | 
						|||
| 
								 | 
							
								schemas.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``glib-mkenums`` takes a list of valid C code files as input. The options
							 | 
						|||
| 
								 | 
							
								specified control the text that generated, substituting various keywords
							 | 
						|||
| 
								 | 
							
								enclosed in ``@`` characters in the templates.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Since version 2.74, GLib provides the ``G_DEFINE_ENUM_TYPE`` and
							 | 
						|||
| 
								 | 
							
								``G_DEFINE_FLAGS_TYPE`` C pre-processor macros. These macros can be used to
							 | 
						|||
| 
								 | 
							
								define a GType for projects that have few, small enumeration types without going
							 | 
						|||
| 
								 | 
							
								through the complexities of generating code at build time.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								PRODUCTION TEXT SUBSTITUTIONS
							 | 
						|||
| 
								 | 
							
								^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Certain keywords enclosed in ``@`` characters will be substituted in the
							 | 
						|||
| 
								 | 
							
								emitted text. For the substitution examples of the keywords below,
							 | 
						|||
| 
								 | 
							
								the following example enum definition is assumed::
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								   typedef enum
							 | 
						|||
| 
								 | 
							
								   {
							 | 
						|||
| 
								 | 
							
								     PREFIX_THE_XVALUE    = 1 << 3,
							 | 
						|||
| 
								 | 
							
								     PREFIX_ANOTHER_VALUE = 1 << 4
							 | 
						|||
| 
								 | 
							
								   } PrefixTheXEnum;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``@EnumName@``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  The name of the enum currently being processed, enum names are assumed to be
							 | 
						|||
| 
								 | 
							
								  properly namespaced and to use mixed capitalization to separate
							 | 
						|||
| 
								 | 
							
								  words (e.g. ``PrefixTheXEnum``).
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``@enum_name@``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  The enum name with words lowercase and word-separated by underscores
							 | 
						|||
| 
								 | 
							
								  (e.g. ``prefix_the_xenum``).
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``@ENUMNAME@``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  The enum name with words uppercase and word-separated by underscores
							 | 
						|||
| 
								 | 
							
								  (e.g. ``PREFIX_THE_XENUM``).
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``@ENUMSHORT@``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  The enum name with words uppercase and word-separated by underscores,
							 | 
						|||
| 
								 | 
							
								  prefix stripped (e.g. ``THE_XENUM``).
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``@ENUMPREFIX@``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  The prefix of the enum name (e.g. ``PREFIX``).
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``@VALUENAME@``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  The enum value name currently being processed with words uppercase and
							 | 
						|||
| 
								 | 
							
								  word-separated by underscores, this is the assumed literal notation of enum
							 | 
						|||
| 
								 | 
							
								  values in the C sources (e.g. ``PREFIX_THE_XVALUE``).
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``@valuenick@``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  A nick name for the enum value currently being processed, this is usually
							 | 
						|||
| 
								 | 
							
								  generated by stripping common prefix words of all the enum values of the
							 | 
						|||
| 
								 | 
							
								  current enum, the words are lowercase and underscores are substituted by a
							 | 
						|||
| 
								 | 
							
								  minus (e.g. ``the-xvalue``).
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``@valuenum@``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  The integer value for the enum value currently being processed. If the
							 | 
						|||
| 
								 | 
							
								  evaluation fails then ``glib-mkenums`` will exit with an
							 | 
						|||
| 
								 | 
							
								  error status, but this only happens if ``@valuenum@``
							 | 
						|||
| 
								 | 
							
								  appears in your value production template. (Since: 2.26)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``@type@``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  This is substituted either by ‘enum’ or ‘flags’, depending on whether the
							 | 
						|||
| 
								 | 
							
								  enum value definitions contained bit-shift operators (e.g. ``flags``).
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``@Type@``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  The same as ``@type@`` with the first letter capitalized (e.g. ``Flags``).
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``@TYPE@``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  The same as ``@type@`` with all letters uppercased (e.g. ``FLAGS``).
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``@filename@``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  The full path of the input file currently being processed
							 | 
						|||
| 
								 | 
							
								  (e.g. ``/build/environment/project/src/foo.h``).
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``@basename@``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  The base name of the input file currently being processed (e.g. ``foo.h``).
							 | 
						|||
| 
								 | 
							
								  Typically you want to use ``@basename@`` in place of ``@filename@``
							 | 
						|||
| 
								 | 
							
								  in your templates, to improve the reproducibility of the build. (Since: 2.22)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								TRIGRAPH EXTENSIONS
							 | 
						|||
| 
								 | 
							
								^^^^^^^^^^^^^^^^^^^
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Some C comments are treated specially in the parsed enum definitions, such
							 | 
						|||
| 
								 | 
							
								comments start out with the trigraph sequence ``/*<`` and end with the trigraph
							 | 
						|||
| 
								 | 
							
								sequence ``>*/``.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								The following options can be specified per enum definition:
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``skip``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  Indicates this enum definition should be skipped.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``flags``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  Indicates this enum should be treated as a flags definition.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``underscore_name``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  Specifies the word separation used in the ``*_get_type()``
							 | 
						|||
| 
								 | 
							
								  function. For instance,
							 | 
						|||
| 
								 | 
							
								  ``/*< underscore_name=gnome_vfs_uri_hide_options >*/``.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``since``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  Specifies the version tag that will be used to substitute the ``@enumsince@``
							 | 
						|||
| 
								 | 
							
								  keyword in the template, useful when documenting methods generated from the
							 | 
						|||
| 
								 | 
							
								  enums (e.g. ``Since: @enumsince@``). (Since: 2.66)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								The following options can be specified per value definition:
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``skip``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  Indicates the value should be skipped.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``nick``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  Specifies the otherwise auto-generated nickname.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Examples::
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								   typedef enum /*< skip >*/
							 | 
						|||
| 
								 | 
							
								   {
							 | 
						|||
| 
								 | 
							
								     PREFIX_FOO
							 | 
						|||
| 
								 | 
							
								   } PrefixThisEnumWillBeSkipped;
							 | 
						|||
| 
								 | 
							
								   typedef enum /*< flags,prefix=PREFIX,since=1.0 >*/
							 | 
						|||
| 
								 | 
							
								   {
							 | 
						|||
| 
								 | 
							
								     PREFIX_THE_ZEROTH_VALUE,	/*< skip >*/
							 | 
						|||
| 
								 | 
							
								     PREFIX_THE_FIRST_VALUE,
							 | 
						|||
| 
								 | 
							
								     PREFIX_THE_SECOND_VALUE,
							 | 
						|||
| 
								 | 
							
								     PREFIX_THE_THIRD_VALUE,	/*< nick=the-last-value >*/
							 | 
						|||
| 
								 | 
							
								   } PrefixTheFlagsEnum;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								OPTIONS
							 | 
						|||
| 
								 | 
							
								-------
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``--fhead <TEXT>``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  Emits ``TEXT`` prior to processing input files.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  You can specify this option multiple times, and the ``TEXT`` will be
							 | 
						|||
| 
								 | 
							
								  concatenated.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  When used along with a template file, ``TEXT`` will be prepended to the
							 | 
						|||
| 
								 | 
							
								  template’s ``file-header`` section.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``--fprod <TEXT>``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  Emits ``TEXT`` every time a new input file is being processed.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  You can specify this option multiple times, and the ``TEXT`` will be
							 | 
						|||
| 
								 | 
							
								  concatenated.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  When used along with a template file, ``TEXT`` will be appended to the
							 | 
						|||
| 
								 | 
							
								  template’s ``file-production`` section.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``--ftail <TEXT>``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  Emits ``TEXT`` after all input files have been processed.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  You can specify this option multiple times, and the ``TEXT`` will be
							 | 
						|||
| 
								 | 
							
								  concatenated.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  When used along with a template file, ``TEXT`` will be appended to the
							 | 
						|||
| 
								 | 
							
								  template’s ``file-tail`` section.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``--eprod <TEXT>``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  Emits ``TEXT`` every time an enum is encountered in the input files.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``--vhead <TEXT>``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  Emits ``TEXT`` before iterating over the set of values of an enum.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  You can specify this option multiple times, and the ``TEXT`` will be
							 | 
						|||
| 
								 | 
							
								  concatenated.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  When used along with a template file, ``TEXT`` will be prepended to the
							 | 
						|||
| 
								 | 
							
								  template’s ``value-header`` section.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``--vprod <TEXT>``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  Emits ``TEXT`` for every value of an enum.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  You can specify this option multiple times, and the ``TEXT`` will be
							 | 
						|||
| 
								 | 
							
								  concatenated.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  When used along with a template file, ``TEXT`` will be appended to the
							 | 
						|||
| 
								 | 
							
								  template’s ``value-production`` section.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``--vtail <TEXT>``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  Emits ``TEXT`` after iterating over all values of an enum.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  You can specify this option multiple times, and the ``TEXT`` will be
							 | 
						|||
| 
								 | 
							
								  concatenated.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  When used along with a template file, ``TEXT`` will be appended to the
							 | 
						|||
| 
								 | 
							
								  template’s ``value-tail`` section.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``--comments <TEXT>``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  Template for auto-generated comments, the default (for C code generations) is
							 | 
						|||
| 
								 | 
							
								  ``"/* @comment@ */"``.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``--template <FILE>``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  Read templates from the given file. The templates are enclosed in
							 | 
						|||
| 
								 | 
							
								  specially-formatted C comments::
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								     /*** BEGIN section ***/
							 | 
						|||
| 
								 | 
							
								     /*** END section ***/
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  ``section`` may be ``file-header``, ``file-production``, ``file-tail``,
							 | 
						|||
| 
								 | 
							
								  ``enumeration-production``, ``value-header``, ``value-production``,
							 | 
						|||
| 
								 | 
							
								  ``value-tail`` or ``comment``.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``--identifier-prefix <PREFIX>``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  Indicates what portion of the enum name should be interpreted as the prefix
							 | 
						|||
| 
								 | 
							
								  (e.g. the ``Gtk`` in ``GtkDirectionType``). Normally this will be figured out
							 | 
						|||
| 
								 | 
							
								  automatically, but you may need to override the default if your namespace is
							 | 
						|||
| 
								 | 
							
								  capitalized oddly.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``--symbol-prefix <PREFIX>``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  Indicates what prefix should be used to correspond to the identifier prefix in
							 | 
						|||
| 
								 | 
							
								  related C function names (e.g. the ``gtk`` in
							 | 
						|||
| 
								 | 
							
								  ``gtk_direction_type_get_type``). Equivalently, this is the lowercase version
							 | 
						|||
| 
								 | 
							
								  of the prefix component of the enum value names (e.g. the ``GTK`` in
							 | 
						|||
| 
								 | 
							
								  ``GTK_DIR_UP``). The default value is the identifier prefix, converted to
							 | 
						|||
| 
								 | 
							
								  lowercase.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``--help``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  Print brief help and exit.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``--version``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  Print version and exit.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``--output <FILE>``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  Write output to ``FILE`` instead of stdout.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								``@RSPFILE``
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								  When passed as the sole argument, read and parse the actual arguments from
							 | 
						|||
| 
								 | 
							
								  ``RSPFILE``. Useful on systems with a low command-line length limit. For
							 | 
						|||
| 
								 | 
							
								  example, Windows has a limit of 8191 characters.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								USING TEMPLATES
							 | 
						|||
| 
								 | 
							
								---------------
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Instead of passing the various sections of the generated file to the command
							 | 
						|||
| 
								 | 
							
								line of ``glib-mkenums``, it’s strongly recommended to use a template file,
							 | 
						|||
| 
								 | 
							
								especially for generating C sources.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								A C header template file will typically look like this::
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								   /*** BEGIN file-header ***/
							 | 
						|||
| 
								 | 
							
								   #pragma once
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								   /* Include the main project header */
							 | 
						|||
| 
								 | 
							
								   #include "project.h"
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								   G_BEGIN_DECLS
							 | 
						|||
| 
								 | 
							
								   /*** END file-header ***/
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								   /*** BEGIN file-production ***/
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								   /* enumerations from "@basename@" */
							 | 
						|||
| 
								 | 
							
								   /*** END file-production ***/
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								   /*** BEGIN value-header ***/
							 | 
						|||
| 
								 | 
							
								   GType @enum_name@_get_type (void) G_GNUC_CONST;
							 | 
						|||
| 
								 | 
							
								   #define @ENUMPREFIX@_TYPE_@ENUMSHORT@ (@enum_name@_get_type ())
							 | 
						|||
| 
								 | 
							
								   /*** END value-header ***/
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								   /*** BEGIN file-tail ***/
							 | 
						|||
| 
								 | 
							
								   G_END_DECLS
							 | 
						|||
| 
								 | 
							
								   /*** END file-tail ***/
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								A C source template file will typically look like this::
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								   /*** BEGIN file-header ***/
							 | 
						|||
| 
								 | 
							
								   #include "config.h"
							 | 
						|||
| 
								 | 
							
								   #include "enum-types.h"
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								   /*** END file-header ***/
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								   /*** BEGIN file-production ***/
							 | 
						|||
| 
								 | 
							
								   /* enumerations from "@basename@" */
							 | 
						|||
| 
								 | 
							
								   /*** END file-production ***/
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								   /*** BEGIN value-header ***/
							 | 
						|||
| 
								 | 
							
								   GType
							 | 
						|||
| 
								 | 
							
								   @enum_name@_get_type (void)
							 | 
						|||
| 
								 | 
							
								   {
							 | 
						|||
| 
								 | 
							
								     static GType static_g_@type@_type_id = 0;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								     if (g_once_init_enter_pointer (&static_g_@type@_type_id))
							 | 
						|||
| 
								 | 
							
								       {
							 | 
						|||
| 
								 | 
							
								         static const G@Type@Value values[] = {
							 | 
						|||
| 
								 | 
							
								   /*** END value-header ***/
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								   /*** BEGIN value-production ***/
							 | 
						|||
| 
								 | 
							
								           { @VALUENAME@, "@VALUENAME@", "@valuenick@" },
							 | 
						|||
| 
								 | 
							
								   /*** END value-production ***/
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								   /*** BEGIN value-tail ***/
							 | 
						|||
| 
								 | 
							
								           { 0, NULL, NULL }
							 | 
						|||
| 
								 | 
							
								         };
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								         GType g_@type@_type_id =
							 | 
						|||
| 
								 | 
							
								           g_@type@_register_static (g_intern_static_string ("@EnumName@"), values);
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								         g_once_init_leave_pointer (&static_g_@type@_type_id, g_@type@_type_id);
							 | 
						|||
| 
								 | 
							
								       }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								     return static_g_@type@_type_id;
							 | 
						|||
| 
								 | 
							
								   }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								   /*** END value-tail ***/
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Template files are easier to modify and update, and can be used to generate
							 | 
						|||
| 
								 | 
							
								various types of outputs using the same command line or tools during the build.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								USING GLIB-MKENUMS WITH MESON
							 | 
						|||
| 
								 | 
							
								-----------------------------
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								Meson supports generating enumeration types using ``glib-mkenums`` out of the
							 | 
						|||
| 
								 | 
							
								box in its ``gnome`` module.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								In your ``meson.build`` file you will typically call the
							 | 
						|||
| 
								 | 
							
								``gnome.mkenums_simple()`` method to generate idiomatic enumeration types from a
							 | 
						|||
| 
								 | 
							
								list of headers to inspect::
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								   project_headers = [
							 | 
						|||
| 
								 | 
							
								     'project-foo.h',
							 | 
						|||
| 
								 | 
							
								     'project-bar.h',
							 | 
						|||
| 
								 | 
							
								     'project-baz.h',
							 | 
						|||
| 
								 | 
							
								   ]
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								   gnome = import('gnome')
							 | 
						|||
| 
								 | 
							
								   enum_files = gnome.mkenums_simple('enum-types',
							 | 
						|||
| 
								 | 
							
								     sources: project_headers,
							 | 
						|||
| 
								 | 
							
								   )
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								The ``enum_files`` variable will contain an array of two elements
							 | 
						|||
| 
								 | 
							
								in the following order:
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								1. a build target for the source file
							 | 
						|||
| 
								 | 
							
								2. 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 + enum_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: enum_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>`_.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								If you are generating C header and source files that require special templates,
							 | 
						|||
| 
								 | 
							
								you can use ``gnome.mkenums()`` to provide those headers, for instance::
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								   enum_files = gnome.mkenums('enum-types',
							 | 
						|||
| 
								 | 
							
								     sources: project_headers,
							 | 
						|||
| 
								 | 
							
								     h_template: 'enum-types.h.in',
							 | 
						|||
| 
								 | 
							
								     c_template: 'enum-types.c.in',
							 | 
						|||
| 
								 | 
							
								     install_header: true,
							 | 
						|||
| 
								 | 
							
								   )
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								For more information, see the
							 | 
						|||
| 
								 | 
							
								`Meson documentation <https://mesonbuild.com/Gnome-module.html#gnomegenmarshal>`_
							 | 
						|||
| 
								 | 
							
								for ``gnome.mkenums()``.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								USING GLIB-MKENUMS WITH AUTOTOOLS
							 | 
						|||
| 
								 | 
							
								---------------------------------
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								In order to use ``glib-mkenums`` 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_MKENUMS], [glib-2.0], [glib_mkenums])
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								In your ``Makefile.am`` file you will typically use rules like these::
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								   # A list of headers to inspect
							 | 
						|||
| 
								 | 
							
								   project_headers = \
							 | 
						|||
| 
								 | 
							
								           project-foo.h \
							 | 
						|||
| 
								 | 
							
								           project-bar.h \
							 | 
						|||
| 
								 | 
							
								           project-baz.h
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								   enum-types.h: $(project_headers) enum-types.h.in
							 | 
						|||
| 
								 | 
							
								           $(AM_V_GEN)$(GLIB_MKENUMS) \
							 | 
						|||
| 
								 | 
							
								                   --template=enum-types.h.in \
							 | 
						|||
| 
								 | 
							
								                   --output=$@ \
							 | 
						|||
| 
								 | 
							
								                  $(project_headers)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								   enum-types.c: $(project_headers) enum-types.c.in enum-types.h
							 | 
						|||
| 
								 | 
							
								           $(AM_V_GEN)$(GLIB_MKENUMS) \
							 | 
						|||
| 
								 | 
							
								                   --template=enum-types.c.in \
							 | 
						|||
| 
								 | 
							
								                   --output=$@ \
							 | 
						|||
| 
								 | 
							
								                   $(project_headers)
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								   # Build the enum types files before every other target
							 | 
						|||
| 
								 | 
							
								   BUILT_SOURCES += enum-types.h enum-types.c
							 | 
						|||
| 
								 | 
							
								   CLEANFILES += enum-types.h enum-types.c
							 | 
						|||
| 
								 | 
							
								   EXTRA_DIST += enum-types.h.in enum-types.c.in
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								In the example above, we have a variable called ``project_headers`` where we
							 | 
						|||
| 
								 | 
							
								reference all header files we want to inspect for generating enumeration GTypes.
							 | 
						|||
| 
								 | 
							
								In the ``enum-types.h`` rule we use ``glib-mkenums`` with a template called
							 | 
						|||
| 
								 | 
							
								``enum-types.h.in`` in order to generate the header file; similarly, in the
							 | 
						|||
| 
								 | 
							
								``enum-types.c`` rule we use a template called ``enum-types.c.in``.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								SEE ALSO
							 | 
						|||
| 
								 | 
							
								--------
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								`glib-genmarshal(1) <man:glib-genmarshal(1)>`_
							 |