# Module OpamFormat

    module OpamFormat: sig .. end

Format of OPAM configuration files.

    val empty : OpamTypes.file

The empty file

    val map : (string -> OpamTypes.value -> (string * OpamTypes.value) option) ->
           OpamTypes.file -> OpamTypes.file

map a file

    val variables : OpamTypes.file_item list -> (string * OpamTypes.value) list

Get all the variable definitions from a list of items

    val sections : OpamTypes.file_item list -> (string * OpamTypes.file_section) list

Get all the sections from a list of items

    val is_valid : OpamTypes.file_item list -> string list -> bool

Check whether a list of items contains only valid variable definitions

    val invalid_fields : OpamTypes.file_item list -> string list -> string list

Find all the invalid fields

## Parsing functions

    exception Bad_format of OpamTypes.pos option * string list * string

All the following parsing function raise `Bad_format` in case the input does not have the right format.

    val bad_format : ?pos:OpamTypes.pos -> ('a, unit, string, 'b) Pervasives.format4 -> 'a

Raise `Bad_format`.

    val string_of_bad_format : ?file:OpamTypes.filename -> exn -> string

    val add_pos : OpamTypes.pos -> exn -> exn

Adds a position to a Bad_format exception if it doesn't have one yet

    val value_pos : OpamTypes.value -> OpamTypes.pos

Get the position out of a value

    val values_pos : OpamTypes.value list -> OpamTypes.pos option

Get the position of the first element out of a value list

    val parse_bool : OpamTypes.value -> bool

Parse a boolean

    val parse_int : OpamTypes.value -> int

Parse an integer

    val parse_ident : OpamTypes.value -> string

Parse an ident

    val parse_string : OpamTypes.value -> string

