From d4c9eb6ba0c7abd8ed3e8b48b8c20529c15ee6ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=A9mie=20Dimino?= Date: Tue, 6 Feb 2018 11:49:44 +0000 Subject: [PATCH] Do not pass -I (#488) --- CHANGES.md | 3 +++ src/gen_rules.ml | 3 ++- src/lib.ml | 11 ++++++----- src/lib.mli | 7 +++---- src/module_compilation.ml | 2 +- src/odoc.ml | 3 ++- src/super_context.ml | 2 +- src/utop.ml | 6 +++++- 8 files changed, 23 insertions(+), 14 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 31a28c57..22c24fec 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -5,6 +5,9 @@ next `library`/`executables` stanza. Now it is called once per file (#486) +- Make sure to not pass `-I ` to the compiler. It is + useless and it causes problems in some cases (#488) + 1.0+beta17 (01/02/2018) ----------------------- diff --git a/src/gen_rules.ml b/src/gen_rules.ml index 13e43b56..48b6db3f 100644 --- a/src/gen_rules.ml +++ b/src/gen_rules.ml @@ -708,7 +708,8 @@ Add it to your jbuild file to remove this warning. [ Dyn (fun (_, flags,_) -> As flags) ; A "-o"; Target exe ; Dyn (fun (_, _, link_flags) -> As (link_custom @ link_flags)) - ; Dyn (fun ((libs, _), _, _) -> Lib.link_flags libs ~mode) + ; Dyn (fun ((libs, _), _, _) -> Lib.link_flags libs ~mode + ~stdlib_dir:ctx.stdlib_dir) ; Dyn (fun ((_, cm_files), _, _) -> Deps cm_files) ]); if mode = Mode.Byte then diff --git a/src/lib.ml b/src/lib.ml index 51ea3e30..ffdf37ea 100644 --- a/src/lib.ml +++ b/src/lib.ml @@ -23,12 +23,13 @@ let dir = function | Internal (dir, _) -> dir | External pkg -> pkg.dir -let include_paths ts = +let include_paths ts ~stdlib_dir = List.fold_left ts ~init:Path.Set.empty ~f:(fun acc t -> Path.Set.add (dir t) acc) + |> Path.Set.remove stdlib_dir -let include_flags ts = - let dirs = include_paths ts in +let include_flags ts ~stdlib_dir = + let dirs = include_paths ts ~stdlib_dir in Arg_spec.S (List.concat_map (Path.Set.elements dirs) ~f:(fun dir -> [Arg_spec.A "-I"; Path dir])) @@ -49,9 +50,9 @@ let describe = function | External pkg -> sprintf "%s (external)" pkg.name -let link_flags ts ~mode = +let link_flags ts ~mode ~stdlib_dir = Arg_spec.S - (include_flags ts :: + (include_flags ts ~stdlib_dir :: List.map ts ~f:(fun t -> match t with | External pkg -> diff --git a/src/lib.mli b/src/lib.mli index 8f1dc0cb..7e527d23 100644 --- a/src/lib.mli +++ b/src/lib.mli @@ -12,13 +12,12 @@ module Set : Set.S with type elt := t (*val deps : t -> string list*) -val include_paths : t list -> Path.Set.t - -val include_flags : t list -> _ Arg_spec.t +val include_paths : t list -> stdlib_dir:Path.t -> Path.Set.t +val include_flags : t list -> stdlib_dir:Path.t -> _ Arg_spec.t val c_include_flags : t list -> _ Arg_spec.t -val link_flags : t list -> mode:Mode.t -> _ Arg_spec.t +val link_flags : t list -> mode:Mode.t -> stdlib_dir:Path.t -> _ Arg_spec.t val archive_files : t list -> mode:Mode.t -> ext_lib:string -> Path.t list diff --git a/src/module_compilation.ml b/src/module_compilation.ml index d9c4f58a..1c467fdc 100644 --- a/src/module_compilation.ml +++ b/src/module_compilation.ml @@ -62,7 +62,7 @@ let build_cm sctx ?sandbox ~dynlink ~flags ~cm_kind ~dep_graphs ~extra_targets [ Dyn (fun (_, ocaml_flags) -> As ocaml_flags) ; cmt_args - ; Dyn (fun (libs, _) -> Lib.include_flags libs) + ; Dyn (fun (libs, _) -> Lib.include_flags libs ~stdlib_dir:ctx.stdlib_dir) ; As extra_args ; if dynlink || cm_kind <> Cmx then As [] else A "-nodynlink" ; A "-no-alias-deps" diff --git a/src/odoc.ml b/src/odoc.ml index 4938fcdb..529fccda 100644 --- a/src/odoc.ml +++ b/src/odoc.ml @@ -164,10 +164,11 @@ let setup_library_rules sctx (lib : Library.t) ~dir ~modules ~mld_files let lib_name = Library.best_name lib in let odoc = get_odoc sctx in let includes = + let ctx = SC.context sctx in Build.memoize "includes" (requires >>> SC.Doc.deps sctx - >>^ Lib.include_flags) + >>^ Lib.include_flags ~stdlib_dir:ctx.stdlib_dir) in let mld_files = all_mld_files sctx ~dir ~lib ~lib_name ~modules mld_files diff --git a/src/super_context.ml b/src/super_context.ml index ff0f1d73..395420e1 100644 --- a/src/super_context.ml +++ b/src/super_context.ml @@ -845,7 +845,7 @@ module PP = struct >>> Build.run ~context:ctx (Ok compiler) [ A "-o" ; Target target - ; Dyn (Lib.link_flags ~mode) + ; Dyn (Lib.link_flags ~mode ~stdlib_dir:ctx.stdlib_dir) ]) let gen_rules sctx components = diff --git a/src/utop.ml b/src/utop.ml index d97156ae..3d603507 100644 --- a/src/utop.ml +++ b/src/utop.ml @@ -23,7 +23,11 @@ let add_module_rules sctx ~dir lib_requires = let utop_ml = lib_requires >>^ (fun libs -> - let include_paths = Path.Set.elements (Lib.include_paths libs) in + let include_paths = + let ctx = Super_context.context sctx in + Path.Set.elements + (Lib.include_paths libs ~stdlib_dir:ctx.stdlib_dir) + in let b = Buffer.create 64 in let fmt = Format.formatter_of_buffer b in pp_ml fmt include_paths;