.\"Generated by db2man.xsl. Don't modify this, modify the source.
.de Sh \" Subsection
.br
.if t .Sp
.ne 5
.PP
\fB\\$1\fR
.PP
..
.de Sp \" Vertical space (when we can't use .PP)
.if t .sp .5v
.if n .sp
..
.de Ip \" List item
.br
.ie \\n(.$>=3 .ne \\$3
.el .ne 3
.IP "\\$1" \\$2
..
.TH "GLIB-MKENUMS" 1 "" "" ""
.SH NAME
glib-mkenums \- C language enum description generation utility
.SH "SYNOPSIS"
.ad l
.hy 0
.HP 13
\fBglib\-mkenums\fR [options...] [files...]
.ad
.hy

.SH "DESCRIPTION"

.PP
 \fBglib\-mkenums\fR is a small perl\-script utility that parses C code to extract enum definitions and produces enum descriptions based on text templates specified by the user\&. Most frequently this script is used to produce C code that contains enum values as strings so programs can provide value name strings for introspection\&.

.SH "INVOKATION"

.PP
 \fBglib\-mkenums\fR takes a list of valid C code files as input\&. The options specified control the text that is output, certain substitutions are performed on the text templates for keywords enclosed in @ characters\&.

.SS "Options"

.TP
\fB\-\-fhead\fR \fItext\fR
Put out \fItext\fR prior to processing input files\&.

.TP
\fB\-\-fprod\fR \fItext\fR
Put out \fItext\fR everytime a new input file is being processed\&.

.TP
\fB\-\-ftail\fR \fItext\fR
Put out \fItext\fR after all input files have been processed\&.

.TP
\fB\-\-eprod\fR \fItext\fR
Put out \fItext\fR everytime an enum is encountered in the input files\&.

.TP
\fB\-\-vhead\fR \fItext\fR
Put out \fItext\fR before iterating over the set of values of an enum\&.

.TP
\fB\-\-vprod\fR \fItext\fR
Put out \fItext\fR for every value of an enum\&.

.TP
\fB\-\-vtail\fR \fItext\fR
Put out \fItext\fR after iterating over all values of an enum\&.

.TP
\fB\-\-comments\fR \fItext\fR
Template for auto\-generated comments, the default (for C code generations) is "/* @comment@ */"\&.

.TP
\fB\-\-template\fR \fIfile\fR
Read templates from the given file\&. The templates are enclosed in specially\-formatted C comments 

.nf

/*** BEGIN section ***/
/*** END section ***/

.fi
 where section may be file\-header, file\-production, file\-tail, enumeration\-production, value\-header, value\-production, value\-tail or comment\&.

.TP
\fB\-\-help\fR
Print brief help and exit\&.

.TP
\fB\-\-version\fR
Print version and exit\&.

.SS "Production text substitutions"

.PP
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: 

.nf

typedef enum
{
  PREFIX_THE_XVALUE    = 1 << 3,
  PREFIX_ANOTHER_VALUE = 1 << 4
} PrefixTheXEnum;

.fi
  

.TP
@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)\&.

.TP
@enum_name@
The enum name with words lowercase and word\-separated by underscores (e\&.g\&. prefix_the_xenum)\&.

.TP
@ENUMNAME@
The enum name with words uppercase and word\-separated by underscores (e\&.g\&. PREFIX_THE_XENUM)\&.

.TP
@ENUMSHORT@
The enum name with words uppercase and word\-separated by underscores, prefix stripped (e\&.g\&. THE_XENUM)\&.

.TP
@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)\&.

.TP
@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)\&.

.TP
@type@
This is substituted either by "enum" or "flags", depending on whether the enum value definitions contained bit\-shift operators or not (e\&.g\&. flags)\&.

.TP
@Type@
The same as @type@ with the first letter capitalized (e\&.g\&. Flags)\&.

.TP
@TYPE@
The same as @type@ with all letters uppercased (e\&.g\&. FLAGS)\&.

.TP
@filename@
The name of the input file currently being processed (e\&.g\&. foo\&.h)\&.
 

.SS "Trigraph extensions"

.PP
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 >*/\&. Per enum definition, the options "skip" and "flags" can be specified, to indicate this enum definition to be skipped, or for it to be treated as a flags definition, or to specify the common prefix to be stripped from all values to generate value nicknames, respectively\&. The "lowercase_name" option can be used to specify the word separation used in the *_get_type() function\&. For instance, /*< lowercase_name=gnome_vfs_uri_hide_options >*/\&.

.PP
Per value definition, the options "skip" and "nick" are supported\&. The former causes the value to be skipped, and the latter can be used to specify the otherwise auto\-generated nickname\&. Examples: 

.nf

typedef enum /*< skip >*/
{
  PREFIX_FOO
} PrefixThisEnumWillBeSkipped;
typedef enum /*< flags,prefix=PREFIX >*/
{
  PREFIX_THE_ZEROTH_VALUE,	/*< skip >*/
  PREFIX_THE_FIRST_VALUE,
  PREFIX_THE_SECOND_VALUE,
  PREFIX_THE_THIRD_VALUE,	/*< nick=the\-last\-value >*/
} PrefixTheFlagsEnum;

.fi
 

.SH "SEE ALSO"

.PP
 \fBglib\-genmarshal\fR(1)

