sig
  type watermark =
      string *
      [ `Name
      | `Opam of Topkg_fpath.t option * string * string
      | `String of string
      | `Vcs of [ `Commit_id ]
      | `Version
      | `Version_num ]
  val define_watermarks :
    name:string ->
    version:string ->
    opam:Topkg_fpath.t ->
    Topkg_distrib.watermark list -> (string * string) list
  val watermark_file :
    (string * string) list -> Topkg_fpath.t -> unit Topkg_result.result
  val watermark_files :
    (string * string) list -> Topkg_fpath.t list -> unit Topkg_result.result
  type t
  val v :
    ?watermarks:Topkg_distrib.watermark list ->
    ?files_to_watermark:(unit -> Topkg_fpath.t list Topkg_result.result) ->
    ?massage:(unit -> unit Topkg_result.result) ->
    ?exclude_paths:(unit -> Topkg_fpath.t list Topkg_result.result) ->
    ?uri:string -> unit -> Topkg_distrib.t
  val watermarks : Topkg_distrib.t -> Topkg_distrib.watermark list
  val files_to_watermark :
    Topkg_distrib.t -> unit -> Topkg_fpath.t list Topkg_result.result
  val massage : Topkg_distrib.t -> unit -> unit Topkg_result.result
  val exclude_paths :
    Topkg_distrib.t -> unit -> Topkg_fpath.t list Topkg_result.result
  val uri : Topkg_distrib.t -> string option
  val codec : Topkg_distrib.t Topkg_codec.t
  val default_watermarks : Topkg_distrib.watermark list
  val default_files_to_watermark :
    unit -> Topkg_fpath.t list Topkg_result.result
  val default_massage : unit -> unit Topkg_result.result
  val default_exclude_paths : unit -> Topkg_fpath.t list Topkg_result.result
end