@@ -91,20 +91,6 @@ let o_files sctx ~dir ~expander ~(exes : Executables.t) ~linkages ~dir_contents
9191 in
9292 List. map o_files ~f: Path. build
9393
94- let with_empty_intf ~sctx ~dir module_ =
95- let name =
96- Module. file module_ ~ml_kind: Impl
97- |> Option. value_exn
98- |> Path. set_extension ~ext: " .mli"
99- in
100- let rule =
101- Action_builder. write_file
102- (Path. as_in_build_dir_exn name)
103- " (* Auto-generated by Dune *)"
104- in
105- let + () = Super_context. add_rule sctx ~dir rule in
106- Module. add_file module_ Ml_kind. Intf (Module.File. make Dialect. ocaml name)
107-
10894let executables_rules ~sctx ~dir ~expander ~dir_contents ~scope ~compile_info
10995 ~embed_in_plugin_libraries (exes : Dune_file.Executables.t ) =
11096 (* Use "eobjs" rather than "objs" to avoid a potential conflict with a library
@@ -138,17 +124,20 @@ let executables_rules ~sctx ~dir ~expander ~dir_contents ~scope ~compile_info
138124 let executable_names =
139125 List. map exes.names ~f: Module_name. of_string_allow_invalid
140126 in
127+ let add_empty_intf = exes.buildable.empty_module_interface_if_absent in
141128 Modules. map_user_written modules ~f: (fun m ->
142129 let name = Module. name m in
143130 let * m = Pp_spec. pp_module_as pp name m in
144131 let add_empty_intf =
132+ (add_empty_intf
133+ ||
145134 let project = Scope. project scope in
146135 Dune_project. executables_implicit_empty_intf project
147- && List. mem executable_names name ~equal: Module_name. equal
136+ && List. mem executable_names name ~equal: Module_name. equal)
148137 && not (Module. has m ~ml_kind: Intf )
149138 in
150139 if add_empty_intf then
151- with_empty_intf ~sctx ~dir m
140+ Module_compilation. with_empty_intf ~sctx ~dir m
152141 else
153142 Memo.Build. return m)
154143 in
0 commit comments