From e47987a670b65ee7e8fad5650b65b5e4474c1409 Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Sun, 2 Sep 2018 15:16:39 +0400 Subject: [PATCH 1/4] Move library glob handling to own module Signed-off-by: Rudi Grinberg --- src/compilation_context.ml | 6 +++--- src/lib_deps.ml | 32 ++++++++++++++++++++++++++++++++ src/lib_deps.mli | 29 +++++++++++++++++++++++++++++ src/lib_rules.ml | 13 ++++++++----- src/super_context.ml | 31 +------------------------------ src/super_context.mli | 27 --------------------------- 6 files changed, 73 insertions(+), 65 deletions(-) create mode 100644 src/lib_deps.ml create mode 100644 src/lib_deps.mli diff --git a/src/compilation_context.ml b/src/compilation_context.ml index d71550a8..2d302478 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 - (SC.Libs.file_deps sctx libs ~ext:".cmi") + (Lib_deps.file_deps sctx libs ~ext:".cmi") ] in let cmx_includes = @@ -29,9 +29,9 @@ module Includes = struct ".cmi" else ".cmi-and-.cmx")) - |> SC.Libs.file_deps_with_exts sctx + |> Lib_deps.file_deps_with_exts sctx else - SC.Libs.file_deps sctx libs ~ext:".cmi-and-.cmx" + Lib_deps.file_deps sctx libs ~ext:".cmi-and-.cmx" ) ] in diff --git a/src/lib_deps.ml b/src/lib_deps.ml new file mode 100644 index 00000000..22803dcd --- /dev/null +++ b/src/lib_deps.ml @@ -0,0 +1,32 @@ +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 setup_file_deps_alias t ~dir ~ext lib files = + Super_context.add_alias_deps t + (lib_files_alias ~dir ~name:(Library.best_name lib) ~ext) files + +let setup_file_deps_group_alias t ~dir ~exts lib = + setup_file_deps_alias t lib ~dir + ~ext:(String.concat exts ~sep:"-and-") + (List.map exts ~f:(fun ext -> + Alias.stamp_file + (lib_files_alias ~dir ~name:(Library.best_name lib) ~ext)) + |> Path.Set.of_list) + +let file_deps_of_lib t (lib : Lib.t) ~ext = + if Lib.is_local lib then + Alias.stamp_file + (lib_files_alias ~dir:(Lib.src_dir lib) ~name:(Lib.name lib) ~ext) + else + Build_system.stamp_file_for_files_of (Super_context.build_system t) + ~dir:(Lib.obj_dir lib) ~ext + +let file_deps_with_exts t lib_exts = + List.rev_map lib_exts ~f:(fun (lib, ext) -> file_deps_of_lib t lib ~ext) + +let file_deps t libs ~ext = + List.rev_map libs ~f:(file_deps_of_lib t ~ext) diff --git a/src/lib_deps.mli b/src/lib_deps.mli new file mode 100644 index 00000000..88a420e4 --- /dev/null +++ b/src/lib_deps.mli @@ -0,0 +1,29 @@ +open Stdune + +(** [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_with_exts + : Super_context.t + -> (Lib.t * string) list + -> Path.t list + +(** 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 + -> 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"] *) +val setup_file_deps_group_alias + : Super_context.t + -> dir:Path.t + -> exts:string list + -> Dune_file.Library.t + -> unit diff --git a/src/lib_rules.ml b/src/lib_rules.ml index a63da496..8e2efa06 100644 --- a/src/lib_rules.ml +++ b/src/lib_rules.ml @@ -1,9 +1,12 @@ open! Stdune open Import open Build.O -open Dune_file open! No_io +module Buildable = Dune_file.Buildable +module Library = Dune_file.Library +module Mode_conf = Dune_file.Mode_conf + module SC = Super_context module Gen (P : Install_rules.Params) = struct @@ -270,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 (SC.Libs.file_deps sctx libs ~ext:".h") + ; Hidden_deps (Lib_deps.file_deps sctx libs ~ext:".h") ]) ] in @@ -404,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 - SC.Libs.setup_file_deps_alias sctx ~dir lib ~ext:(Cm_kind.ext cm_kind) + Lib_deps.setup_file_deps_alias sctx ~dir lib ~ext:(Cm_kind.ext cm_kind) files); - SC.Libs.setup_file_deps_group_alias sctx ~dir lib ~exts:[".cmi"; ".cmx"]; - SC.Libs.setup_file_deps_alias sctx ~dir lib ~ext:".h" + Lib_deps.setup_file_deps_group_alias sctx ~dir lib ~exts:[".cmi"; ".cmx"]; + Lib_deps.setup_file_deps_alias sctx ~dir lib ~ext:".h" (List.map lib.install_c_headers ~f:(fun header -> Path.relative dir (header ^ ".h")) |> Path.Set.of_list); diff --git a/src/super_context.ml b/src/super_context.ml index 37e21b7b..30a60948 100644 --- a/src/super_context.ml +++ b/src/super_context.ml @@ -679,7 +679,7 @@ module Libs = struct let with_lib_deps t compile_info ~dir ~f = let prefix = Build.record_lib_deps - (Lib_deps.info + (Dune_file.Lib_deps.info (Lib.Compile.user_written_deps compile_info) ~kind:(if Lib.Compile.optional compile_info then Optional @@ -695,35 +695,6 @@ module Libs = struct prefix in prefix_rules t prefix ~f - - let lib_files_alias ~dir ~name ~ext = - Alias.make (sprintf "lib-%s%s-all" (Lib_name.to_string name) ext) ~dir - - let setup_file_deps_alias t ~dir ~ext lib files = - add_alias_deps t - (lib_files_alias ~dir ~name:(Library.best_name lib) ~ext) files - - let setup_file_deps_group_alias t ~dir ~exts lib = - setup_file_deps_alias t lib ~dir - ~ext:(String.concat exts ~sep:"-and-") - (List.map exts ~f:(fun ext -> - Alias.stamp_file - (lib_files_alias ~dir ~name:(Library.best_name lib) ~ext)) - |> Path.Set.of_list) - - let file_deps_of_lib t (lib : Lib.t) ~ext = - if Lib.is_local lib then - Alias.stamp_file - (lib_files_alias ~dir:(Lib.src_dir lib) ~name:(Lib.name lib) ~ext) - else - Build_system.stamp_file_for_files_of t.build_system - ~dir:(Lib.obj_dir lib) ~ext - - let file_deps_with_exts t lib_exts = - List.rev_map lib_exts ~f:(fun (lib, ext) -> file_deps_of_lib t lib ~ext) - - let file_deps t libs ~ext = - List.rev_map libs ~f:(file_deps_of_lib t ~ext) end module Deps = struct diff --git a/src/super_context.mli b/src/super_context.mli index d05824d4..4ea2a1b7 100644 --- a/src/super_context.mli +++ b/src/super_context.mli @@ -195,33 +195,6 @@ module Libs : sig (** Generate the rules for the [(select ...)] forms in library dependencies *) val gen_select_rules : t -> dir:Path.t -> Lib.Compile.t -> unit - - (** [file_deps t libs ~ext] returns a list of path dependencies for - all the files with extension [ext] of libraries [libs]. *) - val file_deps : t -> Lib.L.t -> ext:string -> Path.t list - - val file_deps_with_exts : t -> (Lib.t * string) list -> Path.t list - - (** Setup the alias that depends on all files with a given extension - for a library *) - val setup_file_deps_alias - : t - -> dir:Path.t - -> ext:string - -> 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"] - *) - val setup_file_deps_group_alias - : t - -> dir:Path.t - -> exts:string list - -> Library.t - -> unit end (** Interpret dependencies written in jbuild files *) From 0ebad2d50f27a6f32589830b2d5dc05796726968 Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Sun, 2 Sep 2018 16:18:11 +0400 Subject: [PATCH 2/4] Move functions that operate on more than 1 module to Lib_deps.L Signed-off-by: Rudi Grinberg --- src/compilation_context.ml | 6 +++--- src/lib_deps.ml | 24 +++++++++++++----------- src/lib_deps.mli | 17 ++++++++++------- src/lib_rules.ml | 2 +- 4 files changed, 27 insertions(+), 22 deletions(-) diff --git a/src/compilation_context.ml b/src/compilation_context.ml index 2d302478..b43a293d 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.file_deps sctx libs ~ext:".cmi") + (Lib_deps.L.file_deps sctx libs ~ext:".cmi") ] in let cmx_includes = @@ -29,9 +29,9 @@ module Includes = struct ".cmi" else ".cmi-and-.cmx")) - |> Lib_deps.file_deps_with_exts sctx + |> Lib_deps.L.file_deps_with_exts sctx else - Lib_deps.file_deps sctx libs ~ext:".cmi-and-.cmx" + Lib_deps.L.file_deps sctx libs ~ext:".cmi-and-.cmx" ) ] in diff --git a/src/lib_deps.ml b/src/lib_deps.ml index 22803dcd..2e3d2924 100644 --- a/src/lib_deps.ml +++ b/src/lib_deps.ml @@ -17,16 +17,18 @@ let setup_file_deps_group_alias t ~dir ~exts lib = (lib_files_alias ~dir ~name:(Library.best_name lib) ~ext)) |> Path.Set.of_list) -let file_deps_of_lib t (lib : Lib.t) ~ext = - if Lib.is_local lib then - Alias.stamp_file - (lib_files_alias ~dir:(Lib.src_dir lib) ~name:(Lib.name lib) ~ext) - else - Build_system.stamp_file_for_files_of (Super_context.build_system t) - ~dir:(Lib.obj_dir lib) ~ext +module L = struct + let file_deps_of_lib t (lib : Lib.t) ~ext = + if Lib.is_local lib then + Alias.stamp_file + (lib_files_alias ~dir:(Lib.src_dir lib) ~name:(Lib.name lib) ~ext) + else + Build_system.stamp_file_for_files_of (Super_context.build_system t) + ~dir:(Lib.obj_dir lib) ~ext -let file_deps_with_exts t lib_exts = - List.rev_map lib_exts ~f:(fun (lib, ext) -> file_deps_of_lib t lib ~ext) + let file_deps_with_exts t lib_exts = + List.rev_map lib_exts ~f:(fun (lib, ext) -> file_deps_of_lib t lib ~ext) -let file_deps t libs ~ext = - List.rev_map libs ~f:(file_deps_of_lib t ~ext) + let file_deps t libs ~ext = + List.rev_map libs ~f:(file_deps_of_lib t ~ext) +end diff --git a/src/lib_deps.mli b/src/lib_deps.mli index 88a420e4..cfb870fa 100644 --- a/src/lib_deps.mli +++ b/src/lib_deps.mli @@ -1,13 +1,16 @@ open Stdune -(** [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 +module L : sig -val file_deps_with_exts - : Super_context.t - -> (Lib.t * string) list - -> Path.t list + (** [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_with_exts + : Super_context.t + -> (Lib.t * string) list + -> Path.t list +end (** Setup the alias that depends on all files with a given extension for a library *) diff --git a/src/lib_rules.ml b/src/lib_rules.ml index 8e2efa06..bf7f7035 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.file_deps sctx libs ~ext:".h") + ; Hidden_deps (Lib_deps.L.file_deps sctx libs ~ext:".h") ]) ] in From 5bd510543deec57967bc762668e199729b20d252 Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Mon, 3 Sep 2018 05:54:18 +0400 Subject: [PATCH 3/4] 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); From baf8852e4cbc833a36ca1d1b919dd08944e2d4d6 Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Mon, 3 Sep 2018 16:13:15 +0400 Subject: [PATCH 4/4] Rename Lib_deps to Lib_file_deps Signed-off-by: Rudi Grinberg --- src/compilation_context.ml | 6 +++--- src/{lib_deps.ml => lib_file_deps.ml} | 0 src/{lib_deps.mli => lib_file_deps.mli} | 0 src/lib_rules.ml | 8 ++++---- 4 files changed, 7 insertions(+), 7 deletions(-) rename src/{lib_deps.ml => lib_file_deps.ml} (100%) rename src/{lib_deps.mli => lib_file_deps.mli} (100%) diff --git a/src/compilation_context.ml b/src/compilation_context.ml index d7e40988..501ac2ca 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 ~exts:[".cmi"]) + (Lib_file_deps.L.file_deps sctx libs ~exts:[".cmi"]) ] in let cmx_includes = @@ -29,9 +29,9 @@ module Includes = struct [".cmi"] else [".cmi"; ".cmx"])) - |> Lib_deps.L.file_deps_with_exts sctx + |> Lib_file_deps.L.file_deps_with_exts sctx else - Lib_deps.L.file_deps sctx libs ~exts:[".cmi"; ".cmx"] + Lib_file_deps.L.file_deps sctx libs ~exts:[".cmi"; ".cmx"] ) ] in diff --git a/src/lib_deps.ml b/src/lib_file_deps.ml similarity index 100% rename from src/lib_deps.ml rename to src/lib_file_deps.ml diff --git a/src/lib_deps.mli b/src/lib_file_deps.mli similarity index 100% rename from src/lib_deps.mli rename to src/lib_file_deps.mli diff --git a/src/lib_rules.ml b/src/lib_rules.ml index 47222e8b..4e37eae8 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 ~exts:[".h"]) + ; Hidden_deps (Lib_file_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 ~exts:[Cm_kind.ext cm_kind] + Lib_file_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 ~exts:[".h"] + Lib_file_deps.setup_file_deps_group_alias sctx ~dir lib ~exts:[".cmi"; ".cmx"]; + Lib_file_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);