sig
  type tags = Ocamlbuild_pack.Tags.t
  type pathname = string
  type t =
    Ocamlbuild_pack.Command.t =
      Seq of t list
    | Cmd of spec
    | Echo of string list * pathname
    | Nop
  and spec =
    Ocamlbuild_pack.Command.spec =
      N
    | S of spec list
    | A of string
    | P of pathname
    | Px of pathname
    | Sh of string
    | T of tags
    | V of string
    | Quote of spec
  val atomize : string list -> spec
  val atomize_paths : string list -> spec
  val execute : ?quiet:bool -> ?pretend:bool -> t -> unit
  val execute_many :
    ?quiet:bool -> ?pretend:bool -> t list -> (bool list * exn) option
  val setup_virtual_command_solver : string -> (unit -> spec) -> unit
  val search_in_path : string -> string
  val reduce : spec -> spec
  val print : Format.formatter -> t -> unit
  val to_string : t -> string
  val string_of_command_spec : spec -> string
  val string_target_and_tags_of_command_spec :
    spec -> string * string * Ocamlbuild_pack.Tags.t
  val iter_tags : (Ocamlbuild_pack.Tags.t -> unit) -> t -> unit
  val fold_pathnames : (pathname -> '-> 'a) -> t -> '-> 'a
  val digest : t -> Digest.t
  val jobs : int ref
  val tag_handler : (Ocamlbuild_pack.Tags.t -> spec) ref
  val dump_parallel_stats : unit -> unit
  val deps_of_tags : Ocamlbuild_pack.Tags.t -> pathname list
  val dep : Ocamlbuild_pack.Tags.elt list -> pathname list -> unit
  val pdep :
    Ocamlbuild_pack.Tags.elt list ->
    Ocamlbuild_pack.Tags.elt -> (string -> pathname list) -> unit
end