From a70382a6dde42f8aa9d25b995c6761998c79e393 Mon Sep 17 00:00:00 2001
From: Erwan Jahier <erwan.jahier@univ-grenoble-alpes.fr>
Date: Wed, 25 Jan 2023 10:54:28 +0100
Subject: [PATCH] feat: try to build the .cmxs (via make) in case of a dynlink
 error

---
 lib/sasacore/simuState.ml | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/lib/sasacore/simuState.ml b/lib/sasacore/simuState.ml
index eaa88394..aaa67170 100644
--- a/lib/sasacore/simuState.ml
+++ b/lib/sasacore/simuState.ml
@@ -1,4 +1,4 @@
-(* Time-stamp: <modified the 19/01/2023 (at 11:08) by Erwan Jahier> *)
+(* Time-stamp: <modified the 25/01/2023 (at 10:47) by Erwan Jahier> *)
 
 open Register
 open Topology
@@ -179,7 +179,7 @@ let (env_rif_decl: SasArg.t -> 'v Process.t list -> string) =
       (List.map (fun (base, tstr) -> Printf.sprintf "\"%s\":%s" base tstr) ssl)
 
 
-let (make : bool -> string array -> 'v t) =
+let rec (make : bool -> string array -> 'v t) =
   fun dynlink argv ->
   let args =
     try SasArg.parse argv;
@@ -335,10 +335,14 @@ let (make : bool -> string array -> 'v t) =
     }
   with
   | Dynlink.Error e ->
-    Printf.eprintf " [sasa] Error when dynlinking (Sasacore.make): %s\n%!"
-      (Dynlink.error_message e);
-    flush_all();
-    exit 2
+    let res = Sys.command (Printf.sprintf "make %s.cmxs"(Filename.remove_extension args.topo)) in
+    if res = 0 then make dynlink argv else (
+      Printf.eprintf " [sasa] %s\n%!"
+        (Dynlink.error_message e);
+      Printf.eprintf " [sasa] It looks like you didn't compile your Ocaml algorithm.\n%!";
+      flush_all();
+      exit res
+    )
   | e ->
     Printf.eprintf " [sasa] Error (Sasacore.make): %s\n%!" (Printexc.to_string e);
     flush_all();
-- 
GitLab