- | Sys.Break ->
- HLog.error "user break!";
- pp_times fname bench_mode false big_bang;
- if mode = `COMPILER then
- clean_exit (Some ~-1)
- else
- pp_ocaml_mode ()
- | GrafiteEngine.Drop ->
- if mode = `COMPILER then
- begin
- pp_times fname bench_mode false big_bang;
- clean_exit (Some 1)
- end
- else
- pp_ocaml_mode ()
- | GrafiteEngine.Macro (floc,_) ->
- let x, y = HExtlib.loc_of_floc floc in
- HLog.error
- (sprintf "A macro has been found in a script at %d-%d" x y);
- if mode = `COMPILER then
- begin
- pp_times fname bench_mode false big_bang;
- clean_exit (Some 1)
- end
- else
- pp_ocaml_mode ()
- | HExtlib.Localized (floc,CicNotationParser.Parse_error err) ->
- let (x, y) = HExtlib.loc_of_floc floc in
- HLog.error (sprintf "Parse error at %d-%d: %s" x y err);
- if mode = `COMPILER then
- begin
- pp_times fname bench_mode false big_bang;
- clean_exit (Some 1)
- end
- else
- pp_ocaml_mode ()
- | exn ->
- if matita_debug then raise exn;
- if mode = `COMPILER then
- begin
- pp_times fname bench_mode false big_bang;
- clean_exit (Some 3)
- end
- else
- pp_ocaml_mode ()
+ (* all exceptions should be wrapped to allow lexicon-undo (LS.time_travel) *)
+ | AttemptToInsertAnAlias lexicon_status ->
+ pp_times fname false big_bang big_bang_u big_bang_s;
+ LexiconSync.time_travel
+ ~present:lexicon_status ~past:initial_lexicon_status;
+ clean_exit baseuri false
+ | MatitaEngine.EnrichedWithLexiconStatus (exn, lex_stat) as exn' ->
+ (match exn with
+ | Sys.Break -> HLog.error "user break!"
+ | HExtlib.Localized (floc,CicNotationParser.Parse_error err) ->
+ let (x, y) = HExtlib.loc_of_floc floc in
+ HLog.error (sprintf "Parse error at %d-%d: %s" x y err)
+ | exn when matita_debug -> raise exn'
+ | exn -> HLog.error (snd (MatitaExcPp.to_string exn)));
+ LexiconSync.time_travel ~present:lex_stat ~past:initial_lexicon_status;
+ pp_times fname false big_bang big_bang_u big_bang_s;
+ clean_exit baseuri false
+ | Sys.Break when not matita_debug ->
+ HLog.error "user break!";
+ pp_times fname false big_bang big_bang_u big_bang_s;
+ clean_exit baseuri false
+ | exn when not matita_debug ->
+ HLog.error
+ ("Unwrapped exception, please fix: "^ snd (MatitaExcPp.to_string exn));
+ pp_times fname false big_bang big_bang_u big_bang_s;
+ clean_exit baseuri false
+
+module F =
+ struct
+ type source_object = string
+ type target_object = string
+ let string_of_source_object s = s;;
+ let string_of_target_object s = s;;
+
+ let is_readonly_buri_of opts file =
+ let buri = List.assoc "baseuri" opts in
+ Http_getter_storage.is_read_only (Librarian.mk_baseuri buri file)
+
+ let root_and_target_of opts mafile =
+ try
+ let include_paths = get_include_paths opts in
+ let root,baseuri,_,_ =
+ Librarian.baseuri_of_script ~include_paths mafile
+ in
+ let obj =
+ if Filename.check_suffix mafile ".mma" then
+ Filename.chop_suffix mafile ".mma" ^ ".ma"
+ else
+ LibraryMisc.obj_file_of_baseuri
+ ~must_exist:false ~baseuri ~writable:true
+ in
+ Some root, obj
+ with Librarian.NoRootFor x -> None, ""
+
+ let mtime_of_source_object s =
+ try Some (Unix.stat s).Unix.st_mtime
+ with Unix.Unix_error (Unix.ENOENT, "stat", f) when f = s -> None
+
+ let mtime_of_target_object s =
+ try Some (Unix.stat s).Unix.st_mtime
+ with Unix.Unix_error (Unix.ENOENT, "stat", f) when f = s -> None
+
+ let build options fname =
+ if Filename.check_suffix fname ".mma" then
+ let generated = Filename.chop_suffix fname ".mma" ^ ".ma" in
+ let atexit = dump generated in
+ let res = compile options fname in
+ let r = atexit res in
+ if r then r else begin
+ Sys.remove generated;
+ Printf.printf "rm %s\n" generated; flush stdout; r
+ end
+ else
+ compile options fname
+
+ let load_deps_file = Librarian.load_deps_file
+
+ end
+
+module Make = Librarian.Make(F)