Add a map from package names to libraries to super context
Will be used for odoc and installation
This commit is contained in:
parent
bc97444c78
commit
9b5ac4060f
|
@ -44,17 +44,9 @@ module Gen(P : Install_params) = struct
|
||||||
(lib_dune_file ~dir:(Lib.src_dir lib) ~name:(Lib.name lib)))
|
(lib_dune_file ~dir:(Lib.src_dir lib) ~name:(Lib.name lib)))
|
||||||
|
|
||||||
let init_meta () =
|
let init_meta () =
|
||||||
let public_libs = Lib.DB.all (SC.public_libs sctx) in
|
SC.libs_by_package sctx
|
||||||
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))
|
|
||||||
|> Package.Name.Map.iter ~f:(fun ((pkg : Package.t), libs) ->
|
|> 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
|
let path = Path.append ctx.build_dir pkg.path in
|
||||||
SC.on_load_dir sctx ~dir:path ~f:(fun () ->
|
SC.on_load_dir sctx ~dir:path ~f:(fun () ->
|
||||||
let meta_fn = "META." ^ (Package.Name.to_string pkg.name) in
|
let meta_fn = "META." ^ (Package.Name.to_string pkg.name) in
|
||||||
|
@ -97,7 +89,7 @@ module Gen(P : Install_params) = struct
|
||||||
Gen_meta.gen
|
Gen_meta.gen
|
||||||
~package:(Package.Name.to_string pkg.name)
|
~package:(Package.Name.to_string pkg.name)
|
||||||
~version
|
~version
|
||||||
libs
|
(Lib.Set.to_list libs)
|
||||||
in
|
in
|
||||||
SC.add_rule sctx
|
SC.add_rule sctx
|
||||||
(Build.fanout meta_contents template
|
(Build.fanout meta_contents template
|
||||||
|
|
|
@ -29,11 +29,13 @@ type t =
|
||||||
; vars : Action.Var_expansion.t String_map.t
|
; vars : Action.Var_expansion.t String_map.t
|
||||||
; chdir : (Action.t, Action.t) Build.t
|
; chdir : (Action.t, Action.t) Build.t
|
||||||
; host : t option
|
; host : t option
|
||||||
|
; libs_by_package : (Package.t * Lib.Set.t) Package.Name.Map.t
|
||||||
}
|
}
|
||||||
|
|
||||||
let context t = t.context
|
let context t = t.context
|
||||||
let stanzas t = t.stanzas
|
let stanzas t = t.stanzas
|
||||||
let packages t = t.packages
|
let packages t = t.packages
|
||||||
|
let libs_by_package t = t.libs_by_package
|
||||||
let artifacts t = t.artifacts
|
let artifacts t = t.artifacts
|
||||||
let file_tree t = t.file_tree
|
let file_tree t = t.file_tree
|
||||||
let stanzas_to_consider_for_install t = t.stanzas_to_consider_for_install
|
let stanzas_to_consider_for_install t = t.stanzas_to_consider_for_install
|
||||||
|
@ -200,6 +202,16 @@ let create
|
||||||
match action with
|
match action with
|
||||||
| Chdir _ -> action
|
| Chdir _ -> action
|
||||||
| _ -> Chdir (context.build_dir, 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 =
|
let prefix_rules t prefix ~f =
|
||||||
|
|
|
@ -34,6 +34,7 @@ val create
|
||||||
val context : t -> Context.t
|
val context : t -> Context.t
|
||||||
val stanzas : t -> Dir_with_jbuild.t list
|
val stanzas : t -> Dir_with_jbuild.t list
|
||||||
val packages : t -> Package.t Package.Name.Map.t
|
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 file_tree : t -> File_tree.t
|
||||||
val artifacts : t -> Artifacts.t
|
val artifacts : t -> Artifacts.t
|
||||||
val stanzas_to_consider_for_install : t -> (Path.t * Scope.t * Stanza.t) list
|
val stanzas_to_consider_for_install : t -> (Path.t * Scope.t * Stanza.t) list
|
||||||
|
|
Loading…
Reference in New Issue