diff --git a/docs/reference/gobject/glib-mkenums.xml b/docs/reference/gobject/glib-mkenums.xml index 1dabe6053..f9245cb5d 100644 --- a/docs/reference/gobject/glib-mkenums.xml +++ b/docs/reference/gobject/glib-mkenums.xml @@ -208,30 +208,54 @@ typedef enum /*< flags,prefix=PREFIX >*/ TEXT -Put out TEXT prior to processing input files. +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. TEXT -Put out TEXT everytime a new input file +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. TEXT -Put out TEXT after all input files have been +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. TEXT -Put out TEXT everytime an enum is encountered +Emits TEXT everytime an enum is encountered in the input files. @@ -239,23 +263,47 @@ in the input files. TEXT -Put out TEXT before iterating over the set of +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. TEXT -Put out TEXT for every value of an enum. +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. TEXT -Put out TEXT after iterating over all values +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. @@ -332,6 +380,125 @@ Write output to FILE instead of stdout. +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) + +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; a 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 "@filename@" */ +/*** 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 ***/ + + +The enum-types.c rule is similar to the rule for the +header file, but will use a different enum-types.c.in template +file, similar to this: + + +/*** BEGIN file-header ***/ +#include "config.h" +#include "enum-types.h" + +/*** END file-header ***/ + +/*** BEGIN file-production ***/ +/* enumerations from "@filename@" */ +/*** END file-production ***/ + +/*** BEGIN value-header ***/ +GType +@enum_name@_get_type (void) +{ + static volatile gsize g_@type@_type_id__volatile; + + if (g_once_init_enter (&g_define_type_id__volatile)) + { + 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 (&g_@type@_type_id__volatile, g_@type@_type_id); + } + return g_@type@_type_id__volatile; +} + +/*** END value-tail ***/ + + + See also