let run_coqide log w fgoal =
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 = file_for_env w.po_env L_coq in
let model = coqc_for_model ~model:w.po_model in
let args =
match Wp_parameters.Script.get() with
| fscript when Sys.file_exists fscript ->
[| "-I" ; denv ; fgoal; head; env; model; fscript |]
| _ ->
[| "-I" ; denv ; fgoal; head; env; model |]
in
Log.command log "coqide" args ;
Task.command "coqide" args
>>? Log.status log
in
Task.sync coqidelock coqide >>=
fun s ->
if s <> 0 then Task.return Unknown
else
match Proof.parse_coqproof fgoal with
| None ->
Wp_parameters.feedback "No proof found" ;
Task.return Unknown
| Some script ->
Wp_parameters.feedback "Check proof" ;
Coq.coqc log w (Some script) >>=
Task.call
(fun s ->
Proof.add_script gid [] script ;
if s=0 then Valid else Unknown)