X-Git-Url: http://matita.cs.unibo.it/gitweb/?a=blobdiff_plain;f=helm%2Fsoftware%2Fmatita%2Fmatitac.ml;h=83ab74439129e005717d987083b8bdbbb9b2a908;hb=9935a5bf5bdc98ad01a2b0234cf4e612a62c939f;hp=179a0ba8e8e508e413f22958cef5c20cc1039fbc;hpb=d610284a6341b4a7b10d8ba59fcfb00b38d402c6;p=helm.git diff --git a/helm/software/matita/matitac.ml b/helm/software/matita/matitac.ml index 179a0ba8e..83ab74439 100644 --- a/helm/software/matita/matitac.ml +++ b/helm/software/matita/matitac.ml @@ -25,86 +25,52 @@ (* $Id$ *) -module G = GrafiteAst -module L = LexiconAst -module H = HExtlib +(* compiler ala pascal/java using make *) +let main_compiler () = + MatitaInit.initialize_all (); + (* targets and deps *) + let targets = Helm_registry.get_list Helm_registry.string "matita.args" in + let target, root = + match targets with + | [] -> + (match Librarian.find_roots_in_dir (Sys.getcwd ()) with + | [x] -> [], Filename.dirname x + | [] -> + prerr_endline "No targets and no root found"; exit 1 + | roots -> + let roots = List.map (HExtlib.chop_prefix (Sys.getcwd()^"/")) roots in + prerr_endline ("Too many roots found:\n\t" ^ String.concat "\n\t" roots); + prerr_endline ("\nEnter one of these directories and retry"); + exit 1); + | hds -> + let roots_and_targets = + List.map (fun (root, buri, file, target) -> root,target) + (List.map (Librarian.baseuri_of_script ~include_paths:[]) hds) in + let roots,targets = List.split roots_and_targets in + let root = List.hd roots in + if (List.exists (fun root' -> root' <> root) roots) then + (prerr_endline "Only targets in the same root can be specified.";exit 1); + targets, root + in + (* must be called after init since args are set by cmdline parsing *) + let system_mode = Helm_registry.get_bool "matita.system" in + if system_mode then HLog.message "Compiling in system space"; + (* here we go *) + if not (Helm_registry.get_bool "matita.verbose") then MatitaMisc.shutup (); + if MatitacLib.Make.make root target then + (HLog.message "Compilation successful"; 0) + else + (HLog.message "Compilation failed"; 1) +;; -(* from transcript *) - -let out_comment och s = - let s = if s <> "" && s.[0] = '*' then "#" ^ s else s in - Printf.fprintf och "%s%s%s\n\n" "(*" s "*)" - -let out_line_comment och s = - let l = 70 - String.length s in - let s = Printf.sprintf " %s %s" s (String.make l '*') in - out_comment och s - -let out_preamble och (path, lines) = - let ich = open_in path in - let rec print i = - if i > 0 then - let s = input_line ich in - begin Printf.fprintf och "%s\n" s; print (pred i) end - in - print lines; - out_line_comment och "This file was automatically generated: do not edit" - -(* from matitacLib *) - -let pp_ast_statement st = - GrafiteAstPp.pp_statement ~term_pp:CicNotationPp.pp_term - ~map_unicode_to_tex:(Helm_registry.get_bool - "matita.paste_unicode_as_tex") - ~lazy_term_pp:CicNotationPp.pp_term ~obj_pp:(CicNotationPp.pp_obj CicNotationPp.pp_term) st - -(**) - -let dump f = - Helm_registry.set_bool "matita.moo" false; - let floc = H.dummy_floc in - let nl_ast = G.Comment (floc, G.Note (floc, "")) in - let och = open_out f in - let atexit () = close_out och in - let nl () = output_string och (pp_ast_statement nl_ast) in - let rt_base_dir = Filename.dirname Sys.argv.(0) in - let path = Filename.concat rt_base_dir "matita.ma.templ" in - let lines = 14 in - out_preamble och (path, lines); - let grafite_parser_cb fname = - let ast = G.Executable (floc, G.Command (floc, G.Include (floc, fname))) in - output_string och (pp_ast_statement ast); nl (); nl () - in - let matita_engine_cb = function - | G.Executable (_, G.Macro (_, G.Inline _)) - | G.Executable (_, G.Command (_, G.Include _)) -> () - | ast -> - output_string och (pp_ast_statement ast); nl (); nl () - in - let matitac_lib_cb = output_string och in - GrafiteParser.set_callback grafite_parser_cb; - MatitaEngine.set_callback matita_engine_cb; - MatitacLib.set_callback matitac_lib_cb; - at_exit atexit - let main () = - Helm_registry.set_bool "matita.moo" true; - match Filename.basename Sys.argv.(0) with - |"gragrep" |"gragrep.opt" |"gragrep.opt.static" ->Gragrep.main() - |"matitadep" |"matitadep.opt" |"matitadep.opt.static" ->Matitadep.main() - |"matitaclean"|"matitaclean.opt"|"matitaclean.opt.static"->Matitaclean.main() - |"matitamake" |"matitamake.opt" |"matitamake.opt.static" ->Matitamake.main() - |"matitaprover"|"matitaprover.opt" - |"matitaprover.opt.static" ->Matitaprover.main() - |"matitawiki"|"matitawiki.opt" ->MatitaWiki.main() - | _ -> -(* - let _ = Paramodulation.Saturation.init () in *) -(* ALB to link paramodulation *) - let dump_msg = " Dump source with expanded macros to " in - MatitaInit.add_cmdline_spec ["-dump", Arg.String dump, dump_msg]; - let _ = MatitacLib.main `COMPILER in - () + Sys.catch_break true; + let bin = Filename.basename Sys.argv.(0) in + if Pcre.pmatch ~pat:"^matitadep" bin then Matitadep.main () + else if Pcre.pmatch ~pat:"^matitaclean" bin then Matitaclean.main () + else if Pcre.pmatch ~pat:"^matitawiki" bin then MatitaWiki.main () + else exit (main_compiler ()) +;; let _ = main ()