diff --git a/src/dune_pkg/local_package.ml b/src/dune_pkg/local_package.ml index 03bd4b8a4a0..52ffc7f2541 100644 --- a/src/dune_pkg/local_package.ml +++ b/src/dune_pkg/local_package.ml @@ -8,6 +8,7 @@ type t = ; dependencies : Package_dependency.t list ; conflicts : Package_dependency.t list ; conflict_class : Package_name.t list + ; depopts : Package_dependency.t list ; loc : Loc.t } @@ -76,10 +77,11 @@ module For_solver = struct { name : Package_name.t ; dependencies : Package_dependency.t list ; conflicts : Package_dependency.t list + ; depopts : Package_dependency.t list ; conflict_class : Package_name.t list } - let to_opam_file { name; dependencies; conflicts; conflict_class } = + let to_opam_file { name; dependencies; conflicts; conflict_class; depopts } = OpamFile.OPAM.empty |> OpamFile.OPAM.with_name (Package_name.to_opam_package_name name) |> OpamFile.OPAM.with_depends @@ -88,6 +90,8 @@ module For_solver = struct (Package_dependency.list_to_opam_filtered_formula conflicts) |> OpamFile.OPAM.with_conflict_class (List.map conflict_class ~f:Package_name.to_opam_package_name) + |> OpamFile.OPAM.with_depopts + (Package_dependency.list_to_opam_filtered_formula depopts) ;; let opam_filtered_dependency_formula { dependencies; _ } = @@ -103,6 +107,8 @@ module For_solver = struct ;; end -let for_solver { name; version = _; dependencies; conflicts; conflict_class; loc = _ } = - { For_solver.name; dependencies; conflicts; conflict_class } +let for_solver + { name; version = _; dependencies; conflicts; conflict_class; loc = _; depopts } + = + { For_solver.name; dependencies; conflicts; conflict_class; depopts } ;; diff --git a/src/dune_pkg/local_package.mli b/src/dune_pkg/local_package.mli index 7974dae9e22..5481686271d 100644 --- a/src/dune_pkg/local_package.mli +++ b/src/dune_pkg/local_package.mli @@ -13,6 +13,7 @@ type t = ; dependencies : Package_dependency.t list ; conflicts : Package_dependency.t list ; conflict_class : Package_name.t list + ; depopts : Package_dependency.t list ; loc : Loc.t } @@ -51,6 +52,7 @@ module For_solver : sig { name : Package_name.t ; dependencies : Package_dependency.t list ; conflicts : Package_dependency.t list + ; depopts : Package_dependency.t list ; conflict_class : Package_name.t list } diff --git a/src/dune_rules/package.ml b/src/dune_rules/package.ml index 2c741c23c0f..aa79db9a7e3 100644 --- a/src/dune_rules/package.ml +++ b/src/dune_rules/package.ml @@ -657,6 +657,7 @@ let to_local_package t = ; version = t.version ; dependencies = t.depends ; conflicts = t.conflicts + ; depopts = t.depopts ; loc = t.loc ; conflict_class = [] }