From 5bd510543deec57967bc762668e199729b20d252 Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Mon, 3 Sep 2018 05:54:18 +0400 Subject: [PATCH] Encapsulate the -and- separator in lib_deps Signed-off-by: Rudi Grinberg --- src/compilation_context.ml | 8 ++++---- src/lib_deps.ml | 28 +++++++++++++++------------- src/lib_deps.mli | 13 ++++++------- src/lib_rules.ml | 6 +++--- 4 files changed, 28 insertions(+), 27 deletions(-) diff --git a/src/compilation_context.ml b/src/compilation_context.ml index b43a293d..d7e40988 100644 --- a/src/compilation_context.ml +++ b/src/compilation_context.ml @@ -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 diff --git a/src/lib_deps.ml b/src/lib_deps.ml index 2e3d2924..0c63f46c 100644 --- a/src/lib_deps.ml +++ b/src/lib_deps.ml @@ -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 diff --git a/src/lib_deps.mli b/src/lib_deps.mli index cfb870fa..811c508d 100644 --- a/src/lib_deps.mli +++ b/src/lib_deps.mli @@ -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 diff --git a/src/lib_rules.ml b/src/lib_rules.ml index bf7f7035..47222e8b 100644 --- a/src/lib_rules.ml +++ b/src/lib_rules.ml @@ -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);