From c8976261ded274e12ac15f2fa8ca656c4752b96c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Loi=CC=88c=20Correnson?= <loic.correnson@cea.fr>
Date: Thu, 18 Jan 2024 11:03:29 +0100
Subject: [PATCH] [wp] server activity detection (gui mode)

---
 src/plugins/wp/Cache.ml          |  3 ++-
 src/plugins/wp/register.ml       |  4 ++--
 src/plugins/wp/wp_parameters.ml  | 16 ++++++++--------
 src/plugins/wp/wp_parameters.mli |  1 +
 4 files changed, 13 insertions(+), 11 deletions(-)

diff --git a/src/plugins/wp/Cache.ml b/src/plugins/wp/Cache.ml
index 5e7988978a2..13abb8a0a55 100644
--- a/src/plugins/wp/Cache.ml
+++ b/src/plugins/wp/Cache.ml
@@ -37,7 +37,8 @@ let get_miss () = !miss
 let get_removed () = !removed
 
 let mark_cache ~mode hash =
-  if mode = Cleanup || Fc_config.is_gui then Hashtbl.replace cleanup hash ()
+  if mode = Cleanup || Wp_parameters.is_interactive () then
+    Hashtbl.replace cleanup hash ()
 
 module CACHEDIR = WpContext.StaticGenerator(Datatype.Unit)
     (struct
diff --git a/src/plugins/wp/register.ml b/src/plugins/wp/register.ml
index f34d944f7d8..da4a68995e9 100644
--- a/src/plugins/wp/register.ml
+++ b/src/plugins/wp/register.ml
@@ -389,7 +389,7 @@ let do_wpo_success ~shell ~cache goal success =
       Wp_parameters.feedback ~ontty:`Silent
         "[Generated] Goal %s (%a)" (Wpo.get_gid goal) VCS.pp_prover prover
   else
-    let gui = Frama_c_very_first.Gui_init.is_gui in
+    let gui = Wp_parameters.is_interactive () in
     let smoke = Wpo.is_smoke_test goal in
     let cstats = ProofEngine.consolidated ~computing:false goal in
     let success = Wpo.is_passed goal in
@@ -874,7 +874,7 @@ let () = Cmdline.run_after_setting_files
 let () = Cmdline.run_after_configuring_stage Why3Provers.configure
 
 let do_prover_detect () =
-  if not Fc_config.is_gui && Wp_parameters.Detect.get () then
+  if Wp_parameters.Detect.get () && not @@ Wp_parameters.is_interactive () then
     let provers = Why3Provers.provers () in
     if provers = [] then
       Wp_parameters.result "No Why3 provers detected."
diff --git a/src/plugins/wp/wp_parameters.ml b/src/plugins/wp/wp_parameters.ml
index fa160ed4b0a..4ee4f2b30c9 100644
--- a/src/plugins/wp/wp_parameters.ml
+++ b/src/plugins/wp/wp_parameters.ml
@@ -45,6 +45,10 @@ let on_reset f = resetdemon := f :: !resetdemon
 let reset () = List.iter (fun f -> f ()) !resetdemon
 let has_dkey (k:category) = is_debug_key_enabled k
 
+let server = ref false
+let () = Server.Main.once (fun () -> server := true)
+let is_interactive () = Fc_config.is_gui || !server
+
 (* ------------------------------------------------------------------------ *)
 (* ---  WP Generation                                                   --- *)
 (* ------------------------------------------------------------------------ *)
@@ -1206,17 +1210,13 @@ let base_output () =
     let output =
       let dir = OutputDir.get () in
       if Fc_Filepath.Normalized.is_empty dir then
-        if Fc_config.is_gui
+        if is_interactive ()
         then make_gui_dir ()
         else make_tmp_dir ()
-      else begin
-        make_output_dir dir ;
-        dir
-      end
-    in
+      else
+        ( make_output_dir dir ; dir ) in
     base_output := Some output;
-    Fc_Filepath.(add_symbolic_dir "WPOUT" output) ;
-    output
+    Fc_Filepath.add_symbolic_dir "WPOUT" output ; output
   | Some output -> output
 
 let get_output () =
diff --git a/src/plugins/wp/wp_parameters.mli b/src/plugins/wp/wp_parameters.mli
index ee692cfe9f0..d67f4b9cff3 100644
--- a/src/plugins/wp/wp_parameters.mli
+++ b/src/plugins/wp/wp_parameters.mli
@@ -24,6 +24,7 @@ include Plugin.S
 
 val reset : unit -> unit
 val hypothesis : 'a Log.pretty_printer
+val is_interactive : unit -> bool
 
 (** {2 Function Selection} *)
 
-- 
GitLab