It works by parsing the output of gobject-introspection which in
turn works by parsing header files. gobject-introspection doesn't work
on preprocessed sources and is able to take advantage of the
glib-style C macros to improve the library interface description.
It is currently in alpha/beta stage and is able to bind most of
WebKit-gtk and DBus-GLib and both are working here. Other libraries
are *partially* supported (i.e. gcc finds errors in the C code). The
description of the libraries is often broken because of
gobject-introspection itself (it strips out GError** paramaters...) or
incomplete because of a lack of annotations.
ocaml-gir is hosted on the ocamlcore forge using git and its
sources are accessible through git-web. A tarball is also
ocaml-gir ships with the .gir/.xml files generated by this tool and
modified to fix various errors, expand annotations or improve the
caml-side api (only once right now). Therefore, trying to use
gobject-introspection to generate the description again is not
There is README explaining quickly how to use ocaml-gir in the source folder.
Compared to camlidl, its main advantage is to work on .h files rather
than on .idl ones. My first motivation for ocaml-gir was to get
webkit-gtk. I knew its API was changing often and I didn't feel like
checking everything every few weeks.
Another difference is that ocaml-gir tries to follow lablgtk's API
style. For example, it uses polymorphic variants to bind C enums.
Moreover, I wasnt't sure how camlidl was going to handle structs named
like WebKitWebView which ocaml type should be web_view.
However ocaml-gir probably has a ton of bugs and isn't complete yet
(the api exposed will change a bit and every "feature" isn't bound).
Also, one has to keep in mind automated binding generation from C
isn't magic. An int* could be an int array or an out-parameter and
int** or int*** would be even more annoying to deal with. It requires
A language with an actual array type and richer types, with functions
able to easily return several values and with exceptions may not need
Caml-list mailing list. Subscription management:
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs