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.defsIncludes the other files.
gtk_methods.defsObjects and functions.
gtk_enums.defsEnumerations.
gtk_signals.defsSignals and properties.
gtk_vfuncs.defsvfuncs (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.
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
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
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
You must edit the source code of your own generate_extra_defs tool
in order to generate the .defs for the GObject C types that you wish to
wrap. In the skeleton source tree, the source file is named
codegen/extradefs/generate_extra_defs_skeleton.cc. If not done so
already, the file should be renamed, with the basename of your new binding substituted
for the skeleton placeholder. The codegen/Makefile.am
file should also mention the new source filename.
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;
}