Skip to content

Commit

Permalink
revise, and fix duni_deps
Browse files Browse the repository at this point in the history
  • Loading branch information
hannesm committed Aug 8, 2024
1 parent c3c56e8 commit e3a6021
Show file tree
Hide file tree
Showing 3 changed files with 32 additions and 28 deletions.
7 changes: 7 additions & 0 deletions src/common.ml
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
type env_vars = {
os : string option ;
os_distribution : string option ;
os_version : string option ;
os_family : string option ;
arch : string option ;
}
21 changes: 13 additions & 8 deletions src/duni_deps.ml
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,19 @@
the transitive map we need the repository state and use the picked versions
*)

let deps opam =
let deps vars opam =
let depends = OpamFile.OPAM.depends opam in
let env var = match OpamVariable.Full.to_string var with
| "monorepo" | "vendor" -> Some (OpamTypes.B true)
| "build" | "with-test" | "dev" | "with-doc" | "post" -> Some (B false)
| "monorepo" | "vendor" | "post" -> Some (OpamTypes.B true)
| "build" | "with-test" | "dev" | "with-doc" -> Some (B false)
| "os" -> Option.map (fun x -> OpamTypes.S x) vars.Common.os
| "os-family" -> Option.map (fun x -> OpamTypes.S x) vars.Common.os_family
| "os-distribution" -> Option.map (fun x -> OpamTypes.S x) vars.Common.os_distribution
| "os-version" -> Option.map (fun x -> OpamTypes.S x) vars.Common.os_version
| "arch" -> Option.map (fun x -> OpamTypes.S x) vars.Common.arch
| _ -> None
in
OpamFilter.filter_formula ~default:false env depends
OpamFilter.filter_formula env depends

let map_of_formula f =
let v = function
Expand Down Expand Up @@ -56,8 +61,8 @@ let set_of_formula map f =

module M = Map.Make(String)

let build_graph st package opam_lock opam =
let map = map_of_formula (deps opam_lock) in
let build_graph vars st package opam_lock opam =
let map = map_of_formula (deps vars opam_lock) in
let q = Queue.create () in
let rec go acc visited =
match Queue.take_opt q with
Expand All @@ -76,7 +81,7 @@ let build_graph st package opam_lock opam =
let pkg = OpamSwitchState.get_package st name in
OpamSwitchState.opam st pkg
in
let direct_deps = set_of_formula map (deps opam) in
let direct_deps = set_of_formula map (deps vars opam) in
let acc =
M.add (OpamPackage.Name.to_string name)
(List.map OpamPackage.Name.to_string (OpamPackage.Name.Set.elements direct_deps)) acc
Expand All @@ -91,7 +96,7 @@ let build_graph st package opam_lock opam =
end
in
let direct_deps =
let direct_deps = set_of_formula map (deps opam) in
let direct_deps = set_of_formula map (deps vars opam) in
if OpamPackage.Name.(Set.mem (of_string "mirage-solo5") direct_deps) &&
OpamPackage.Name.(Map.mem (of_string "ocaml-solo5") map) then
OpamPackage.Name.(Set.add (of_string "ocaml-solo5") direct_deps)
Expand Down
32 changes: 12 additions & 20 deletions src/orb.ml
Original file line number Diff line number Diff line change
Expand Up @@ -77,24 +77,16 @@ let custom_env_keys = [
"OS" ; "OS_DISTRIBUTION" ; "OS_VERSION" ; "OS_FAMILY" ; "SWITCH_PATH" ; "ORB_DATA"
]

type env_vars = {
os : string option ;
os_distribution : string option ;
os_version : string option ;
os_family : string option ;
arch : string option ;
}

let retrieve_opam_vars gt_vars = {
os = OpamSysPoll.os gt_vars ;
Common.os = OpamSysPoll.os gt_vars ;
os_distribution = OpamSysPoll.os_distribution gt_vars ;
os_version = OpamSysPoll.os_version gt_vars ;
os_family = OpamSysPoll.os_family gt_vars ;
arch = OpamSysPoll.arch gt_vars ;
}

let custom_env vars s = [
"OS", vars.os;
"OS", vars.Common.os;
"OS_DISTRIBUTION", vars.os_distribution;
"OS_VERSION", vars.os_version;
"OS_FAMILY", vars.os_family;
Expand Down Expand Up @@ -194,8 +186,8 @@ let cleanup () =
let gt_vars =
OpamGlobalState.with_ `Lock_none (fun { OpamStateTypes.global_variables; _ } -> global_variables)
in
let vars = retrieve_opam_vars gt_vars in
output_system_packages_and_env ~skip_system ~os:vars.os ~os_family:vars.os_family dir (create_env vars sw);
let env_vars = retrieve_opam_vars gt_vars in
output_system_packages_and_env ~skip_system ~os:env_vars.os ~os_family:env_vars.os_family dir (create_env env_vars sw);
export switch dir;
remove_switch switch;
OpamFilename.rmdir
Expand Down Expand Up @@ -761,7 +753,7 @@ let repos_of_opam =
Ok (List.rev data)
| _ -> Error (`Msg "expected a list")

let modify_opam_file st package opam dirname =
let modify_opam_file vars st package opam dirname =
match OpamFile.OPAM.extended opam mirage_opam_lock location_of_opam with
| None -> Ok st
| Some Error `Msg s -> Error ("error retrieving opam-lock-location " ^ s);
Expand All @@ -776,7 +768,7 @@ let modify_opam_file st package opam dirname =
let opam = OpamFile.OPAM.add_extension opam opam_monorepo_duni v in
let opam =
try
let deps = Duni_deps.build_graph st package opam_lock opam in
let deps = Duni_deps.build_graph vars st package opam_lock opam in
let deps = Duni_deps.deps_opam v.pos deps in
OpamFile.OPAM.add_extension opam orb_deps deps
with
Expand Down Expand Up @@ -841,6 +833,10 @@ let build global_options disable_sandboxing build_options twice
OpamGlobalState.with_ `Lock_none @@ fun gt ->
OpamRepositoryState.with_ `Lock_none gt @@ fun rt ->
OpamSwitchState.with_ `Lock_write ~rt ~switch gt @@ fun st ->
let env_vars =
let gt_vars = gt.OpamStateTypes.global_variables in
retrieve_opam_vars gt_vars
in
let package, atom =
match latest, atom with
| false, (name, None) ->
Expand Down Expand Up @@ -903,7 +899,7 @@ let build global_options disable_sandboxing build_options twice
OpamRepositoryState.with_ `Lock_none gt @@ fun rt ->
OpamSwitchState.with_ `Lock_write ~rt ~switch gt @@ fun st ->
let st =
match modify_opam_file st package opam dirname with
match modify_opam_file env_vars st package opam dirname with
| Ok st -> st
| Error msg -> log "%s" msg; exit 1
in
Expand Down Expand Up @@ -934,11 +930,7 @@ let build global_options disable_sandboxing build_options twice
else None
in
if OpamClientConfig.(!r.keep_build_dir) then begin
let gt_vars =
OpamGlobalState.with_ `Lock_none (fun { OpamStateTypes.global_variables; _ } -> global_variables)
in
let vars = retrieve_opam_vars gt_vars in
output_system_packages_and_env ~skip_system ~os:vars.os ~os_family:vars.os_family bidir (create_env vars sw);
output_system_packages_and_env ~skip_system ~os:env_vars.os ~os_family:env_vars.os_family bidir (create_env env_vars sw);
export switch bidir;
end;
cleanup ();
Expand Down

0 comments on commit e3a6021

Please # to comment.