sig
  type name = string
  type package_name = string
  type url = string
  type unix_dirname = string
  type unix_filename = string
  type host_dirname = string
  type host_filename = string
  type prog = string
  type arg = string
  type args = OASISTypes.arg list
  type command_line = OASISTypes.prog * OASISTypes.args
  type findlib_name = string
  type findlib_full = string
  type compiled_object = Byte | Native | Best
  type dependency =
      FindlibPackage of OASISTypes.findlib_full *
        OASISVersion.comparator option
    | InternalLibrary of OASISTypes.name
  type tool =
      ExternalTool of OASISTypes.name
    | InternalExecutable of OASISTypes.name
  type vcs =
      Darcs
    | Git
    | Svn
    | Cvs
    | Hg
    | Bzr
    | Arch
    | Monotone
    | OtherVCS of OASISTypes.url
  type 'a conditional = 'OASISExpr.choices
  type plugin_kind =
      [ `Build | `Configure | `Doc | `Extra | `Install | `Test ]
  type plugin_data_purpose =
      [ `Build
      | `Clean
      | `Configure
      | `Distclean
      | `Doc
      | `Extra
      | `Install
      | `Other of string
      | `Test
      | `Uninstall ]
  type 'a plugin = 'a * OASISTypes.name * OASISVersion.t option
  type all_plugin = OASISTypes.plugin_kind OASISTypes.plugin
  type plugin_data =
      (OASISTypes.all_plugin * OASISTypes.plugin_data_purpose *
       (unit -> unit))
      list
  type custom = {
    pre_command : OASISTypes.command_line option OASISTypes.conditional;
    post_command : OASISTypes.command_line option OASISTypes.conditional;
  }
  type common_section = {
    cs_name : OASISTypes.name;
    cs_data : PropList.Data.t;
    cs_plugin_data : OASISTypes.plugin_data;
  }
  type build_section = {
    bs_build : bool OASISTypes.conditional;
    bs_install : bool OASISTypes.conditional;
    bs_path : OASISTypes.unix_dirname;
    bs_compiled_object : OASISTypes.compiled_object;
    bs_build_depends : OASISTypes.dependency list;
    bs_build_tools : OASISTypes.tool list;
    bs_interface_patterns : OASISSourcePatterns.t list;
    bs_implementation_patterns : OASISSourcePatterns.t list;
    bs_c_sources : OASISTypes.unix_filename list;
    bs_data_files :
      (OASISTypes.unix_filename * OASISTypes.unix_filename option) list;
    bs_findlib_extra_files : OASISTypes.unix_filename list;
    bs_ccopt : OASISTypes.args OASISTypes.conditional;
    bs_cclib : OASISTypes.args OASISTypes.conditional;
    bs_dlllib : OASISTypes.args OASISTypes.conditional;
    bs_dllpath : OASISTypes.args OASISTypes.conditional;
    bs_byteopt : OASISTypes.args OASISTypes.conditional;
    bs_nativeopt : OASISTypes.args OASISTypes.conditional;
  }
  type library = {
    lib_modules : string list;
    lib_pack : bool;
    lib_internal_modules : string list;
    lib_findlib_parent : OASISTypes.findlib_name option;
    lib_findlib_name : OASISTypes.findlib_name option;
    lib_findlib_directory : OASISTypes.unix_dirname option;
    lib_findlib_containers : OASISTypes.findlib_name list;
  }
  type object_ = {
    obj_modules : string list;
    obj_findlib_fullname : OASISTypes.findlib_name list option;
    obj_findlib_directory : OASISTypes.unix_dirname option;
  }
  type executable = {
    exec_custom : bool;
    exec_main_is : OASISTypes.unix_filename;
  }
  type flag = {
    flag_description : string option;
    flag_default : bool OASISTypes.conditional;
  }
  type source_repository = {
    src_repo_type : OASISTypes.vcs;
    src_repo_location : OASISTypes.url;
    src_repo_browser : OASISTypes.url option;
    src_repo_module : string option;
    src_repo_branch : string option;
    src_repo_tag : string option;
    src_repo_subdir : OASISTypes.unix_filename option;
  }
  type test = {
    test_type : [ `Test ] OASISTypes.plugin;
    test_command : OASISTypes.command_line OASISTypes.conditional;
    test_custom : OASISTypes.custom;
    test_working_directory : OASISTypes.unix_filename option;
    test_run : bool OASISTypes.conditional;
    test_tools : OASISTypes.tool list;
  }
  type doc_format =
      HTML of OASISTypes.unix_filename
    | DocText
    | PDF
    | PostScript
    | Info of OASISTypes.unix_filename
    | DVI
    | OtherDoc
  type doc = {
    doc_type : [ `Doc ] OASISTypes.plugin;
    doc_custom : OASISTypes.custom;
    doc_build : bool OASISTypes.conditional;
    doc_install : bool OASISTypes.conditional;
    doc_install_dir : OASISTypes.unix_filename;
    doc_title : string;
    doc_authors : string list;
    doc_abstract : string option;
    doc_format : OASISTypes.doc_format;
    doc_data_files :
      (OASISTypes.unix_filename * OASISTypes.unix_filename option) list;
    doc_build_tools : OASISTypes.tool list;
  }
  type section =
      Library of OASISTypes.common_section * OASISTypes.build_section *
        OASISTypes.library
    | Object of OASISTypes.common_section * OASISTypes.build_section *
        OASISTypes.object_
    | Executable of OASISTypes.common_section * OASISTypes.build_section *
        OASISTypes.executable
    | Flag of OASISTypes.common_section * OASISTypes.flag
    | SrcRepo of OASISTypes.common_section * OASISTypes.source_repository
    | Test of OASISTypes.common_section * OASISTypes.test
    | Doc of OASISTypes.common_section * OASISTypes.doc
  type section_kind =
      [ `Doc | `Executable | `Flag | `Library | `Object | `SrcRepo | `Test ]
  type package = {
    oasis_version : OASISVersion.t;
    ocaml_version : OASISVersion.comparator option;
    findlib_version : OASISVersion.comparator option;
    alpha_features : string list;
    beta_features : string list;
    name : OASISTypes.package_name;
    version : OASISVersion.t;
    license : OASISLicense.t;
    license_file : OASISTypes.unix_filename option;
    copyrights : string list;
    maintainers : string list;
    authors : string list;
    homepage : OASISTypes.url option;
    bugreports : OASISTypes.url option;
    synopsis : string;
    description : OASISText.t option;
    tags : string list;
    categories : OASISTypes.url list;
    conf_type : [ `Configure ] OASISTypes.plugin;
    conf_custom : OASISTypes.custom;
    build_type : [ `Build ] OASISTypes.plugin;
    build_custom : OASISTypes.custom;
    install_type : [ `Install ] OASISTypes.plugin;
    install_custom : OASISTypes.custom;
    uninstall_custom : OASISTypes.custom;
    clean_custom : OASISTypes.custom;
    distclean_custom : OASISTypes.custom;
    files_ab : OASISTypes.unix_filename list;
    sections : OASISTypes.section list;
    plugins : [ `Extra ] OASISTypes.plugin list;
    disable_oasis_section : OASISTypes.unix_filename list;
    schema_data : PropList.Data.t;
    plugin_data : OASISTypes.plugin_data;
  }
  type 'a quickstart_level =
      NoChoice of 'a
    | Beginner
    | Intermediate
    | Expert
  type 'a quickstart_question =
      Field
    | Text
    | Choices of 'a list
    | ExclusiveChoices of 'a list
  val odn_of_unix_dirname : OASISTypes.unix_dirname -> OASISDataNotation.t
  val odn_of_unix_filename : OASISTypes.unix_filename -> OASISDataNotation.t
  val odn_of_command_line :
    OASISTypes.prog * OASISTypes.args -> OASISDataNotation.t
  val odn_of_conditional :
    ('-> OASISDataNotation.t) ->
    'OASISExpr.choices -> OASISDataNotation.t
  val odn_of_package : OASISTypes.package -> OASISDataNotation.t
end