`sig module Base : OpamMisc.ABSTRACT module Dir : OpamMisc.ABSTRACT val cwd : unit -> Dir.t val rmdir : Dir.t -> unit val cleandir : Dir.t -> unit val mkdir : Dir.t -> unit val rec_dirs : Dir.t -> Dir.t list val dir_is_empty : Dir.t -> bool val dirs : Dir.t -> Dir.t list val in_dir : Dir.t -> (unit -> 'a) -> 'a val env_of_list : (string * string) list -> string array val exec : Dir.t -> ?env:(string * string) list -> ?name:string -> ?metadata:(string * string) list -> ?keep_going:bool -> string list list -> unit val move_dir : src:Dir.t -> dst:Dir.t -> unit val copy_dir : src:Dir.t -> dst:Dir.t -> unit val link_dir : src:Dir.t -> dst:Dir.t -> unit val exists_dir : Dir.t -> bool val dirname_dir : Dir.t -> Dir.t val basename_dir : Dir.t -> Base.t val to_list_dir : Dir.t -> Dir.t list val raw_dir : string -> Dir.t val with_tmp_dir : (Dir.t -> 'a) -> 'a val with_tmp_dir_job : (Dir.t -> 'a OpamProcess.job) -> 'a OpamProcess.job type t val of_string : string -> t val to_string : t -> string val to_json : t -> OpamJson.t module Set : sig type elt = t type t val empty : t val is_empty : t -> bool val mem : elt -> t -> bool val add : elt -> t -> t val singleton : elt -> t val remove : elt -> t -> t val union : t -> t -> t val inter : t -> t -> t val diff : t -> t -> t val compare : t -> t -> int val equal : t -> t -> bool val subset : t -> t -> bool val iter : (elt -> unit) -> t -> unit val fold : (elt -> 'a -> 'a) -> t -> 'a -> 'a val for_all : (elt -> bool) -> t -> bool val exists : (elt -> bool) -> t -> bool val filter : (elt -> bool) -> t -> t val partition : (elt -> bool) -> t -> t * t val cardinal : t -> int val elements : t -> elt list val min_elt : t -> elt val max_elt : t -> elt val choose : t -> elt val split : elt -> t -> t * bool * t val map : (elt -> elt) -> t -> t val choose_one : t -> elt val of_list : elt list -> t val to_string : t -> string val to_json : t -> OpamJson.t val find : (elt -> bool) -> t -> elt module Op : sig val ( ++ ) : t -> t -> t val ( -- ) : t -> t -> t val ( %% ) : t -> t -> t end end module Map : sig type key = t type +'a t val empty : 'a t val is_empty : 'a t -> bool val mem : key -> 'a t -> bool val add : key -> 'a -> 'a t -> 'a t val singleton : key -> 'a -> 'a t val remove : key -> 'a t -> 'a t val merge : (key -> 'a option -> 'b option -> 'c option) -> 'a t -> 'b t -> 'c t val compare : ('a -> 'a -> int) -> 'a t -> 'a t -> int val equal : ('a -> 'a -> bool) -> 'a t -> 'a t -> bool val iter : (key -> 'a -> unit) -> 'a t -> unit val fold : (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b val for_all : (key -> 'a -> bool) -> 'a t -> bool val exists : (key -> 'a -> bool) -> 'a t -> bool val filter : (key -> 'a -> bool) -> 'a t -> 'a t val partition : (key -> 'a -> bool) -> 'a t -> 'a t * 'a t val cardinal : 'a t -> int val bindings : 'a t -> (key * 'a) list val min_binding : 'a t -> key * 'a val max_binding : 'a t -> key * 'a val choose : 'a t -> key * 'a val split : key -> 'a t -> 'a t * 'a option * 'a t val find : key -> 'a t -> 'a val map : ('a -> 'b) -> 'a t -> 'b t val mapi : (key -> 'a -> 'b) -> 'a t -> 'b t val to_string : ('a -> string) -> 'a t -> string val to_json : ('a -> OpamJson.t) -> 'a t -> OpamJson.t val values : 'a t -> 'a list val keys : 'a t -> key list val union : ('a -> 'a -> 'a) -> 'a t -> 'a t -> 'a t val of_list : (key * 'a) list -> 'a t end type generic_file = D of Dir.t | F of t val create : Dir.t -> Base.t -> t val of_basename : Base.t -> t val raw : string -> t val prettify : t -> string val prettify_dir : Dir.t -> string val dirname : t -> Dir.t val basename : t -> Base.t val read : t -> string val open_in : t -> Pervasives.in_channel val open_out : t -> Pervasives.out_channel val remove : t -> unit val write : t -> string -> unit val exists : t -> bool val check_suffix : t -> string -> bool val add_extension : t -> string -> t val chop_extension : t -> t val rec_files : Dir.t -> t list val files : Dir.t -> t list val with_contents : (string -> 'a) -> t -> 'a val copy_in : ?root:Dir.t -> t -> Dir.t -> unit val move : src:t -> dst:t -> unit val link_in : t -> Dir.t -> unit val readlink : t -> t val is_symlink : t -> bool val is_exec : t -> bool val copy : src:t -> dst:t -> unit val install : ?exec:bool -> src:t -> dst:t -> unit -> unit val link : src:t -> dst:t -> unit val extract : t -> Dir.t -> unit val extract_in : t -> Dir.t -> unit val extract_generic_file : OpamFilename.generic_file -> Dir.t -> unit val starts_with : Dir.t -> t -> bool val ends_with : string -> t -> bool val remove_prefix : Dir.t -> t -> string val remove_suffix : Base.t -> t -> string val download : overwrite:bool -> ?compress:bool -> ?checksum:string -> t -> Dir.t -> t OpamProcess.job val download_as : overwrite:bool -> ?compress:bool -> ?checksum:string -> t -> t -> unit OpamProcess.job val patch : t -> Dir.t -> unit val digest : t -> string val checksum : t -> string list val checksum_dir : Dir.t -> string list val touch : t -> unit val chmod : t -> int -> unit val with_flock : ?read:bool -> t -> ('a -> 'b) -> 'a -> 'b val copy_files : src:Dir.t -> dst:Dir.t -> unit module OP : sig val ( / ) : Dir.t -> string -> Dir.t val ( // ) : Dir.t -> string -> t end module Attribute : sig type t val of_string : string -> t val to_string : t -> string val to_json : t -> OpamJson.t module Set : sig type elt = t type t val empty : t val is_empty : t -> bool val mem : elt -> t -> bool val add : elt -> t -> t val singleton : elt -> t val remove : elt -> t -> t val union : t -> t -> t val inter : t -> t -> t val diff : t -> t -> t val compare : t -> t -> int val equal : t -> t -> bool val subset : t -> t -> bool val iter : (elt -> unit) -> t -> unit val fold : (elt -> 'a -> 'a) -> t -> 'a -> 'a val for_all : (elt -> bool) -> t -> bool val exists : (elt -> bool) -> t -> bool val filter : (elt -> bool) -> t -> t val partition : (elt -> bool) -> t -> t * t val cardinal : t -> int val elements : t -> elt list val min_elt : t -> elt val max_elt : t -> elt val choose : t -> elt val split : elt -> t -> t * bool * t val map : (elt -> elt) -> t -> t val choose_one : t -> elt val of_list : elt list -> t val to_string : t -> string val to_json : t -> OpamJson.t val find : (elt -> bool) -> t -> elt module Op : sig val ( ++ ) : t -> t -> t val ( -- ) : t -> t -> t val ( %% ) : t -> t -> t end end module Map : sig type key = t type +'a t val empty : 'a t val is_empty : 'a t -> bool val mem : key -> 'a t -> bool val add : key -> 'a -> 'a t -> 'a t val singleton : key -> 'a -> 'a t val remove : key -> 'a t -> 'a t val merge : (key -> 'a option -> 'b option -> 'c option) -> 'a t -> 'b t -> 'c t val compare : ('a -> 'a -> int) -> 'a t -> 'a t -> int val equal : ('a -> 'a -> bool) -> 'a t -> 'a t -> bool val iter : (key -> 'a -> unit) -> 'a t -> unit val fold : (key -> 'a -> 'b -> 'b) -> 'a t -> 'b -> 'b val for_all : (key -> 'a -> bool) -> 'a t -> bool val exists : (key -> 'a -> bool) -> 'a t -> bool val filter : (key -> 'a -> bool) -> 'a t -> 'a t val partition : (key -> 'a -> bool) -> 'a t -> 'a t * 'a t val cardinal : 'a t -> int val bindings : 'a t -> (key * 'a) list val min_binding : 'a t -> key * 'a val max_binding : 'a t -> key * 'a val choose : 'a t -> key * 'a val split : key -> 'a t -> 'a t * 'a option * 'a t val find : key -> 'a t -> 'a val map : ('a -> 'b) -> 'a t -> 'b t val mapi : (key -> 'a -> 'b) -> 'a t -> 'b t val to_string : ('a -> string) -> 'a t -> string val to_json : ('a -> OpamJson.t) -> 'a t -> OpamJson.t val values : 'a t -> 'a list val keys : 'a t -> key list val union : ('a -> 'a -> 'a) -> 'a t -> 'a t -> 'a t val of_list : (key * 'a) list -> 'a t end val to_string_list : t -> string list val of_string_list : string list -> t val base : t -> Base.t val md5 : t -> string val perm : t -> int option val create : Base.t -> string -> int -> t end val to_attribute : Dir.t -> t -> OpamFilename.Attribute.t end`