Generar los archivos .defs.
Los archivos .defs son archivos de texto, en formato «lisp», que describen la API de la biblioteca de C, incluyendo sus
- objetos (GObjects, widgets, interfaces, tipos en caja y estructuras planas)
- funciones
- enums
- señales
- propiedades
- «vfuncs»
Por el momento, existen herramientas separadas para generar partes diferentes de estos .defs, por lo que se parten en archivos separados. Por ejemplo, en la carpeta gtk/src de las fuentes de gtkmm, encontrará estos archivos:
- gtk.defs
Incluye a los otros archivos.
- gtk_methods.defs
Objetos y funciones.
- gtk_enums.defs
Enumeraciones.
- gtk_signals.defs
Señales y propiedades.
- gtk_vfuncs.defs
«vfuncs» (campos miembro de punteros de funciones en estructuras), escritas a mano.
G.2.1. Generar los .defs de métodos
Este archivo .defs describe a los objetos y a sus funciones. Se genera mediante el script h2def.py que puede encontrar en la carpeta tools/defs_gen de glibmm. Por ejemplo,
$ ./h2def.py /usr/include/gtk-3.0/gtk/*.h > gtk_methods.defs
G.2.2. Generar los .defs de enumeraciones
Este archivo .defs describe a los tipos de enumeraciones y a sus valores posibles. Se genera mediante el script enum.pl que puede encontrar en la carpeta tools de glibmm. Por ejemplo,
$ ./enum.pl /usr/include/gtk-3.0/gtk/*.h > gtk_enums.defs
G.2.3. Generar los .defs de señales y propiedades
Este archivo .defs describe las señales y propiedades. Se genera mediante la utilidad especial extra_defs que está en todos los proyectos de envoltorios, como gtkmm/tools/extra_defs_gen/. Por ejemplo,
$ cd tools/extra_defs_gen $ ./generate_extra_defs > gtk_signals.defs
Debe editar el código fuente de su herramienta generate_extra_defs para generar los .defs para los tipos GObject de C que desea envolver. En el árbol de fuentes esqueleto, el archivo de fuentes se llama codegen/extradefs/generate_extra_defs_skeleton.cc. Si no lo ha hecho todavía, debe renombrar el archivo, con el nombre de base de su enlace nuevo sustituyendo a la marca de posición skeleton. El archivo codegen/Makefile.am también debe mencionar el nombre del archivo de fuentes nuevo.
Después edite el archivo .cc para especificar los tipos correctos. Por ejemplo, su función main() podría verse así:
#include <libsomething.h> int main(int, char**) { something_init(); std::cout << get_defs(EXAMPLE_TYPE_SOMETHING) << get_defs(EXAMPLE_TYPE_THING); return 0; }