<?xml version="1.0" encoding="ISO-8859-1"?>

<!DOCTYPE message PUBLIC
  "-//MLarc//DTD MLarc output files//EN"
  "../../mlarc.dtd"[
  <!ATTLIST message
    listname CDATA #REQUIRED
    title CDATA #REQUIRED
  >
]>

  <?xml-stylesheet href="../../mlarc.xsl" type="text/xsl"?>


<message 
  url="2009/10/3a7c95e710ce0c2cd377fe1fedaab619"
  from="Dario Teixeira &lt;darioteixeira@y...&gt;"
  author="Dario Teixeira"
  date="2009-10-24T16:11:28"
  subject="Ocamlbuild directory inclusion problem"
  prev="2009/10/2bea75bf2ab07f700193e014678aa337"
  next="2009/10/09f127b71d8981041946b6cf7b63bc0e"
  next-in-thread="2009/10/09f127b71d8981041946b6cf7b63bc0e"
  prev-thread="2009/10/2bea75bf2ab07f700193e014678aa337"
  next-thread="2009/10/a14d04d2f47f019f098319c34066bb21"
  root="../../"
  period="month"
  listname="caml-list"
  title="Archives of the Caml mailing list">

<thread subject="Ocamlbuild directory inclusion problem">
<msg 
  url="2009/10/3a7c95e710ce0c2cd377fe1fedaab619"
  from="Dario Teixeira &lt;darioteixeira@y...&gt;"
  author="Dario Teixeira"
  date="2009-10-24T16:11:28"
  subject="Ocamlbuild directory inclusion problem">
<msg 
  url="2009/10/09f127b71d8981041946b6cf7b63bc0e"
  from="Nicolas Pouillard &lt;nicolas.pouillard@g...&gt;"
  author="Nicolas Pouillard"
  date="2009-10-25T13:09:19"
  subject="Re: [Caml-list] Ocamlbuild directory inclusion problem">
</msg>
</msg>
</thread>

<contents>
Hi,

I've come across another issue with Ocamlbuild, and I'm not sure if this one
is a bug or a feature.  Consider the project tree below; note that everything
under lib/ is supposed to produce a foo.cma library, while cmd/ is a command
line application that uses foo.cma (and which can be safely ignored for now).

|-- _tags
|-- lib/
|   |-- _tags
|   |-- foo.mllib
|   |-- foo_core.mlpack
|   |-- foo_core/
|   |   |-- (...)
|   |
|   |-- foo_ext.mlpack
|   |-- foo_ext/
|       |-- (...)
|
|-- cmd/
    |-- (...)

The file lib/_tags just contains "&lt;foo_core&gt; or &lt;foo_ext&gt;: include".  If I issue
"ocamlbuild foo.cma" inside the lib/ directory, then foo.cma gets built as expected.
However, if I move to the parent directory and issue "ocamlbuild lib/foo.cma",
I get an error:

ocamlc -pack lib/foo_ext/beta.cmo lib/foo_ext/alpha.cmo -o lib/foo_ext.cmo
File "_none_", line 1, characters 0-1:
Error: The implementation (obtained by packing)
       does not match the interface lib/foo_ext.mli:
       Modules do not match:
         sig val num : int end
       is not included in
         Foo_core.Zero.S
       Unbound module type Foo_core.Zero.S
Command exited with code 2.


The problem is of course that "-I lib" should be added to the invocation of ocamlc.
For this purpose I've created a myocamlbuild.ml in the root directory, with the
following contents:

let () = dispatch begin function
        | After_rules -&gt;
                Pathname.define_context "lib/foo_ext" ["lib"];
        | _ -&gt; ()
end


However, this doesn't work as expected.  Perhaps I've misunderstood the purpose
of Pathname.define_context?  In any case, I would expect a simple example like
this one to work even without the need for a myocamlbuild.ml plugin.  So, what
is missing here?

Thanks in advance!
Best regards,
Dario Teixeira



      

</contents>

</message>

