|
Packit Service |
fb6fa5 |
Overview:
|
|
Packit Service |
fb6fa5 |
========
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
This file describes the way that autogeneration
|
|
Packit Service |
fb6fa5 |
works within the GTK+ source code.
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
The following files in the gdk/ subdirectory
|
|
Packit Service |
fb6fa5 |
are autogenerated:
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
gdkkeysyms.h
|
|
Packit Service |
fb6fa5 |
gdkcursors.h
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
The following files in the gtk/ subdirectory
|
|
Packit Service |
fb6fa5 |
are autogenerated:
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
gtk.defs
|
|
Packit Service |
fb6fa5 |
Description of GTK+ types (and some functions) in a lisp-style
|
|
Packit Service |
fb6fa5 |
format.
|
|
Packit Service |
fb6fa5 |
gtktypebuiltins.h
|
|
Packit Service |
fb6fa5 |
Header file including declarations for internal types
|
|
Packit Service |
fb6fa5 |
gtktypebuiltins_vars.c
|
|
Packit Service |
fb6fa5 |
Variables for type values for internal types.
|
|
Packit Service |
fb6fa5 |
gtktypebuiltins_ids.c
|
|
Packit Service |
fb6fa5 |
Arrays holding information about each internal type.
|
|
Packit Service |
fb6fa5 |
gtktypebuiltins_evals.c
|
|
Packit Service |
fb6fa5 |
Arrays holding mapping between enumeration values
|
|
Packit Service |
fb6fa5 |
and strings.
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
gtkmarshal.c
|
|
Packit Service |
fb6fa5 |
gtkmarshal.h
|
|
Packit Service |
fb6fa5 |
Autogenerated signal marshallers
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
GDK
|
|
Packit Service |
fb6fa5 |
===
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
gdkkeysyms.h and gdkcursors.h are generated from
|
|
Packit Service |
fb6fa5 |
the corresponding header files
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
X11/cursorfont.h
|
|
Packit Service |
fb6fa5 |
X11/keysymdef.h
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
by some simple sed scripts. These are not actually
|
|
Packit Service |
fb6fa5 |
run automatically because we want all the keysyms
|
|
Packit Service |
fb6fa5 |
even on systems with a limited set.
|
|
Packit Service |
fb6fa5 |
So the Gdk rule to generate both files (X-derived-headers)
|
|
Packit Service |
fb6fa5 |
only needs to be rerun for every new release of the X Window
|
|
Packit Service |
fb6fa5 |
System.
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
GTK+ - type definitions
|
|
Packit Service |
fb6fa5 |
=======================
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
The type definitions are generated from several sources:
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
gtk-boxed.defs - definitions for boxed types
|
|
Packit Service |
fb6fa5 |
GTK+ header files
|
|
Packit Service |
fb6fa5 |
GDK header files
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
The makeenums.pl script does a heuristic parse of
|
|
Packit Service |
fb6fa5 |
the header files and extracts all enumerations declarations.
|
|
Packit Service |
fb6fa5 |
It also recognizes a number of pseudo-comments in the
|
|
Packit Service |
fb6fa5 |
header files:
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
Two of these apply to individual enumeration values:
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
/*< skip >*/
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
This enumeration value should be skipped.
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
/*< nick=NICK >*/
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
The nickname for this value should NICK instead of the
|
|
Packit Service |
fb6fa5 |
normally guessed value. For instance:
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
typedef enum {
|
|
Packit Service |
fb6fa5 |
GTK_TARGET_SAME_APP = 1 << 0, /*< nick=same-app >*/
|
|
Packit Service |
fb6fa5 |
GTK_TARGET_SAME_WIDGET = 1 << 1 /*< nick=same-widget >*/
|
|
Packit Service |
fb6fa5 |
} GtkTargetFlags;
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
makes the nicks "same-app" and "same-widget", instead of
|
|
Packit Service |
fb6fa5 |
"app" and "widget" that would normally be used.
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
The other two apply to entire enumeration declarations.
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
/*< prefix=PREFIX >*/
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
Specifies the prefix to be removed from the enumeration
|
|
Packit Service |
fb6fa5 |
values to generate nicknames.
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
/*< flags >*/
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
Specifies that this enumeration is used as a bitfield.
|
|
Packit Service |
fb6fa5 |
(makenums.pl normally guesses this from the presence of values
|
|
Packit Service |
fb6fa5 |
with << operators). For instance:
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
typedef enum /*< flags >*/
|
|
Packit Service |
fb6fa5 |
{
|
|
Packit Service |
fb6fa5 |
GDK_IM_PREEDIT_AREA = 0x0001,
|
|
Packit Service |
fb6fa5 |
GDK_IM_PREEDIT_CALLBACKS = 0x0002,
|
|
Packit Service |
fb6fa5 |
[ ... ]
|
|
Packit Service |
fb6fa5 |
} GdkIMStyle;
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
makeenums.pl can be run into two modes:
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
1) Generate the gtktypebuiltins_eval.c file (this
|
|
Packit Service |
fb6fa5 |
contains arrays holding the mapping of
|
|
Packit Service |
fb6fa5 |
string <=> enumeration value)
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
2) Generate the enumeration portion of gtk.defs.
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
The enumeration portion is added to the boxed type
|
|
Packit Service |
fb6fa5 |
declarations in gtk-boxed.defs to create gtk.defs.
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
The makeetypes.awk program takes the gtk.defs file, and
|
|
Packit Service |
fb6fa5 |
from that generates various files depending on the
|
|
Packit Service |
fb6fa5 |
third parameter passed to it:
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
macros: gtktypebuiltins.h
|
|
Packit Service |
fb6fa5 |
variables: gtktypebuiltins_vars.c
|
|
Packit Service |
fb6fa5 |
entries: gtktypebuiltins_ids.c
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
GTK+ - marshallers
|
|
Packit Service |
fb6fa5 |
==================
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
The files gtkmarshal.c and gtkmarshal.h include declarations
|
|
Packit Service |
fb6fa5 |
and definitions for the marshallers needed inside of
|
|
Packit Service |
fb6fa5 |
GTK+. The marshallers to be generated are listed in
|
|
Packit Service |
fb6fa5 |
the file gtkmashal.list, which is processed
|
|
Packit Service |
fb6fa5 |
by genmarshal.pl.
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
The format of this file is a list of lines:
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
<retval-type>:<arg1-type>,<arg2-type>,<arg3-type>
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
e.g.:
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
BOOL:POINTER,STRING,STRING,POINTER
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
A marshaller is generated for each line in the file.
|
|
Packit Service |
fb6fa5 |
The possible types are:
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
NONE
|
|
Packit Service |
fb6fa5 |
BOOL
|
|
Packit Service |
fb6fa5 |
CHAR
|
|
Packit Service |
fb6fa5 |
INT
|
|
Packit Service |
fb6fa5 |
UINT
|
|
Packit Service |
fb6fa5 |
LONG
|
|
Packit Service |
fb6fa5 |
ULONG
|
|
Packit Service |
fb6fa5 |
FLOAT
|
|
Packit Service |
fb6fa5 |
DOUBLE
|
|
Packit Service |
fb6fa5 |
STRING
|
|
Packit Service |
fb6fa5 |
ENUM
|
|
Packit Service |
fb6fa5 |
FLAGS
|
|
Packit Service |
fb6fa5 |
BOXED
|
|
Packit Service |
fb6fa5 |
POINTER
|
|
Packit Service |
fb6fa5 |
OBJECT
|
|
Packit Service |
fb6fa5 |
FOREIGN (gpointer data, GtkDestroyNotify notify)
|
|
Packit Service |
fb6fa5 |
C_CALLBACK (GtkFunction func, gpointer func_data)
|
|
Packit Service |
fb6fa5 |
SIGNAL (GtkSignalFunc f, gpointer data)
|
|
Packit Service |
fb6fa5 |
ARGS (gint n_args, GtkArg *args)
|
|
Packit Service |
fb6fa5 |
CALLBACK (GtkCallBackMarshal marshall,
|
|
Packit Service |
fb6fa5 |
gpointer data,
|
|
Packit Service |
fb6fa5 |
GtkDestroyNotify Notify)
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
Some of these types map to multiple return values - these
|
|
Packit Service |
fb6fa5 |
are marked above with the return types in parentheses.
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
NOTES
|
|
Packit Service |
fb6fa5 |
=====
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
When autogenerating GTK+ files, the autogenerated
|
|
Packit Service |
fb6fa5 |
files are often rebuild resulting in the same result.
|
|
Packit Service |
fb6fa5 |
|
|
Packit Service |
fb6fa5 |
To prevent unnecessary rebuilds of the entire directory, some files
|
|
Packit Service |
fb6fa5 |
that multiple other source files depend on are not actually written
|
|
Packit Service |
fb6fa5 |
to directly. Instead, an intermediate file is written, which
|
|
Packit Service |
fb6fa5 |
is then compared to the old file, and only if it is different
|
|
Packit Service |
fb6fa5 |
is it copied into the final location.
|