7. Package Description Format Specification History¶
Package descriptions need to specify the version of the
specification they need to be interpreted in via the
cabal-version declaration. The following list describes
changes that occurred in each version of the cabal specification
relative to the respective preceding published version.
The sequence of specification version numbers is not
contiguous because it’s synchronised with the version of the
Cabal library. As a consequence, only even versions are
considered proper published versions of the specification as odd
versions of the
Cabal library denote unreleased development
branches which have no stability guarantee.
extra-dynamic-library-flavoursfield to specify non-trivial variants of dynamic flavours. It is
extra-library-flavoursbut for shared libraries. Mainly useful for GHC’s RTS library.
Free text fields (e.g.
description) preserve empty lines and indentation. In other words, you don’t need to add dots for blank lines.
License fields use identifiers from SPDX License List version
Common stanzas are now allowed also in the beginnning of conditional sections. In other words, the following is valid
library import deps if flag(foo) import foo-deps
Allow redundant leading or trailing commas in package fields with optional commas, such as
Require fields with optional commas to consistently omit or place commas between elements.
Changed the behavior of
extra-bundled-librariesfield. The naming convention of dynamic library files (e.g. generated by a custom build script) has changed. For library names prefixed with “C”, the dynamic library file name(s) must be of the form lib<library-name>.<dyn-library-extension>* instead of the old libC<library-name>-ghc<ghc-flavour><ghc-version>.<dyn-library-extension>
New set-notation syntax for
build-dependsfield documentation for examples.
Allow more whitespace in
Wildcards are disallowed in
pkgconfig-depends, Yet the pkgconfig format is relaxed to accept e.g. versions like
install-includeswhich are autogenerated (e.g. by a
- Wildcard matching has been expanded. All previous wildcard
expressions are still valid; some will match strictly more files
than before. Specifically:
- Double-star (
**) wildcards are now accepted for recursive matching immediately before the final slash; they must be followed by a filename wildcard (e.g.,
foo/**/bar.htmlare all invalid). As
**was an error in globs before, this does not affect any existing
.cabalfiles that previously worked.
- Wildcards now match when the pattern’s extensions form a suffix of
the candidate file’s extension, rather than requiring strict
equality (e.g., previously
*.htmldid not match
foo.en.html, but now it does).
- Double-star (
- License fields use identifiers from SPDX License List version
cxx-optionsfields added for suppporting bundled foreign routines implemented in C++.
extra-bundled-librariesfield for specifying additional custom library objects to be installed.
ifcontrol structure with support for
- Changed default rules of
build-typefield to infer “build-type:” for “Simple”/”Custom” automatically.
licensefield syntax changed to require SPDX expression syntax (using SPDX license list version
- Allow redundant leading or trailing commas in package fields (which
require commas) such as
mixinsfields added for supporting Backpack.
build-tool-dependsfield added for adding build-time dependencies of executable components.
custom-setup:autogen-modulesfield added for declaring modules which are generated at build time.
- Support for new PVP caret-style version operator (
^>=) added to
- Add support for new
- Add support for internal library stanzas.
- New CPP Macro
custom-setup:setup-dependsfield added for specifying dependencies of custom
- CPP Macros
MIN_VERSION_$pkgnameare now also generated for the current package.
- New CPP Macros
extra-framework-dirsfield added for specifying extra locations to find OS X frameworks.
this needs to be researched; there were only few changes between 1.12 and 1.18;