Version française
Home     About     Download     Resources     Contact us    
Browse thread
Ocamlbuild plugins
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
From: Nicolas Pouillard <nicolas.pouillard@g...>
Subject: Re: [Caml-list] Ocamlbuild plugins
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