package opam-solver

  1. Overview
  2. Docs

CHANGES.html

CHANGES

Changes prefixed with "(*)" are potentially breaking to scripts or existing
repositories (changes that are automatically handled by the format upgrade tools
are not marked).

2.0.10:
* Fix reverting environment additions to PATH-like variables when several dirs
  added at once [#4861 @dra27]
* Ensure setenv can use package variables defined during the build
  [#4841 @dra27]

2.0.9:
* Fix the conflict with the environment variable name used by dune
  [#4535 @smorimoto - fix ocaml/dune#4166]
* Kill builds on Ctrl-C with bubblewrap [#4530 @kit-ty-kate - fix #4404]
* Linux: mount existing TMPDIR read-only, re-bind `$TMPDIR` to a separate tmpfs
  [#4589 @AltGr]
* Fix the sandbox check [#4589 @AltGr]
* Fix sandbox script shell mistake that made `PWD` read-write on remove actions
  [#4589 @AltGr]
* Port bwrap improvements to sandbox_exec [#4589 #4609 @AltGr]
* Fix W59 & E60 with conf flag handling (no url required) [#4550 @rjbou - fix #4549]
* Fix temporary file with a too long name causing errors on Windows
  [#4590 @AltGr]
* Switch to newer version of MCCS (based on newer GLPK) for src_ext
  [#4559 @AltGr]
* Fix version pin source retrieving: don't error if archive opam file is
  malformed [#4580 @rjbou]
* Release scripts: switch to OCaml 4.10.2 by default, add macos/arm64 builds by
  default [#4559 @AltGr]
* Fix opam-devel's tests on platforms without openssl, GNU-diff and a
  system-wide ocaml [#4500 @kit-ty-kate]
* Untag dune as a build dependency [#4229 @kit-ty-kate]
* Fix configure check in github actions [#4593 @rjbou]
* Add missing shell quoting to support space and special shell characters in
  switch directory path [#4707 @kit-ty-kate]
* The options `--root` and `--switch` are now reflected in environment
  variables when building packages so that calls to `opam` during build access
  the correct root and switch [#4668 @LasseBlaauwbroek]
* If opam root is different from the binary, allow reading it and try to read
  in best effort mode [#4638 @rjbou - fix #4636]
* Differentiate bad format from bad (opam) version with `Bad_version`
  exception, raised from `OpamFormat.check_opam_version` [#4638 @rjbou]
* Add `BestEffort` modules with reading functions that don't show errors, given
  the `opam_file_format` internal field [#4638 @rjbou - fix
* Require opam-file-format 2.1.3+ in order to enforce opam-version: "2.1" as
  first non-comment line [#4639 @dra27 - fix #4394]
* Fix opam switch creation not compatible compiler message
  [#4547 @rjbou - fix #4718]
* fish: fix deprecated redirection syntax `^` [#4736 @vzaliva]
* Fix `opam-version' field reading in new roots [#4742 @dra27 @rjbou]

2.0.8:
* Add colon for fish MANPATH fix. [#4084 @rjbou - fix #4078]
* No error when linked directory doesn't exist (e.g. XDG defined)
  [#4278 @kit-ty-kate]
* Add quotes to avoid space unwanted behaviors [#4278 @kit-ty-kate]
* Handle `CCACHE_DIR` environment variable in sandbox script.
  [#4087 @rjbou - fix #4079]
* Follow links of `~/.cache` & `~/.cache/dune` for bwrap call.
  [#4087 @rjbou - fix #4086]
* Don't overwrite user's sandbow script modification. [#4020 #4092 @rjbou]
* On MacOS sandbox script, always read write mount `/tmp`
  [#3742 @rjbou - fix ocaml/opam-repository#13339]
* Use version var in opam file instead of equal current version number in
  opamlib dependencies [#4178 @rjbou]
* Opam file build using dune [#4178 @rjbou #4229 @kit-ty-kate - fix #4173]
* Update opam file to 2.0 [#4371 @AltGr]
* Fix `arch` detection when using 32bit mode on ARM64 [#4462 @kit-ty-kate]
* Fix `arch` detection of i486 [#4462 @kit-ty-kate]
* The stdout of pre- and post-session hooks is now propagated to the user
  [#4382 @AltGr - fix #4359]
* Run switch pre/post sessions hooks [#4476 @rjbou - fix #4472]


2.0.7:
* Properly escape Windows paths on manpages [#4129 @AltGr @rjbou]
* Fix opam installer opam file [#4058 @rjbou]
* Fix various warnings [#4132 @rjbou @AltGr - fix 4100]
* Fix dune 2.5.0 promote-install-files duplication [#4132 @rjbou ]
* opam exec: display command not found message [#4133 @rjbou - fix #4131]

2.0.6:
* Don't remove git cache objects that may be used [#3831 @AltGr]
* Don't include .gitattributes in index.tar.gz [#3873 @dra27]
* Update FAQ uri [#3941 @dra27]
* Lock: add warning in case of missing locked file [#3939 @rjbou]
* Directory tracking: fix cached entries retrieving with precise
  tracking [#4038 @hannesm]
* Build:
  * Add sanity checks [#3934 @dra27]
  * Build man pages using dune [#3902] #dra27]
  * Add patch and bunzip check for make cold [#4006 @rjbou - fix #3842]
* Shell:
  * fish: add colon for fish manpath [#3886 @rjbou - fix #3878]
* Sandbox:
    * Add dune cache as rw [#4019 @rjbou - fix #4012]
    * Do not fail if $HOME/.ccache is missing [#3957 @mseri]
* opam-devel file: avoid copying extraneous files in opam-devel example [#3999 @maroneze]

2.0.5:
* Bump src_ext Dune to 1.6.3, allows compilation with OCaml 4.08.0. [#3887 @dra27]
* Support Dune 1.7.0 and later [#3888 @dra27 - fix #3870]
* Bump the ocaml_mccs lib-ext, to include latest changes [#3896 @AltGr]
* Fix cppo detection in configure [#3917 @dra27]
* Read jobs variable from OpamStateConfig [#3916 @dra27]
* Linting:
  * add check upstream option [#3758 @rjbou]
  * add warning for with-test in run-test field [#3765, #3860 @rjbou]
  * fix misleading `doc` filter warning [#3871 @rjbou]
* Fix typos [#3891 @dra27, @mehdid]

2.0.4:
* Add (rudimentary) error handling to `make man`
* Sandboxing on MacOS: considering the possibility that TMPDIR in unset
* display: Fix opam var display
* pin:
  * update source of (version) pinned directory
  * fix `--ignore-pin-depends` with autopin
  * fix pinnings not installing/upgrading already pinned packages (introduced in 2.0.2)
* opam clean: Ignore errors trying to remove directories
* remove wrong mismatching extra-files warning
* urls: fix hg opam 1.2 url parsing
* lint: warning error 47 on descr first line
* dirtrack: fix precise tracking mode
* system:
  * lock & signals: don't interrupt at non terminal signals
  * shell: fix fish manpath setting
  * git: use git -c diff.noprefix=false diff in case it is defined in user config

2.0.3:
* Fix manpage remaining $ (OPAMBESTEFFORT)
* Fix OPAMROOTISOK handling
* Regenerate missing environment file

2.0.2:
* Update build from jbuilder to dune
* Doc:
  * update man page
  * add message for deprecated options
  * reinsert removed ones
  * deprecate `no-aspcud`
* Pin:
  * upgrade pin depends on pinning
  * include descr & url files on pinning 1.2 opam files
* Sandbox:
  * handle symlinks in bwrap
  * allow use of internal sockets on
  * change one-line conditional to if statement which was incompatible with set -e
  * make /var readonly instead of empty and rw
* Path: resolve default opam root path
* System: suffix .out for read_command_output stdout files (#3644)
* Locked: check consistency with opam file when reading lock file to suggest regeneration message
* Show: remove pin depends messages
* Cudf: Fix closure computation in the presence of cycles
* List: Fix some cases of listing coinstallable packages
* Format upgrade: extract archived source files of version-pinned packages
* Core: add is_archive in OpamSystem and OpamFilename
* Init: don't fail if empty compiler given
* Lint: fix light_uninstall flag for error 52
* Update cold compiler to 4.07.1

2.0.1:
* Cold boot for MacOS/CentOS/Alpine
* Install checksum validation on MacOS
* Archive extraction for OpenBSD now defaults to using gtar
* Fix compilation of mccs on MacOS and Nix platforms
* Do not use GNU-sed specific features in the release Makefile, to fix build on OpenBSD/FreeBSD
* Cleaning to enable reproducible builds
* Update configure scripts
* git: fix git fetch by sha1 for git < 2.14
* linting: add test variable warning and empty description error
* upgrade: convert pinned but not installed opam files
* error reporting: more comprehensible error message for tar extraction, and upgrade of git-url compilers
* opam show: upgrade given local files
* list: as opam 2.0.0 list doesn't return non-zero code if list is empty, add --silent option for a silent output and returns 1 if list is empty

2.0.0
* Fixes and documentation
* Add `opam admin add-hashes` helper to add more secure hashes to the repository

2.0.0~rc3
* Fixes
* Added subcommand `switch link` to link a local switch to a defined one
* Added option `--assume-built` to install an already built pinned package
* Better Windows support
* Obsolete `opam config setup` option

2.0.0~rc2
* Fixes
* Much faster CUDF universe loading
* Much faster `opam env` and similar commands
* Added `opam admin check` for integrity checks on package repositories
* Added the ability to setup scripts on `opam init` from `.opamrc`
* Setup wrappers to sandbox builds by default, based on `bubblewrap` on Linux and `sandbox-exec` on MacOS
* Windows support for many aspects including parallel processes, environment
  variables setup, color console and utf8 (using specific C stubs)
* Better detection of the running shell
* Added shell helpers to automatically sync the environment on every prompt
* Support for selecting different backends if compiled in the `ocaml-mccs` solver lib

2.0.0~rc
* Fixes
* Support compiling on OCaml 4.06.0
* `opam env` and `opam exec` no longer set the `OPAMROOT` or `OPAMSWITCH`
  variables
* Allow in-source package metadata to be gathered in an `opam/` directory

2.0.0~beta6
* Small UI fixes
* Fixed a rare case of looping while processing actions

2.0.0~beta5
* Added timeout support to the solvers (default 1min)
* Added `--unlock-base` to allow changing the compiler of a switch
* Added the `{post}` dependency flag for packages to be installed together, but
  in no specific order. Use it for `base-*` packages.
* Fixed issue with OCaml 4.05.0 and installed programs not found (`Unix.execvpe`
  behaviour changes, https://caml.inria.fr/mantis/view.php?id=7640)
* Added a `pin-depends` field for easier development project dependency
  management and sharing
* Some optimisations to repository loading
* Fixed --best-effort with the built-in solver
* Shorten conflict messages even more
* Added `opam admin add-constraint` to amend a set of reverse dependencies in a
  repository
* New format for `depexts:`, easier to understand and more flexible. Depexts for
  the host can now be inferred by opam
* Optimised search criteria for the built-in solver
* Added a `build-id` variable to identify package builds
* Extend hooks (new variable `installed-files`, new session hooks)
* `opam switch create DIR` now installs packages defined in `DIR`
* Added system-related variables `arch`, `os`, `os-distribution`, `os-family`,
  `os-version`
* Added support for using `opam.locked` files instead of `opam` ones (`--locked`)
* Opam plugins are now made available across switches

2.0.0~beta4
* Building with OCaml < 4.02.3 is no longer supported
* Support compilation with a built-in mccs solver (removing run-time dependency
  to aspcud). Integrated half-working "heuristics" dropped.
* Remove jsonm and transitive uutf dependency.
* Switch build systems to `jbuilder`, including `lib-ext` support
* Allow repeated and or'd arguments to the `list` command
* Many code and build system portability fixes (Windows, BSD)
* Add `switch export --full` to include package definitions
* Add `announce:` and `stamp:` fields to repositories (`repo` files)
* Add a global cache of git objects (greatly speeding up multiple cloning)
* Allow `opam pin URL` without a package name
* Many error handling, messages and corner case fixes
* Updated the versions of dependencies
* Removed the unused `features:` field, and proposal for a new syntax
* More informative exit codes, and documentation thereof

2.0.0~beta3
* (*) Renamed `--soft-request` to `--best-effort`
* Fixed and improved speed of the package file tracking mechanism
* Added `--ignore-constraints-on` to temporarily bypass version constraints on
  some dependencies
* Fields `build-test:`, `build-doc:` are now deprecated, in favor of specifying
  conditions on the `with-test` and `with-doc` variables within the `build:`
  field, and of the new `run-test:` field
* (*) The command-line options have been renamed accordingly to `--with-test`
  and `--with-doc`
* Removed the `opam build` command
* Allow directories in place of package specifications for the `install`,
  `remove`, `upgrade`, `reinstall` and `show` commands. `opam` files can also be
  specified for `install` and `show`
* On local switch creation, check for package definitions and choose a
  compatible compiler if possible
* Add `opam install|remove --destdir` to copy the package's installed files
  somewhere else
* Allow `opam init --config=URL`

2.0~beta2
* Fixes (mainly to `opam build`)
* Faster coinstallability check

2.0~beta
* New, by-hash package archive caching system
* Simpler HTTP repository update
* Allow specification of multiple checksums per file
* Add `opam reinstall --pending`, to handle reinstallations of changed packages
* Support for defining trust anchors and repository validation hooks (for use
  with Conex)
* (*) Added `opam install --working-dir`, removed "mixed mode" for pinned packages
* Added `opam install --soft-request`, a non-failing "do what can be done"
  install mode
* Simplified, better conflict messages
* Added `opam list --coinstallable-with PKG`
* Added command `opam clean`
* Added `opam upgrade --all PKGS`, to do a full upgrade while guaranteeing
  `PKGS` are kept installed
* Allow `&` in conflict version constraints, e.g. `conflicts: "foo" {>= "3" & <
  "4"}`
* Added an `opam admin` command, with various, better organised repository admin
  commands, and remove the `opam-admin` tool
* Added an `opam build` command, to handle `opam` files found in the current
  directory
* Internally upgrade repositories in 1.2 format automatically to 2.0 (on `init`,
  `update` or `repo add`)

2.0~alpha5
* Merge stdout and stderr of child processes by default
* Fixed regression on solver call times
* Added a few shorter command aliases: `opam var` `opam exec`, `opam env` for
  the corresponding `opam config` commands
* (*) Simplified `opam repo` to only use `add` and `remove` in normal use,
  always meaning the current switch (only) if not specified otherwise
* (*) Restrict package names and versions to a reasonable character set
* Added support for SHA256 and SHA512 checksums
* Separated the opam format lexer/parser/printers into a separate
  `opam-file-format` library
* Reporting on package definition file errors only when the file will be used,
  and on by default (rather than all-off by default, and optionally all-on)
* `opam lint` now accept multiple input files
* `opam pin` interface yet improved, allow pinning all at once when a source
  directory contains multiple packages. `opam unpin <dir>` now allowed to cancel
  `opam pin <dir>`
* Updated version of the dose lib dependency
* (*) All patch files used in package definitions are now assumed to apply with
  `-p1`.

2.0~alpha4
* Added pre and post hooks for package command sections; allowed per-switch
  configuration
* Re-packaged the libraries and opam into 7 individual packages
* Convert opam 1.2 files on the fly when pinning
* `opam list` can now match patterns on versions
* Allow switches to be created below arbitrary directories using `opam switch
  create <dir>`. Automatically select a switch found in `$PWD`
* Add `install --reuse-build-dir` to be used together with `--keep-build-dir`
  and allow incremental recompilations
* Add `install --inplace-build` to build locally pinned packages directly in
  their source directory

2.0~alpha3
* (*) Refactored 'opam switch' command, creation of new switches no longer implicit
* (*) Allow per-switch selection of repositories
* Better update of the environment variables across switches or opam roots
* Add `opam install --restore` to recover packages that got removed due to
  errors or interruptions
* Added `synopsis:` and `description:` fields to integrate package descriptions
  in a single package definition file
* Removed the clever hack to skip downloads when uninstalling packages with
  `ocamlfind remove`; this now needs to be explicit through the
  `light-uninstall` flag.
* Provide `opam admin upgrade-format` to migrate package repositories to the new
  format, and create the proper OCaml compiler package wrappers
* Allow initialisation parameters from a .opamrc file, possibly completely
  overriding OCaml and opam.ocaml.org repository defaults

2.0~alpha2
* Extended the `opam lint` command-line options (package descriptions from opam
  metadata, warnings selection)
* Allow to create a new switch with `opam switch import`
* (*) Rewritten, much more flexible `opam list` command, with composable filters and
  output selection
* Delay the removals of packages as much as possible, avoiding most cases of
  mass uninstalled packages after a build failure
* Use a specific `opam` user-agent for downloads
* Remove globalisation of compiler package variables and support for
  `available:` constraints depending on those. Rewrite the repository
  accordingly to use explicit dependencies towards the compiler version.

2.0~alpha
* Changed license to LGPL 2.1 with linking exception, like OCaml (#2573)
* Track files installed by packages for cleaner removal and listing, add `opam
  search --owns-file` (#502, #1215) *this requires packages to properly separate
  build and install*, or unrelated files could get removed on package uninstall.
* Allow command wrappers around package build/install/remove commands to be
  defined in `~/.opam/config`; include sample Linux wrappers to restrict process
  permissions (e.g. ensure `build:` doesn't install)
* (*) Reworked `opam show`, with more fields and the ability to select raw fields
  from the opam file (#2122)
* Dropped ability to compile opam with OCaml earlier than 4.01.0
* Version constraints in `depopts:` allowed again, but with consistent semantics
* Allow mixing filters within dependency constraints
* More flexible `opam pin` command interface
* New internal file-lock handling, less obtrusive and safer
* New `switch export` format, now including local (pinned) package definitions
* No longer uses insecure arguments of curl/wget (#55, #2006, #2460)
* Installed package source and metadata are now handled per-switch, which is
  more reliable
* `opam pin edit` now allows changing version and even URL; better editor
  handling
* Discarded built-in variables based on polling OCaml (they are now defined by
  the compiler package at installation)
* Discarded compiler files, `opam switch` now based on packages with the
  `compiler` flag set
* Extended package configuration files
* Allow initialised opam without switch, initialised switch without compiler.
  Better handling of compiler install failure
* (*) Large API rework, switch and repository state now handled separately, used in
  functional style and avoiding many loads
* Git submodules are now automatically fetched by the git backend
* (*) Package definition files now prioritize `&` higher than `|`, like is most
  common
* (*) `opam list -a` now lists all available packages, even if they can't be
  installed (missing depends...), which is much faster (#2370)
* Added ability to reprint files with reduced diffs (#2363)
* Url and description can now be included within a single package definition
  `opam` file (#2328)
* Internal switch state now all below `<switch-dir>/.opam-switch/`, state in a
  single `switch-state` file (#2340)
* Add a `setenv:` field to package definitions, allowing to export environment
  variables (#2337, #2361)
* Built-in support for alternative solver `mccs` (#2333)
* `opam upgrade pkg` now prompts to install `pkg` if absent (#2327)
* (*) Assume plugin package and exec names start with "opam-" (#2316, #2317)
* Reworked, cleaner and bidirectional file manipulation library (kind of lenses)
  (#2325)
* Allow packages to specify extra remote overlay files within their definition
  files
* Heuristic to detect bad solutions and print a hint when no solver is available
* (*) Proper URL handling with version-control + transport handling (e.g.
  `git+https://`)
* Allow unescaped strings enclosed between `"""` markers in package definition
  files
* Don't rely on '.zip' extension for downloaded archive handling (#2289)
* `opam config` extended with `set`, `unset`, `expand` subcommands, allows
  variables in `exec` argument (#2268)
* `conflict:` field is now handled as a disjunction in all regards (#2267)
* Better handling of concurrent removal/build/install actions (#2161, #2266,
  #2370)
* Allow fields `x-fieldname` in package definition files, for use by external
  tools (#2265)
* Extended, more useful JSON output (including full package failure logs)
  (#2236)
* Use the switch paths that are defined in the switch configuration file (#2185)
* Allow package definition files to reference the package's own variables
  through "%{_:varname}%" (#2184)
* Initialise number of jobs from host's number of processors (#2180)

1.2.2
* Fixed wrong locks being taken during `switch reinstall` (#2051)
* Fixed `config report` that wasn't displaying the external solver (#2059)
* Follow glibc standard on detecting an UTF8 locale (#2065)
* Fixed issues with fish shell init scripts (#2063)
* Restored printing of commands with `--verbose` and `--dry-run`
* More concise printing of conflicts, with accurate version numbers
* Small improvements to the causes of actions
* Fixed issue causing the state cache not to be used on some OSes (OSX) (#2077)
* Added numbers to lint checks, and some new checks
* Restored the handling of a simple path to an `aspcud`-compatible executable
  in variable OPAMEXTERNALSOLVER (#2085)
* Added package universe output to new PEF format for diagnostics
* Prioritise newer versions even when the latest can't be installed (#2109)
* Automatically install plugins on `opam plugin-name` (#2092)
* Fixed a fd leak on solver calls (#2134)
* Accept opam files with errors when no debug or strict options are set, for
  easier format updates
* Add `opam list --resolve` to get dependencies as a consistent set of packages
* Provide the expected checksum to download commands
* Changed return code of `opam list` when no patterns are supplied and the list
  is empty

1.2.1
* Non-system compiler definitions without source are now allowed
* Better handling of compiler "base" packages allows one to move build instructions
  from compiler definitions to packages
* Rewritten action resolution mechanism to be based on atomic actions.
  Actions are not aborted anymore on first failure when there is no
  inter-dependency
* Rewritten parallel command execution engine
* Better display of actions, lots of improved messages
* `opam upgrade pkg` now fails if no new version of `pkg` can be installed
* fixed shell configuration for various shells
* Updated Dose dependency to 3.3
* Fixed behaviour of `opam switch` and related commands when a switch
  is locally set in a shell (through `OPAMSWITCH`)
* Better behaviour on failed `opam switch`
* New pinning mode: when pinning using version-control on a local path and
  without a branch specified, use current file tree, but limited to
  version-tracked files
* Faster and cleaner handling of downloads
* Now compiles with --safe-string on OCaml 4.02, better compatibility handling
* `opam unpin` now accepts multiple arguments
* `opam pin add <pkg>.<version> <target>` is now allowed to specify
  the advertised version
* Fixed bug leading to a bad `CAML_LD_LIBRARY_PATH` when switching from system
* Better `opam lint`, reporting warnings and errors, including format errors
* `opam config setup` now takes `--shell=` instead of `--sh`, `--csh`, `--fish`,
  `--zsh`
* Provisional feature: dependency flag `dev` is accepted (but does nothing)
* Provisional feature: field `features` in opam files implemented (beta), not
  for use in production
* Better definition of the `filter` language within opam files: propagates
  undefined values, bool-to-string converter syntax
* Provisional feature: `verbose` may be specified in package flags
* OPAM git-like plugins (commands of the form opam-xxx) are now searched in the
  correct OPAM path
* ~/.opam/config doesn't refer to OPAM's patch-version anymore, to allow
  downgrading
* Recognise <name>.opam files and directories when pinning a package to source
* Cleaned up debug and verbose messages, allow more control (`-v` can now be
  repeated)
* Pinning URL can now be explicit in the form `VC+URL`, e.g. `git+ssh://`,
  `hg+https://`...
* New flexible way to specify download and solver commands in `~/.opam/config`
  or in variables `OPAMFETCH` and `OPAMEXTERNALSOLVER`
* Lots of bug-fixes

1.2.0
* Handle locally installed self-upgrade opam binary (#1257)
* Added `opam list --depends-on` to show reverse dependencies (#693)
* More consistent checks on user-specified packages (#1241)
* Handle version constraints from the command line (`package>=version`) (#380)
* Output clear and concise messages on non solvable requests (#595, #1238)
* Much better internal parser. File locations in error messages (#1260, #1222)
* Removed dependency on camlp4 (#917)
* Fixed orphan packages handling (installed packages with no upstream) (#1198)
* Solver: optimize default preferences, depending on the solver version. New
  --criteria option (#1208)
* Better PATH modifications handling, add 'opam config env --inplace-path'
  (#1189, #1749)
* Specify variable overrides with environment OPAMVAR_name (#1153)
* Much better overall failsafe behaviour. Error reports on interruption (#1202,
  #1125, #1188...)
* Better action processing, with downloads first (#984)
* Much improved and faster interface with the Cudf solver (#1185, #1179)
* Ask the user to confirm actions whenever non-trivial (#1165)
* Added option --show-actions, made --dry-run simulate actions (#1142)
* Now prints meaningful causes explaining the actions (#1174)
* Fixed the stats displayed after update (#1161)
* Added variables to query ocaml native tools and arch (#979)
* Enable packagers to specify mirrors in url files (#807)
* Cleaned up the command-line interface (#1250, #1170, #1472). Incompatible
  changes:
  - 'opam config exec': takes command args directly rather than as a string (use
    -- for command arguments)
  - 'opam switch import|export': now have a mandatory FILE argument. '-f' no
    longer accepted.
  - 'opam pin' now takes a subcommand 'add', 'remove', 'list' or 'edit'.
  - 'opam config -env': no longer accepted for 'opam config env'
  - '--no-aspcud' is now '--use-internal-solver'.
  - Removed unused `opam config -I`, `opam config {asm,byte}{comp,link}`
  - '-r' isn't accepted anymore for '--root'
* Much extended pinning features, with the ability to use opam files from the
  source, pin packages that don't exist in a repository, fill a local opam
  file from a template, etc.
* Improved the internal solver to handle much larger problems (#1358)
* Use Unix.lockf for more reliable internal repository locks (#1299)
* Large performance improvements (#1363)
* Upgraded external dependencies to dose 3.2.2, ocamlgraph 1.8.5, cmdliner
  0.9.4, cudf 0.7
* Switch export file now include pinning data. Pinned package restored through
  'opam switch import' (#1393)
* Meaningful messages explaining why packages aren't available (#1419, #1398)
* More informative 'opam config list', more complete 'opam config var'
* Added 'opam config cudf-universe' for use in external tools
* opam files: added a 'dev-repo' field, and the experimental 'flags' field
  (#1217, #1472)
* Generate an opam-admin.top to easily apply scripts on a package repository
  (#1454). Provide scripts to ease adding new metadata ('dev-repo', etc.)
* Added 'opam upgrade --fixup' to save the day if your installed package set
  gets inconsistent.
* Fixed some return codes
* Added option to query (recursive) (reverse) dependencies and external
  dependencies to 'opam list
* Fixed opam init for some shells
* OPAM search now includes the 'syntax' and 'libs' fields in the search, as well
  as 'findlib' files
* 'opam source' command to get the package archive or upstream source easily
* Added an 'install' field in opam files, to separate from build
* Added the 'build', 'test' and 'doc' dependency flags to limit the scope
  of some dependencies
* Added Check for common dependencies at init time
* Pinning to a local git directory pins as path, but advertises pinning as git
  will now automatically select the pin kind to 'git' (#1555)
* Fixed init scripts for fish and csh (#952)
* More reliable and faster usage of git branches in the git backend
* Friendlier env variable handling (true/1/yes or false/0/no/"" for true and
  false) (#1608)
* Specify what is not rather than 'already up-to-date' when some packages
  couldn't be upgradedd (#1645)
* Override Make variables in sub-processes (#1617)
* 'opam update' no longer needed after 'opam repo add'
* Attempt to read files in 'permissive mode' when they claim a newer OPAM
  version (#1662)
* Fixed ignore of SIGPIPE in sub-processes (#1681)
* New shell completion scripts
* Added 'opam lint' to perform checks on opam files
* Use the published version of jsonm rather than include it (#1574)
* Changed findlib package name from 'opam' to 'opam-lib'
* Hundreds of smaller fixes and UI improvements

1.1.2
* Rewritten, more compatible build system based on Makefiles (#1362, #1424)

1.1.1
* Fix `opam-admin make <packages> -r` (#990)
* Explicitly prettyprint list of lists, to fix `opam-admin depexts` (#997)
* Tell the user which fields is invalid in a configuration file (#1016)
* Add `OpamSolver.empty_universe` for flexible universe instantiation (#1033)
* Add `OpamFormula.eval_relop` and `OpamFormula.check_relop` (#1042)
* Change `OpamCompiler.compare` to match `Pervasives.compare` (#1042)
* Add `OpamCompiler.eval_relop` (#1042)
* Add `OpamPackage.Name.compare` (#1046)
* Add types `version_constraint` and `version_formula` to `OpamFormula` (#1046)
* Clearer command aliases. Made `info` an alias for `show` and added the alias `uninstall` (#944)
* Fixed `opam init --root=<relative path>` (#1047)
* Display OS constraints in `opam info` (#1052)
* Add a new 'opam-installer' script to make `.install` files usable outside of opam (#1026)
* Add a `--resolve` option to `opam-admin make` that builds just the archives you need
  for a specific installation (#1031)
* Fixed handling of spaces in filenames in internal files (#1014)
* Replace calls to `which` by a more portable call (#1061)
* Fixed generation of the init scripts in some cases (#1011)
* Better reports on package patch errors (#987, #988)
* More accurate warnings for unknown package dependencies (#1079)
* Added `opam config report` to help with bug reports (#1034)
* Do not reinstall dev packages with `opam upgrade <pkg>` (#1001)
* Be more careful with `opam init` to a non-empty root directory (#974)
* Cleanup build-dir after successful compiler installation to save on space (#1006)
* Improved OSX compatibility in the external solver tools (#1074)
* Fixed messages printed on update that were plain wrong (#1030)
* Improved detection of meaningful changes from upstream packages to trigger recompilation

1.1.0 [Oct 2013]
* Fix update of dev packages (#962)
* Add support for zip source archives (#958)
* Add `OPAMCURL` environment variable to control invocation of curl (#960)
* Ensure repository redirects only happen for http remotes (#955)
* Turn malformed package files into warnings instead of hard errors (#957)
* Improve robustness of pinned package update (#949)
* Finish conversion of default repository to <https://opam.ocaml.org> (#948)
* Fix regression in handling archives with no extension (treat them as tar again) (#972)
* Fixed stale archives causing packages to be marked as NEW when they weren't (#945)

1.1.0RC1 [Oct 2013]
* Add `make cold` target to build OPAM without a system OCaml installed (#910)
* More informative error messages from `curl` (#905)
* Document use of `OPAMCOLOR` for optional ANSI coloring
* Add `opam-admin depexts` utility to rewrite OPAM files with external dependencies
* Added `repo` files for repository meta-information
* Added support for repo redirections
* Added scripts for automated testing in Travis
* Fixed bug in opam-admin that could keep not up-to-date archives
* Added an `opam-admin depexts` script to ease handling of external dependencies
* Added the `--deps-only` option to `opam install`
* Fixed upgrade with corner-cases of orphan packages
* Added a `note` display form
* Better handling of external solver failures, and added a `--no-aspcud` option
* Fixed unpinning of some installed packages
* Fixed upgrade of metadata from 1.0 when there are orphan custom compilers

1.1.0-beta [Sept 2013]
* Automatic backup before any operation which might alter the list of installed packages
* Support for arbitrary sub-directories for metadata repositories
* Lots of colors
* New option `opam update -u` equivalent to `opam update && opam upgrade --yes`
* New `opam-admin` tool, bundling the features of `opam-mk-repo` and `opam-repo-check` + new 'opam-admin stats' tool
* New `available`: field in opam files, superseding `ocaml-version` and `os` fields
* Package names specified on the command-line are now understood case-insensitively (#705)
* Fixed parsing of malformed opam files (#696)
* Fixed recompilation of a package when uninstalling its optional dependencies (#692)
* Added conditional post-messages support, to help users when a package fails to install for a known reason (#662)
* Rewrite the code which updates pin et dev packages to be quicker and more reliable
* Add {opam,url,desc,files/} overlay for all packages
* `opam config env` now detects the current shell and outputs a sensible default if no override is provided.
* Improve `opam pin` stability and start display information about dev revisions
* Add a new `man` field in `.install` files
* Support hierarchical installation in `.install` files
* Add a new `stublibs` field in `.install` files
* OPAM works even when the current directory has been deleted
* speed-up invocation of `opam config var VARIABLE` when variable is simple (eg. `prefix`, `lib`, ...)
* `opam list` now display only the installed packages. Use `opam list -a` to get the previous behavior.
* Inverse the depext tag selection (useful for `ocamlot`)
* Add a `--sexp` option to `opam config env` to load the configuration under emacs
* Purge `~/.opam/log` on each invocation of OPAM
* System compiler with versions such as `version+patches` are now handled as if this was simply `version`
* New `OpamVCS` functor to generate OPAM backends
* More efficient `opam update`
* Switch license to LGPL with linking exception
* `opam search` now also searches through the tags
* minor API chanages for `API.list` and `API.SWITCH.list`
* Improve the syntax of filters
* Add a `messages` field
* Add a `--jobs` command line option and add `%{jobs}%` to be used in OPAM files
* Various improvements in the solver heuristics
* By default, turn-on checking of certificates for downloaded dependency archives: use `./configure --disable-certificate-check` to go back to the previous behavior
* Check the md5sum of downloaded archives when compiling OPAM
* Improved `opam info` command (more information, non-zero error code when no patterns match)
* Display OS and OPAM version on internal errors to ease error reporting
* Fix `opam reinstall` when reinstalling a package which is a dependency of installed packages (regression introduced in 0.9.5)
* Export and read `OPAMSWITCH` to be able to call OPAM in different switches
* `opam-client` can now be used in a toplevel
* `-n` now means `--no-setup` and not `--no-checksums` anymore
* Fix support for FreeBSD
* Fix installation of local compilers with local paths endings with `.../ocaml/`
* Fix the contents of `~/.opam/opam-init/variable.sh` after a switch

1.0.0 [Mar 2013]
* Improve the lexer performance (thx to @oandrieu)
* Fix various typos (thx to @chaudhuri)
* Fix build issue (thx to @avsm)

0.9.6 [Mar 2013]
* Fix installation of pinned packages on BSD (thx to @smondet)
* Fix configuration for zsh users (thx to @AltGr)
* Fix loading of `~/.profile` when using dash (eg. in Debian/Ubuntu)
* Fix installation of packages with symbolic links (regression introduced in 0.9.5)

0.9.5 [Mar 2013]
* If necessary, apply patches and substitute files before removing a package
* Fix `opam remove <pkg> --keep-build-dir` keeps the folder if a source archive is extracted
* Add build and install rules using ocamlbuild to help distro packagers
* Support arbitrary level of nested subdirectories in packages repositories
* Add `opam config exec "CMD ARG1 ... ARGn" --switch=SWITCH` to execute a command in a subshell
* Improve the behaviour of `opam update` wrt. pinned packages
* Change the default external solver criteria (only useful if you have aspcud installed on your machine)
* Add support for global and user configuration for OPAM (`opam config setup`)
* Stop yelling when OPAM is not up-to-date
* Update or generate `~/.ocamlinit` when running `opam init`
* Fix tests on *BSD (thx Arnaud Degroote)
* Fix compilation for the source archive

0.9.4 [Feb 2013]
* Disable auto-removal of unused dependencies. This can now be enabled on-demand using `-a`
* Fix compilation and basic usage on Cygwin
* Fix BSD support (use `type` instead of `which` to detect existing commands)
* Add a way to tag external dependencies in OPAM files
* Better error messages when trying to upgrade pinned packages
* Display `depends` and `depopts` fields in `opam info`
* `opam info pkg.version` shows the metadata for this given package version
* Add missing `doc` fields in `.install` files
* `opam list` now only shows installable packages

0.9.3 [Feb 2013]
* Add system compiler constraints in OPAM files
* Better error messages in case of conflicts
* Cleaner API to install/uninstall packages
* On upgrade, OPAM now perform all the remove action first
* Use a cache for main storing OPAM metadata: this greatly speed-up OPAM invocations
* after an upgrade, propose to reinstall a pinned package only if there were some changes
* improvements to the solver heuristics
* better error messages on cyclic dependencies

0.9.2 [Jan 2013]
* Install all the API files
* Fix `opam repo remove repo-name`
* speed-up `opam config env`
* support for `opam-foo` scripts (which can be called using `opam foo`)
* 'opam update pinned-package' works
* Fix 'opam-mk-repo -a'
* Fix 'opam-mk-repo -i'
* clean-up pinned cache dir when a pinned package fails to install

0.9.1 [Jan 2013]
* Use ocaml-re 1.2.0

0.9.0 [Jan 2013]
* add a new `--fake` option to simulate build and installation of packages. Use this option this care, it can easily corrupt the state of OPAM.
* Better messages in case of error
* OPAM proposes better solutions to the user
* support for installed roots and auto-clean of unused packages
* rename `--cores` to `--jobs`
* better error messages for wrong argument of 'opam init'
* show the root causes of actions done by OPAM
* opam import and export now uses -f to specify the filename, and uses stdin and stdout if no filename is specified
* Fix environment initialisation for some corner-cases
* Add a way to specify how to run tests and build documentation for the packages
* Display homepage, authors, doc link, license with 'opam info'
* Improve `opam remove` efficiency when using `ocamlfind` command(s) only
* Git pinning now works with commits/tags/branches
* `opam init` works without preinstalled compiler
* Support for DARCS backends
* Each global command-line flag `xxx` as can be set using the `OPAMxxx` environment variable instead
* Better display of compiler switch (+ read compiler descriptions)
* Clearer error message when trying to pin a non-existing package
* Fix issue with pinning to version number
* Add a `shared` location to be used in OPAM files
* Improve (but break) the command-line interface by using cmdliner

0.8.2 [Dec 2012]
* Fix an issue with `opam reinstall` where packages were reinstalled in reverse order

0.8.1 [Nov 2012]
* Simplify string substitution in OPAM files
* Recompile the installed packages when the system compiler is upgraded
* Fix various regressions in pinned and dev packages introduced in 0.8.0

0.8.0 [Nov 2012]
* Improvements in the solver interface and API
* The solver now use an external SAT-solver (aspcud) if found in the path
* More expressive constraints in optional dependencies
* Clean-up the build directory when build succeeds

0.7.7 [Oct 2012]
* Add an `--alias` global command-line argument to overwrite the default alias value
* Allow more concurrency between no conflicting opam commands
* Upgrade to the latest version of DOSE and CUDF (solver libraries)
* Add repository priorities
* Create the default directories (`bin/`, `lib/` ...) when installing a new compiler

0.7.6 [Oct 2012]
* major internal API refactoring
* repositories are now versionned, and we try to auto-update when possible
* more expressive compiler constraints in opam files

0.7.5 [Oct 2012]
* dependencies can now be expressed by any formula (instead of just CNF)
* It's easier to compose the value of environment variable (ie. to write `%{lwt+ssl:enable}%`)
* Fix regression on init for rsync repositories

0.7.4 [Oct 2012]
* improve `opam pin`: the code is more robust and it is now possible to pin a package to a git repository
* add support for patches per package
* add `opam switch -import file` and `opam switch -export file`

0.7.3 [Sep 2012]
* Better user-message when no solution is found
* Improve the minimality of installed packages

0.7.2 [Sep 2012]
* Fix regression in init introcuced in 0.7.0
* Fix regression in update introduced in 0.7.0

0.7.1 [Sep 2012]
* Remove forgotten debug statement

0.7.0 [Sep 2012]
* report upgrade statistic on update
* do no ask y/n when installing compiler's base packages
* improve opam-mk-repo
* fix `opam search` to be caseless
* ability to filter some commands (depending on some predicates) in opam file
* improvements when packages disappear upstream
* check for ocaml 3.12.1 on configure
* tell the user to unset some potentially dangerous variables when running opam
* fix few git backend issues

0.6.0 [Sep 2012]
* semantics changes in `opam switch`
* solver improvements in case of install and remove
* better error reporting
* fix caching of package archives
* fix `~/.opam/repo/index` priorities

0.5.0 [Sep 2012]
* add opam search
* add opam reinstall
* ability to upgrade only a subset of packages
* lot of bug fixes in the rsync and curl backend
* better `--help` messages
* better information displayed to the user

0.4.0 [Aug 2012]
* better layout of repository files
* (partial) possibility to specify archive checksums
* if the archive is not on ocamlpro.com, download it upstream
* suffix +opam to the versions of archives available on ocamlpro.com
* prompt the user to evaluate `opam config -env` more often
* changes in meta-data aren't picked up by the CURL backen
* more modulare repository system: the 'kind' of repository is no more linked
  to the kind of package archives

0.3.2 [Aug 2012]
* fix regression for `opam switch` introduced in 0.3
* fix deletion of optional dependencies
* support for pinned packages
* fix compilation for ocaml 4.00
* fix compilation for *BSD

0.3.1 [Jul 2012]
* fix regression for `opam install` introduced in 0.3

0.3.0 [Jul 2012]
* improve parallel compilation of packages
* better recovery on compilation/installation errors
* first draft of version pinnig
* fix`'opam config -env` for old shells
* install the latest version of packages when possible
* more robust `opam update` (ie. old files are gc-ed)
* add a (more or less) generic way to install and use topfind

0.2.0 [Jul 2012]
* more robust switch command
* more robust parallel build (not yet activated by default)
* support for compiler-constraints in packages
* new solver heuristics
* improved performance on init with the rsync backend

0.1.0 [Jun 2012]
* Initial version
OCaml

Innovation. Community. Security.