]> matita.cs.unibo.it Git - helm.git/blobdiff - helm/software/matita/matitaInit.ml
severe bug found in parallel zeta
[helm.git] / helm / software / matita / matitaInit.ml
index a2a5b93fa316e5a41066a0d1f1d4079481425e19..70125f54c222bb5dc3c3d146a8a7cc8aecfee294 100644 (file)
 
 (* $Id$ *)
 
-open Printf
-
-type thingsToInitilaize = 
-  ConfigurationFile | Db | Environment | Getter | Makelib | CmdLine | Registry
+type thingsToInitialize = 
+  ConfigurationFile | Db | Environment | Getter | CmdLine | Registry
   
-exception FailedToInitialize of thingsToInitilaize
+exception FailedToInitialize of thingsToInitialize
 
 let wants s l = 
   List.iter (
@@ -45,20 +43,24 @@ let already_configured s l =
 let conffile = ref BuildTimeConf.matita_conf
 
 let registry_defaults = [
-  "db.nodb",                  "false";
-  "matita.debug",             "false";
-  "matita.external_editor",   "gvim -f -c 'go %p' %f";
-  "matita.preserve",          "false";
-  "matita.profile",           "true";
-  "matita.system",            "false";
-  "matita.verbosity",         "1";
-  "matita.bench",              "false";
-    (** verbosity level: 1 is the default, 0 is intuitively "quiet", > 1 is
-     * intuitively verbose *)
+  "matita.debug",                "false";
+  "matita.debug_menu",           "false";
+  "matita.external_editor",      "gvim -f -c 'go %p' %f";
+  "matita.profile",              "true";
+  "matita.system",               "false";
+  "matita.verbose",              "false";
+  "matita.paste_unicode_as_tex", "false";
+  "matita.noinnertypes",         "false";
+  "matita.do_heavy_checks",      "true";
+  "matita.moo",                  "true";
+  "matita.extract",              "false";
+  "matita.execcomments",         "false";
 ]
 
 let set_registry_values =
-  List.iter (fun key, value -> Helm_registry.set ~key ~value)
+  List.iter 
+    (fun key, value -> 
+       if not (Helm_registry.has key) then Helm_registry.set ~key ~value)
 
 let fill_registry init_status =
   if not (already_configured [ Registry ] init_status) then begin
@@ -68,7 +70,6 @@ let fill_registry init_status =
     init_status
 
 let load_configuration init_status =
-  wants [ Registry ] init_status;
   if not (already_configured [ConfigurationFile] init_status) then
     begin
       Helm_registry.load_from !conffile;
@@ -76,6 +77,17 @@ let load_configuration init_status =
         let login = (Unix.getpwuid (Unix.getuid ())).Unix.pw_name in
         Helm_registry.set "user.name" login
       end;
+      let home = Helm_registry.get_string "matita.basedir" in
+      let user_conf_file = home ^ "/matita.conf.xml" in
+      if HExtlib.is_regular user_conf_file then
+        begin
+          HLog.message ("Loading additional conf file from " ^ user_conf_file);
+          try
+            Helm_registry.load_from user_conf_file
+          with exn -> 
+            HLog.error
+              ("While loading conf file: " ^ snd (MatitaExcPp.to_string exn))
+        end;
       ConfigurationFile::init_status 
     end
   else
@@ -93,18 +105,8 @@ let initialize_db init_status =
   else
     init_status
 
-let initialize_makelib init_status = 
-  wants [ConfigurationFile] init_status;
-  if not (already_configured [Makelib] init_status) then
-    begin
-      MatitamakeLib.initialize (); 
-      Makelib::init_status
-    end
-  else
-    init_status
-
 let initialize_environment init_status = 
-  wants [ConfigurationFile] init_status;
+  wants [CmdLine] init_status;
   if not (already_configured [Getter;Environment] init_status) then
     begin
       Http_getter.init ();
@@ -127,81 +129,35 @@ let _ =
   List.iter
     (fun (name, s) -> Hashtbl.replace usages name s)
     [ "matitac", 
-        sprintf "MatitaC v%s
+        Printf.sprintf "Matita batch compiler v%s
 Usage: matitac [ OPTION ... ] FILE
 Options:"
           BuildTimeConf.version;
-      "gragrep",
-        sprintf "Grafite Grep v%s
-Usage: gragrep [ -r ] PATH
-Options:"
-          BuildTimeConf.version;
-      "matitaprover",
-        sprintf "Matita's prover v%s
+        "matitaprover",
+        Printf.sprintf "Matita (TPTP) prover v%s
 Usage: matitaprover [ -tptppath ] FILE.p
 Options:"
           BuildTimeConf.version;
       "matita",
-        sprintf "Matita v%s
-Usage: matita [ OPTION ... ] [ FILE ... ]
-Options:"
-          BuildTimeConf.version;
-      "cicbrowser",
-        sprintf
-          "CIC Browser v%s
-Usage: cicbrowser [ URL | WHELP QUERY ]
+        Printf.sprintf "Matita interactive theorem prover v%s
+Usage: matita [ OPTION ... ] [ FILE ]
 Options:"
           BuildTimeConf.version;
       "matitadep",
-        sprintf "MatitaDep v%s
-Usage: matitadep [ OPTION ... ] FILE ...
+        Printf.sprintf "Matita depency file generator v%s
+Usage: matitadep [ OPTION ... ] 
 Options:"
           BuildTimeConf.version;
       "matitaclean",
-        sprintf "MatitaClean v%s
+        Printf.sprintf "MatitaClean v%s
 Usage: matitaclean all
-       matitaclean [ (FILE | URI) ... ]
-Options:"
-          BuildTimeConf.version;
-      "matitamake",
-        sprintf "MatitaMake v%s
-Usage: matitamake [ OPTION ... ] (init | clean | list | destroy | build)
-  init
-    Parameters: name (the name of the development, required)
-                root (the directory in which the delopment is rooted, 
-                      optional, default is current working directory)
-    Description: tells matitamake that a new development radicated 
-      in the current working directory should be handled.
-  clean
-    Parameters: name (the name of the development to destroy, optional)
-      If omitted the development that holds the current working 
-      directory is used (if any).
-    Description: clean the develpoment.
-  list
-    Parameters: 
-    Description: lists the known developments and their roots.
-  destroy
-    Parameters: name (the name of the development to destroy, required)
-    Description: deletes a development (only from matitamake metadat, no
-      .ma files will be deleted).
-  build
-    Parameters: name (the name of the development to build, required)
-    Description: completely builds the develpoment.
-  publish
-    Parameters: name (the name of the development to publish, required)
-    Description: cleans the development in the user space, rebuilds it
-      in the system space ('ro' repositories, that for this operation 
-      becames writable). 
-Notes:
-  If target is omitted an 'all' will be used as the default.
-  With -build you can build a development wherever it is.
-  If you specify a target it implicitly refers to the development that
-  holds the current working directory (if any).
+       matitaclean ( FILE | URI )
 Options:"
           BuildTimeConf.version;
     ]
 let default_usage =
-  sprintf "Matita v%s\nUsage: matita [ ARG ]\nOptions:" BuildTimeConf.version
+  Printf.sprintf 
+    "Matita v%s\nUsage: matita [ ARG ]\nOptions:" BuildTimeConf.version
 
 let usage () =
   let basename = Filename.basename Sys.argv.(0) in
@@ -209,26 +165,42 @@ let usage () =
     try Filename.chop_extension basename with Invalid_argument  _ -> basename
   in
   try Hashtbl.find usages usage_key with Not_found -> default_usage
+;;
 
 let extra_cmdline_specs = ref []
 let add_cmdline_spec l = extra_cmdline_specs := l @ !extra_cmdline_specs
 
 let parse_cmdline init_status =
   if not (already_configured [CmdLine] init_status) then begin
-    let includes = ref [ 
+    wants [Registry] init_status;
+    let includes = ref [] in
+    let default_includes = [ 
       BuildTimeConf.stdlib_dir_devel;
-      BuildTimeConf.stdlib_dir_installed ; ] 
+      BuildTimeConf.stdlib_dir_installed ; 
+      BuildTimeConf.new_stdlib_dir_devel;
+      BuildTimeConf.new_stdlib_dir_installed ; 
+    ] 
+    in
+    let absolutize s =
+      if Pcre.pmatch ~pat:"^/" s then s else Sys.getcwd () ^"/"^s
     in
     let args = ref [] in
     let add_l l = fun s -> l := s :: !l in
-    let reduce_verbosity () =
-      Helm_registry.set_int "matita.verbosity"
-        (Helm_registry.get_int "matita.verbosity" - 1) in
-    let increase_verbosity () =
-      Helm_registry.set_int "matita.verbosity"
-        (Helm_registry.get_int "matita.verbosity" + 1) in
+    let print_version () =
+            Printf.printf "%s\n" BuildTimeConf.version;exit 0 in
+    let no_innertypes () =
+      Helm_registry.set_bool "matita.noinnertypes" true in
+    let set_baseuri s =
+      match Str.split (Str.regexp "::") s with
+      | [path; uri] -> Helm_registry.set "matita.baseuri"
+          (HExtlib.normalize_path (absolutize path)^" "^uri)
+      | _ -> raise (Failure "bad baseuri, use -b 'path::uri'")
+    in
+    let no_default_includes = ref false in
+    let execcomments = ref false in
     let arg_spec =
       let std_arg_spec = [
+        "-b", Arg.String set_baseuri, "<path::uri> forces the baseuri of path";
         "-I", Arg.String (add_l includes),
           ("<path> Adds path to the list of searched paths for the "
            ^ "include command");
@@ -239,27 +211,26 @@ let parse_cmdline init_status =
         "-force",
             Arg.Unit (fun () -> Helm_registry.set_bool "matita.force" true),
             ("Force actions that would not be executed per default");
-        "-nodb", Arg.Unit (fun () -> Helm_registry.set_bool "db.nodb" true),
-            ("Avoid using external database connection"
-             ^ "\n    WARNING: disable many features");
         "-noprofile", 
           Arg.Unit (fun () -> Helm_registry.set_bool "matita.profile" false),
           "Turns off profiling printings";
+        "-noinnertypes", Arg.Unit no_innertypes, 
+          "Turns off inner types generation while publishing";
         "-profile-only",
           Arg.String (fun rex -> Helm_registry.set "matita.profile_only" rex),
           "Activates only profiler with label matching the provided regex";
-        "-bench", 
-          Arg.Unit (fun () -> Helm_registry.set_bool "matita.bench" true),
-          "Turns on parsable output on stdout, that is timings for matitac...";
-        "-preserve",
-          Arg.Unit (fun () -> Helm_registry.set_bool "matita.preserve" true),
-          "Turns off automatic baseuri cleaning";
-        "-q", Arg.Unit reduce_verbosity, "Reduce verbosity";
         "-system", Arg.Unit (fun () ->
               Helm_registry.set_bool "matita.system" true),
             ("Act on the system library instead of the user one"
              ^ "\n    WARNING: not for the casual user");
-        "-v", Arg.Unit increase_verbosity, "Increase verbosity";
+        "-no-default-includes", Arg.Set no_default_includes,
+          "Do not include the default searched paths for the include command"; 
+        "-execcomments", Arg.Set execcomments,
+          "Execute the content of (** ... *) comments";
+       "-v", 
+          Arg.Unit (fun () -> Helm_registry.set_bool "matita.verbose" true), 
+          "Verbose mode";
+        "--version", Arg.Unit print_version, "Prints version"
       ] in
       let debug_arg_spec =
         if BuildTimeConf.debug then
@@ -267,17 +238,26 @@ let parse_cmdline init_status =
             Arg.Unit (fun () -> Helm_registry.set_bool "matita.debug" true),
               ("Do not catch top-level exception "
               ^ "(useful for backtrace inspection)");
+           "-onepass",
+           Arg.Unit (fun () -> MultiPassDisambiguator.only_one_pass := true),
+           "Enable only one disambiguation pass";    
           ]
         else []
       in
       std_arg_spec @ debug_arg_spec @ !extra_cmdline_specs
     in
     let set_list ~key l =
