diff --git a/doc/changes/12299.md b/doc/changes/12299.md new file mode 100644 index 00000000000..f0371ef86cd --- /dev/null +++ b/doc/changes/12299.md @@ -0,0 +1,2 @@ +- Fix: include the module alias in the transitive dependency closure with + `(include_subdirs qualified). (#12299, @anmonteiro) diff --git a/src/dune_rules/modules.ml b/src/dune_rules/modules.ml index 526b54110ab..c952c7abbf9 100644 --- a/src/dune_rules/modules.ml +++ b/src/dune_rules/modules.ml @@ -453,7 +453,10 @@ module Group = struct (* XXX ocamldep can't currently give us precise dependencies for modules under [(include_subdirs qualified)] directories. For that reason we currently depend on everything under the sub-directory. *) - Module_name.Map.values g.modules |> List.concat_map ~f:closure_node + let closure = + Module_name.Map.values g.modules |> List.concat_map ~f:closure_node + in + lib_interface :: closure | _ -> [ lib_interface ] and closure_node = function diff --git a/test/blackbox-tests/test-cases/include-qualified/build-with-sandbox.t b/test/blackbox-tests/test-cases/include-qualified/build-with-sandbox.t new file mode 100644 index 00000000000..f305b144cac --- /dev/null +++ b/test/blackbox-tests/test-cases/include-qualified/build-with-sandbox.t @@ -0,0 +1,28 @@ +Test `(include_subdirs qualified)` with sandboxing + + $ mkdir lib + $ cat > dune-project < (lang dune 3.20) + > EOF + + $ mkdir lib/sub + $ cat > lib/dune < (include_subdirs qualified) + > (library (name foo)) + > EOF + $ cat > lib/bar.ml < let hello = Sub.Hello.hello + > EOF + $ cat > lib/sub/hello.ml < let hello = "hello from sub" + > EOF + + $ DUNE_SANDBOX=symlink dune build + +Transitive deps file includes the alias module + + $ cat _build/default/lib/.foo.objs/foo__Bar.impl.d + lib/bar.ml: Sub + $ cat _build/default/lib/.foo.objs/foo__Bar.impl.all-deps + foo__Sub + foo__Sub__Hello