diff options
| author | Alasdair Armstrong | 2018-03-15 15:53:36 +0000 |
|---|---|---|
| committer | Alasdair Armstrong | 2018-03-15 16:02:43 +0000 |
| commit | e3e597feb532c71e0db32eb9abbebb9f51314d6d (patch) | |
| tree | 90a35080f43281477de67bb26e80768c5bf1de6c /src | |
| parent | 860034499374a4791371c3a2176497f45b2621a0 (diff) | |
Sail now exits with code 1 when OCaml fails to compile generated code
Fixes #11
Diffstat (limited to 'src')
| -rw-r--r-- | src/ocaml_backend.ml | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/src/ocaml_backend.ml b/src/ocaml_backend.ml index c580b9fa..34039080 100644 --- a/src/ocaml_backend.ml +++ b/src/ocaml_backend.ml @@ -669,6 +669,19 @@ let ocaml_main spec sail_dir = let ocaml_pp_defs f defs = ToChannel.pretty 1. 80 f (ocaml_defs defs) +let system_checked str = + match Unix.system str with + | Unix.WEXITED 0 -> () + | Unix.WEXITED n -> + prerr_endline (str ^ " terminated with code " ^ string_of_int n); + exit 1 + | Unix.WSIGNALED _ -> + prerr_endline (str ^ " was killed by a signal"); + exit 1 + | Unix.WSTOPPED _ -> + prerr_endline (str ^ " was stopped by a signal"); + exit 1 + let ocaml_compile spec defs = let sail_dir = try Sys.getenv "SAIL_DIR" with @@ -690,11 +703,10 @@ let ocaml_compile spec defs = let out_chan = open_out "main.ml" in output_string out_chan (ocaml_main spec sail_dir); close_out out_chan; - let _ = Unix.system "ocamlbuild -use-ocamlfind main.native" in + system_checked "ocamlbuild -use-ocamlfind main.native"; let _ = Unix.system ("cp main.native " ^ cwd ^ "/" ^ spec) in () end else - let _ = Unix.system ("ocamlbuild -use-ocamlfind " ^ spec ^ ".cmo") in - (); + system_checked ("ocamlbuild -use-ocamlfind " ^ spec ^ ".cmo"); Unix.chdir cwd |