-      Helm_registry.set_list Helm_registry.of_string ~key ~value:(List.rev !l)
+      Helm_registry.set_list Helm_registry.of_string ~key ~value:l
     in
     Arg.parse arg_spec (add_l args) (usage ());
+    Helm_registry.set_bool ~key:"matita.execcomments" ~value:!execcomments;
+    let default_includes = if !no_default_includes then [] else default_includes in
+    let includes = 
+      List.map (fun x -> HExtlib.normalize_path (absolutize x)) 
+       ((List.rev !includes) @ default_includes) 
+    in
     set_list ~key:"matita.includes" includes;
-    args := List.filter (fun x -> x <> "") !args;
+    let args = List.rev (List.filter (fun x -> x <> "") !args) in
     set_list ~key:"matita.args" args;
     HExtlib.set_profiling_printings 
       (fun s -> 
@@ -294,26 +274,27 @@ let die_usage () =
   print_endline (usage ());
   exit 1
 
+let conf_components = 
+  [ load_configuration; fill_registry; parse_cmdline]
+
+let other_components =
+  [ initialize_db; initialize_environment ]
+
 let initialize_all () =
   status := 
     List.fold_left (fun s f -> f s) !status
-    [ fill_registry; parse_cmdline; load_configuration; initialize_makelib;
-      initialize_db; initialize_environment ]
-(*     initialize_notation 
-      (initialize_environment 
-        (initialize_db 
-          (initialize_makelib
-            (load_configuration
-              (parse_cmdline !status))))) *)
+    (conf_components @ other_components);
+  NCicLibrary.init ()
 
-let load_configuration_file () =
-  status := load_configuration !status
+let parse_cmdline_and_configuration_file () =
+  status := List.fold_left (fun s f -> f s) !status conf_components
 
-let parse_cmdline () =
-  status := parse_cmdline !status
+let initialize_environment () =
+  status := initialize_environment !status
 
-let fill_registry () =
-  status := fill_registry !status
+let _ =
+  CicFix.init ();
+  Inversion_principle.init ();
+  CicRecord.init ();
+  CicElim.init ()
 ;;
-
-Inversion_principle.init ()