sig
  type options_t = {
    ocaml : string Pervasives.ref;
    ocamlc : string Pervasives.ref;
    ocamlopt : string Pervasives.ref;
    ocamldep : string Pervasives.ref;
    ocamldoc : string Pervasives.ref;
    ocamlyacc : string Pervasives.ref;
    ocamllex : string Pervasives.ref;
    ocamlglade : string Pervasives.ref;
    ocaml_P4 : string Pervasives.ref;
    ocaml_Flags : string Pervasives.ref;
    ocaml_OptFlags : string Pervasives.ref;
    ocaml_ByteFlags : string Pervasives.ref;
    ocaml_LinkFlags : string Pervasives.ref;
    ocaml_Includes : string list Pervasives.ref;
    ocaml_ExtIncludes : string list Pervasives.ref;
    ocaml_ExtLibraries : string list Pervasives.ref;
  }
  val options : YaM.options_t Pervasives.ref
  val new_scope : 'Lazy.t -> 'a
  type unit_t
  val ocaml_Module :
    ?o:YaM.options_t ->
    ?flags:string ->
    ?byte_flags:string ->
    ?opt_flags:string ->
    ?pp:string ->
    ?includes:string list ->
    ?ext_includes:string list -> string -> YaM.unit_t
  val ocaml_IModule :
    ?o:YaM.options_t ->
    ?flags:string ->
    ?byte_flags:string ->
    ?opt_flags:string ->
    ?pp:string ->
    ?includes:string list ->
    ?ext_includes:string list -> string -> YaM.unit_t
  val ocaml_Interface :
    ?o:YaM.options_t ->
    ?flags:string ->
    ?byte_flags:string ->
    ?opt_flags:string ->
    ?pp:string ->
    ?includes:string list ->
    ?ext_includes:string list -> string -> YaM.unit_t
  val c_Module :
    ?o:YaM.options_t ->
    ?flags:string -> ?source_deps:string list -> string -> YaM.unit_t
  val ocaml_Lexer :
    ?o:YaM.options_t ->
    ?flags:string ->
    ?byte_flags:string ->
    ?opt_flags:string ->
    ?lex_flags:string ->
    ?pp:string ->
    ?includes:string list ->
    ?ext_includes:string list -> string -> YaM.unit_t
  val ocaml_Parser :
    ?o:YaM.options_t ->
    ?flags:string ->
    ?byte_flags:string ->
    ?opt_flags:string ->
    ?yacc_flags:string ->
    ?pp:string ->
    ?includes:string list ->
    ?ext_includes:string list -> string -> YaM.unit_t
  val ocaml_Glade :
    ?o:YaM.options_t ->
    ?flags:string ->
    ?byte_flags:string ->
    ?opt_flags:string ->
    ?glade_flags:string ->
    ?pp:string ->
    ?includes:string list ->
    ?ext_includes:string list -> string -> YaM.unit_t
  val ocaml_Package :
    ?o:YaM.options_t -> string -> YaM.unit_t list -> YaM.unit_t
  val ocaml_PackageDir :
    ?o:YaM.options_t -> string -> YaM.unit_t list Lazy.t -> YaM.unit_t
  val ocaml_Library :
    ?o:YaM.options_t ->
    ?flags:string ->
    ?byte_flags:string ->
    ?opt_flags:string ->
    ?includes:string list ->
    ?libraries:string list ->
    ?default:[ `Byte | `Native ] -> string -> YaM.unit_t list -> YaM.unit_t
  val ocaml_Program :
    ?o:YaM.options_t ->
    ?flags:string ->
    ?byte_flags:string ->
    ?opt_flags:string ->
    ?includes:string list ->
    ?libraries:string list ->
    ?default:[ `Byte | `Native ] -> string -> YaM.unit_t list -> YaM.unit_t
  val phony_unit :
    ?depends:string list -> ?command:string -> string -> YaM.unit_t
  val main : ?rebuild:string -> ?deps:string list -> YaM.unit_t list -> unit
  type project_t
  val project :
    ?rebuild:string -> ?deps:string list -> YaM.unit_t list -> YaM.project_t
  val print_deps : bool Pervasives.ref
  val print_cmds : bool Pervasives.ref
  val build : ?target:string -> YaM.project_t -> unit
  val clean : YaM.project_t -> unit
  val sources_of_project : YaM.project_t -> string list
  val dir : string Pervasives.ref
  val generic_unit :
    ?sources:string list ->
    targets:string list ->
    ?trash:string list ->
    ?auto_targets:string list ->
    ?sub_units:YaM.unit_t list ->
    ?pregenerated:string list ->
    ?objects:string * string ->
    dependencies:(native:bool -> string -> string list) ->
    ?dep_files:(string -> string list) ->
    compile_cmd:(string -> string * string list) -> unit -> YaM.unit_t
  val ( ^^ ) : string -> string -> string
  val ( ^= ) : string Pervasives.ref -> string -> unit
  val ( += ) : 'a list Pervasives.ref -> '-> unit
  val ( @= ) : 'a list Pervasives.ref -> 'a list -> unit
  val string_of_list : ('-> string) -> 'a list -> string
  val flatten : string list -> string
end