Encapsulate the -and- separator in lib_deps

Signed-off-by: Rudi Grinberg <rudi.grinberg@gmail.com>
This commit is contained in:
Rudi Grinberg 2018-09-03 05:54:18 +04:00
parent 0ebad2d50f
commit 5bd510543d
4 changed files with 28 additions and 27 deletions

View File

@ -16,7 +16,7 @@ module Includes = struct
let cmi_includes =
Arg_spec.S [ iflags
; Hidden_deps
(Lib_deps.L.file_deps sctx libs ~ext:".cmi")
(Lib_deps.L.file_deps sctx libs ~exts:[".cmi"])
]
in
let cmx_includes =
@ -26,12 +26,12 @@ module Includes = struct
( if opaque then
List.map libs ~f:(fun lib ->
(lib, if Lib.is_local lib then
".cmi"
[".cmi"]
else
".cmi-and-.cmx"))
[".cmi"; ".cmx"]))
|> Lib_deps.L.file_deps_with_exts sctx
else
Lib_deps.L.file_deps sctx libs ~ext:".cmi-and-.cmx"
Lib_deps.L.file_deps sctx libs ~exts:[".cmi"; ".cmx"]
)
]
in

View File

@ -2,33 +2,35 @@ open Stdune
open Dune_file
open Build_system
let lib_files_alias ~dir ~name ~ext =
Alias.make (sprintf "lib-%s%s-all" (Lib_name.to_string name) ext) ~dir
let string_of_exts = String.concat ~sep:"-and-"
let setup_file_deps_alias t ~dir ~ext lib files =
let lib_files_alias ~dir ~name ~exts =
Alias.make (sprintf "lib-%s%s-all"
(Lib_name.to_string name) (string_of_exts exts)) ~dir
let setup_file_deps_alias t ~dir ~exts lib files =
Super_context.add_alias_deps t
(lib_files_alias ~dir ~name:(Library.best_name lib) ~ext) files
(lib_files_alias ~dir ~name:(Library.best_name lib) ~exts) files
let setup_file_deps_group_alias t ~dir ~exts lib =
setup_file_deps_alias t lib ~dir
~ext:(String.concat exts ~sep:"-and-")
setup_file_deps_alias t lib ~dir ~exts
(List.map exts ~f:(fun ext ->
Alias.stamp_file
(lib_files_alias ~dir ~name:(Library.best_name lib) ~ext))
(lib_files_alias ~dir ~name:(Library.best_name lib) ~exts:[ext]))
|> Path.Set.of_list)
module L = struct
let file_deps_of_lib t (lib : Lib.t) ~ext =
let file_deps_of_lib t (lib : Lib.t) ~exts =
if Lib.is_local lib then
Alias.stamp_file
(lib_files_alias ~dir:(Lib.src_dir lib) ~name:(Lib.name lib) ~ext)
(lib_files_alias ~dir:(Lib.src_dir lib) ~name:(Lib.name lib) ~exts)
else
Build_system.stamp_file_for_files_of (Super_context.build_system t)
~dir:(Lib.obj_dir lib) ~ext
~dir:(Lib.obj_dir lib) ~ext:(string_of_exts exts)
let file_deps_with_exts t lib_exts =
List.rev_map lib_exts ~f:(fun (lib, ext) -> file_deps_of_lib t lib ~ext)
List.rev_map lib_exts ~f:(fun (lib, exts) -> file_deps_of_lib t lib ~exts)
let file_deps t libs ~ext =
List.rev_map libs ~f:(file_deps_of_lib t ~ext)
let file_deps t libs ~exts =
List.rev_map libs ~f:(file_deps_of_lib t ~exts)
end

View File

@ -4,26 +4,25 @@ module L : sig
(** [file_deps t libs ~ext] returns a list of path dependencies for all the
files with extension [ext] of libraries [libs]. *)
val file_deps : Super_context.t -> Lib.L.t -> ext:string -> Path.t list
val file_deps : Super_context.t -> Lib.L.t -> exts:string list -> Path.t list
val file_deps_with_exts
: Super_context.t
-> (Lib.t * string) list
-> (Lib.t * string list) list
-> Path.t list
end
(** Setup the alias that depends on all files with a given extension
for a library *)
(** Setup the alias that depends on all files with a given extension for a
library *)
val setup_file_deps_alias
: Super_context.t
-> dir:Path.t
-> ext:string
-> exts:string list
-> Dune_file.Library.t
-> Path.Set.t
-> unit
(** Setup an alias that depend on all files with the given extensions. To depend
on this alias, use [~ext:"ext1-and-ext2-...-extn"] *)
(** Setup an alias that depend on all files with the given extensions.*)
val setup_file_deps_group_alias
: Super_context.t
-> dir:Path.t

View File

@ -273,7 +273,7 @@ module Gen (P : Install_rules.Params) = struct
[ Hidden_deps h_files
; Arg_spec.of_result_map requires ~f:(fun libs ->
S [ Lib.L.c_include_flags libs ~stdlib_dir:ctx.stdlib_dir
; Hidden_deps (Lib_deps.L.file_deps sctx libs ~ext:".h")
; Hidden_deps (Lib_deps.L.file_deps sctx libs ~exts:[".h"])
])
]
in
@ -407,11 +407,11 @@ module Gen (P : Install_rules.Params) = struct
List.iter Cm_kind.all ~f:(fun cm_kind ->
let files = add_cms ~cm_kind ~init:Path.Set.empty modules in
let files = add_cms ~cm_kind ~init:files wrapped_compat in
Lib_deps.setup_file_deps_alias sctx ~dir lib ~ext:(Cm_kind.ext cm_kind)
Lib_deps.setup_file_deps_alias sctx ~dir lib ~exts:[Cm_kind.ext cm_kind]
files);
Lib_deps.setup_file_deps_group_alias sctx ~dir lib ~exts:[".cmi"; ".cmx"];
Lib_deps.setup_file_deps_alias sctx ~dir lib ~ext:".h"
Lib_deps.setup_file_deps_alias sctx ~dir lib ~exts:[".h"]
(List.map lib.install_c_headers ~f:(fun header ->
Path.relative dir (header ^ ".h"))
|> Path.Set.of_list);