This commit is contained in:
Jeremie Dimino 2018-02-08 11:01:54 +00:00
parent c33269b914
commit e22dee5f75
3 changed files with 29 additions and 21 deletions

View File

@ -553,14 +553,14 @@ let check_deps_consistency ~required_by ~local_public_libs pkg requires =
; defined_locally_in = path
})))
let closure ~required_by ~local_public_libs pkgs =
let closure pkgs ~required_by ~local_public_libs =
remove_dups_preserve_order
(List.concat_map pkgs ~f:(fun pkg ->
check_deps_consistency ~required_by ~local_public_libs pkg pkg.requires;
pkg.requires)
@ pkgs)
let closed_ppx_runtime_deps_of ~required_by ~local_public_libs pkgs =
let closed_ppx_runtime_deps_of pkgs ~required_by ~local_public_libs =
remove_dups_preserve_order
(List.concat_map pkgs ~f:(fun pkg ->
check_deps_consistency ~required_by ~local_public_libs pkg pkg.ppx_runtime_deps;

View File

@ -85,15 +85,15 @@ val root_package_name : string -> string
(** [local_public_libs] is a map from public library names to where they are defined in
the workspace. These must not appear as dependency of a findlib package *)
val closure
: required_by:With_required_by.Entry.t list
: Package.t list
-> required_by:With_required_by.Entry.t list
-> local_public_libs:Path.t String_map.t
-> Package.t list
-> Package.t list
val closed_ppx_runtime_deps_of
: required_by:With_required_by.Entry.t list
: Package.t list
-> required_by:With_required_by.Entry.t list
-> local_public_libs:Path.t String_map.t
-> Package.t list
-> Package.t list
val root_packages : t -> string list
val all_packages : t -> Package.t list

View File

@ -250,34 +250,42 @@ module Libs = struct
| None -> build
| Some f -> Build.fail f >>> build
let closure' t ~findlib ~load_deps ~scope ~dep_kind lib_deps =
let closure_generic t ~findlib_closure ~load_deps ~scope ~dep_kind lib_deps =
let internals, externals, fail =
Lib_db.Scope.interpret_lib_deps scope lib_deps in
Lib_db.Scope.interpret_lib_deps scope lib_deps
in
with_fail ~fail
(Build.record_lib_deps ~kind:dep_kind lib_deps
>>>
Build.all
(List.map internals ~f:(fun ((dir, lib) : Lib.Internal.t) ->
load_deps t ~dir ~item:lib.name))
>>^ (fun internal_deps ->
let externals =
findlib ~required_by:scope.required_by
~local_public_libs:(local_public_libs t.libs)
externals
|> List.map ~f:(fun pkg -> Lib.External pkg)
in
(internals, List.concat (externals :: internal_deps))))
>>^ fun internal_deps ->
let externals =
findlib_closure externals
~required_by:scope.required_by
~local_public_libs:(local_public_libs t.libs)
|> List.map ~f:(fun pkg -> Lib.External pkg)
in
(internals, List.concat (externals :: internal_deps)))
let closure t ~scope ~dep_kind lib_deps =
closure' t ~load_deps:load_requires ~findlib:Findlib.closure
~scope ~dep_kind lib_deps >>^ fun (internals, deps) ->
closure_generic t lib_deps
~load_deps:load_requires
~findlib_closure:Findlib.closure
~scope
~dep_kind
>>^ fun (internals, deps) ->
Lib.remove_dups_preserve_order
(deps @ List.map internals ~f:(fun x -> Lib.Internal x))
let closed_ppx_runtime_deps_of t ~scope ~dep_kind lib_deps =
closure' t ~load_deps:load_runtime_deps
~findlib:Findlib.closed_ppx_runtime_deps_of
~scope ~dep_kind lib_deps >>^ fun (_, deps) ->
closure_generic t lib_deps
~load_deps:load_runtime_deps
~findlib_closure:Findlib.closed_ppx_runtime_deps_of
~scope
~dep_kind
>>^ fun (_, deps) ->
Lib.remove_dups_preserve_order deps
let add_select_rules t ~dir ~scope lib_deps =