From mboxrd@z Thu Jan 1 00:00:00 1970 Received: (from majordomo@localhost) by pauillac.inria.fr (8.7.6/8.7.3) id SAA25493; Fri, 30 Jul 2004 18:01:19 +0200 (MET DST) X-Authentication-Warning: pauillac.inria.fr: majordomo set sender to owner-caml-list@pauillac.inria.fr using -f Received: from nez-perce.inria.fr (nez-perce.inria.fr [192.93.2.78]) by pauillac.inria.fr (8.7.6/8.7.3) with ESMTP id SAA25202 for ; Fri, 30 Jul 2004 18:01:18 +0200 (MET DST) Received: from annexia.force9.co.uk (annexia.force9.co.uk [212.56.101.183]) by nez-perce.inria.fr (8.12.10/8.12.10) with ESMTP id i6UG1HEV029853 for ; Fri, 30 Jul 2004 18:01:17 +0200 Received: from rich by annexia.force9.co.uk with local (Exim 3.36 #1 (Debian)) id 1BqZoq-0003OQ-00; Fri, 30 Jul 2004 17:01:16 +0100 Date: Fri, 30 Jul 2004 17:01:16 +0100 To: Sven Luther Cc: caml-list@inria.fr Subject: Re: [Caml-list] ANNOUNCE: Wiki software written in OCaml Message-ID: <20040730160116.GA12848@annexia.org> References: <20040730005349.GA18722@pegasos> <20040730075621.GA5996@annexia.org> <20040730080245.GA6075@annexia.org> <20040730082701.GA30962@pegasos> <20040730084658.GA6898@annexia.org> <20040730090617.GA31469@pegasos> <20040730090647.GA7218@annexia.org> <20040730091939.GA31646@pegasos> <20040730092349.GA7444@annexia.org> <20040730120320.GA813@pegasos> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <20040730120320.GA813@pegasos> User-Agent: Mutt/1.5.5.1+cvs20040105i From: Richard Jones X-Miltered: at nez-perce with ID 410A70CD.000 by Joe's j-chkmail (http://j-chkmail.ensmp.fr)! X-Loop: caml-list@inria.fr X-Spam: no; 0.00; caml-list:01 wiki:01 2004:99 sven:01 luther:01 ocamlc:01 -linkall:01 usr:01 pcre:01 usr:01 dbi:99 postgres:01 postgres:01 dynlink:01 pcre:01 Sender: owner-caml-list@pauillac.inria.fr Precedence: bulk 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 mod_caml.so \ > -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]: *** [mod_caml.so] 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 yourself). Suggestions welcome ... Rich. -- Richard Jones. http://www.annexia.org/ http://www.j-london.com/ Merjis Ltd. http://www.merjis.com/ - improving website return on investment C2LIB is a library of basic Perl/STL-like types for C. Vectors, hashes, trees, string funcs, pool allocator: http://www.annexia.org/freeware/c2lib/ ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners