From 208f034530d51c9eceae9fd1d0b1aec8b9568745 Mon Sep 17 00:00:00 2001
From: Michele Alberti <michele.alberti@cea.fr>
Date: Thu, 9 Mar 2023 10:38:45 +0100
Subject: [PATCH] Several updates following the new Why3 (version 1.6.0) API
 changes.

Fix issue #26.
---
 .ocamlformat        |  2 +-
 caisar.opam         |  2 +-
 dune-project        |  2 +-
 src/AIMOS.ml        |  6 ++----
 src/SAVer.ml        |  6 ++----
 src/verification.ml | 23 +++++++++++++----------
 6 files changed, 20 insertions(+), 21 deletions(-)

diff --git a/.ocamlformat b/.ocamlformat
index f4273f4..f99ed8e 100644
--- a/.ocamlformat
+++ b/.ocamlformat
@@ -1,4 +1,4 @@
-version=0.23.0
+version=0.25.1
 exp-grouping=parens
 if-then-else=keyword-first
 max-indent=2
diff --git a/caisar.opam b/caisar.opam
index 1057e0b..6747b51 100644
--- a/caisar.opam
+++ b/caisar.opam
@@ -29,7 +29,7 @@ depends: [
   "menhirLib" {>= "20210310"}
   "ppx_deriving_yojson" {>= "3.6.1"}
   "csv" {>= "2.4"}
-  "why3" {= "1.5.1"}
+  "why3" {>= "1.6.0"}
   "re" {>= "1.10.4"}
   "caisar-nnet" {= version}
   "caisar-ovo" {= version}
diff --git a/dune-project b/dune-project
index e72f7f9..1776737 100644
--- a/dune-project
+++ b/dune-project
@@ -82,7 +82,7 @@
    (menhirLib (>= 20210310))
    (ppx_deriving_yojson (>= 3.6.1))
    (csv (>= 2.4))
-   (why3 (= 1.5.1))
+   (why3 (>= 1.6.0))
    (re (>= 1.10.4))
    (caisar-nnet (= :version))
    (caisar-ovo (= :version))
diff --git a/src/AIMOS.ml b/src/AIMOS.ml
index 1588dd3..50d2caf 100644
--- a/src/AIMOS.ml
+++ b/src/AIMOS.ml
@@ -74,10 +74,8 @@ let call_prover limit config config_prover
         prp_model_parser = Model_parser.lookup_model_parser "no_model";
       }
     in
-    Call_provers.call_on_buffer ~libdir:(Whyconf.libdir config)
-      ~datadir:(Whyconf.datadir config) ~command ~limit ~res_parser
-      ~filename:" " ~get_counterexmp:false ~gen_new_file:false
-      ~printing_info:Printer.default_printing_info (Buffer.create 10)
+    Call_provers.call_on_buffer ~command ~config ~limit ~res_parser
+      ~filename:" " ~get_model:None ~gen_new_file:false (Buffer.create 10)
   in
   let prover_result = Call_provers.wait_on_call prover_call in
   build_answer predicate.property prover_result
diff --git a/src/SAVer.ml b/src/SAVer.ml
index 40511c6..c86a8b1 100644
--- a/src/SAVer.ml
+++ b/src/SAVer.ml
@@ -131,10 +131,8 @@ let call_prover limit config config_prover predicate =
         prp_model_parser = Model_parser.lookup_model_parser "no_model";
       }
     in
-    Call_provers.call_on_buffer ~libdir:(Whyconf.libdir config)
-      ~datadir:(Whyconf.datadir config) ~command ~limit ~res_parser
-      ~filename:" " ~get_counterexmp:false ~gen_new_file:false
-      ~printing_info:Printer.default_printing_info (Buffer.create 10)
+    Call_provers.call_on_buffer ~command ~config ~limit ~res_parser
+      ~filename:" " ~get_model:None ~gen_new_file:false (Buffer.create 10)
   in
   let prover_result = Call_provers.wait_on_call prover_call in
   build_answer predicate.property prover_result
diff --git a/src/verification.ml b/src/verification.ml
index 1f9a37d..8fe43e4 100644
--- a/src/verification.ml
+++ b/src/verification.ml
@@ -78,7 +78,7 @@ let create_env ?(debug = false) loadpath =
   let config = Autodetect.autodetection ~debug () in
   let config =
     let main = Whyconf.get_main config in
-    let dft_timelimit = 20 (* 20 seconds *) in
+    let dft_timelimit = 20.0 (* 20 seconds *) in
     let dft_memlimit = 4000 (* 4 GB *) in
     let main =
       Whyconf.(
@@ -163,8 +163,7 @@ let nnet_or_onnx = Re__Core.(compile (str "%{nnet-onnx}"))
 
 let call_prover_on_task limit config command driver task =
   let prover_call =
-    Driver.prove_task_prepared ~libdir:(Whyconf.libdir config)
-      ~datadir:(Whyconf.datadir config) ~command ~limit driver task
+    Driver.prove_task_prepared ~command ~config ~limit driver task
   in
   let prover_result = Call_provers.wait_on_call prover_call in
   prover_result.pr_answer
@@ -282,7 +281,10 @@ let verify ?(debug = false) ?format ~loadpath ?memlimit ?timelimit ?dataset
   let main = Whyconf.get_main config in
   let limit =
     let memlimit = Option.value memlimit ~default:(Whyconf.memlimit main) in
-    let timelimit = Option.value timelimit ~default:(Whyconf.timelimit main) in
+    let timelimit =
+      Option.value_map timelimit ~f:Float.of_int
+        ~default:(Whyconf.timelimit main)
+    in
     let def = Call_provers.empty_limit in
     {
       Call_provers.limit_time = timelimit;
@@ -318,27 +320,28 @@ let verify ?(debug = false) ?format ~loadpath ?memlimit ?timelimit ?dataset
       invalid_arg
         (Fmt.str "No prover corresponds to %s%a" prover
            (if String.equal altern ""
-           then Fmt.nop
-           else Fmt.(any " " ++ parens string))
+            then Fmt.nop
+            else Fmt.(any " " ++ parens string))
            altern)
     | Whyconf.ProverAmbiguity _ ->
       invalid_arg
         (Fmt.str "More than one prover correspond to %s%a" prover
            (if String.equal altern ""
-           then Fmt.nop
-           else Fmt.(any " " ++ parens string))
+            then Fmt.nop
+            else Fmt.(any " " ++ parens string))
            altern)
   in
   let driver =
     match String.chop_prefix ~prefix:"caisar_drivers/" config_prover.driver with
-    | None -> Whyconf.(load_driver (get_main config) env config_prover)
+    | None -> Driver.load_driver_for_prover main env config_prover
     | Some file ->
       let file =
         Filename.concat
           (Filename.concat (List.hd_exn Dirs.Sites.config) "drivers")
           file
       in
-      Driver.load_driver_absolute env file config_prover.extra_drivers
+      Driver.load_driver_file_and_extras main env file
+        config_prover.extra_drivers
   in
   Wstdlib.Mstr.map
     (fun theory ->
-- 
GitLab