Generera .defs-filerna.
.defs-filerna är textfiler i ett lisp-format som beskriver API:t för ett C-bibliotek, inklusive dess
objects (GObjects, widgets, interfaces, boxed-types and plain structs)
funktioner
enums
signaler
egenskaper
vfuncs
För tillfället har vi olika verktyg för att generera olika delar av dessa .defs, så vi delar upp dem i separata filer. I gtk/src-katalogen för gtkmm-källkoden kommer du exempelvis hitta dessa filer:
- gtk.defs
Inkluderar de andra filerna.
- gtk_methods.defs
Objekt och funktioner.
- gtk_enums.defs
Enumerations.
- gtk_signals.defs
Signaler och egenskaper.
- gtk_vfuncs.defs
vfuncs (function pointer member fields in structs), written by hand.
The skeletonmm/tools/generate_defs_and_docs.sh script generates all .defs files and the *_docs.xml file, described in the Documentation section.
Generating the methods .defs
Denna .defs-fil beskriver objekt och deras funktioner. Den genereras av h2def.py-skriptet som du kan hitta i glibmm:s tools/defs_gen-katalog. Till exempel,
$ ./h2def.py /usr/include/gtk-4.0/gtk/*.h > gtk_methods.defs
Generating the enums .defs
This .defs file describes enum types and their possible values. It is generated by the enumextract.py script which you can also find in glibmm's tools/defs_gen directory. For instance,
$ ./enumextract.py /usr/include/gtk-4.0/gtk/*.h > gtk_enums.defs
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 tools/extra_defs_gen/generate_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 tools/extra_defs_gen/meson.build 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 <glibmm_generate_extra_defs/generate_extra_defs.h>
#include <libsomething.h>
#include <iostream>
int main(int, char**)
{
something_init();
std::cout << get_defs(SOME_TYPE_WIDGET)
<< get_defs(SOME_TYPE_STUFF);
return 0;
}
Writing the vfuncs .defs
This .defs file describes virtual functions (vfuncs). It must be written by hand. There is the skeleton file skeleton/src/skeleton_vfunc.defs to start from. You can also look at gtkmm's gtk/src/gtk_vfuncs.defs file.