From: Philippe Veber <philippe.veber@gmail.com>
To: Sylvain Le Gall <sylvain@le-gall.net>
Cc: caml-list@inria.fr
Subject: Re: [Caml-list] Re: oasis, inter-dependent libraries and syntax extension
Date: Wed, 2 Nov 2011 11:33:56 +0100 [thread overview]
Message-ID: <CAOOOohQxtYkd=pdEr9G0o3Cq2ijfM-Wt5a6HkUHbXEHqE6baiQ@mail.gmail.com> (raw)
In-Reply-To: <slrnjb25lb.9th.sylvain@gallu.homelinux.org>
[-- Attachment #1: Type: text/plain, Size: 12553 bytes --]
Done:
https://forge.ocamlcore.org/tracker/index.php?func=detail&aid=1050&group_id=54&atid=291
I find oasis particularly useful, tell me if there is something else I can
do on this.
ph.
2011/11/2 Sylvain Le Gall <sylvain@le-gall.net>
> Hello,
>
> You are indeed right, syntax extensions remain a second class citizen.
> I'll need to fix that situation.
>
> Please report this problem to the bug tracker, along with your solution
> (which seems fine). I'll try to implement it in 0.3.
>
> Cheers
> Sylvain Le Gall
>
> On 01-11-2011, Philippe Veber <philippe.veber@gmail.com> wrote:
> >
> > --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 <philippe.veber@gmail.com>
> >
> >> 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 <sebastien.mondet@gmail.com>
> >>
> >>>
> >>> Hi
> >>>
> >>>
> >>> I ran into the same problem last week.
> >>> I added a line to the _tags file after the OASIS-generated stuff:
> >>>
> >>> ...
> >>> # OASIS_STOP
> >>>
> >>> <src/*/*.ml>: 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 <
> philippe.veber@gmail.com>=
> > 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.
> >>>>
> >>>>
> >>>
> >>
> >
> > --=20
> > Caml-list mailing list. Subscription management and archives:
> > https://sympa-roc.inria.fr/wws/info/caml-list
> > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> > Bug reports: http://caml.inria.fr/bin/caml-bugs
> >
> >
> > --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 <a
> href=3D"http:/=
> > /myocamlbuild.ml">myocamlbuild.ml</a>, 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:<br>
> >
> ><br><span style=3D"font-family: courier new,monospace;">open
> Ocamlbuild_plu=
> > gin</span><br style=3D"font-family: courier new,monospace;"><br
> style=3D"fo=
> > nt-family: courier new,monospace;"><span style=3D"font-family: courier
> new,=
> > monospace;">let () =3D</span><br style=3D"font-family: courier
> new,monospac=
> > e;">
> >
> ><span style=3D"font-family: courier new,monospace;">=A0
> dispatch</span><br =
> > style=3D"font-family: courier new,monospace;"><span
> style=3D"font-family: c=
> > ourier new,monospace;">=A0=A0=A0 (fun hook -></span><br
> style=3D"font-fa=
> > mily: courier new,monospace;">
> >
> ><span style=3D"font-family: courier new,monospace;">=A0=A0=A0=A0=A0=A0
> disp=
> > atch_default hook;</span><br style=3D"font-family: courier
> new,monospace;">=
> ><span style=3D"font-family: courier new,monospace;">=A0=A0=A0=A0=A0=A0
> matc=
> > h hook with</span><br style=3D"font-family: courier new,monospace;">
> >
> ><span style=3D"font-family: courier new,monospace;">=A0=A0=A0=A0=A0=A0=A0=
> >=A0 | Before_options -></span><br style=3D"font-family: courier
> new,mono=
> > space;"><span style=3D"font-family: courier
> new,monospace;">=A0=A0=A0=A0=A0=
> >=A0=A0=A0=A0=A0=A0=A0 Options.make_links :=3D false</span><br
> style=3D"font=
> > -family: courier new,monospace;">
> >
> ><br style=3D"font-family: courier new,monospace;"><span
> style=3D"font-famil=
> > y: courier new,monospace;">=A0=A0=A0=A0=A0=A0=A0=A0 | After_rules
> -></sp=
> > an><br style=3D"font-family: courier new,monospace;"><span
> style=3D"font-fa=
> > mily: courier new,monospace;">=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 (*
> Inter=
> > nal syntax extension *)</span><br style=3D"font-family: courier
> new,monospa=
> > ce;">
> >
> ><span style=3D"font-family: courier new,monospace;">=A0=A0=A0=A0=A0=A0=A0=
> >=A0=A0=A0=A0=A0 List.iter</span><br style=3D"font-family: courier
> new,monos=
> > pace;"><span style=3D"font-family: courier
> new,monospace;">=A0=A0=A0=A0=A0=
> >=A0=A0=A0=A0=A0=A0=A0=A0=A0 (fun base -></span><br
> style=3D"font-family:=
> > courier new,monospace;">
> >
> ><span style=3D"font-family: courier new,monospace;">=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</span><br
> style=
> >=3D"font-family: courier new,monospace;">
> >
> ><span style=3D"font-family: courier new,monospace;">=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];</span><br
> style=3D"font-family=
> >: courier new,monospace;"><span style=3D"font-family: courier
> new,monospace=
> > ;">=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];</span=
> >><br style=3D"font-family: courier new,monospace;">
> >
> ><span style=3D"font-family: courier new,monospace;">=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];</span><br style=3D"font-family:
> co=
> > urier new,monospace;"><span style=3D"font-family: courier
> new,monospace;">=
> >=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0=A0 dep
> ["ocaml";=
> > "ocamldep"; tag] [file])</span><br style=3D"font-family:
> courier=
> > new,monospace;">
> >
> ><span style=3D"font-family: courier new,monospace;">=A0=A0=A0=A0=A0=A0=A0=
> >=A0=A0=A0=A0=A0=A0=A0
> ["syntax_ext1";"syntax_ext2"];</s=
> > pan> <span style=3D"font-family: courier new,monospace;">(* add your
> syntax=
> > extensions here *)</span><br style=3D"font-family: courier
> new,monospace;">
> >
> ><span style=3D"font-family: courier new,monospace;">=A0=A0=A0=A0=A0=A0=A0=
> >=A0 | _ -></span><br style=3D"font-family: courier
> new,monospace;"><span=
> > style=3D"font-family: courier
> new,monospace;">=A0=A0=A0=A0=A0=A0=A0=A0=A0=
> >=A0=A0=A0 ())</span><br style=3D"font-family: courier new,monospace;">
> >
> ><br><br><br><div class=3D"gmail_quote">2011/10/31 Philippe Veber <span
> dir=
> >=3D"ltr"><<a href=3D"mailto:philippe.veber@gmail.com
> ">philippe.veber@gma=
> > il.com</a>></span><br><blockquote class=3D"gmail_quote"
> style=3D"margin:=
> > 0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
> >
> > 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?<br>
> >
> >
> ><br>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 ?<br>
> >
> >
> ><br>ph.<div><div></div><div class=3D"h5"><br><br><div
> class=3D"gmail_quote"=
> >>2011/10/31 Sebastien Mondet <span dir=3D"ltr"><<a href=3D"mailto:
> sebast=
> > ien.mondet@gmail.com" target=3D"_blank">sebastien.mondet@gmail.com
> </a>><=
> > /span><br>
> >
> ><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0
> .8ex;border-left:1p=
> > x #ccc solid;padding-left:1ex">
> ><div><br></div><div>Hi</div><div><br></div><div><br></div><div>I ran into
> t=
> > he same problem last week.</div><div>I added a line to the _tags file
> after=
> > the OASIS-generated stuff:</div><div><div><br></div><div>=A0
> =A0...</div>
> >
> ><div>
> >
> >
> >=A0 =A0# OASIS_STOP</div><div><br></div><div>=A0 =A0<src/*/*.ml>:
> syn=
> > tax_camlp4o</div></div><div><br></div><div><br></div><div>(found in the
> sli=
> > de 18:</div><div><a href=3D"
> http://oasis.forge.ocamlcore.org/documentation.=
> > html" target=3D"_blank">
> http://oasis.forge.ocamlcore.org/documentation.html=
> ></a>=A0)</div>
> >
> >
> >
> >
> ><div><br></div><font
> color=3D"#888888"><div><br></div><div>Sebastien</div><=
> >
> /font><div><div></div><div><div><br></div><div><br></div><div><br></div><di=
> > v><br></div><br><br><div class=3D"gmail_quote">On Mon, Oct 31, 2011 at
> 12:2=
> > 3, Philippe Veber <span dir=3D"ltr"><<a href=3D"mailto:
> philippe.veber@gm=
> > ail.com" target=3D"_blank">philippe.veber@gmail.com</a>></span>
> wrote:<b=
> > r>
> >
> >
> >
> >
> ><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0
> .8ex;border-left:1p=
> > x #ccc solid;padding-left:1ex">Hi,<br>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 ?<br>
> >
> >
> >
> >
> >
> >
> ><br>ph.<br><br>
> ></blockquote></div><br>
> ></div></div></blockquote></div><br>
> ></div></div></blockquote></div><br>
> >
> > --20cf307abebda8d83d04b0a9e43e--
> >
>
> Cheers,
> Sylvain Le Gall
> --
> My company: http://www.ocamlcore.com
> Linkedin: http://fr.linkedin.com/in/sylvainlegall
> Start an OCaml project here: http://forge.ocamlcore.org
> OCaml blogs: http://planet.ocamlcore.org
>
>
>
> --
> Caml-list mailing list. Subscription management and archives:
> https://sympa-roc.inria.fr/wws/info/caml-list
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs
>
>
[-- Attachment #2: Type: text/html, Size: 18786 bytes --]
prev parent reply other threads:[~2011-11-02 10:34 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-10-31 16:23 [Caml-list] " Philippe Veber
2011-10-31 16:40 ` Sebastien Mondet
2011-10-31 20:09 ` Philippe Veber
2011-11-01 10:33 ` Philippe Veber
2011-11-02 10:08 ` [Caml-list] " Sylvain Le Gall
2011-11-02 10:33 ` Philippe Veber [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to='CAOOOohQxtYkd=pdEr9G0o3Cq2ijfM-Wt5a6HkUHbXEHqE6baiQ@mail.gmail.com' \
--to=philippe.veber@gmail.com \
--cc=caml-list@inria.fr \
--cc=sylvain@le-gall.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox