[ "matitac", 
         sprintf "MatitaC v%s
 Usage: matitac [ OPTION ... ] FILE
+Options:"
+          BuildTimeConf.version;
+      "gragrep",
+        sprintf "Grafite Grep v%s
+Usage: gragrep [ -r ] PATH
 Options:"
           BuildTimeConf.version;
       "matita",
   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 [ BuildTimeConf.stdlib_dir ] in
           ]
         else []
       in
-      std_arg_spec @ debug_arg_spec
+      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)
 
   (** die nicely: exit with return code 1 printing usage error message *)
 val die_usage: unit -> 'a
 
+  (** add extra command line options *)
+val add_cmdline_spec: (Arg.key * Arg.spec * Arg.doc) list -> unit
+