diff --git a/src/dune_rules/dep_rules.ml b/src/dune_rules/dep_rules.ml index e250d1049f2..e2265024a01 100644 --- a/src/dune_rules/dep_rules.ml +++ b/src/dune_rules/dep_rules.ml @@ -214,3 +214,7 @@ let rules ~obj_dir ~modules ~sandbox ~impl ~sctx ~dir = in Dep_graph.make ~dir ~per_module) ;; + +let deps_of ~obj_dir ~modules ~sandbox ~impl ~dir ~sctx module_ = + deps_of ~obj_dir ~modules ~sandbox ~impl ~dir ~sctx (Normal module_) +;; diff --git a/src/dune_rules/dep_rules.mli b/src/dune_rules/dep_rules.mli index a83040db896..beda1182f26 100644 --- a/src/dune_rules/dep_rules.mli +++ b/src/dune_rules/dep_rules.mli @@ -27,3 +27,14 @@ val rules -> sctx:Super_context.t -> dir:Path.Build.t -> Dep_graph.Ml_kind.t Memo.t + +val deps_of + : obj_dir:Path.Build.t Obj_dir.t + -> modules:Modules.With_vlib.t + -> sandbox:Sandbox_config.t + -> impl:Virtual_rules.t + -> dir:Path.Build.t + -> sctx:Super_context.t + -> Module.t + -> ml_kind:Ml_kind.t + -> Module.t list Action_builder.t Memo.t diff --git a/src/dune_rules/melange/melange_rules.ml b/src/dune_rules/melange/melange_rules.ml index d16616471bd..e4470b08c11 100644 --- a/src/dune_rules/melange/melange_rules.ml +++ b/src/dune_rules/melange/melange_rules.ml @@ -320,13 +320,29 @@ let build_js ; Dep src ] in - With_targets.map_build command ~f:(fun command -> - let open Action_builder.O in - match local_modules_and_obj_dir with - | Some (modules, obj_dir) -> + match local_modules_and_obj_dir with + | Some (modules, obj_dir) -> + With_targets.map_build command ~f:(fun command -> + let open Action_builder.O in let paths = let+ module_deps = - Dep_rules.immediate_deps_of m modules ~obj_dir ~ml_kind:Impl + let deps = + let open Memo.O in + let+ deps, _ = + Memo.Implicit_output.collect Rules.implicit_output (fun () -> + Dep_rules.deps_of + ~obj_dir + ~modules + ~sandbox:Sandbox_config.default + ~impl:Virtual_rules.no_implements + ~dir + ~sctx + ~ml_kind:Impl + m) + in + deps + in + Action_builder.of_memo_join deps in List.fold_left module_deps ~init:[] ~f:(fun acc dep_m -> if Module.has dep_m ~ml_kind:Impl @@ -338,8 +354,8 @@ let build_js cmj_file :: acc) else acc) in - Action_builder.dyn_paths_unit paths >>> command - | None -> command) + Action_builder.dyn_paths_unit paths >>> command) + | None -> command in Super_context.add_rule sctx ~dir ~loc ~mode build) ;; diff --git a/test/blackbox-tests/test-cases/melange/empty-aliases-file.t b/test/blackbox-tests/test-cases/melange/empty-aliases-file.t index 7f6d33f0572..cde5aebb237 100644 --- a/test/blackbox-tests/test-cases/melange/empty-aliases-file.t +++ b/test/blackbox-tests/test-cases/melange/empty-aliases-file.t @@ -115,7 +115,7 @@ file, and it's not present > let x = "foo" > EOF - $ DUNE_SANDBOX=none dune build @melange + $ dune build @melange `foo.js` was manually written, therefore it's present. `sub.js` is an alias file, and it's not present