Melange (installed) library depends on private library $ mkdir -p lib/lib lib/priv $ cat > lib/dune-project < (lang dune 3.8) > (package (name foo)) > (using melange 0.1) > EOF $ cat > lib/priv/dune < (library > (name priv) > (package foo) > (modes melange)) > EOF $ cat > lib/priv/priv.ml < let x = "private" > EOF $ cat > lib/lib/dune < (library > (public_name foo) > (modes melange) > (libraries priv)) > EOF $ cat > lib/lib/foo.ml < let x = "public lib uses " ^ Priv.x > EOF $ dune build @install --root lib Entering directory 'lib' Leaving directory 'lib' $ dune install --prefix $PWD/prefix --root lib --display short Installing $TESTCASE_ROOT/prefix/lib/foo/META Installing $TESTCASE_ROOT/prefix/lib/foo/__private__/priv/melange/.public_cmi_melange/priv.cmi Installing $TESTCASE_ROOT/prefix/lib/foo/__private__/priv/melange/.public_cmi_melange/priv.cmt Installing $TESTCASE_ROOT/prefix/lib/foo/__private__/priv/melange/priv.cmj Installing $TESTCASE_ROOT/prefix/lib/foo/__private__/priv/priv.ml Installing $TESTCASE_ROOT/prefix/lib/foo/dune-package Installing $TESTCASE_ROOT/prefix/lib/foo/foo.ml Installing $TESTCASE_ROOT/prefix/lib/foo/melange/foo.cmi Installing $TESTCASE_ROOT/prefix/lib/foo/melange/foo.cmj Installing $TESTCASE_ROOT/prefix/lib/foo/melange/foo.cmt $ mkdir app $ cat > app/dune-project < (lang dune 3.8) > (package (name foo)) > (using melange 0.1) > EOF $ cat > app/dune < (melange.emit > (target output) > (libraries foo) > (emit_stdlib false)) > EOF $ cat > app/entry.ml < let () = Js.log Foo.x > EOF Build the app that depends on `foo`, which in turn depends on a private lib $ OCAMLPATH=$PWD/prefix/lib/:$OCAMLPATH dune build @melange --root app Entering directory 'app' Leaving directory 'app'