sig
  type stage = Early | Extending | Extended | Exiting | Loading | Configuring
  val run_after_early_stage : (unit -> unit) -> unit
  val run_during_extending_stage : (unit -> unit) -> unit
  val run_after_extended_stage : (unit -> unit) -> unit
  type exit
  val nop : Cmdline.exit
  exception Exit
  val run_after_exiting_stage : (unit -> Cmdline.exit) -> unit
  val run_after_loading_stage : (unit -> unit) -> unit
  val is_going_to_load : unit -> unit
  val run_after_configuring_stage : (unit -> unit) -> unit
  val run_after_setting_files : (string list -> unit) -> unit
  val at_normal_exit : (unit -> unit) -> unit
  val at_error_exit : (exn -> unit) -> unit
  module Group :
    sig
      type t
      val default : Cmdline.Group.t
      val name : Cmdline.Group.t -> string
      val add :
        ?memo:bool -> plugin:string -> string -> Cmdline.Group.t * bool
    end
  val protect : exn -> string
  val catch_at_toplevel : exn -> bool
  val catch_toplevel_run :
    f:(unit -> unit) ->
    at_normal_exit:(unit -> unit) -> on_error:(exn -> unit) -> unit
  val run_normal_exit_hook : unit -> unit
  val run_error_exit_hook : exn -> unit
  val error_occurred : exn -> unit
  val bail_out : unit -> 'a
  type on_from_name = { on_from_name : 'a. string -> (unit -> 'a) -> 'a; }
  val parse_and_boot :
    on_from_name:Cmdline.on_from_name ->
    get_toplevel:(unit -> (unit -> unit) -> unit) ->
    play_analysis:(unit -> unit) -> unit
  val nb_given_options : unit -> int
  val use_cmdline_files : (string list -> unit) -> unit
  val help : unit -> Cmdline.exit
  val list_plugins : unit -> Cmdline.exit
  val list_all_plugin_options : print_invisible:bool -> Cmdline.exit
  val plugin_help : string -> Cmdline.exit
  val print_option_help :
    Format.formatter ->
    plugin:string -> group:Cmdline.Group.t -> string -> unit
  val add_plugin : ?short:string -> string -> help:string -> unit
  type option_setting =
      Unit of (unit -> unit)
    | Int of (int -> unit)
    | String of (string -> unit)
    | String_list of (string list -> unit)
  val add_option :
    string ->
    plugin:string ->
    group:Cmdline.Group.t ->
    Cmdline.stage ->
    ?argname:string ->
    help:string ->
    visible:bool ->
    ext_help:(unit, Format.formatter, unit) Pervasives.format ->
    Cmdline.option_setting -> unit
  val add_option_without_action :
    string ->
    plugin:string ->
    group:Cmdline.Group.t ->
    ?argname:string ->
    help:string ->
    visible:bool ->
    ext_help:(unit, Format.formatter, unit) Pervasives.format -> unit -> unit
  val add_aliases :
    string ->
    plugin:string ->
    group:Cmdline.Group.t -> Cmdline.stage -> string list -> unit
  val replace_option_setting :
    string ->
    plugin:string -> group:Cmdline.Group.t -> Cmdline.option_setting -> unit
  module Kernel_log : Log.Messages
  module type Level =
    sig
      val value_if_set : int option Pervasives.ref
      val get : unit -> int
      val set : int -> unit
    end
  module Debug_level : Level
  module Verbose_level : Level
  module Kernel_debug_level : Level
  module Kernel_verbose_level : Level
  val kernel_debug_atleast_ref : (int -> bool) Pervasives.ref
  val kernel_verbose_atleast_ref : (int -> bool) Pervasives.ref
  val journal_enable : bool
  val journal_isset : bool
  val use_obj : bool
  val use_type : bool
  val quiet : bool
  val deterministic : bool
  val last_project_created_by_copy : (unit -> string option) Pervasives.ref
  val load_all_plugins : (unit -> unit) Pervasives.ref
  val add_loading_failures : string -> unit
end