# Module OASISFeatures

    module OASISFeatures: sig .. end

    module MapPlugin: Stdlib.Map.Make(sig

    type t = OASISTypes.plugin_kind * OASISTypes.name

    val compare : 'a -> 'a -> int

    end)

    module Data: sig .. end

    type origin =

`|` | `Field of `string * string``
`|` | `Section of `string``
`|` | `NoOrigin`

    type stage =

`|` | `Alpha`
`|` | `Beta`

    val string_of_stage : stage -> string

    val field_of_stage : stage -> string

    type publication =

`|` | `InDev of `stage``
`|` | `SinceVersion of `OASISVersion.t``

    type t = {

`` | `name : `string`;`
`` | `plugin : `OASISTypes.all_plugin option`;`
`` | `publication : `publication`;`
`` | `description : `unit -> string`;`

`}`

    val all_features : (string, t) Stdlib.Hashtbl.t

    val since_version : string -> publication

    val alpha : publication

    val beta : publication

    val to_string : t -> string

    val data_check : t ->
           Data.t -> origin -> string option

    val data_assert : t -> Data.t -> origin -> unit

    val data_test : t -> Data.t -> bool

    val package_test : t -> OASISTypes.package -> bool

    val create : ?plugin:OASISTypes.all_plugin ->
           string -> publication -> (unit -> string) -> t

    val get_stage : string -> publication

    val list : unit -> t list

    val features : t

    val flag_docs : t

    val flag_tests : t

    val pack : t

    val section_object : t

    val dynrun_for_release : t

    val compiled_setup_ml : t

    val disable_oasis_section : t

    val no_automatic_syntax : t

    val findlib_directory : t

    val findlib_extra_files : t

    val source_patterns : t