package

(package ...)

Define package-specific metadata.

(name <string>)

The name of the package.

This must be specified.

(synopsis <string>)

A short package description.

(description <string>)

A longer package description.

(depends <dep-specification>)

Package dependencies, as dep_specification.

(conflicts <dep-specification>)

Package conflicts, as dep_specification.

(depopts <dep-specification>)

Optional package dependencies, as dep_specification.

(tags <tags>)

A list of tags.

(deprecated_package_names <name list>)

A list of names that can be used with the deprecated_library_name stanza to migrate legacy libraries from other build systems that do not follow Dune’s convention of prefixing the library’s public name with the package name.

(license ...)

New in version 2.0.

The same as (and takes precedences over) the corresponding global field.

(authors ...)

New in version 2.0.

The same as (and takes precedences over) the corresponding global field.

(maintainers ...)

New in version 2.0.

The same as (and takes precedences over) the corresponding global field.

(source ...)

New in version 2.0.

The same as (and takes precedences over) the corresponding global field.

(bug_reports ...)

New in version 2.0.

The same as (and takes precedences over) the corresponding global field.

(homepage ...)

New in version 2.0.

The same as (and takes precedences over) the corresponding global field.

(documentation ...)

New in version 2.0.

The same as (and takes precedences over) the corresponding global field.

(sites ...)

Define a site.

(sites (<section> <name>) ...) defines a site named <name> in the section <section>.

Adding libraries to different packages is done via the public_name and package fields. See library section for details.

The list of dependencies dep_specification is modelled after opam’s own language. The syntax is a list of the following elements:

op                ::=  '=' | '<' | '>' | '<>' | '>=' | '<='
filter            ::=  :dev | :build | :with-test | :with-doc | :post
constr            ::=  (<op> <version>)
logop             ::=  or | and
dep               ::=  <name>
                       (<name> <filter>)
                       (<name> <constr>)
                       (<name> (<logop> (<filter> | <constr>))*)
dep_specification ::=  <dep>+

Filters will expand to any opam variable name if prefixed by :, not just the ones listed in filter. This also applies to version numbers. For example, to generate depends: [ pkg { = version } ], use (depends (pkg (= :version))).

Note that the use of a using stanza (see using) doesn’t automatically add the associated library or tool as a dependency. They have to be added explicitly.