Gerando os arquivos .defs.
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.defs
Includes the other files.
- gtk_methods.defs
Objects and functions.
- gtk_enums.defs
Enumerations.
- gtk_signals.defs
Signals and properties.
- gtk_vfuncs.defs
vfuncs (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.
- G.2.1. Gerando o methods .defs
- G.2.2. Gerando o enums .defs
- G.2.3. Generating the signals and properties .defs
- G.2.4. Escrevendo o vfuncs .defs
G.2.1. Gerando o methods .defs
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.2.2. Gerando o enums .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
G.2.3. Generating the signals and properties .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; }