@@ -187,16 +187,6 @@ module Error = struct
187
187
]
188
188
, [] )
189
189
190
- let vlib_in_closure ~loc ~impl ~vlib =
191
- let impl = Lib_info. name impl in
192
- let vlib = Lib_info. name vlib in
193
- User_error. make ~loc
194
- [ Pp. textf
195
- " Virtual library %S is used by a dependency of %S. This is not \
196
- allowed."
197
- (Lib_name. to_string vlib) (Lib_name. to_string impl)
198
- ]
199
-
200
190
let only_ppx_deps_allowed ~loc dep =
201
191
let name = Lib_info. name dep in
202
192
make ~loc
@@ -322,9 +312,6 @@ module T = struct
322
312
; sub_systems : Sub_system0.Instance .t Memo.Lazy .t Sub_system_name.Map .t
323
313
; modules : Modules .t Memo.Lazy .t option
324
314
; src_dirs : Path.Set .t Memo.Lazy .t
325
- ; (* all the virtual libraries in the closure. we need this to avoid
326
- introducing impl -> lib -> vlib cycles. *)
327
- vlib_closure : t Id.Map .t Resolve .t
328
315
}
329
316
330
317
let compare (x : t ) (y : t ) = Id. compare x.unique_id y.unique_id
@@ -1130,15 +1117,6 @@ end = struct
1130
1117
|> resolve_deps_and_add_runtime_deps db ~private_deps ~dune_version ~pps
1131
1118
|> Memo.Build. map ~f: Resolve. return
1132
1119
in
1133
- let vlib_closure_parents =
1134
- let open Resolve.O in
1135
- let * resolved = resolved in
1136
- let * requires = resolved.requires in
1137
- Resolve.List. fold_left ~init: Id.Map. empty requires
1138
- ~f: (fun acc (lib : lib ) ->
1139
- let + vlib_closure = lib.vlib_closure in
1140
- Id.Map. superpose acc vlib_closure)
1141
- in
1142
1120
let * implements =
1143
1121
match Lib_info. implements info with
1144
1122
| None -> Memo.Build. return None
@@ -1153,29 +1131,28 @@ end = struct
1153
1131
in
1154
1132
Memo.Build. map res ~f: Option. some
1155
1133
in
1156
- let requires =
1157
- let open Resolve.O in
1134
+ let * requires =
1135
+ let requires =
1136
+ let open Resolve.O in
1137
+ let * resolved = resolved in
1138
+ resolved.requires
1139
+ in
1158
1140
match implements with
1159
- | None -> resolved >> = fun r -> r. requires
1141
+ | None -> Memo.Build. return requires
1160
1142
| Some vlib ->
1161
- let * vlib = vlib in
1162
- let * vlib_closure_parents = vlib_closure_parents in
1163
- if Id.Map. mem vlib_closure_parents vlib.unique_id then
1164
- let loc = Lib_info. loc info in
1165
- Error. vlib_in_closure ~loc ~impl: info ~vlib: vlib.info |> Resolve. fail
1166
- else
1167
- let * resolved = resolved in
1168
- let + requires = resolved.requires in
1169
- List. filter requires ~f: (fun lib -> not (equal lib vlib))
1170
- in
1171
- let vlib_closure =
1172
- let open Resolve.O in
1173
- let * vlib_closure_parents = vlib_closure_parents in
1174
- let + requires = requires in
1175
- List. fold_left requires ~init: vlib_closure_parents ~f: (fun acc lib ->
1176
- match Lib_info. virtual_ lib.info with
1177
- | None -> acc
1178
- | Some _ -> Id.Map. set acc lib.unique_id lib)
1143
+ let open Resolve.Build.O in
1144
+ let * (_ : lib list ) =
1145
+ let * vlib = Memo.Build. return vlib in
1146
+ let * requires_for_closure_check =
1147
+ Memo.Build. return
1148
+ (let open Resolve.O in
1149
+ let + requires = requires in
1150
+ List. filter requires ~f: (fun lib -> not (equal lib vlib)))
1151
+ in
1152
+ linking_closure_with_overlap_checks None requires_for_closure_check
1153
+ ~forbidden_libraries: (Map. singleton vlib Loc. none)
1154
+ in
1155
+ Memo.Build. return requires
1179
1156
in
1180
1157
let resolve_impl impl_name =
1181
1158
let open Resolve.Build.O in
@@ -1299,7 +1276,6 @@ end = struct
1299
1276
~f: (fun name info ->
1300
1277
Memo.Lazy. create (fun () ->
1301
1278
Sub_system. instantiate name info (Lazy. force t) ~resolve ))
1302
- ; vlib_closure
1303
1279
})
1304
1280
in
1305
1281
let t = Lazy. force t in
0 commit comments