Parse a string

    val parse_list : (OpamTypes.value -> 'a) -> OpamTypes.value -> 'a list

Parse a list of 'things'

    val parse_list_list : (OpamTypes.value -> 'a) -> OpamTypes.value -> 'a list

Parse a list of list of 'things'

    val parse_group : (OpamTypes.value -> 'a) -> OpamTypes.value -> 'a list

Parse a group of 'things'

    val parse_option : (OpamTypes.value -> 'a) ->
           (OpamTypes.value list -> 'b) -> OpamTypes.value -> 'a * 'b option

Parse a value and its option of 'things'

    val parse_single_option : (OpamTypes.value -> 'a) ->
           (OpamTypes.value -> 'b) -> OpamTypes.value -> 'a * 'b option

Parse a value and a single optional value

    val parse_string_option : (OpamTypes.value list -> 'a) -> OpamTypes.value -> string * 'a option

Parse a string with an optional argument

    val parse_string_list : OpamTypes.value -> string list

Parse a list of strings

    val parse_single_string : OpamTypes.value list -> string

Parse a single string

    val parse_pair : (OpamTypes.value -> 'a) ->
           (OpamTypes.value -> 'b) -> OpamTypes.value -> 'a * 'b

Parse a pair of strings

    val parse_or : (string * (OpamTypes.value -> 'a)) list -> OpamTypes.value -> 'a

Try to parse the value using function from the list. All the parsing functions are tried until one succeeds. The first argument is a debug message.

## Creation functions

    val make_bool : bool -> OpamTypes.value

Create a boolean

    val make_int : int -> OpamTypes.value

Create an integer

    val make_ident : string -> OpamTypes.value

Create an ident

    val make_string : string -> OpamTypes.value

Create a string

    val make_list : ('a -> OpamTypes.value) -> 'a list -> OpamTypes.value

Create a list of 'things'

    val make_string_list : string list -> OpamTypes.value

Create a list of strings

    val make_group : ('a -> OpamTypes.value) -> 'a list -> OpamTypes.value

Create a group of 'things'

    val make_option : ('a -> OpamTypes.value) ->
           ('b -> OpamTypes.value list) -> 'a * 'b option -> OpamTypes.value

Create a value and its optional arguments

    val make_pair : ('a -> OpamTypes.value) ->
           ('b -> OpamTypes.value) -> 'a * 'b -> OpamTypes.value

Create a pair

    val make_string_pair : string * string -> OpamTypes.value

Create a pair of strings

    val make_section : OpamTypes.file_section -> OpamTypes.file_item

Create a file section

    val make_variable : string * OpamTypes.value -> OpamTypes.file_item

Create a variable

## Printing functions

    val string_of_value : OpamTypes.value -> string

Print a value

    val string_of_values : OpamTypes.value list -> string

Print a list of values

    val string_of_file : simplify:bool -> OpamTypes.file -> string

Print a file

## Finding functions

    val assoc : OpamTypes.file_item list -> string -> (OpamTypes.value -> 'a) -> 'a

Get the value of a field

    val assoc_option : OpamTypes.file_item list -> string -> (OpamTypes.value -> 'a) -> 'a option

Get the value of a field. If the field does not exist, return None

    val assoc_default : 'a -> OpamTypes.file_item list -> string -> (OpamTypes.value -> 'a) -> 'a

Get the value of a field. If the variable does not exist, return a default value

    val assoc_list : OpamTypes.file_item list -> string -> (OpamTypes.value -> 'a list) -> 'a list

Get the value associated to a variable. If the variable does not exists, return []

    val assoc_string_list : OpamTypes.file_item list -> string -> string list

Get the string list associated to a variable. If the variable does not exist, return []

    val get_section_by_kind : OpamTypes.file_item list -> string -> OpamTypes.file_section

Get one section of a certain kind

    val get_all_section_by_kind : OpamTypes.file_item list -> string -> OpamTypes.file_section list

Get all the sections of a certain kind

    val assoc_sections : OpamTypes.file_item list ->
           string -> (OpamTypes.file_section -> 'a) -> 'a list

Get sections

## Formula

This section is dedicated to the parsing and creatin of dependency and conflict formaulas. It's maybe easier to do that directly in the parser ...

    val parse_package_name : ?expected:OpamTypes.name -> OpamTypes.value -> OpamTypes.name

    val parse_package_version : ?expected:OpamTypes.version -> OpamTypes.value -> OpamTypes.version

    val parse_formula : OpamTypes.value -> OpamTypes.formula

Parse package formula where AND are implicit: `x y -> x & y`

    val make_formula : OpamTypes.formula -> OpamTypes.value

Build a formula where AND are implicit.

    val parse_ext_formula : OpamTypes.value -> OpamTypes.ext_formula

Parse an AND formula where constraints are extended with leading keywords

    val make_ext_formula : OpamTypes.ext_formula -> OpamTypes.value

Make an AND formula where constraints are extended with leading keywords

    val parse_opt_formula : OpamTypes.value -> OpamTypes.ext_formula

Parse optional package formula where OR are implicit: `x y -> x | y`

    val make_opt_formula : OpamTypes.ext_formula -> OpamTypes.value

Build a formula where OR are implicit.

    val parse_compiler_version : OpamTypes.value -> OpamTypes.compiler_version

Parse compiler versions

    val parse_compiler_constraint : OpamTypes.value -> OpamTypes.compiler_constraint

Parse compiler constraints

    val make_compiler_constraint : OpamTypes.compiler_constraint -> OpamTypes.value

Build a compiler constraint

    val parse_os_constraint : OpamTypes.value -> (bool * string) OpamTypes.generic_formula

Parse an OS constraint

    val make_os_constraint : (bool * string) OpamTypes.generic_formula -> OpamTypes.value

Build an OS constraint

## Environment variables

    val parse_env_variable : OpamTypes.value -> string * string * string

Parsing

    val make_env_variable : string * string * string -> OpamTypes.value

Making

## filter expressions

    val parse_filter : OpamTypes.value list -> OpamTypes.filter

Parsing

    val make_filter : OpamTypes.filter -> OpamTypes.value list

Creation

    val parse_single_command : OpamTypes.value -> OpamTypes.arg list

Unfiltered argument list

    val make_single_command : OpamTypes.arg list -> OpamTypes.value

    val parse_command : OpamTypes.value -> OpamTypes.command

Parse a command

    val make_command : OpamTypes.command -> OpamTypes.value

Create a command

    val parse_commands : OpamTypes.value -> OpamTypes.command list

Parse a list of commands

    val make_commands : OpamTypes.command list -> OpamTypes.value

Create a list of commands

    val parse_messages : OpamTypes.value -> (string * OpamTypes.filter option) list

Parse a list of commands

    val make_libraries : (string * OpamTypes.filter option) list -> OpamTypes.value

Create a list of libraries/syntax

    val parse_libraries : OpamTypes.value -> (string * OpamTypes.filter option) list

Parse a list of libraries/syntax

    val make_flag : OpamTypes.package_flag -> OpamTypes.value

Create a package flag

    val parse_flag : OpamTypes.value -> OpamTypes.package_flag

Parse a package flag

## Tags

    val parse_tags : OpamTypes.value -> OpamTypes.tags

Parse tags

    val make_tags : OpamTypes.tags -> OpamTypes.value

Make tags

## Features

    val parse_features : OpamTypes.value -> (OpamVariable.t * string * OpamTypes.filter) list

Parse features list

    val make_features : (OpamVariable.t * string * OpamTypes.filter) list -> OpamTypes.value

Make features list