From e09bbfcd6ec01ebece0e2f39ba6b97ee979837f9 Mon Sep 17 00:00:00 2001 From: Rudi Grinberg Date: Thu, 2 Aug 2018 09:15:01 +0200 Subject: [PATCH] Fix opaque calculation for includes Signed-off-by: Rudi Grinberg --- src/compilation_context.ml | 23 ++++++++++++++--------- src/lib.ml | 2 ++ src/lib.mli | 2 ++ src/super_context.ml | 9 +++++++++ src/super_context.mli | 2 ++ 5 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/compilation_context.ml b/src/compilation_context.ml index 7916fc57..cba8669a 100644 --- a/src/compilation_context.ml +++ b/src/compilation_context.ml @@ -5,7 +5,7 @@ module SC = Super_context module Includes = struct type t = string list Arg_spec.t Cm_kind.Dict.t - let make sctx ~opaque ~requires : _ Cm_kind.Dict.t = + let make sctx ~requires : _ Cm_kind.Dict.t = match requires with | Error exn -> Cm_kind.Dict.make_all (Arg_spec.Dyn (fun _ -> raise exn)) | Ok libs -> @@ -19,13 +19,18 @@ module Includes = struct ] in let cmx_includes = - if opaque then - cmi_includes - else - Arg_spec.S [ iflags - ; Hidden_deps - (SC.Libs.file_deps sctx libs ~ext:".cmi-and-.cmx") - ] + Arg_spec.S + [ iflags + ; Hidden_deps + ( libs + |> List.map ~f:(fun lib -> + (lib, if Lib.opaque lib then + ".cmi" + else + ".cmi-and-.cmx")) + |> SC.Libs.file_deps_with_exts sctx + ) + ] in { cmi = cmi_includes ; cmo = cmi_includes @@ -84,7 +89,7 @@ let create ~super_context ~scope ~dir ?(dir_kind=File_tree.Dune_file.Kind.Dune) ; lib_interface_module ; flags ; requires - ; includes = Includes.make super_context ~requires ~opaque + ; includes = Includes.make super_context ~requires ; preprocessing ; no_keep_locs ; opaque diff --git a/src/lib.ml b/src/lib.ml index 1e046f65..c24c6163 100644 --- a/src/lib.ml +++ b/src/lib.ml @@ -338,6 +338,8 @@ let plugins t = t.info.plugins let jsoo_runtime t = t.info.jsoo_runtime let unique_id t = t.unique_id +let opaque t = t.info.opaque + let dune_version t = t.info.dune_version let src_dir t = t.info.src_dir diff --git a/src/lib.mli b/src/lib.mli index f9b68a7d..401028f6 100644 --- a/src/lib.mli +++ b/src/lib.mli @@ -26,6 +26,8 @@ val archives : t -> Path.t list Mode.Dict.t val plugins : t -> Path.t list Mode.Dict.t val jsoo_runtime : t -> Path.t list +val opaque : t -> bool + val dune_version : t -> Syntax.Version.t option (** A unique integer identifier. It is only unique for the duration of diff --git a/src/super_context.ml b/src/super_context.ml index 3e088c2c..bf67fadf 100644 --- a/src/super_context.ml +++ b/src/super_context.ml @@ -708,6 +708,15 @@ module Libs = struct (lib_files_alias ~dir ~name:(Library.best_name lib) ~ext)) |> Path.Set.of_list) + let file_deps_with_exts t lib_exts = + List.rev_map lib_exts ~f:(fun ((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 t libs ~ext = List.rev_map libs ~f:(fun (lib : Lib.t) -> if Lib.is_local lib then diff --git a/src/super_context.mli b/src/super_context.mli index cc6a85e4..2cd05396 100644 --- a/src/super_context.mli +++ b/src/super_context.mli @@ -197,6 +197,8 @@ module Libs : sig 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