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;
}

G.2.4. Escribir los .defs de las «vfuncs»

Este archivo .defs describe a las funciones virtuales («vfuncs»). Debe escribirse a mano. No hay un esqueleto del que empezar. Puede echar un vistazo al archivo gtk/src/gtk_vfuncs.defs de gtkmm.