From mboxrd@z Thu Jan 1 00:00:00 1970 X-Sympa-To: caml-list@inria.fr Received: from mail4-relais-sop.national.inria.fr (mail4-relais-sop.national.inria.fr [192.134.164.105]) by walapai.inria.fr (8.13.6/8.13.6) with ESMTP id pA1AY7oi021296 for ; Tue, 1 Nov 2011 11:34:07 +0100 X-IronPort-Anti-Spam-Filtered: true X-IronPort-Anti-Spam-Result: AnoBAAbKr07RVdQ2kGdsb2JhbABCmiqHOwGHSwgiAQEBAQkJDQcUBCGBcgEBAQMBEgITGQEbHQEDAQsGBQsiGSEBAREBBQEcBhMih2AIl1kKi1SCYIUpPYhwAgUKhWGDHASUD4o2gn09g3A X-IronPort-AV: E=Sophos;i="4.69,437,1315173600"; d="scan'208";a="115959994" Received: from mail-vw0-f54.google.com ([209.85.212.54]) by mail4-smtp-sop.national.inria.fr with ESMTP/TLS/RC4-SHA; 01 Nov 2011 11:34:01 +0100 Received: by vws11 with SMTP id 11so629527vws.27 for ; Tue, 01 Nov 2011 03:33:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc:content-type; bh=wVpN5XsBqbPwkYbDDqjxgraaBOy6dM0xgpLPwuPTBME=; b=hb5O4BW7N/qwkX2C8OaXqlJGoeNcEH6djFNJTEApVZdL9Qt5bbLY0NSItxMQpqaD8+ V73WxcIVmVF00xraMgfkAtjyQnzRle0hgTHUyR9Ic84IVcH6tbpjBNSeEmuZiA/5XZC/ 6DHgafXLGmaElyswSWCpN8vK1iL25KQQC283I= Received: by 10.52.28.9 with SMTP id x9mr8512142vdg.17.1320143639074; Tue, 01 Nov 2011 03:33:59 -0700 (PDT) MIME-Version: 1.0 Received: by 10.52.113.195 with HTTP; Tue, 1 Nov 2011 03:33:38 -0700 (PDT) In-Reply-To: References: From: Philippe Veber Date: Tue, 1 Nov 2011 11:33:38 +0100 Message-ID: To: Sebastien Mondet Cc: caml users Content-Type: multipart/alternative; boundary=20cf307abebda8d83d04b0a9e43e X-Validation-by: philippe.veber@gmail.com Subject: Re: [Caml-list] oasis, inter-dependent libraries and syntax extension --20cf307abebda8d83d04b0a9e43e Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable I found a workaround in lwt, which is to add some code in myocamlbuild.ml, outside the generated part, to define appropriate tags that can then be used in _tags (more generally, lwt has several interesting tricks about oasis). For the record, here is how you can use a syntax extension internally, inside a package: open Ocamlbuild_plugin let () =3D dispatch (fun hook -> dispatch_default hook; match hook with | Before_options -> Options.make_links :=3D false | After_rules -> (* Internal syntax extension *) List.iter (fun base -> let tag =3D "pa_" ^ base and file =3D "src/syntax/pa_" ^ = base ^ ".cmo" in flag ["ocaml"; "compile"; tag] & S[A"-ppopt"; A file]; flag ["ocaml"; "ocamldep"; tag] & S[A"-ppopt"; A file]; flag ["ocaml"; "doc"; tag] & S[A"-ppopt"; A file]; dep ["ocaml"; "ocamldep"; tag] [file]) ["syntax_ext1";"syntax_ext2"]; (* add your syntax extensions here *) | _ -> ()) 2011/10/31 Philippe Veber > S=E9bastien's suggestion is indeed a good start but alas for me not enoug= h. > The build still fails at ocamldep time, because the library B (with the > syntax extension) seems not to be taken into account. If I replace my > syntax extension with some findlib package (say tyxml), the compilation > works fine. So the question remains, how can I specify that a > library/executable in a package depends on a syntax extension that is > defined as a library of the same package? > > Thanks to oasisdb, I've browsed a couple of packages that could be in the > same situation, like a test executable for a syntax extension, but found > none. Maybe I'm not dealing correctly with the situation ? > > ph. > > > 2011/10/31 Sebastien Mondet > >> >> Hi >> >> >> I ran into the same problem last week. >> I added a line to the _tags file after the OASIS-generated stuff: >> >> ... >> # OASIS_STOP >> >> : syntax_camlp4o >> >> >> (found in the slide 18: >> http://oasis.forge.ocamlcore.org/documentation.html ) >> >> >> Sebastien >> >> >> >> >> >> >> On Mon, Oct 31, 2011 at 12:23, Philippe Veber = wrote: >> >>> Hi, >>> I have an oasis project defining three inter-dependent libraries A, B >>> and C. B is a syntax extension, and depends on A. C depends on both A a= nd >>> B. I have written an _oasis file for this, which works fine if I don't = use >>> the extension in C, but fails if I do, during ocamldep (ocamldep lacks = the >>> appropriate options to understand the new syntax). Has anybody run into >>> this problem ? >>> >>> ph. >>> >>> >> > --20cf307abebda8d83d04b0a9e43e Content-Type: text/html; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable I found a workaround in lwt, which is to add some code in myocamlbuild.ml, outside the generated part, to defin= e appropriate tags that can then be used in _tags (more generally, lwt has = several interesting tricks about oasis). For the record, here is how you ca= n use a syntax extension internally, inside a package:

