@@ -91,20 +91,6 @@ let o_files sctx ~dir ~expander ~(exes : Executables.t) ~linkages ~dir_contents
91
91
in
92
92
List. map o_files ~f: Path. build
93
93
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
-
108
94
let executables_rules ~sctx ~dir ~expander ~dir_contents ~scope ~compile_info
109
95
~embed_in_plugin_libraries (exes : Dune_file.Executables.t ) =
110
96
(* 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
138
124
let executable_names =
139
125
List. map exes.names ~f: Module_name. of_string_allow_invalid
140
126
in
127
+ let add_empty_intf = exes.buildable.empty_module_interface_if_absent in
141
128
Modules. map_user_written modules ~f: (fun m ->
142
129
let name = Module. name m in
143
130
let * m = Pp_spec. pp_module_as pp name m in
144
131
let add_empty_intf =
132
+ (add_empty_intf
133
+ ||
145
134
let project = Scope. project scope in
146
135
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)
148
137
&& not (Module. has m ~ml_kind: Intf )
149
138
in
150
139
if add_empty_intf then
151
- with_empty_intf ~sctx ~dir m
140
+ Module_compilation. with_empty_intf ~sctx ~dir m
152
141
else
153
142
Memo.Build. return m)
154
143
in
0 commit comments