diff --git a/src/dune_rules/link_time_code_gen.ml b/src/dune_rules/link_time_code_gen.ml index f6ec31b2b13..fb0ca65ef4f 100644 --- a/src/dune_rules/link_time_code_gen.ml +++ b/src/dune_rules/link_time_code_gen.ml @@ -138,17 +138,11 @@ let build_info_code cctx ~libs ~api_version = | Installed_private | Installed -> Memo.return ("None", placeholders) | Public (_, p) -> version_of_package placeholders p | Private _ -> - let p = - Lib.info lib |> Lib_info.obj_dir |> Obj_dir.dir - |> Path.drop_build_context_exn - in - placeholder placeholders p) + Lib.info lib |> Lib_info.obj_dir |> Obj_dir.dir + |> Path.drop_build_context_exn |> placeholder placeholders) in ((Lib.name lib, v) :: libs, placeholders)) in - let libs = List.rev libs in - let context = Compilation_context.context cctx in - let ocaml_version = Ocaml.Version.of_ocaml_config context.ocaml_config in let buf = Buffer.create 1024 in (* Parse the replacement format described in [artifact_substitution.ml]. *) pr buf @@ -167,6 +161,8 @@ let build_info_code cctx ~libs ~api_version = [@@inline never] |ocaml}; let fmt_eval : _ format6 = + let context = Compilation_context.context cctx in + let ocaml_version = Ocaml.Version.of_ocaml_config context.ocaml_config in if Ocaml.Version.has_sys_opaque_identity ocaml_version then "let %s = eval (Sys.opaque_identity %S)" else "let %s = eval %S" @@ -177,7 +173,7 @@ let build_info_code cctx ~libs ~api_version = if not (Path.Source.Map.is_empty placeholders) then pr buf ""; pr buf "let version = %s" version; pr buf ""; - prlist buf "statically_linked_libraries" libs ~f:(fun (name, v) -> + prlist buf "statically_linked_libraries" (List.rev libs) ~f:(fun (name, v) -> pr buf "%S, %s" (Lib_name.to_string name) v); Buffer.contents buf @@ -222,8 +218,10 @@ let handle_special_libs cctx = let ( let& ) m f = Resolve.Memo.bind m ~f in let& all_libs = Compilation_context.requires_link cctx in let obj_dir = Compilation_context.obj_dir cctx |> Obj_dir.of_local in - let sctx = Compilation_context.super_context cctx in - let ctx = Super_context.context sctx in + let ctx = + let sctx = Compilation_context.super_context cctx in + Super_context.context sctx + in let open Memo.O in let* builtins = let+ findlib = @@ -247,7 +245,8 @@ let handle_special_libs cctx = ~obj_name:None ~code: (Action_builder.of_memo - (build_info_code cctx ~libs:all_libs ~api_version)) + (let* () = Memo.return () in + build_info_code cctx ~libs:all_libs ~api_version)) ~requires:(Resolve.Memo.return [ lib ]) ~precompiled_cmi:true in @@ -276,10 +275,10 @@ let handle_special_libs cctx = in generate_and_compile_module ~obj_name cctx ~lib ~name ~code: - (Action_builder.return - (findlib_init_code - ~preds:Findlib.findlib_predicates_set_by_dune - ~libs:all_libs)) + (Action_builder.delayed (fun () -> + findlib_init_code + ~preds:Findlib.findlib_predicates_set_by_dune + ~libs:all_libs)) ~requires ~precompiled_cmi:false in process_libs libs @@ -290,10 +289,9 @@ let handle_special_libs cctx = process_libs libs ~to_link_rev:(Lib lib :: to_link_rev) ~force_linkall | Dune_site { data_module; plugins } -> let code = - if plugins then - Action_builder.return - (dune_site_plugins_code ~libs:all_libs ~builtins) - else Action_builder.return (dune_site_code ()) + Action_builder.delayed @@ fun () -> + if plugins then dune_site_plugins_code ~libs:all_libs ~builtins + else dune_site_code () in let& module_ = generate_and_compile_module cctx ~obj_name:None ~name:data_module