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 -> 'OpamProcess.job) -> '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) -> t -> '-> '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 t -> 'a t       val singleton : key -> '-> '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 : ('-> '-> int) -> 'a t -> 'a t -> int       val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool       val iter : (key -> '-> unit) -> 'a t -> unit       val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b       val for_all : (key -> '-> bool) -> 'a t -> bool       val exists : (key -> '-> bool) -> 'a t -> bool       val filter : (key -> '-> bool) -> 'a t -> 'a t       val partition : (key -> '-> 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 : ('-> 'b) -> 'a t -> 'b t       val mapi : (key -> '-> 'b) -> 'a t -> 'b t       val to_string : ('-> string) -> 'a t -> string       val to_json : ('-> OpamJson.t) -> 'a t -> OpamJson.t       val values : 'a t -> 'a list       val keys : 'a t -> key list       val union : ('-> '-> '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 -> ('-> 'b) -> '-> '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) -> t -> '-> '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 t -> 'a t           val singleton : key -> '-> '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 : ('-> '-> int) -> 'a t -> 'a t -> int           val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool           val iter : (key -> '-> unit) -> 'a t -> unit           val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b           val for_all : (key -> '-> bool) -> 'a t -> bool           val exists : (key -> '-> bool) -> 'a t -> bool           val filter : (key -> '-> bool) -> 'a t -> 'a t           val partition : (key -> '-> 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 : ('-> 'b) -> 'a t -> 'b t           val mapi : (key -> '-> 'b) -> 'a t -> 'b t           val to_string : ('-> string) -> 'a t -> string           val to_json : ('-> OpamJson.t) -> 'a t -> OpamJson.t           val values : 'a t -> 'a list           val keys : 'a t -> key list           val union : ('-> '-> '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