let run_coqide logs w proof =
let denv = Wp_parameters.get_output() in
let gid = w.po_gid in
let coqide () =
let head = Wpo.file_for_head gid in
let env = Wpo.file_for_env w.po_env L_coq in
let model = Wpo.coqc_for_model ~model:w.po_model in
let dshare = Wp_parameters.get_share() in
let wp_share = Format.sprintf "%s/wp.v" dshare in
let args =
match Wp_parameters.Script.get() with
| fscript when Sys.file_exists fscript ->
[| "-I" ; denv ; proof; head; env; model; wp_share; fscript |]
| _ ->
[| "-I" ; denv ; proof; head; env; model; wp_share |]
in
Logs.command logs "coqide" args ;
Task.command "coqide" args
>>? Logs.log_status logs
in
Task.sync coqidelock coqide >>=
fun s ->
if s <> 0 then Task.return Unknown
else
match Proof.parse_coqproof proof with
| None ->
Wp_parameters.feedback "No proof found" ;
Task.return Unknown
| Some script ->
Wp_parameters.feedback "Check proof" ;
Coq.coqc logs w (Some script) >>=
Task.call
(fun s ->
Proof.add_script gid [] script ;
if s=0 then Valid else Unknown)