Merge pull request #627 from rgrinberg/pkg-lib-map
Add a map from package names to libraries to super context
This commit is contained in:
commit
8f967dbca5
|
@ -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
|
||||
|
|
|
@ -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 =
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue