let conffile = ref BuildTimeConf.matita_conf
-let registry_defaults =
- [
- "db.nodb", "false";
- "matita.system", "false";
- "matita.debug", "false";
- "matita.external_editor", "gvim -f -c 'go %p' %f";
- "matita.preserve", "false";
- "matita.quiet", "false";
- "matita.profile", "true";
- ]
+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";
+ (** verbosity level: 1 is the default, 0 is intuitively "quiet", > 1 is
+ * intuitively verbose *)
+]
let set_registry_values =
List.iter (fun key, value -> Helm_registry.set ~key ~value)
let login = (Unix.getpwuid (Unix.getuid ())).Unix.pw_name in
Helm_registry.set "user.name" login
end;
- if Helm_registry.get_bool "matita.system" then
- Helm_registry.set "user.home" BuildTimeConf.runtime_base_dir;
ConfigurationFile::init_status
end
else
let status = ref []
-let usages = Hashtbl.create 11
+let usages = Hashtbl.create 11 (** app name (e.g. "matitac") -> usage string *)
let _ =
List.iter
(fun (name, s) -> Hashtbl.replace usages name s)
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)
+ 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.
+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).
Options:"
BuildTimeConf.version;
]
let includes = ref [ BuildTimeConf.stdlib_dir ] 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 arg_spec =
let std_arg_spec = [
"-I", Arg.String (add_l includes),
("<path> Adds path to the list of searched paths for the "
^ "include command");
"-conffile", Arg.Set_string conffile,
- (Printf.sprintf "<filename> Read configuration from filename (default: %s)"
+ (Printf.sprintf ("<filename> Read configuration from filename"
+ ^^ "\n Default: %s")
BuildTimeConf.matita_conf);
- "-q", Arg.Unit (fun () -> Helm_registry.set_bool "matita.quiet" true),
- "Turn off verbose compilation";
+ "-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";
"-preserve",
Arg.Unit (fun () -> Helm_registry.set_bool "matita.preserve" true),
"Turns off automatic baseuri cleaning";
- "-nodb", Arg.Unit (fun () -> Helm_registry.set_bool "db.nodb" true),
- ("Avoid using external database connection "
- ^ "(WARNING: disable many features)");
+ "-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"
- ^ "(WARNING: not for the casual user)");
- "-noprofile",
- Arg.Unit (fun () -> Helm_registry.set_bool "matita.profile" false),
- "Turns off profiling printings";
+ ^ "\n WARNING: not for the casual user");
+ "-v", Arg.Unit increase_verbosity, "Increase verbosity";
] in
let debug_arg_spec =
if BuildTimeConf.debug then
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 ]
+ [ fill_registry; parse_cmdline; load_configuration; initialize_makelib;
+ initialize_db; initialize_environment ]
(* initialize_notation
(initialize_environment
(initialize_db
let main () =
MatitaInit.fill_registry ();
+ MatitaInit.parse_cmdline ();
MatitaInit.load_configuration_file ();
MK.initialize ();
let usage = ref (fun () -> ()) in
exit 1
| Some d -> d
in
- let init_dev_doc = "
-\tParameters: name (the name of the development, required)
-\tDescription: tells matitamake that a new development radicated
-\t\tin the current working directory should be handled."
- in
let init_dev args =
- if List.length args <> 1 then !usage ();
- match MK.initialize_development (List.hd args) (Unix.getcwd ()) with
+ let name, path =
+ match args with
+ | [ name; path ] when path.[0] = '/' -> name, path
+ | [ name; path ] -> name, Unix.getcwd () ^ "/" ^ path
+ | [ name ] -> name, Unix.getcwd ()
+ | _ -> !usage (); (* should not be reached *) assert false
+ in
+ match MK.initialize_development name path with
| None -> exit 2
| Some _ -> exit 0
in
- let list_dev_doc = "
-\tParameters:
-\tDescription: lists the known developments and their roots."
- in
let list_dev args =
if List.length args <> 0 then !usage ();
match MK.list_known_developments () with
l;
exit 0
in
- let destroy_dev_doc = "
-\tParameters: name (the name of the development to destroy, required)
-\tDescription: deletes a development (only from matitamake metadat, no
-\t\t.ma files will be deleted)."
- in
let destroy_dev args =
if List.length args <> 1 then !usage ();
let name = (List.hd args) in
MK.destroy_development dev;
exit 0
in
- let clean_dev_doc = "
-\tParameters: name (the name of the development to destroy, optional)
-\t\tIf omitted the development that holds the current working
-\t\tdirectory is used (if any).
-\tDescription: clean the develpoment."
- in
let clean_dev args =
let dev =
match args with
| true -> exit 0
| false -> exit 1
in
- let build_dev_doc = "
-\tParameters: name (the name of the development to build, required)
-\tDescription: completely builds the develpoment."
- in
let build_dev args =
if List.length args <> 1 then !usage ();
let name = (List.hd args) in
| true -> exit 0
| false -> exit 1
in
- let nodb_doc = "
-\tParameters:
-\tDescription: avoid using external database connection."
- in
- let nodb _ = Helm_registry.set_bool "db.nodb" true in
let target args =
if List.length args < 1 then !usage ();
let dev = dev_for_dir (Unix.getcwd ()) in
args
in
let params = [
- "-init", init_dev, init_dev_doc;
- "-clean", clean_dev, clean_dev_doc;
- "-list", list_dev, list_dev_doc;
- "-destroy", destroy_dev, destroy_dev_doc;
- "-build", build_dev, build_dev_doc;
- "-nodb", nodb, nodb_doc;
- "-h", (fun _ -> !usage()), "print this help screen";
- "-help", (fun _ -> !usage()), "print this help screen";
+ "init", init_dev;
+ "clean", clean_dev;
+ "list", list_dev;
+ "destroy", destroy_dev;
+ "build", build_dev;
]
in
- usage := (fun () ->
- let p = prerr_endline in
- p "\nusage:";
- p "\tmatitamake(.opt) [command [options]]\n";
- p "\tmatitamake(.opt) [target]\n";
- p "commands:";
- List.iter (fun (n,_,d) -> p (Printf.sprintf " %-10s%s" n d)) params;
- p "\nIf target is omitted a 'all' will be used as the default.";
- p "With -build you can build a development wherever it is.";
- p "If you specify a target it implicitly refers to the development that";
- p "holds the current working directory (if any).\n";
- exit 1);
- let rec parse args =
+ usage := MatitaInit.die_usage;
+ let parse args =
match args with
- | [] -> target ["all"]
- | s::tl ->
- try
- let _,f,_ = List.find (fun (n,_,_) -> n = s) params in
- f tl;
- parse tl
+ | [] -> target [ "all" ]
+ | s :: tl ->
+ try (List.assoc s params) tl
with Not_found -> if s.[0] = '-' then !usage () else target args
in
- parse (List.tl (Array.to_list Sys.argv))
+ parse (Helm_registry.get_list Helm_registry.string "matita.args")