diff --git a/src/install_rules.ml b/src/install_rules.ml index f44af2ec..61ad8b75 100644 --- a/src/install_rules.ml +++ b/src/install_rules.ml @@ -44,17 +44,9 @@ module Gen(P : Install_params) = struct (lib_dune_file ~dir:(Lib.src_dir lib) ~name:(Lib.name lib))) let init_meta () = - let public_libs = Lib.DB.all (SC.public_libs sctx) in - Lib.Set.iter public_libs ~f:gen_lib_dune_file; - Lib.Set.to_list public_libs - |> List.map ~f:(fun lib -> - (Package.Name.of_string (Findlib.root_package_name (Lib.name lib)), lib)) - |> Package.Name.Map.of_list_multi - |> Package.Name.Map.merge (SC.packages sctx) ~f:(fun _name pkg libs -> - let pkg = Option.value_exn pkg in - let libs = Option.value libs ~default:[] in - Some (pkg, libs)) + SC.libs_by_package sctx |> Package.Name.Map.iter ~f:(fun ((pkg : Package.t), libs) -> + Lib.Set.iter libs ~f:gen_lib_dune_file; let path = Path.append ctx.build_dir pkg.path in SC.on_load_dir sctx ~dir:path ~f:(fun () -> let meta_fn = "META." ^ (Package.Name.to_string pkg.name) in @@ -97,7 +89,7 @@ module Gen(P : Install_params) = struct Gen_meta.gen ~package:(Package.Name.to_string pkg.name) ~version - libs + (Lib.Set.to_list libs) in SC.add_rule sctx (Build.fanout meta_contents template diff --git a/src/super_context.ml b/src/super_context.ml index 5f743f27..b10c6b1e 100644 --- a/src/super_context.ml +++ b/src/super_context.ml @@ -29,11 +29,13 @@ type t = ; vars : Action.Var_expansion.t String_map.t ; chdir : (Action.t, Action.t) Build.t ; host : t option + ; libs_by_package : (Package.t * Lib.Set.t) Package.Name.Map.t } let context t = t.context let stanzas t = t.stanzas let packages t = t.packages +let libs_by_package t = t.libs_by_package let artifacts t = t.artifacts let file_tree t = t.file_tree let stanzas_to_consider_for_install t = t.stanzas_to_consider_for_install @@ -200,6 +202,16 @@ let create match action with | Chdir _ -> action | _ -> Chdir (context.build_dir, action)) + ; libs_by_package = + Lib.DB.all public_libs + |> Lib.Set.to_list + |> List.map ~f:(fun lib -> + (Option.value_exn (Lib.package lib), lib)) + |> Package.Name.Map.of_list_multi + |> Package.Name.Map.merge packages ~f:(fun _name pkg libs -> + let pkg = Option.value_exn pkg in + let libs = Option.value libs ~default:[] in + Some (pkg, Lib.Set.of_list libs)) } let prefix_rules t prefix ~f = diff --git a/src/super_context.mli b/src/super_context.mli index 7426546c..9921587c 100644 --- a/src/super_context.mli +++ b/src/super_context.mli @@ -34,6 +34,7 @@ val create val context : t -> Context.t val stanzas : t -> Dir_with_jbuild.t list val packages : t -> Package.t Package.Name.Map.t +val libs_by_package : t -> (Package.t * Lib.Set.t) Package.Name.Map.t val file_tree : t -> File_tree.t val artifacts : t -> Artifacts.t val stanzas_to_consider_for_install : t -> (Path.t * Scope.t * Stanza.t) list