Add a map from package names to libraries to super context

Will be used for odoc and installation
This commit is contained in:
Rudi Grinberg 2018-03-16 13:49:33 +08:00
parent bc97444c78
commit 9b5ac4060f
3 changed files with 16 additions and 11 deletions

View File

@ -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

View File

@ -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 =

View File

@ -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