This module serves as a way to automatically populate G-Wrap wrapsets using information parsed out of C header files.
First, the C header files are parsed into S-expression API description forms and
written into .defs files. These files are typically included in the
distribution, and regenerated infrequently. Then, the binding author includes a
call to load-defs in their G-Wrap wrapset definition, which loads those
API definitions into the wrapset.
The .defs files are usually produced using the API scanner script,
h2defs.py, included in the Guile-GNOME source distribution.
Code in this module is only loaded when generating wrapsets; as such, it is not for end users.
As an example, ATK is wrapped with the following code, from
atk/gnome/gw/atk-spec.scm:
(define-module (gnome gw atk-spec)
#:use-module (oop goops)
#:use-module (gnome gw support g-wrap)
#:use-module (gnome gw gobject-spec)
#:use-module (gnome gw support gobject)
#:use-module (gnome gw support defs))
(define-class <atk-wrapset> (<gobject-wrapset-base>)
#:id 'gnome-atk
#:dependencies '(standard gnome-glib gnome-gobject))
(define-method (global-declarations-cg (self <atk-wrapset>))
(list
(next-method)
"#include <atk/atk.h>\n"
"#include <atk/atk-enum-types.h>\n"))
(define-method (initialize (ws <atk-wrapset>) initargs)
(next-method ws (append '(#:module (gnome gw atk)) initargs))
;; manually wrap AtkState as a 64 bit uint
(add-type-alias! ws "AtkState" 'unsigned-int64)
(load-defs-with-overrides ws "gnome/defs/atk.defs"))
The wrapper-specifiction modules are actually installed, along with the .defs files, so that other wrappers which use ATK's types, such as GTK+, can have them available.
A full discussion of the Makefile mechanics of how to generate and compile the C
file, or how to interact with the wrapset objects, is probably prone to bitrot
here. Your best bet is to poke at Guile-GNOME's source, or especially the source
of a module distributed independently of guile-gnome-platform, such as
guile-gnome-libwnck.
Further details about the procedural API available for use e.g. within the
wrapset's initialize function can be found in the documentation for
(gnome gw support gobject), and in G-Wrap's documentation.
Load G-Wrap type and function information from file into the G-Wrap wrapset ws.
file should be a relative path, which will be searched in the vicinity of Guile's
%load-path.includedirectives in the file will be searched relative to the absolute path of the file.The following forms are understood:
define-enum,define-flags,define-object,define-interface,define-pointer,define-boxed,define-function,define-method,ignore,ignore-glob, andignore-types.The optional argument, overrides, specifies the location of an overrides file that will be spliced into the
.defsfile at the point of an(include overrides)form.