aboutsummaryrefslogtreecommitdiffhomepage
path: root/tools
diff options
context:
space:
mode:
authorGravatar Enrico Tassi <Enrico.Tassi@inria.fr>2017-07-19 12:55:39 +0200
committerGravatar Enrico Tassi <Enrico.Tassi@inria.fr>2017-07-20 15:44:13 +0200
commitecf880d0c50f7be9ab80893ae1fcc6714b3a2309 (patch)
tree1e1ce1849a8251c19415cffb21eb52f5d8581626 /tools
parent2c5cc812d37da3f03abe3a0fb8029d1c74ad7b82 (diff)
fake_ide: do as coqide to find out coqtop path
Diffstat (limited to 'tools')
-rw-r--r--tools/fake_ide.ml20
1 files changed, 16 insertions, 4 deletions
diff --git a/tools/fake_ide.ml b/tools/fake_ide.ml
index 258633d29..a9da27ba2 100644
--- a/tools/fake_ide.ml
+++ b/tools/fake_ide.ml
@@ -297,12 +297,24 @@ let main =
(Sys.Signal_handle
(fun _ -> prerr_endline "Broken Pipe (coqtop died ?)"; exit 1));
let def_args = ["--xml_format=Ppcmds"; "-ideslave"] in
- let coqtop_name, coqtop_args, input_file = match Sys.argv with
- | [| _; f |] -> (if Sys.os_type = "Unix" then "coqtop" else "coqtop.exe"),
- Array.of_list def_args, f
+ let coqtop_name = (* from ide/ideutils.ml *)
+ let prog_name = "fake_ide" in
+ let len_prog_name = String.length prog_name in
+ let fake_ide_path = Sys.executable_name in
+ let fake_ide_path_len = String.length fake_ide_path in
+ let pos = fake_ide_path_len - len_prog_name in
+ let rex = Str.regexp_string prog_name in
+ try
+ let i = Str.search_backward rex fake_ide_path pos in
+ String.sub fake_ide_path 0 i ^ "coqtop" ^
+ String.sub fake_ide_path (i + len_prog_name)
+ (fake_ide_path_len - i - len_prog_name)
+ with Not_found -> assert false in
+ let coqtop_args, input_file = match Sys.argv with
+ | [| _; f |] -> Array.of_list def_args, f
| [| _; f; ct |] ->
let ct = Str.split (Str.regexp " ") ct in
- List.hd ct, Array.of_list (def_args @ List.tl ct), f
+ Array.of_list (def_args @ ct), f
| _ -> usage () in
let inc = if input_file = "-" then stdin else open_in input_file in
let coq =