Quote a few paths in error messages when necessary
This commit is contained in:
parent
52afe84c83
commit
aed36a76dd
|
@ -475,6 +475,16 @@ let hint name candidates =
|
||||||
in
|
in
|
||||||
sprintf "\nHint: did you mean %s?" (mk_hint l)
|
sprintf "\nHint: did you mean %s?" (mk_hint l)
|
||||||
|
|
||||||
|
|
||||||
|
(* [maybe_quoted s] is [s] if [s] doesn't need escaping according to OCaml lexing
|
||||||
|
conventions and [sprintf "%S" s] otherwise. *)
|
||||||
|
let maybe_quoted s =
|
||||||
|
let escaped = String.escaped s in
|
||||||
|
if s == escaped || s = escaped then
|
||||||
|
s
|
||||||
|
else
|
||||||
|
sprintf {|"%s"|} escaped
|
||||||
|
|
||||||
(* Disable file operations to force to use the IO module *)
|
(* Disable file operations to force to use the IO module *)
|
||||||
let open_in = `Use_Io
|
let open_in = `Use_Io
|
||||||
let open_in_bin = `Use_Io
|
let open_in_bin = `Use_Io
|
||||||
|
|
|
@ -238,6 +238,9 @@ let to_string = function
|
||||||
| "" -> "."
|
| "" -> "."
|
||||||
| t -> t
|
| t -> t
|
||||||
|
|
||||||
|
let to_string_maybe_quoted t =
|
||||||
|
maybe_quoted (to_string t)
|
||||||
|
|
||||||
let root = ""
|
let root = ""
|
||||||
|
|
||||||
let relative t fn =
|
let relative t fn =
|
||||||
|
|
|
@ -46,6 +46,9 @@ val kind : t -> Kind.t
|
||||||
val of_string : string -> t
|
val of_string : string -> t
|
||||||
val to_string : t -> string
|
val to_string : t -> string
|
||||||
|
|
||||||
|
(** [to_string_maybe_quoted t] is [maybe_quoted (to_string t)] *)
|
||||||
|
val to_string_maybe_quoted : t -> string
|
||||||
|
|
||||||
val root : t
|
val root : t
|
||||||
val is_root : t -> bool
|
val is_root : t -> bool
|
||||||
|
|
||||||
|
|
|
@ -413,13 +413,13 @@ module Deps = struct
|
||||||
>>^ fun _ -> []
|
>>^ fun _ -> []
|
||||||
| Glob_files s -> begin
|
| Glob_files s -> begin
|
||||||
let path = Path.relative dir (expand_vars t ~scope ~dir s) in
|
let path = Path.relative dir (expand_vars t ~scope ~dir s) in
|
||||||
let dir = Path.parent path in
|
match Glob_lexer.parse_string (Path.basename path) with
|
||||||
let s = Path.basename path in
|
|
||||||
match Glob_lexer.parse_string s with
|
|
||||||
| Ok re ->
|
| Ok re ->
|
||||||
|
let dir = Path.parent path in
|
||||||
Build.paths_glob ~dir (Re.compile re)
|
Build.paths_glob ~dir (Re.compile re)
|
||||||
| Error (_pos, msg) ->
|
| Error (_pos, msg) ->
|
||||||
die "invalid glob in %s/jbuild: %s" (Path.to_string dir) msg
|
let loc = String_with_vars.loc s in
|
||||||
|
Loc.fail loc "invalid glob: %s" msg
|
||||||
end
|
end
|
||||||
| Files_recursively_in s ->
|
| Files_recursively_in s ->
|
||||||
let path = Path.relative dir (expand_vars t ~scope ~dir s) in
|
let path = Path.relative dir (expand_vars t ~scope ~dir s) in
|
||||||
|
|
18
src/utils.ml
18
src/utils.ml
|
@ -67,10 +67,10 @@ let signal_name =
|
||||||
let jbuild_name_in ~dir =
|
let jbuild_name_in ~dir =
|
||||||
match Path.extract_build_context dir with
|
match Path.extract_build_context dir with
|
||||||
| None ->
|
| None ->
|
||||||
Path.to_string (Path.relative dir "jbuild")
|
Path.to_string_maybe_quoted (Path.relative dir "jbuild")
|
||||||
| Some (ctx_name, dir) ->
|
| Some (ctx_name, dir) ->
|
||||||
sprintf "%s (context %s)"
|
sprintf "%s (context %s)"
|
||||||
(Path.to_string (Path.relative dir "jbuild"))
|
(Path.to_string_maybe_quoted (Path.relative dir "jbuild"))
|
||||||
ctx_name
|
ctx_name
|
||||||
|
|
||||||
let describe_target fn =
|
let describe_target fn =
|
||||||
|
@ -84,12 +84,12 @@ let describe_target fn =
|
||||||
assert (String.length digest = 32);
|
assert (String.length digest = 32);
|
||||||
name
|
name
|
||||||
in
|
in
|
||||||
sprintf "alias %s" name
|
sprintf "alias %s" (maybe_quoted name)
|
||||||
| _ ->
|
| _ ->
|
||||||
Path.to_string fn
|
Path.to_string_maybe_quoted fn
|
||||||
|
|
||||||
let program_not_found ?context ?(in_the_tree=false) ?hint prog =
|
let program_not_found ?context ?(in_the_tree=false) ?hint prog =
|
||||||
die "@{<error>Error@}: Program %s not found in%s PATH%s%a" prog
|
die "@{<error>Error@}: Program %s not found in%s PATH%s%a" (maybe_quoted prog)
|
||||||
(if in_the_tree then
|
(if in_the_tree then
|
||||||
" the tree or in"
|
" the tree or in"
|
||||||
else
|
else
|
||||||
|
@ -103,7 +103,7 @@ let program_not_found ?context ?(in_the_tree=false) ?hint prog =
|
||||||
hint
|
hint
|
||||||
|
|
||||||
let library_not_found ?context ?hint lib =
|
let library_not_found ?context ?hint lib =
|
||||||
die "@{<error>Error@}: Library %s not found%s%a" lib
|
die "@{<error>Error@}: Library %s not found%s%a" (maybe_quoted lib)
|
||||||
(match context with
|
(match context with
|
||||||
| None -> ""
|
| None -> ""
|
||||||
| Some name -> sprintf " (context: %s)" name)
|
| Some name -> sprintf " (context: %s)" name)
|
||||||
|
@ -122,12 +122,14 @@ let find_module ~dir modules name =
|
||||||
String_map.find_exn name modules
|
String_map.find_exn name modules
|
||||||
~string_of_key:(sprintf "%S")
|
~string_of_key:(sprintf "%S")
|
||||||
~desc:(fun _ ->
|
~desc:(fun _ ->
|
||||||
sprintf "<module name to module info in %s>" (Path.to_string dir))
|
sprintf "<module name to module info in %s>"
|
||||||
|
(Path.to_string_maybe_quoted dir))
|
||||||
|
|
||||||
let find_deps ~dir dep_graph name =
|
let find_deps ~dir dep_graph name =
|
||||||
String_map.find_exn name dep_graph
|
String_map.find_exn name dep_graph
|
||||||
~string_of_key:(sprintf "%S")
|
~string_of_key:(sprintf "%S")
|
||||||
~desc:(fun _ -> sprintf "<dependency graph in %s>" (Path.to_string dir))
|
~desc:(fun _ -> sprintf "<dependency graph in %s>"
|
||||||
|
(Path.to_string_maybe_quoted dir))
|
||||||
|
|
||||||
let obj_name_of_basename fn =
|
let obj_name_of_basename fn =
|
||||||
match String.index fn '.' with
|
match String.index fn '.' with
|
||||||
|
|
Loading…
Reference in New Issue