Version française
Home     About     Download     Resources     Contact us    

This site is updated infrequently. For up-to-date information, please visit the new OCaml website at

Browse thread
Re: [Caml-list] ANNOUNCE: Wiki software written in OCaml
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: 2004-07-30 (16:01)
From: Richard Jones <rich@a...>
Subject: Re: [Caml-list] ANNOUNCE: Wiki software written in OCaml
On Fri, Jul 30, 2004 at 02:03:20PM +0200, Sven Luther wrote:
> Mmm, i adapted it to ocaml 3.08, and added the missing ocamldbi
> build-dependency, since it failed somehow because of a double -I in the
> Makefile.
> Now, it fails with :
> ocamlc -linkall -custom -g -w s -I /usr/lib/ocaml/3.08/pcre -I
> /usr/lib/ocaml/3.08/dbi -I /usr/include/apache-1.3 -I
> /usr/lib/ocaml/3.08/postgres postgres.cma dynlink.cma str.cma pcre.cma
> unix.cma dbi.cma mod_caml_c.o mod_caml.cmo apache_c.o wrappers.o apache.cmo
> mod_caml_config.cmo cgi_escape.cmo template.cmo cgi.cmo -o \
>   -cclib "-fPIC -shared -L/usr/lib/ocaml/3.08/postgres -lpostgres -lpq
>   -lcamlrun -ltermcap -lunix -lstr "
>   Error while linking /usr/lib/ocaml/3.08/dbi/dbi.cma(Dbi_mysql):
>   Reference to undefined global `Mysql'
>   make[1]: *** [] Erreur 2

Yes, this is interesting ...

It's because Dbi is built (by John) with MySQL support.  Thus
/usr/lib/ocaml/*/dbi/dbi.cma contains a module (Dbi_mysql) which
depends on (the OCaml module) Mysql.

John's libdbi-ocaml package suggests libmysql-ocaml-dev, but doesn't
require it.  This works fine provided you're just linking a standalone
program against the Dbi library, because unless the standalone program
deliberately links against Dbi_mysql, nothing will attempt to load the
missing Mysql module.

So far, so good.  Now here's the problem: ocamldbi contains a
mechanism to build handles of any type (Dbi.Factory.connect "postgres"
"store") for example, which is implemented using a complex
registration mechanism.  mod_caml requires this, because it provides a
way to pool database handles between requests.

Dbi.Factory loads any available module, depending on how it was
compiled.  Thus when you link mod_caml, and if ocamldbi was compiled
to depend on Mysql, then mod_caml depends on Mysql too!

So the upshot is that libmysql-ocaml-dev is a real dependency, not
just a 'Suggest:'ion.


I'm not really sure how to solve properly this at the moment.

This was all written before I really understood functors.  I suspect
that a functorized approach would be much better, because it is highly
unlikely that you really want a pool of database handles pointing to
different _types_ of database (ie. a mixture of PostgreSQL and MySQL
handles).  (If you did want this, just use two pools, and manage it

Suggestions welcome ...


Richard Jones.
Merjis Ltd. - improving website return on investment
C2LIB is a library of basic Perl/STL-like types for C. Vectors, hashes,
trees, string funcs, pool allocator:

To unsubscribe, mail Archives:
Bug reports: FAQ:
Beginner's list: