Skip to content

Commit c0e3bb6

Browse files
authored
refactor(pkg): lazy dependency evaluation (#11395)
Signed-off-by: Rudi Grinberg <[email protected]>
1 parent ab6e68e commit c0e3bb6

File tree

1 file changed

+12
-11
lines changed

1 file changed

+12
-11
lines changed

src/dune_pkg/opam_solver.ml

+12-11
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,7 @@ module Solver = struct
360360
and real_impl =
361361
{ pkg : OpamPackage.t
362362
; conflict_class : OpamPackage.Name.t list
363-
; requires : dependency list
363+
; requires : dependency list Lazy.t
364364
}
365365

366366
and dependency =
@@ -454,7 +454,7 @@ module Solver = struct
454454
let requires _ = function
455455
| Dummy | Reject _ -> []
456456
| VirtualImpl (_, deps) -> deps
457-
| RealImpl impl -> impl.requires
457+
| RealImpl impl -> Lazy.force impl.requires
458458
;;
459459

460460
let conflict_class = function
@@ -565,15 +565,16 @@ module Solver = struct
565565
let pkg = OpamPackage.create role version in
566566
(* Note: we ignore depopts here: see opam/doc/design/depopts-and-features *)
567567
let requires =
568-
let rank = Rank.assign () in
569-
let make_deps importance xform get =
570-
get opam
571-
|> Context.filter_deps context pkg
572-
|> xform
573-
|> list_deps ~importance ~rank
574-
in
575-
make_deps Ensure ensure OpamFile.OPAM.depends
576-
@ make_deps Prevent prevent OpamFile.OPAM.conflicts
568+
lazy
569+
(let rank = Rank.assign () in
570+
let make_deps importance xform get =
571+
get opam
572+
|> Context.filter_deps context pkg
573+
|> xform
574+
|> list_deps ~importance ~rank
575+
in
576+
make_deps Ensure ensure OpamFile.OPAM.depends
577+
@ make_deps Prevent prevent OpamFile.OPAM.conflicts)
577578
in
578579
let conflict_class = OpamFile.OPAM.conflict_class opam in
579580
Some (RealImpl { pkg; requires; conflict_class }))

0 commit comments

Comments
 (0)