open Ocamlbuild_plu= gin

let () =3D
=A0 dispatch
=A0=A0=A0 (fun hook ->
=A0=A0=A0=A0=A0=A0 disp= atch_default hook;
= =A0=A0=A0=A0=A0=A0 matc= h hook with
=A0=A0=A0=A0=A0=A0=A0= =A0 | Before_options ->
=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0 Options.make_links :=3D false

=A0=A0=A0=A0=A0=A0=A0=A0 | After_rules ->
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 (* Inter= nal syntax extension *)
=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0 List.iter
=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0 (fun base ->
=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 let tag =3D "pa_" ^ base and file = =3D "src/syntax/pa_" ^ base ^ ".cmo" in
=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 flag ["ocaml"; "compile"= ; tag] & S[A"-ppopt"; A file];
=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 flag ["ocaml&qu= ot;; "ocamldep"; tag] & S[A"-ppopt"; A file];
=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 flag ["ocaml"; "doc"; ta= g] & S[A"-ppopt"; A file];
= =A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 dep ["ocaml";= "ocamldep"; tag] [file])
=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0=A0=A0=A0=A0 ["syntax_ext1";"syntax_ext2"]; (* add your syntax= extensions here *)
=A0=A0=A0=A0=A0=A0=A0= =A0 | _ ->
=A0=A0=A0=A0=A0=A0=A0=A0=A0= =A0=A0=A0 ())




2011/10/31 Philippe Veber <philippe.veber@gma= il.com>
S=E9bastien's suggestion is indeed a good start but alas for me not eno= ugh. The build still fails at ocamldep time, because the library B (with th= e syntax extension) seems not to be taken into account. If I replace my syn= tax extension with some findlib package (say tyxml), the compilation works = fine. So the question remains, how can I specify that a library/executable = in a package depends on a syntax extension that is defined as a library of = the same package?

Thanks to oasisdb, I've browsed a couple of packages that could be = in the same situation, like a test executable for a syntax extension, but f= ound none. Maybe I'm not dealing correctly with the situation ?

ph.


2011/10/31 Sebastien Mondet <sebastien.mondet@gmail.com><= /span>

Hi


I ran into t= he same problem last week.
I added a line to the _tags file after= the OASIS-generated stuff:

=A0 =A0...
=A0 =A0# OASIS_STOP

=A0 =A0<src/*/*.ml>: syn= tax_camlp4o


(found in the sli= de 18:


Sebastien
<= /font>






On Mon, Oct 31, 2011 at 12:2= 3, Philippe Veber <philippe.veber@gmail.com> wrote:
Hi,
I have an oasis project defining thre= e inter-dependent libraries A, B and C. B is a syntax extension, and depend= s on A. C depends on both A and B. I have written an _oasis file for this, = which works fine if I don't use the extension in C, but fails if I do, = during ocamldep (ocamldep lacks the appropriate options to understand the n= ew syntax). Has anybody run into this problem ?

ph.




--20cf307abebda8d83d04b0a9e43e--