FWIW, `ocp-build` has a specific variable to overcome `ocamldep` limitations.

You can for example describe a library like that:

```
begin library "foobar"
  requires = [ "unix" "my-other-lib" ]
  files = [ 
       "bar.ml" (nodeps = [ "Foo" ])    (*   <---- module Bar does not depend on Foo, even if `ocamldep` says the contrary *)
       "foo.ml"
   ]
end
```

It also has a specific algorithm to discover cycles in build rules and display the cycle in a user-friendly fashion, so that finding the arguments for `nodeps` becomes easier.

--Fabrice



On Mon, Jul 11, 2016 at 5:33 PM Soegtrop, Michael <michael.soegtrop@intel.com> wrote:
Dear OCaml Users,

a note for those reading this thread later:

I finally used the module rec approach as outlined by Petter A. Urkedal in his previous post, although some people said in various places that this is overkill if you have issues with just a few functions. The module structure implied by the module rec approach was in the end nicer than my original module structure (which didn't work cause of the circular dependency). It was also much less work to restructure the modules than I thought. I tried several other approaches (function references, putting all functions calling each other into one file, treat mli and ml files separately in the build system), but they all appeared to be inferior, either in terms of effort or in terms of clarity, usually both.

So I came to the conclusion that long term there is no issue with properly declaring recursive module structures using "module rec", although it can be quite a pain short term. For resolving some short term hacks (e.g. for experiments), one can still use the function reference approach.

Best regards,

Michael

Intel Deutschland GmbH
Registered Address: Am Campeon 10-12, 85579 Neubiberg, Germany
Tel: +49 89 99 8853-0, www.intel.de
Managing Directors: Christin Eisenschmid, Christian Lamprechter
Chairperson of the Supervisory Board: Nicole Lau
Registered Office: Munich
Commercial Register: Amtsgericht Muenchen HRB 186928

--
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