The basic idea is to use opam switches to setup per-OCaml-version shared tools (merlin, ocp-index/ocp-browser, ocp-indent) with project-local builds for everything else.
For example, a user would have a 4.04.1+flambda
switch available with its own merlin
, ocp-indent
and other project-generic tooling.
Then a user would clone or create the project (let's call it Project A (PA)) they are working on. This project would use jbuilder
as its build system and include appropriate *.opam
files specifying dependencies.
A jbuilder init
or jbuilder init-deps
command could be available which would pull down the source code for all of PA's transitive dependencies, unpacking them under a local directory _vendor
(or some other appropriate name). This _vendor
directory could live within a switch-specific context. opam
could/would be used to determine the appropriate dependencies to pull down. All of the depedencies would either use jbuilder
as their