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

  • objets (GObjects, éléments graphiques, interfaces, types de boîtes et structures brutes)
  • fonctions
  • énumérations
  • signaux
  • propriétés
  • fonctions virtuelles.

À ce moment, nous disposons d'outils séparés pour générer les diverses parties des fichiers .defs, nous les éclatons donc en fichiers séparés. Par exemple, dans le répertoire gtk/src des sources de gtkmm, vous trouvez ces fichiers :

gtk.defs

inclut les autres fichiers.

gtk_methods.defs

objets et fonctions

gtk_enums.defs

énumérations.

gtk_signals.defs

signaux et propriétés

gtk_vfuncs.defs

fonctions virtuelles (champs de pointeurs membres de fonction dans des structures), écrites à la main.

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

Ce fichier .defs décrit les types enum et leurs valeurs possibles. Il est généré par le script enum.pl que vous trouverez dans le répertoire tools de glibmm. Par exemple,

$ ./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

Ce fichier .defs décrit les signaux et les propriétés. Il est généré par l'utilitaire spécial extra_defs qui se trouve dans tout projet d'habillage, tel que gtkmm/tools/extra_defs_gen/. Par exemple

$ 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.

Ensuite, modifiez le fichier .cc pour définir les types corrects. Par exemple, il se peut que votre fonction main() ressemble à quelque chose comme ceci :

#include <libsomething.h>

int main(int, char**)
{
  something_init();

  std::cout << get_defs(EXAMPLE_TYPE_SOMETHING)
            << get_defs(EXAMPLE_TYPE_THING);
  return 0;
}

G.II.IV. Écriture des .defs pour les fonctions virtuelles

This .defs file describes virtual functions (vfuncs). It must be written by hand. There is no skeleton to start from. You can look at gtkmm's gtk/src/gtk_vfuncs.defs file.