From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.1.3 (2006-06-01) on yquem.inria.fr X-Spam-Level: * X-Spam-Status: No, score=1.1 required=5.0 tests=AWL,SPF_NEUTRAL autolearn=disabled version=3.1.3 Received: from mail4-relais-sop.national.inria.fr (mail4-relais-sop.national.inria.fr [192.134.164.105]) by yquem.inria.fr (Postfix) with ESMTP id BB947BC6B for ; Tue, 6 Nov 2007 20:30:10 +0100 (CET) X-IronPort-AV: E=Sophos;i="4.21,380,1188770400"; d="scan'208";a="19007394" Received: from peray.inria.fr (HELO ausone.inria.fr) ([128.93.8.98]) by mail4-relais-sop.national.inria.fr with SMTP; 06 Nov 2007 20:30:10 +0100 Received: by ausone.inria.fr (sSMTP sendmail emulation); Tue, _d Nov 2007 20:29:30 +0100 From: "Nicolas Pouillard" Cc: caml-list Subject: Re: [Caml-list] Ocamlbuild plugins To: Dario Teixeira References: <402653.93475.qm@web54603.mail.re2.yahoo.com> In-Reply-To: <402653.93475.qm@web54603.mail.re2.yahoo.com> Date: Tue, 06 Nov 2007 20:29:30 +0100 Message-Id: <1194376648-sup-4076@ausone.local> User-Agent: Sup/0.2 Content-Type: text/plain; charset=UTF-8 X-Spam: no; 0.00; ocaml:01 ocamlfind:01 compiler:01 -package:01 flags:01 -package:01 camlp:01 ocaml:01 ocamldep:01 flags:01 grammatical:01 camlp:01 ocamldep:01 yap:98 wrote:01 Excerpts from Dario Teixeira's message of Tue Nov 06 17:23:01 +0100 2007: > Hi, > > And thanks a lot for your reply! > > > On my page [1] there is also a plugin example [2] and the API [3], > > where the module signature [4] can be a good starting point about what > > tools we have in an ocamlbuild plugin. > > I had seen those; what was missing was an overview of what exactly was > a plugin, and how it was supposed to be called -- the big picture stuff. > > > > There is certainly some missing pieces. Roughly an ocamlbuild plugin > > is an OCaml module called Myocamlbuild that should take place a > > the root of your project (myocamlbuild.ml). Automatically ocamlbuild > > will take care of it by compiling it and by making a myocamlbuild > > binary that is the classical ocamlbuild plus your module. > > Yeap, I kind of assumed something like that was going on, though of course > I wasn't sure about the details. This little piece of information would > have made a huge difference if it was included in the documentation! > > Also, when introducing a new library, it is always good practice to fully > qualify values. I know that for people used to a library this might > seem like a waste of time, but for those learning it makes everything > a lot clearer. > > > > Firstly since you want to use ocamlfind you should start with this plugin > > I have looked into it, but it has one huge problem: it assumes that all > files will use the same packages. Though in practice it doesn't hurt > to pass unnecessary packages to the compiler, it's still killing a fly* > with a bazooka. Moreover, while the comment at the bottom of that page > addresses this issue ("A more fine grained version can provide specific > -package options depending on the compiled file. This can be easily > done using the tag system"), I find the use of "this can easily be done" > a bit ironic given the present meagerness of Ocamlbuild's documentation... At this time, you're right. > > let flags in = S[A"-package"; A"pgocaml.statements"; A"-syntax"; > A"camlp4o"] in > > flag ["ocaml"; "compile"; "use_pgocaml_statements"]; > > flag ["ocaml"; "ocamldep"; "use_pgocaml_statements"]; > > > > You can then tag your files in the _tags file: > > > > "database.ml": use_pgocaml_statements, thread > > Yap, that was precisely what I wanted to express. Though I am having > trouble parsing that example you just gave. Is "flag" the function > "flag" from module Flags, or just a misspelling of the "flags" value > you just declared? Also, "let flags in" doesn't seem grammatical. > (This just illustrates the need of always using fully qualified values > when giving examples!). Sorry this example is totally badly wrote (due to the lack of email type checking). Here is a correct one: open Ocamlbuild_plugin;; open Command;; dispatch begin function | After_rules -> let some_flags = S[A"-package"; A"pgocaml.statements"; A"-syntax"; A"camlp4o"] in flag ["ocaml"; "compile"; "use_pgocaml_statements"] some_flags; flag ["ocaml"; "ocamldep"; "use_pgocaml_statements"] some_flags; | _ -> () end;; flag [1] refer to Ocamlbuild_plugin.flag that is an exported alias for Ocamlbuild_pack.Flags.flag. [1]: http://gallium.inria.fr/~pouillar/ocamlbuild/html/Signatures.PLUGIN.html > > I don't know if GODI properly install as many things as ocamlbuild needs. > > I would assume it does, but perhaps the GODI folks can enlighten us on that? Does anyone use ocamlbuild with plugins with a GODI setup? > Anyway, thanks again for your help, and I hope you'll find the time > to expand a little on the user guide... I hope too. > It seems the biggest obstacle > to a wider adoption of Ocamlbuild is the lack of proper documentation > (a common complaint in the OCaml world, unfortunately). Sadly you're right. As always any help/contribution will be appreciated :) -- Nicolas Pouillard aka Ertai