Currently there is nothing specific in ocamlbuild to support -no-alias-deps. What the open(Foo) flag does is to to pass the "-open Foo" option to ocamldep, which in turns merely adds Foo to the list of dependencies of the compiled module. My understand of the situation is that it guarantees that project using "-open ..." in their build system will build correctly with ocamlbuild, with two limitations:
(1) if you use crazy recursive-but-not-really schemes, you'll get a circular dependencies error
(2) if Foo is a list of aliases, it will act as a bottleneck in the dependency graph

Any good proposal to change the statu quo will of course be considered -- but I myself have little time to implement new OCamlbuild features -- and I will try to be as reactive on possible bugs (eg. #6755) as possible, as the de-facto maintainer of ocamlbuild.

I am not sure what should be done about (1). The almost-recursive scheme was adopted by Jane Street for the extremely specific use-case of migrating an enormous code-base from -pack to -no-alias-deps, but I am not sure it is reasonable to expect it to work for other users (and I doubt it's wise to advertise it as such).

In slightly more details: I think the idea of distributing a short-name-giving lambwiki.ml to your users is a good way to emulate -pack without the downsides of -pack, but that you could avoid using the short names in the project itself (that is use Lambda_Parser explicitly rather than Parser). If you did this, the spurious cyclic dependencies disappaear, you can simply use ocamlbuild without any dependency hack, and your users see the short names.

On Fri, Jan 23, 2015 at 8:09 PM, Dario Teixeira <dario.teixeira@nleyten.com> wrote:
Hi,

I am not sure. But: why isn't the dependency explicit in
lambwiki_parser.mly? Doesn't it mention the module name
"Lambwiki" somewhere? If not, perhaps you could add a
fake dependency by declaring "module L = LambWiki" at
the top of lambwiki_parser.mly. Would that help?

I'm still poking at it, but it seems there may be a bug in OCamlbuild,
or at least a difference of opinion. (I am using module aliases and
-no-alias-deps, and some of these waters are uncharted).

In the tags file, I had declared a tag "open(Lambwiki)" for file
<lambwiki_parser.mly>.  I assumed this would automatically add a
dependency on lambwiki.ml for lambwiki_parser.mly.

Now, lambwiki.ml contains only module aliases, for instance:

module Parser = Lambwiki_parser
module Scanner = Lambwiki_scanner

To avoid a circular dependency, in myocamlbuild I use the non_dependency
function (part of OCamlbuild's API) to declare that lambwiki.ml does not
in fact depend on Lambwiki_parser and Lambwiki_scanner.

I wonder if the tooling expects module aliases to produce dependencies
the other way around, ie, Lambwiki_parser depends on Lambwiki but not
vice-versa.  This is not clear to me.

Anyway, adding a dummy dependency as you suggested does the trick for
this particular problem.

Kind regards,
Dario Teixeira



--
Caml-list mailing list.  Subscription management and archives:
https://sympa.inria.fr/sympa/arc/caml-list
Beginner's list: http://groups.yahoo.com/group/ocaml_beginners
Bug reports: http://caml.inria.fr/bin/caml-bugs