Δημιουργία των αρχείων .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.

Το σενάριο skeletonmm/codegen/generate_defs_and_docs.sh δημιουργεί όλα τα αρχεία .defs και το αρχείο *_docs.xml, που περιγράφηκε στην ενότητα τεκμηρίωση.

G.2.1. Δημιουργία των μεθόδων .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. Δημιουργία των απαριθμήσεων .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. Δημιουργώντας τα σήματα και τις ιδιότητες .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

Πρέπει να επεξεργαστείτε τον πηγαίο κώδικα του δικού σας εργαλείου generate_extra_defs για να δημιουργήσετε το .defs για τους τύπους GObject C που θέλετε να συσκευάσετε. Στο πηγαίο δένδρο σκελετού, το αρχείο πηγής ονομάζεται codegen/extradefs/generate_extra_defs_skeleton.cc. Αν δεν έχει ήδη γίνει, το αρχείο πρέπει να μετονομαστεί, με το βασικό όνομα της νέας σύνδεσης που αντικαθίσταται με το δεσμευτικό θέσης skeleton. Το αρχείο codegen/Makefile.am πρέπει επίσης να αναφέρει το νέο πηγαίο όνομα αρχείου.

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

G.2.4. Συγγραφή των vfuncs .defs

Αυτό το αρχείο .defs περιγράφει εικονικές συναρτήσεις (vfuncs). Πρέπει να γραφτεί με το χέρι. Δεν υπάρχει αρχείο σκελετού skeleton/src/skeleton_vfunc.defs για να ξεκινήσετε. Μπορείτε να κοιτάξετε επίσης στην gtkmm και στο αρχείο της gtk/src/gtk_vfuncs.defs.