sig
  module type S =
    sig
      val verbose_atleast : int -> bool
      val debug_atleast : int -> bool
      val printf :
        ?level:int ->
        ?dkey:Log.category ->
        ?current:bool ->
        ?source:Lexing.position ->
        ?append:(Format.formatter -> unit) ->
        ?header:(Format.formatter -> unit) ->
        ?prefix:string ->
        ?suffix:string -> ('a, Format.formatter, unit) format -> 'a
      val result : ?level:int -> ?dkey:Log.category -> 'Log.pretty_printer
      val feedback :
        ?level:int -> ?dkey:Log.category -> 'Log.pretty_printer
      val debug : ?level:int -> ?dkey:Log.category -> 'Log.pretty_printer
      val debug0 :
        ?level:int -> ?dkey:Log.category -> unit Log.pretty_printer
      val debug1 :
        ?level:int -> ?dkey:Log.category -> ('-> unit) Log.pretty_printer
      val debug2 :
        ?level:int ->
        ?dkey:Log.category -> ('-> '-> unit) Log.pretty_printer
      val debug3 :
        ?level:int ->
        ?dkey:Log.category -> ('-> '-> '-> unit) Log.pretty_printer
      val debug4 :
        ?level:int ->
        ?dkey:Log.category ->
        ('-> '-> '-> '-> unit) Log.pretty_printer
      val debug5 :
        ?level:int ->
        ?dkey:Log.category ->
        ('-> '-> '-> '-> '-> unit) Log.pretty_printer
      val debug6 :
        ?level:int ->
        ?dkey:Log.category ->
        ('-> '-> '-> '-> '-> '-> unit) Log.pretty_printer
      val debug7 :
        ?level:int ->
        ?dkey:Log.category ->
        ('-> '-> '-> '-> '-> '-> '-> unit) Log.pretty_printer
      val debug8 :
        ?level:int ->
        ?dkey:Log.category ->
        ('-> '-> '-> '-> '-> '-> '-> '-> unit)
        Log.pretty_printer
      val warning : 'Log.pretty_printer
      val error : 'Log.pretty_printer
      val abort : ('a, 'b) Log.pretty_aborter
      val failure : 'Log.pretty_printer
      val fatal : ('a, 'b) Log.pretty_aborter
      val verify : bool -> ('a, bool) Log.pretty_aborter
      val not_yet_implemented :
        ('a, Format.formatter, unit, 'b) format4 -> 'a
      val deprecated : string -> now:string -> ('-> 'b) -> '-> 'b
      val with_result : (Log.event -> 'b) -> ('a, 'b) Log.pretty_aborter
      val with_warning : (Log.event -> 'b) -> ('a, 'b) Log.pretty_aborter
      val with_error : (Log.event -> 'b) -> ('a, 'b) Log.pretty_aborter
      val with_failure : (Log.event -> 'b) -> ('a, 'b) Log.pretty_aborter
      val log :
        ?kind:Log.kind -> ?verbose:int -> ?debug:int -> 'Log.pretty_printer
      val with_log :
        (Log.event -> 'b) -> ?kind:Log.kind -> ('a, 'b) Log.pretty_aborter
      val register : Log.kind -> (Log.event -> unit) -> unit
      val register_tag_handlers :
        (string -> string) * (string -> string) -> unit
      val register_category : string -> Log.category
      val get_category : string -> Log.Category_set.t
      val get_all_categories : unit -> Log.Category_set.t
      val add_debug_keys : Log.Category_set.t -> unit
      val del_debug_keys : Log.Category_set.t -> unit
      val get_debug_keys : unit -> Log.Category_set.t
      val is_debug_key_enabled : Log.category -> bool
      val get_debug_keyset : unit -> Log.category list
      val add_group : ?memo:bool -> string -> Cmdline.Group.t
      module Help : Parameter_sig.Bool
      module Verbose : Parameter_sig.Int
      module Debug : Parameter_sig.Int
      module Debug_category : Parameter_sig.String_set
      module Share : Parameter_sig.Specific_dir
      module Session : Parameter_sig.Specific_dir
      module Config : Parameter_sig.Specific_dir
      val help : Cmdline.Group.t
      val messages : Cmdline.Group.t
    end
  type plugin = private {
    p_name : string;
    p_shortname : string;
    p_help : string;
    p_parameters : (string, Typed_parameter.t list) Hashtbl.t;
  }
  module type General_services =
    sig
      val verbose_atleast : int -> bool
      val debug_atleast : int -> bool
      val printf :
        ?level:int ->
        ?dkey:Log.category ->
        ?current:bool ->
        ?source:Lexing.position ->
        ?append:(Format.formatter -> unit) ->
        ?header:(Format.formatter -> unit) ->
        ?prefix:string ->
        ?suffix:string -> ('a, Format.formatter, unit) format -> 'a
      val result : ?level:int -> ?dkey:Log.category -> 'Log.pretty_printer
      val feedback :
        ?level:int -> ?dkey:Log.category -> 'Log.pretty_printer
      val debug : ?level:int -> ?dkey:Log.category -> 'Log.pretty_printer
      val debug0 :
        ?level:int -> ?dkey:Log.category -> unit Log.pretty_printer
      val debug1 :
        ?level:int -> ?dkey:Log.category -> ('-> unit) Log.pretty_printer
      val debug2 :
        ?level:int ->
        ?dkey:Log.category -> ('-> '-> unit) Log.pretty_printer
      val debug3 :
        ?level:int ->
        ?dkey:Log.category -> ('-> '-> '-> unit) Log.pretty_printer
      val debug4 :
        ?level:int ->
        ?dkey:Log.category ->
        ('-> '-> '-> '-> unit) Log.pretty_printer
      val debug5 :
        ?level:int ->
        ?dkey:Log.category ->
        ('-> '-> '-> '-> '-> unit) Log.pretty_printer
      val debug6 :
        ?level:int ->
        ?dkey:Log.category ->
        ('-> '-> '-> '-> '-> '-> unit) Log.pretty_printer
      val debug7 :
        ?level:int ->
        ?dkey:Log.category ->
        ('-> '-> '-> '-> '-> '-> '-> unit) Log.pretty_printer
      val debug8 :
        ?level:int ->
        ?dkey:Log.category ->
        ('-> '-> '-> '-> '-> '-> '-> '-> unit)
        Log.pretty_printer
      val warning : 'Log.pretty_printer
      val error : 'Log.pretty_printer
      val abort : ('a, 'b) Log.pretty_aborter
      val failure : 'Log.pretty_printer
      val fatal : ('a, 'b) Log.pretty_aborter
      val verify : bool -> ('a, bool) Log.pretty_aborter
      val not_yet_implemented :
        ('a, Format.formatter, unit, 'b) format4 -> 'a
      val deprecated : string -> now:string -> ('-> 'b) -> '-> 'b
      val with_result : (Log.event -> 'b) -> ('a, 'b) Log.pretty_aborter
      val with_warning : (Log.event -> 'b) -> ('a, 'b) Log.pretty_aborter
      val with_error : (Log.event -> 'b) -> ('a, 'b) Log.pretty_aborter
      val with_failure : (Log.event -> 'b) -> ('a, 'b) Log.pretty_aborter
      val log :
        ?kind:Log.kind -> ?verbose:int -> ?debug:int -> 'Log.pretty_printer
      val with_log :
        (Log.event -> 'b) -> ?kind:Log.kind -> ('a, 'b) Log.pretty_aborter
      val register : Log.kind -> (Log.event -> unit) -> unit
      val register_tag_handlers :
        (string -> string) * (string -> string) -> unit
      val register_category : string -> Log.category
      val get_category : string -> Log.Category_set.t
      val get_all_categories : unit -> Log.Category_set.t
      val add_debug_keys : Log.Category_set.t -> unit
      val del_debug_keys : Log.Category_set.t -> unit
      val get_debug_keys : unit -> Log.Category_set.t
      val is_debug_key_enabled : Log.category -> bool
      val get_debug_keyset : unit -> Log.category list
      val add_group : ?memo:bool -> string -> Cmdline.Group.t
      module Help : Parameter_sig.Bool
      module Verbose : Parameter_sig.Int
      module Debug : Parameter_sig.Int
      module Debug_category : Parameter_sig.String_set
      module Share : Parameter_sig.Specific_dir
      module Session : Parameter_sig.Specific_dir
      module Config : Parameter_sig.Specific_dir
      val help : Cmdline.Group.t
      val messages : Cmdline.Group.t
      module Bool :
        functor
          (X : sig
                 val option_name : string
                 val help : string
                 val default : bool
               end->
          Parameter_sig.Bool
      module Action : functor (X : Parameter_sig.Input-> Parameter_sig.Bool
      module False : functor (X : Parameter_sig.Input-> Parameter_sig.Bool
      module True : functor (X : Parameter_sig.Input-> Parameter_sig.Bool
      module WithOutput :
        functor
          (X : sig
                 val option_name : string
                 val help : string
                 val output_by_default : bool
               end->
          Parameter_sig.With_output
      module Int :
        functor
          (X : sig
                 val option_name : string
                 val help : string
                 val arg_name : string
                 val default : int
               end->
          Parameter_sig.Int
      module Zero :
        functor (X : Parameter_sig.Input_with_arg-> Parameter_sig.Int
      module String :
        functor
          (X : sig
                 val option_name : string
                 val help : string
                 val arg_name : string
                 val default : string
               end->
          Parameter_sig.String
      module EmptyString :
        functor (X : Parameter_sig.Input_with_arg-> Parameter_sig.String
      module StringSet :
        functor (X : Parameter_sig.Input_with_arg->
          Parameter_sig.String_set
      module FilledStringSet :
        functor
          (X : sig
                 val option_name : string
                 val help : string
                 val arg_name : string
                 val default : Datatype.String.Set.t
               end->
          Parameter_sig.String_set
      module StringList :
        functor (X : Parameter_sig.Input_with_arg->
          Parameter_sig.String_list
      module IndexedVal :
        functor (V : Parameter_sig.Indexed_val_input->
          sig
            type t = string
            val set : t -> unit
            val add_set_hook : (t -> t -> unit) -> unit
            val add_update_hook : (t -> t -> unit) -> unit
            val get : unit -> t
            val clear : unit -> unit
            val is_default : unit -> bool
            val option_name : string
            val print_help : Format.formatter -> unit
            val self : State.t
            val name : string
            val mark_as_computed : ?project:Project.t -> unit -> unit
            val is_computed : ?project:Project.t -> unit -> bool
            module Datatype : Datatype.S
            val add_hook_on_update : (Datatype.t -> unit) -> unit
            val howto_marshal :
              (Datatype.t -> 'a) -> ('-> Datatype.t) -> unit
            val equal : t -> t -> bool
            val add_aliases : string list -> unit
            val is_set : unit -> bool
            val unsafe_set : t -> unit
            val parameter : Typed_parameter.t
            val set_possible_values : string list -> unit
            val get_possible_values : unit -> string list
            type value = V.t
            val add_choice : string -> value -> unit
            val get_val : unit -> value
          end
      module StringHashtbl :
        functor (X : Parameter_sig.Input_with_arg->
          functor
            (V : sig
                   type t
                   val ty : t Type.t
                   val name : string
                   val descr : t Descr.t
                   val packed_descr : Structural_descr.pack
                   val reprs : t list
                   val equal : t -> t -> bool
                   val compare : t -> t -> int
                   val hash : t -> int
                   val pretty_code : Format.formatter -> t -> unit
                   val internal_pretty_code :
                     Type.precedence -> Format.formatter -> t -> unit
                   val pretty : Format.formatter -> t -> unit
                   val varname : t -> string
                   val mem_project :
                     (Project_skeleton.t -> bool) -> t -> bool
                   val copy : t -> t
                   val parse : string -> string * t
                   val redefine_binding : string -> old:t -> t -> t
                   val no_binding : string -> t
                 end->
            sig
              type t = Datatype.String.Set.t
              val set : t -> unit
              val add_set_hook : (t -> t -> unit) -> unit
              val add_update_hook : (t -> t -> unit) -> unit
              val get : unit -> t
              val clear : unit -> unit
              val is_default : unit -> bool
              val option_name : string
              val print_help : Format.formatter -> unit
              val self : State.t
              val name : string
              val mark_as_computed : ?project:Project.t -> unit -> unit
              val is_computed : ?project:Project.t -> unit -> bool
              module Datatype : Datatype.S
              val add_hook_on_update : (Datatype.t -> unit) -> unit
              val howto_marshal :
                (Datatype.t -> 'a) -> ('-> Datatype.t) -> unit
              val equal : t -> t -> bool
              val add_aliases : string list -> unit
              val is_set : unit -> bool
              val unsafe_set : t -> unit
              val parameter : Typed_parameter.t
              val add : string -> unit
              val remove : string -> unit
              val is_empty : unit -> bool
              val get_set : ?sep:string -> unit -> string
              val iter : (string -> unit) -> unit
              val fold : (string -> '-> 'a) -> '-> 'a
              val exists : (string -> bool) -> bool
              val set_possible_values : string list -> unit
              val get_possible_values : unit -> string list
              type value = V.t
              val find : string -> value
            end
      val parameters : unit -> Typed_parameter.t list
    end
  val register_kernel : unit -> unit
  module Register :
    functor
      (P : sig val name : string val shortname : string val help : string end->
      General_services
  val is_share_visible : unit -> unit
  val is_session_visible : unit -> unit
  val is_config_visible : unit -> unit
  val plugin_subpath : string -> unit
  val get_from_shortname : string -> Plugin.plugin
  val get_from_name : string -> Plugin.plugin
  val get : string -> Plugin.plugin
  val iter_on_plugins : (Plugin.plugin -> unit) -> unit
  val positive_debug_ref : int Pervasives.ref
  val session_is_set_ref : (unit -> bool) Pervasives.ref
  val session_ref : (unit -> string) Pervasives.ref
  val config_is_set_ref : (unit -> bool) Pervasives.ref
  val config_ref : (unit -> string) Pervasives.ref
end