From: Romain Bardou <Romain.Bardou@lri.fr>
To: Nicolas Pouillard <nicolas.pouillard@gmail.com>
Cc: caml-list <caml-list@inria.fr>
Subject: Re: [Caml-list] ocamlbuild and packs
Date: Thu, 31 Jan 2008 14:42:30 +0100 [thread overview]
Message-ID: <47A1D046.2040908@lri.fr> (raw)
In-Reply-To: <1201784124-sup-1877@ausone.inria.fr>
Thanks for your help!
Now it still doesn't compile, but the error is different and shows that
I'm getting closer.
What I didn't tell you is that I actually have several directories
"bla", so it is more like this:
module A
module C
module bla/A
module bla/B
module bli/C
module Main
You can view the "bla" and "bli" directories as the "parsing" and
"utils" directories of the OCaml source.
The module bla/A depends on the module bli/C. There is no clash between
names in the directories bla and bli, and I want to pack bla and bli
together in a big module Blabli so Main can access Blabli.A, Blabli.B
and Blabli.C. So I have a file blabli.mlpack:
bla/A
bla/B
bli/C
The problem is that ocamlbuild doesn't look in bli to compile the files
in bla, so I get an error while compiling bla/A: the module bli/C is
unbound.
I guess one possible solution would be to put all the files in "bla" and
in "bli" together in the same directory, but I'd really prefer to avoid
that if possible. I tried it and it works, though: when I put every file
in the same subdirectory, the following command works, and produces the
file _build/bla.cmo:
ocamlbuild bla.cmo
However, the following command doesn't work:
ocamlbuild bla.cmx
Because the files aren't compiled with the -for-pack option. I have to
add "-cflags -for-pack,Bla". I guess it shouldn't be hard to use the
_tags file to make it use the flag only on the files of bla, so I'll try
and investigate that (couldn't it be automatic though?).
Thanks again,
Romain Bardou
Nicolas Pouillard a écrit :
> Excerpts from Romain Bardou's message of Thu Jan 31 12:55:20 +0100 2008:
>> Hello,
> Hello,
>
>> I have this big project I work on, which could be summarized like this:
>>
>> module A
>> module bla/A
>> module bla/B
>> module Main
>>
>> The module B in the bla directory depends on the module A of the bla
>> directory. The module Main depends on both modules A and on module B.
>> For some reasons I cannot rename either of the modules.
>>
>> So what I do is pack A and B in a Bla module, so I can write Bla.A and
>> Bla.B, using the -pack command line option. It works with my Makefile.
>>
>> Now I try to use ocamlbuild, because I really like its approach (I come
>> from the Pascal world where no makefile is needed). So I made this file
>> bla.mlpack containing the lines:
>>
>> A
>> B
>
> bla.mlpack should not be in the bla/ directory, and should contain:
>
> bla/A
> bla/B
>
> Because you don't want to expose bla to all your modules since you have a name clash.
>
>> Now if I compile using:
>>
>> ocamlbuild Main.byte
>
> Does it works now?
>
> [...]
>
>> I can't compile using:
>>
>> ocamlbuild -I bla Main.byte
>>
>> Because now the module A is defined twice.
>
> Yes
>
>> So I tried to compile using two steps: first, compile bla.cmo, and then,
>> compile Main.byte, but ocamlbuild doesn't seem to be good at that (and
>> actually that's not a bad thing imo). Indeed, if I do:
>>
>> ocamlbuild bla.cmo
>
> You won't trick ocamlbuild with this technique, but it's a good way to
> specifically found what's should be buildable and is not.
>
> [...]
>
>> Now for the questions:
>> 1) What is the best way to compile my project? By "best" I mean: with no
>> plugin if possible, with a small _tags file, and as few command line
>> options as possible, while still keeping the spirit of ocamlbuild (for
>> instance, compiling everything in one single call to ocamlbuild if
>> possible).
>
> In most of cases it will works. However precise directory scopes and packages
> contents and scope can be done in a plugin.
>
>> 2) Why doesn't ocamlbuild compile my file bla.mlpack into bla.cmo? In
>> the manual I can read that "%.mlpack" has target "%.cmo".
>
> Yes there is such a rule.
>
>> 3) If ocamlbuild actually did compile bla.cmo, could it use it to
>> compile main.byte or must I build a library bla.cma first?
>
> Yes it will use it.
>
>> Thanks. I would be glad to contribute to the wiki, but I have to
>> understand ocamlbuild first ;)
>
> I would be thankful.
>
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Caml-list mailing list. Subscription management:
> http://yquem.inria.fr/cgi-bin/mailman/listinfo/caml-list
> Archives: http://caml.inria.fr
> Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
> Bug reports: http://caml.inria.fr/bin/caml-bugs
next prev parent reply other threads:[~2008-01-31 13:41 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-01-31 11:55 Romain Bardou
2008-01-31 13:01 ` [Caml-list] " Nicolas Pouillard
2008-01-31 13:42 ` Romain Bardou [this message]
2008-01-31 13:50 ` Nicolas Pouillard
2008-01-31 14:04 ` Romain Bardou
2008-01-31 14:11 ` Romain Bardou
2008-01-31 14:13 ` Nicolas Pouillard
2008-01-31 14:14 ` Nicolas Pouillard
2008-01-31 14:35 ` Romain Bardou
2008-01-31 14:42 ` Nicolas Pouillard
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=47A1D046.2040908@lri.fr \
--to=romain.bardou@lri.fr \
--cc=caml-list@inria.fr \
--cc=nicolas.pouillard@gmail.com \
/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