sig
  type t
  type compunit = string
  type filename = string
  val create : complete:bool -> Linkdeps.t
  val add :
    Linkdeps.t ->
    filename:Linkdeps.filename ->
    compunit:Linkdeps.compunit ->
    provides:Linkdeps.compunit list ->
    requires:Linkdeps.compunit list -> unit
  val required : Linkdeps.t -> Linkdeps.compunit -> bool
  type compunit_and_source = {
    compunit : Linkdeps.compunit;
    filename : Linkdeps.filename;
  }
  type error =
      Missing_implementations of
        (Linkdeps.compunit * Linkdeps.compunit_and_source list) list
    | Wrong_link_order of
        (Linkdeps.compunit_and_source * Linkdeps.compunit_and_source list)
        list
    | Multiple_definitions of
        (Linkdeps.compunit * Linkdeps.filename list) list
  val check : Linkdeps.t -> Linkdeps.error option
  val report_error :
    print_filename:(Stdlib.Format.formatter -> string -> unit) ->
    Stdlib.Format.formatter -> Linkdeps.error -> unit
end