Génération des fichiers .defs
The .defs files are text files, in a lisp format, that describe the API of a C library, including its
- objects (GObjects, widgets, interfaces, boxed-types and plain structs)
- functions
- enums
- signals
- properties
- vfuncs
At the moment, we have separate tools for generating different parts of these .defs, so we split them up into separate files. For instance, in the gtk/src directory of the gtkmm sources, you will find these files:
- gtk.defs
Includes the other files.
- gtk_methods.defs
Objects and functions.
- gtk_enums.defs
Enumerations.
- gtk_signals.defs
Signals and properties.
- gtk_vfuncs.defs
vfuncs (function pointer member fields in structs), written by hand.
The skeletonmm/codegen/generate_defs_and_docs.sh script generates all .defs files and the *_docs.xml file, described in the Documentation section.
G.II.I. Génération des .defs pour les fonctions membres
This .defs file describes objects and their functions. It is generated by the h2def.py script which you can find in glibmm's tools/defs_gen directory. For instance,
$ ./h2def.py /usr/include/gtk-3.0/gtk/*.h > gtk_methods.defs
G.II.II. Génération des .defs pour les énumérations
This .defs file describes enum types and their possible values. It is generated by the enum.pl script which you can find in glibmm's tools directory. For instance,
$ ./enum.pl /usr/include/gtk-3.0/gtk/*.h > gtk_enums.defs
G.II.III. Génération des .defs pour les signaux et les propriétés
This .defs file describes signals and properties. It is generated by the special generate_extra_defs utility that is in every wrapping project, such as gtkmm/tools/extra_defs_gen/. For instance
$ cd tools/extra_defs_gen $ ./generate_extra_defs > gtk_signals.defs
Vous devez rédiger le code source de votre propre outil generate_extra_defs pour générer les fichiers .defs des types C GObject que vous souhaitez habiller. Dans l'arborescence des sources squelettes, le fichier source s'appelle codegen/extradefs/generate_extra_defs_skeleton.cc. Si ce n'est pas déjà fait, le fichier doit être renommé en remplaçant la variable de substitution skeleton par le nom de base de la nouvelle liaison. Le fichier codegen/Makefile.am doit également citer le nouveau nom du fichier source.
Then edit the .cc file to specify the correct types. For instance, your main() function might look like this:
#include <libsomething.h> int main(int, char**) { something_init(); std::cout << get_defs(SOME_TYPE_WIDGET) << get_defs(SOME_TYPE_STUFF); return 0; }