let run_coqide log w file =
    Format.printf "run_coqide beg@\n@.";
    let dir = Wp_parameters.get_output() in
    let s = Config.datadir in 
    let framac_dir = Format.sprintf "%s/wp" s 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 Wpo.Coq in 
      let model = file_for_model w.po_model Wpo.Coq in 
      let args = 
        match Wp_parameters.Script.get() with 
          | "" ->
              [|  "-I" ; dir ; "-I" ; framac_dir ; file;head;env;model |]
          | f ->  
              [|  "-I" ; dir ; "-I" ; framac_dir ; file;head;env;model;f |]
      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 file with 
            | None -> 
                Wp_parameters.feedback "No proof found" ;
                Task.return Unknown
            | Some script ->
                Wp_parameters.feedback "Check proof" ;
                Coq.coqc true log w (Some script) >>=
                  Task.call 
                    (fun s ->
                       Proof.new_script gid [] script ;
                       if s=0 then Valid else Unknown)