diff --git a/test/blackbox-tests/test-cases/per-module-lib-deps/lib-deps-preserved.t b/test/blackbox-tests/test-cases/per-module-lib-deps/lib-deps-preserved.t new file mode 100644 index 00000000000..4c52ae92653 --- /dev/null +++ b/test/blackbox-tests/test-cases/per-module-lib-deps/lib-deps-preserved.t @@ -0,0 +1,42 @@ +Verify that library file deps are declared for module compilation rules. + +Every non-alias module should declare glob deps on its library +dependencies' .cmi files. + + $ cat > dune-project < (lang dune 3.23) + > EOF + + $ mkdir lib + $ cat > lib/dune < (library (name mylib)) + > EOF + $ cat > lib/mylib.ml < let value = 42 + > EOF + $ cat > lib/mylib.mli < val value : int + > EOF + + $ cat > dune < (executable (name main) (libraries mylib)) + > EOF + $ cat > uses_lib.ml < let get () = Mylib.value + > EOF + $ cat > uses_lib.mli < val get : unit -> int + > EOF + $ cat > main.ml < let () = print_int (Uses_lib.get ()) + > EOF + + $ dune build ./main.exe + +Both modules declare glob deps on mylib's .cmi files: + + $ dune rules --deps _build/default/.main.eobjs/native/dune__exe__Uses_lib.cmx 2>&1 | grep 'predicate' + (predicate *.cmi) + + $ dune rules --deps _build/default/.main.eobjs/native/dune__exe__Main.cmx 2>&1 | grep 'predicate' + (predicate *.cmi) diff --git a/test/blackbox-tests/test-cases/per-module-lib-deps/sandbox-lib-deps.t b/test/blackbox-tests/test-cases/per-module-lib-deps/sandbox-lib-deps.t new file mode 100644 index 00000000000..51587e26d61 --- /dev/null +++ b/test/blackbox-tests/test-cases/per-module-lib-deps/sandbox-lib-deps.t @@ -0,0 +1,36 @@ +Sandboxed package builds need library file deps declared properly. + +When building with DUNE_SANDBOX=symlink and -p (release/package mode), +dependency libraries' .cmi files must be available in the sandbox. If +library file deps are not declared, the sandbox won't contain them and +compilation will fail. + + $ cat > dune-project < (lang dune 3.23) + > (package (name mypkg) (allow_empty)) + > EOF + + $ mkdir types_lib + $ cat > types_lib/dune < (library (name types_lib) (public_name mypkg.types_lib)) + > EOF + $ cat > types_lib/types_lib.ml < type expr = Int of int | Add of expr * expr + > EOF + + $ mkdir consumer_lib + $ cat > consumer_lib/dune < (library + > (name consumer_lib) + > (public_name mypkg.consumer_lib) + > (libraries types_lib)) + > EOF + $ cat > consumer_lib/consumer_lib.ml < let make_int i : Types_lib.expr = Int i + > let make_add a b : Types_lib.expr = Add (a, b) + > EOF + +The build must succeed — the sandbox must contain types_lib's .cmi files: + + $ DUNE_SANDBOX=symlink dune build -p mypkg 2>&1 | grep -i error + [1]