The .defs file 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 gtkmm/gtk/src, you will find these
files:
gtk.defsIncludes the other files.
gtk_methods.defsObjects and functions.
gtk_enums.defsEnums.
gtk_signals.defSignals and properties.
gtk_vfuncs.defsvfuncs (function pointer member fields in structs), written by hand.
This .defs file describes objects and their functions. It is generated by the h2def.py script which you can find in pygobject's codegen directory. For instance,
$ ./h2def.py /usr/include/gtk-2.0/gtk/*.h > gtk_methods.defs
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-2.0/gtk/*.h > gtk_enums.defs
This .defs file describes signals and properties. It is generated by the
special 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
You must edit the source code of your own
extra_defs_gen tool in order to generate the .defs for
the C types that you wish to wrap. Start by renaming the file:
$ cd tools/extra_defs_gen $ mv generate_defs_gda.cc generate_defs_example.cc
Then edit the Makefile.am so that it mentions the new
file name, and edit the new .cc file to specify the
correct types. For instance, your main() function might
look like this:
#include <libsomething.h>
int main (int argc, char *argv[])
{
libexample_init(argc, argv);
std::cout << get_defs(EXAMPLE_TYPE_SOMETHING)
<< get_defs(EXAMPLE_TYPE_THING);
return 0;
}