Re: [Caml-list] compiling static preprocessors

Jérémie Dimino
2012-03-01T21:53:05Z

Le Thu, 1 Mar 2012 20:58:38 +0100,
Thomas Gazagnaire <thomas.gazagnaire@gmail.com> a écrit :

> ocamlc dynlink.cma unix.cma \
> -I +camlp4 camlp4lib.cma -linkall \
> Camlp4Parsers/Camlp4OCamlRevisedParser.cmo \
> Camlp4Parsers/Camlp4OCamlParser.cmo \
> Camlp4Parsers/Camlp4OCamlRevisedParserParser.cmo \
> Camlp4Parsers/Camlp4OCamlParserParser.cmo \
> Camlp4Printers/Camlp4AutoPrinter.cmo \
> Camlp4Bin.cmo \
> -I +site-lib/type-conv pa_type_conv.cma \
> -I +site-lib/sexplib pa_sexp_conv.cma \
> -o sexppp
>
> I've taken the first lines by greping camlp4o.native in
> ocaml-3.12.1/_build/_log and I've appended what normally follows
> camlp4o when using sexplib.
>
> The command succeeds at building sexppp, but unfortunately, the
> preprocessor doesn't work as expected: "./my_pp foo.ml" gives: "Parse
> error: [semi] expected after [str_item] (in [implem])" for any type
> followed by "with sexp" in foo.ml.
>
> I am trying to do something crazy or is there a chance to make it
> work?

It is because Camlp4Bin.cmo is linked before pa_type_conv.cma and
pa_sexp_conv.cma, and so side-effects of theses modules are not
yet performed when the camlp4 main function run.

Camlp4Bin.cmo must be the last file on the command line.

Cheers,

--
Jérémie