package opam-format

  1. Overview
  2. Docs



Changes prefixed with "(*)" are potentially breaking to scripts or existing
repositories (changes that are automatically handled by the format upgrade tools
are not marked). Those prefixed with "(+)" are new command/option (since

* [BUG] Variables are now expanded in build-env (as for setenv) [#5352 @dra27]
* Correctly handle empty environment variable additions [#5350 @dra27]
* Skip empty environment variable additions [#5350 @dra27]
* [BUG] Fix passing `archive-mirrors` field from init config file to config
  [#5315 @hannesm]
* git, hg: Use the full SHA1 revision instead of just the 8 first characters
  [#5342 @reynir]
* [BUG] Fix opam installing packages without checking their checksum when the
  local cache is corrupted in some case [#5538 @kit-ty-kate]

* Add support for OCaml 5.0. Dose3 >= 6.1 and base64 >= 3.1.0 are now required [#5357 @kit-ty-kate @dra27 - fix #5354]
* [BUG] Fix all empty conflict explanation messages [#5378 @kit-ty-kate - partial fix #4373]

* [BUG] Fix `opam init` and `opam init --reinit` when the `jobs` variable has
  been set in the opamrc or the current config. [#5056 @rjbou]
* When inferring a 2.1+ switch invariant from 2.0 base packages, don't filter
  out pinned packages as that causes very wide invariants for pinned compiler
  packages [#5176 @dra27 - fix #4501]
* [BUG] Fix an internal error on repository upgrade from OPAM 1.2
  [#4965 @AltGr]
* Some optimisations to `opam list --installable` queries combined with other
  filters [#4882 @AltGr - fix #4311]
* Improve performance of some opam list combinations (e.g. `--available`,
  `--installable`) [#4999 @kit-ty-kate]
* Improve performance of `opam list --conflicts-with` when combined with other
  filters [#4999 @kit-ty-kate]
* Improve performance of `opam show` by as much as 300% when the package to
  show is given explicitly or is unique [#4998 @kit-ty-kate - fix #4997 and
  partially #4172]
* [BUG] `opam var` no longer fails if no switch is set
  [#5027 @rjbou - fix #5025]
* [BUG] Setting a variable with option `--switch <sw>` fails instead of writing
  an invalid `switch-config` file [#5027 @rjbou]
* When a field is defined in switch and global scope, try to determine the
  scope also by checking switch selection [#5027 @rjbou]
* [BUG] Handle external dependencies when updating switch state pin status (all
  pins), instead as a post pin action (only when called with `opam pin`
  [#5047 @rjbou - fix #5046]
* [BUG] When reinstalling a package that has a dirty source, if uncommitted
  changes are the same than the ones stored in opam's cache, opam consider that
  it is up to date and nothing is updated [4879 @rjbou]
* Stop Zypper from upgrading packages on updates on OpenSUSE
  [#4978 @kit-ty-kate]
* Clearer error message if a command doesn't exist
  [#4971 @kit-ty-kat - fix #4112]
* [BUG] Remove windows double printing on commands and their output
  [#4940 @rjbou]
* Actually allow multiple state caches to co-exist
  [#4934 @dra27 - actually fixes #4554]
* Update cold compiler to 4.13 to avoid issues with glibc 2.34 on Unix
  [#5017 @dra27]
* Bump opam-file-format to 2.1.4 [#5117 @kit-ty-kate - fix #5116]
* Fix some empty conflict explanations
  [#4982 @kit-ty-kate - partially fix #4373]
* Port some tests from master [#4841 #4974 #4861 #4915 #4979 #5004 #5006 #5015
  #5024 #5025 #5031 #5131 #5176 @AltGr @dra27 @kit-ty-kate]
* Update test engine to allow for additional tests [#4913 #4966 #4979 #5004
  #5009 #5024 #5097 @AltGr @kit-ty-kate @rjbou]
* Update for git protocol deprecation on GitHub [#5097 @rjbou]
* When building opam, do not fail if curl/wget is missing [#5223 #5233 @kit-ty-kate]

* Fallback on dnf if yum does not exist on RHEL-based systems [#4825 @kit-ty-kate]
* Use --no-depexts in CLI 2.0 mode [#4908 @dra27]
* bootstrap: update ocaml version (fixes the compilation of opam with mingw) [#4927 @kit-ty-kate]

* Fix typo in error message for opam var [#4786 @kit-ty-kate - fix #4785]
* Run the sandbox check in the temporary directory [#4787 @dra27 - fix #4783]
* OpamSystem: avoid calling Unix.environment at top level [#4789 @hannesm]
* Homebrew: Add support for casks and full-names [#4801 @kit-ty-kate]
* Fix the cold target in presence of an older OCaml compiler version on macOS
  [#4802 @kit-ty-kate - fix #4801]
* Archlinux: handle virtual package detection [#4833 @rjbou - partial fix #4759]
* Disable the detection of available packages on RHEL-based distributions.
  This fixes an issue on RHEL-based distributions where yum list used to detect
  available and installed packages would wait for user input without showing
  any output and/or fail in some cases [#4791 @kit-ty-kate - fixes #4790]
* Handle empty environment variable updates - missed cherry-pick from 2.0
  [#4840 @dra27]
* Fix vendored build on mingw-w64 with g++ 11.2 [#4835 @dra27]
* Put back support for switch creation with packages argument and
  `--packages` option with cli 2.0, and a specific error message for cli 2.1
  [#4853 @rjbou - fix #4843]
* Fix reverting environment additions to PATH-like variables when several dirs
  added at once [#4861 @dra27]
* Fix dose3 download url since gforge is gone [#4870 @avsm]
* Ensure setenv can use package variables defined during the build
  [#4841 @dra27]
* Fix `set-invariant: default repos were loaded instead of switch repos
  [#4866 @rjbou]

* Set DEBIAN_FRONTEND=noninteractive for unsafe-yes confirmation level
  [#4735 @dra27 - partially fix #4731]
* Fix 2.1~alpha2 to 2.1 format upgrade with reinit [#4750 #4756 @rjbou - fix #4748]
* Fix bypass-check handling on reinit [#4750 @rjbou]
* fish: fix deprecated redirection syntax `^` [#4736 @vzaliva]
* Bump src_exts and fix build compat with Dune 2.9.0 [#4754 @dra27]
* Fix depext alpine tagged repositories handling [#4758 @rjbou]

* Remove OPAMZ3DEBUG evironment variable [#4720 @rjbou - fix #4717]
* Fix format upgrade when there is missing local switches in the config file
  [#4715 @rjbou - fix #4713]
* Fix not recorded local switch handling, with format upgrade [#4715 @rjbou]
* Set opam root version to 2.1 [#4715 @rjbou]
* Improved and extended tests [#4715 @rjbou]

* (*) Environment variables initialised only at opam client launch, no more via
  libraries [#4606 #4703 @rjbou]
* (*) Deprecated `build-doc`, `build-test`, `make` flags [#4581 @rjbou]
* (+) Add `--confirm-level` and `OPAMCONFIRMLEVEL` for automatic answering
  [#4582 @rjbou - fix #4168; #4683 @dra27 - fix #4682; #4691 @rjbou - fix #4682]
* (+) Add `--no` [#4582 @rjbou]
* (+) Add a `--with-0install-solver` option to the configure script to enable
  the 'builtin-0install' solver [#4646 @kit-ty-kate]
* Add default cli mechanism: deprecated options are accepted (in the major
  version) if no cli is specified [#4575 @rjbou]
* Add `opam config` deprecated subcommands in the default cli
  [#4575 @rjbou - fix #4503]
* Add cli versioning for opam environment variables [#4606 @rjbou]
* Add cli versioning for enums of flags with predefined enums [#4606 @rjbou]
* Clearer messages about using --cli and OPAMCLI [#4655 @dra27]
* 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]
* Add cli versioning for enums of flags with predefined enums [#4626 @rjbou]
* Preprocess `--confirm-level` for plugins calls/install [#4694 @rjbou]
* Ensure the symlink for a plugin is maintained on each invocation
  [#4621 @dra27 - partially fixes #4619]
* Initialise environment variables for plugins call/install [#4582 @rjbou]
* Expect plugins to end in .exe on Windows [#4709 @dra27]
* Introduce a `default-invariant` config field, restore the 2.0 semantics for
  `default-compiler` [#4607 @AltGr]
* Fix default invariant with no system compiler [#4644 @AltGr - fix #4640]
* Perform an hard upgrade on intermediate roots, ie root from `2.1~alpha/beta`,
  and keep a light upgrade from `2.0` [#4638 @rjbou]
* Send the 'opam root layout update' message to stderr [#4692 @AltGr]
* If opam root is different from the binary, allow reading it and try to read
  in best effort mode [#4638 @rjbou - fix #4636]
* Don't check opam system dependencies on reinit after a format upgrade
  [#4638 @rjbou]
* Fix `sys-ocaml-cc`, `sys-ocaml-arch` and `sys-ocaml-libc` when no system
  compiler installed [#4706 @dra27]
* Fix `Not_found` (config file) in config report [#4570 @rjbou]
* Config report: Print variables of installed compilers and their (installed)
  dependencies [#4570 @rjbou]
* Don't patch twice file [#4529 @rjbou]
* With `--deps-only`, set dependencies as root packages
  [#4964 @rjbou - fix #4502]
* Keep global lock only if root format upgrade is performed
  [#4612 @rjbou - fix #4597]
* Improve installation times by only tracking files listed in `.install`
  instead of the whole switch prefix when there are no `install:` instructions
  (and no preinstall commands)
  [#4494 @kit-ty-kate @rjbou; #4667 @dra27 - fix #4422]
* Scrub OPAM* environment variables added since 2.0 from package builds to
  prevent warnings when a package calls opam [#4663 @dra27 - fix #4660]
* Correct the message when more than one depext is missing [#4678 @dra27]
* Only display one conflict message when they are all owing to identical
  missing depexts [#4678 @dra27]
* Don't exclude base packages from rebuilds (made some sense in opam 2.0 with
  base packages but doesn't make sense with 2.1 switch invariants) [#4569 @dra27]
* Don't refer to base packages in messages any more
  [#4623 @dra27 - fixes #4572]
* Give the correct command when demonstrating switch creation
  [#4675 @dra27 - fixes #4673]
* On switch loading, if invariant is inferred and a write lock required, write
  the file [#4638 @rjbou]
* Don't look for lock files for pin depends [#4511 @rjbou - fix #4505]
* Fetch sources when pinning an already pinned package with a different url
  when using working directory [#4542 @rjbou - fix #4484]
* Don't ask for confirmation for pinning base packages (similarly makes no
  sense with 2.1 switch invariants) [#4571 @dra27]
* Fix version pin source retrieving: mustn't error if archive opam file is
  malformed [#4580 @rjbou]
* `opam list --silent` renamed to `--check` [#4595 @dra27 - fix #4323]
* Include doc field in opam-show [#4567 @dra27 - partially fix #4565]
* Fix `switch` global variable resolving [#4685 @rjbou - fix #4684]
* Fix `hash` package variable resolving [#4687 @rjbou]
* Lint: Fix W59 & E60 for conf packages (no url required)
  [#4550 @rjbou - fix #4549]
* Lint: Fix W59 & E60 with VCS urls, don't check upstream if url has VCS
  backend [#4635 @rjbou]
* Lint: Add E67 checksum specified with non archive url [#4635 @rjbou]
* Lint: Disable subpath warning E63,W64 [#4638 @rjbou]
* Lint: Fix manpage listing [#4708 @rjbou]
* Don't write lock file with `--read-only', `--safe`, and `--dryrun`
  [#4562 @rjbou - fix #4320]
* Make `opam lock` consistent with `opam install`, on local pin always take
  last opam file even if uncommitted [#4562 @rjbou - fix #4320]
* Opam file: Fix `features` parser [#4507 @rjbou]
* Opam file: Rename `hidden-version` to `avoid-version` [#4527 @dra27]
* Opam file: Fix rewriting with preserved format empty field error
  [#4634 @rjbou - fix #4628]
* Opam file: Switch config: Defined `invariant` field as an option to
  differentiate when it is not defined [#4638 @rjbou]
* Opam file: Differentiate bad format from bad (opam) version with
  `Bad_version` exception, raised from `OpamFormat.check_opam_version`
  [#4638 @rjbou]
* Opam file: Always print the `opam-version` field on files [#4638 @rjbou]
* Opam file: Config: add `opam-root-version` field as a marker for the whole
  opam root [#4638 @rjbou - fix #4636]
* Opam file: Add `BestEffort` modules with reading functions that don't show
  errors, given the `opam_file_format` internal field [#4638 @rjbou - fix #4636]
* Depext: Handle macport variants [#4509 @rjbou - fix #4297]
* Depext: Always upgrade all the installed packages when installing a new
  package on Archlinux [#4556 @kit-ty-kate]
* Depext: Handle some additional environment variables (`OPAMASSUMEDEPEXTS`,
  `OPAMNODEPEXTS`) [#4587 @AltGr]
* Depext: Improve messages to hint that answering `no` doesn't abort
  installation [#4591 @AltGr]
* Depext: Add support for non-interactive mode in macports [#4676 @kit-ty-kate]
* Depext: Handling of packages of tagged repositories for alpine
  [#4700 @rjbou - fix #4670]
* Depext: Clarify some `assume-depexts` related messages
  [#4671 @AltGr - partial fix #4662]
* Depext: Warn the user if epel-release is missing and unavailable depexts are
  detected [#4679 @dra27 fix #4669]
* Depext: Ignore config yes automatic answering when asking confirmation to run
  install commands [#4698 @rjbou - fix #4680]
* Sandbox: Fix the conflict with the environment variable name used by dune
  [#4535 @smorimoto - fix ocaml/dune#4166]
* Sandbox: Kill builds on Ctrl-C with bubblewrap
  [#4530 @kit-ty-kate - fix #4400]
* Sandbox: Linux: mount existing TMPDIR read-only, re-bind `$TMPDIR` to a
  separate tmpfs [#4589 @AltGr]
* Sandbox: Fix the sandbox check [#4589 @AltGr]
* Sandbox: Fix sandbox script shell mistake that made `PWD` read-write on
  remove actions [#4589 @AltGr]
* Sandbox: Port bwrap improvements to sandbox_exec [#4589 @AltGr]
* Sandbox: Fix realpath use for macos, partial revert of #4589 [#4609 @AltGr]
* Add missing shell quoting to support space and special shell characters in
  switch directory path [#4707 @kit-ty-kate]
* Rename `state.cache` to include the `OpamVersion.magic()` string. All .cache
  files are deleted if any cache file is written to, allowing multiple versions
  of the library to co-exist without constantly regenerating it
  [#4642 @dra27 - fix #4554]
* Fix Cudf preprocessing [#4534 #4627 @AltGr - fix #4624]
* Allow to upgrade to a hidden-version package if a hidden-version package is
  already installed [#4525 @kit-ty-kate]
* Add support for a few select criteria useful to CI to the 0install solver:
  `+count[version-lag,solution]` to always choose the oldest version available,
  `+removed` to not try to keep installed packages [#4631 @kit-ty-kate]
* Fix opam-devel's tests on platforms without openssl, GNU-diff and a
  system-wide ocaml [#4500 @kit-ty-kate]
* Use dune to run reftests [#4376 @emillon]
* Restrict `extlib` and `dose` version [#4517 @kit-ty-kate]
* Restrict to `opam-file-format.2.1.2` [#4495 @rjbou]
* Require `opam-file-format.2.1.3+` in order to enforce `opam-version: "2.1"`
  as first non-comment line [#4639 @dra27 - fix #4394]
* Switch to newer version of MCCS (based on newer GLPK) for src_ext
  [#4559 @AltGr]
* Bump dune version to 2.8.2 [#4592 @AltGr]
* Bump the minimal dune requirement to dune 1.11 [#4437 @dra27 @kit-ty-kate]
* 4.12 compatibility [#4437 @dra27 @kit-ty-kate]
* Cold compiler updated to 4.12 [#4616 @dra27]
* Fix build from source when a dune-project file is presented in the parent
  directory [#4545 @kit-ty-kate]
* Fix build from source when a dune-project file is presented in the parent
  directory [#4545 @kit-ty-kate - fix #4537]
* Fix opam-devel.install not to install two files called opam [#4664 @dra27]
* Build release tags as non-dev versions, as for release tarballs
  [#4665 @dra27 - fix #4656]
* Disable dev version for tests (needed for format upgrade test) [#4638 @rjbou]
* Add a hint for missing `openssl` in `make cold` [#4702 @rjbou]
* Remove test field from opam-devel, they need the network [#4702 @rjbou]
* Update src_ext for Dune and MCCS [#4704 @dra27]
* Release scripts: switch to OCaml 4.10.2 by default, add macos/arm64 builds by
  default [#4559 @AltGr]
* Release scripts: add default cli version check on full archive build
  [#4575 @rjbou]
* Arg: Generalise `mk_tristate_opt` to `mk_state_opt` [#4575 @rjbou]
* Arg: Fix `mk_state_opt` and rename to `mk_enum_opt` [#4626 @rjbou]
* Arg: Add `mk_enum_opt_all` for state flags that appears more than once
  [#4582 @rjbou]
* Fix `opam exec` on native Windows when calling cygwin executables
  [#4588 @AltGr]
* Fix temporary file with a too long name causing errors on Windows
  [#4590 @AltGr]
* CLI: Add flag deprecation and replacement helper [#4595 @rjbou]
* Win32 Console: fix VT100 support [#3897 #4710 @dra27]
* Tidied the opam files [#4620 @dra27]
* Externalise cli versioning tools from `OpamArg` into `OpamArgTools`
  [#4606 @rjbou]
* Each library defines its own environment variables, that fills the config
  record [#4606 @rjbou]
* Harden cygpath wrapper [#4625 @dra27]
* Reset the plugin symlinks when the root is upgraded
  [#4641 @dra27 - partial fix for #4619]
* Formalise opam dev version detection with `OpamVersion.is_dev_version`
  [#4665 @dra27]
* Add `OpamStd.String.is_prefix_of` [#4694 @rjbou @dra27]
* Fix `OpamStd.Format.pretty_list`: `last` argument dropped if list contains
  more than 2 elements [#4694 @rjbou]
* Run the shell hooks with closed stdin (bash, zsh) [#4692 @AltGr]
* Improved and extended tests
  [#4376 #4504 #4545 #4612 #4668 #4612 #4634 #4672 #4638 #4702 #4697 #4697
  @AltGr @dra27 @emillon @rjbou]
* Improve Github Actions
  [#4593 #4575 #4610 #4610 #4618 #4606 #4695 #4695 @AltGr @dra27 @rjbou]
* Improve documentation
  [#4496 #4506 #4513 #4637 #4681 #4702
  @dannywillems @eth-arm @kit-ty-kate @rjbou @UnixJunkie]

* (*) Implemented CLI version compatibility layer [#4385 @rjbou]
* (*) Return code 31 (`Sync_error`) instead of code 40
  (`Package_operation_error`) when all failures happend during fetching
  [#4416 @rjbou - fix #4214]
* (+) Add `--download-only` flag [#4071 @Armael @rjbou - fix #4036]
* (+) Provide `opam update --depexts` to request an update of the system package manager databases [#4379 @AltGr - fix #4355]
* Set OPAMCLI=2.0 during package action commands [#4492 @kit-ty-kate]
* Fix sandbox check on first `opam init` [#4370 @rjbou - fix #4368]
* Print shell-appropriate eval command on `opam init` [#4427 @freevoid]
* Fix init script check in csh [#4482 @gahr]
* The stdout of `pre-` and `post-session` hooks is now propagated to the user [#4382 @AltGr - fix #4359]
* `post-install` hooks are now allowed to modify or remove installed files [#4388 @lefessan]
* Add support for switch-specific pre/post sessions hooks [#4476 @rjbou - fix #4472]
* Ensure we don't advertise upgrades to hidden versions [#4477 @AltGr - fix #4432]
* Fix `opam remove --autoremove <PKG>` to not autoremove unrelated packages [#4369 @AltGr - fix #4250 #4332]
* Fix cases where `opam remove -a` could trigger conflicts in the presence of orphan packages [#4369 @AltGr - fix #4250 #4332]
* Fix `--update-invariant` when removing or changing package name [#4360 @AltGr - fix #4353]
* Fix updates of the invariant with `--update-invariant` [#4431 @AltGr]
* Fix cleanup of build dirs for version pinned packages [#4436 @rjbou - fix #4255]
* Fix opamfile format upgrade on pinning [#4366 @rjbou - fix #4365]
* Fix `pin --show` actually pinning [#4367 @rjbou - fix #4348]
* When several pins are needed, do their fetching in parallel [#4399 @rjbou - fix #4315]
* Don't cleanup VCS pin source directories [#4399 @rjbou]
* Fix `--working-dir` with local switches [#4433 @rjbou]
* Add package variable `opamfile-loc`, containing the location of installed package opam file [#4402 @rjbou]
* Fix `arch` detection when using 32bit mode on ARM64 [#4462 @kit-ty-kate]
* Fix `arch` detection of i486 [#4462 @kit-ty-kate]
* Skip loading the switch state for variable lookup when possible [#4428 @rjbou]
* Fix package variables display when no config file is found [#4428 @rjbou]
* Fix `opam option depext-bypass-=["XXX"]` [#4428 @rjbou]
* Lint: add a check that strings in filtered package formula are booleans or variables [#443 @rjbou - fix #4439]
* Fix handling of filename-encoded pkgname in opam files [#4401 @AltGr - fix ocaml-opam/opam-publish#107]
* Don't recompile when modifying the package flags [#4477 @AltGr]
* Add depext support for NetBSD and DragonFlyBSD [#4396 @kit-ty-kate]
* Fix depexts on OpenBSD, FreeBSD and Gentoo: Allow short names and full name paths for ports-based systems [#4396 @kit-ty-kate]
* Handle the case where `os-family=ubuntu` as `os-family=debian` [#4441 @alan-j-hu]
* Update opam's opam files to 2.0 [#4371 @AltGr]
* Makefile: Add rule `custom-libinstall` for `opam-custom-install` use [#4401 @AltGr]
* Use the archive caches when running `opam admin cache` [#4384 @AltGr - fix #4352]
* Fix explosion of `opam admin check --cycles` on repositories with huge cliques [#4392 @AltGr]
* Much improved format-preserving printer [#4298 #4302 @rjbou - fix #3993]
* Fix missing conflict message when trying to remove required packages [#4362 @AltGr]
* Fix the Z3 backend for upgrades [#4393 @AltGr]
* Fix cases where opam would wrongly complain about action cycles [#4358 @AltGr - fix #4357]
* Fix permission denied fallback for openssl [#4449 @Blaisorblade - fix #4448]
* Add debug & verbose log for patch & subst applications [#4464 @rjbou - fix #4453]
* Be more robust w.r.t. new caches updates when `--read-only` is not used [#4467 @AltGr - fix #4354]
* Improved and extended tests [#4375 #4395 #4428 #4385 #4467 #4475 #4483 @emillon @rjbou @AltGr @freevoid @dra27]
* Switched to Github actions [#4463 @rjbou]

* Reduced startup times, in particular for `opam exec` [#4341 @altgr]
* Fixed the sandboxing check on fresh inits [#4342 @altgr]
* Fixed cases where `--with-version` was not respected by `opam pin` [#4346 @altgr]
* Upgraded the bootstrap OCaml compiler from 4.09.1 to 4.11.1 [#4242 @avsm @dra27 @MisterDA @rjbou]

* (*) `--cli` / `OPAMCLI` option added [#4316 @dra27]
* `--help/--version` documented in wrong section for aliases [#4317 @dra27]
* `opam lock --help` missing common information {#4317 @dra27]
* (+) `--yes` passed to all commands, and plugins [#4316 @dra27]
* On init, check availability of sandbox and propose to disable
  [#4284 @rjbou - fix #4089]
* config upgrade: on the fly upgrade if no write lock required [#4313 @rjbou]
* (*) Add `pin scan` subcommand to list available pins [#4285 @rjbou]
* (*) Add `--normalise` option to print a normalised list when scanning, that can
  be taken by `opam pin add` [#4285 @rjbou]
* (*) Add `with-version` option to set the pinned package version [#4301 @rjbou]
* Add error message in case git repo is empty [#4303 @rjbou - fix #3905]
* Lock: Support -d as alias of --direct-only (to match plugin) [#4319 @dra27]
* Switch: Support -n as an alias of --no-action (to match opam-pin)
  [#4324 @dra27]
* List: <field> form no longer advertised as valid for --columns [#4322 @dra27]
* Admin: <field> form no longer advertised as valid for --columns in list
  [#4322 @dra27]
* Solver: Don't penalise packages with more recent 'hidden-versions'
  [#4312 @AltGr]
* `` refactor, including adding `OpamClient.PIN.url_pins` to pin
  a list of package with url  [#4285 #4301 @rjbou]
* `OpamPinCommand.source_pin', for new package confirmation, don't check that
  no opam file is given as argument [#4301 @rjbou]
* CLI: Provide all functions in the client library [#4329 @AltGr]
* Process: don't display status line if not verbose, and status line disabled
  [#4285 @rjbou]
* Optimise package name comparison [#4328 @AltGr - fix #4245]

* Confirmation on non-compiler switch invariant: not on dryrun, Y by default
  [#4289 @AltGr]
* (*) Fix pin kind automatic detection consistency [#4300 @rjbou]: With `opam
  pin target', when opam file is not versioned and at root, vcs-pin the package
  instead of path-pin, and with `opam pin add nv target', take opam file even
  if not versioned.
* External dependencies: Fix non-interactive mode on OpenSuse [#4293
* src-ext: bump topkg to 1.0.2 and dune to 2.6.2, with a second compiler
  built in case main one is < 4.07.0 (dune restriction) [#4294 @dra27]
* Allow Z3 backend to return sub-optimal solutions on timeout, add
  `OPAMSOLVERALLOWSUBOPTIMAL` environment variable [#4289 @AltGr]
* Add an optional solver relying on opam-0install-cudf [#4240 @kit-ty-kate]

* Remove m4 from the list of recommended tools [#4184 @kit-ty-kate]
* Fix config solver field ignored at init [#4243 @rjbou - fix #4241]
* Fix atoms formula restriction with `--all` at upgrade [#4221 @rjbou - fix
* Copy instead of calling rsync when archives are in a local cache [#4270
* Opam file build using dune, removal of opam-%.install makefile target
  [#4178 @rjbou #4229 @kit-ty-kate - fix #4173]
* Use version var in opam file instead of equal current version number in
  opamlib dependencies [#4178 @rjbou]
* src ext: fix extlib url [#4248 @rjbou]
* Add `_build` to rsync exclusion list [#4230 @rjbou - fix #4195]
* Recursive opam file lookup: ignore `_build` [#4230 @rjbou]
* Assume-built fix & rewriting [#4211 @rjbou]
* Fix autoremove env var handling [#4219 @rjbou - fix #4217]
* Fix Not_found with `opam switch create . --deps` [#4151 @AltGr]
* Package Var: resolve self `name` variable for orphan packages [#4228 @rjbou
  - fix #4224]
* (*) Reject (shell) character on switch names [#4237 @rjbou - fix #4231]
* Fix `OPAMSWITCH` empty string setting, consider as unset [#4237 @rjbou]
* opam-installer: For paths, remove use of empty switch in favor of a
  context-less module [#4237 @rjbou]
* Add missing depext to unavailable reasons [#4194 @rjbou #4279 @rjbou - fix
* (*) Bump config file version to 2.1 (new depext fields) [#4280 @rjbou - fix
* Add depext handling on new pinned packages [#4194 @rjbou - fix #4189]
* Don't keep unpinned package version if it exists in repo [#4073 @rjbou -
  fix #3630]
* Fix path resolving when pinning with `file://` [#4209 @rjbou - fix #4208]
* (*) Disable recursive & subpath pinning (only present experimentally in opam
  2.1.0~alpha) [#4252 @rjbou]
* Add switch depext-bypass as modifiable field [#4194 @rjbou - fix #4177]
* Add `--no-depexts` option to disable depexts packages unavailability [#4194
  @rjbou - fix #4205]
* Warn if packages are not listed because of depexts unavailability [#4194
  @rjbou - fix #4205]
* (*) Display error message for all not found packages [#4179 @rjbou - fix
* (*) Keep package order given via cli [#4179 @rjbou - fix #4163]
* `--sort`` apply to with all options, not only `--just-file` [#4179 @rjbou]
* Add scope display to Not found message [#4192 @rjbou]
* No scope needed for variable display [#4192 @rjbou - fix #4183]
* Fix package variable resolution [#4192 @rjbou - fix #4182]
* opam option: Fix messages advertising a command in an obsolete format
  [#4194 @rjbou]
* E65: check that url local paths are absolute [#4209 @rjbou]
* Fix arch query depext [#4200 @rjbou]
* Add message when adding a package to `depext-bypass` [#4194 @rjbou]
* Fix performance issue of depext under Docker/debian [#4165 @AltGr]
* Handle debian virtual packages [#4269 @AltGr @rjbou - fix #4251]
* Refactor `OpamSysInteract` package status [#4152 #4200 @rjbou]
* Add environment variables handling on depext query [#4200 @rjbou]
* Add depext Macport support [#4152 @rjbou]
* Homebrew/depext: add no auto update env var for install, accept `pkgname`
  and `pkgname@version` on query [#4200 @rjbou]
* Tag packages with missing depexts in Cudf [#4235 @AltGr]
* Force LC_ALL=C for depext query commands [#4200 @rjbou]
* Put back opam-depext-2.0's behaviour with regards to asking users' consent
  before installing system packages [#4168 @kit-ty-kate @rjbou]
* Add OPAMDEPEXTYES env variable to pass --yes options to system package
  manager [#4168 @kit-ty-kate @rjbou]
* Fix system install command dryrun [#4200 @rjbou]
* (+) Add --depext-only to install only external dependencies, regardless of
  config depext status [#4238 @rjbou]
* Move system install confirmation message after opam packages install [#4238
* Error if '--depext-only' is given with '--assume-depexts' or '--no-depexts'
  [#4238 @rjbou]
* Sanddbox: no error when linked directory doesn't exist (e.g. XDG defined)
  [#4278 @kit-ty-kate]
* Sandbox: add quotes to avoid space unwanted behaviors [#4278 @kit-ty-kate]
* Fix temp files repository cleaning [#4197 @rjbou]
* Fix admin cache synchronisation message [#4193 @rjbou - fix #4167]
* Fix mismatching extra files detection [#4198 @rjbou]
* Fix Cudf generation for compat with external solvers [#4261 @AltGr]
* Check for a solution before calling the solver [#4263 @AltGr]
* Add the package flag 'hidden-version' to discourage selection by the solver
  [#4281 @AltGr]
* Tweak the default criteria to handle 'missing-depexts' and 'hidden-version'
  flags [#4281 @AltGr]
* Disable chrono when timestamps are disables [#4206 @rjbou]
* Expose some functionality in the `OpamAction`, `OpamPath` and
  `OpamSwitchState` modules for use without a `switch` value (introduce a
  functor to permit replicating switch layout in different contexts) [#4147
* Std: Add map_reduce to Set and Map [#4263 @AltGr]
* Fix regression in command resolution from #4072 (ocaml code for looking up
  commands in PATH) [#4265 @dra27]
* Use OCaml 4.09.1 for the make cold target [#4257 @dra27]
* Add show cram test [#4206 @rjbou]
* Add envrionnement variable handling on cram test [#4206 @rjbou]

* Recursive & subpath based pin [#3499 @rjbou @hngrgr - fix #3174 #3477]
* Define switch invariants rather than "base packages" [#3894 @AltGr]
* Don't warn on switch creation with 'ocaml' as invariant [#4108 @AltGr]
* Better error handling on switch creation [#4121 @AltGr]
* Integrate lock plugin [#3746 @rjbou - fix #3734 #3769 #3694]
* Add configuration modifications as opam config subcommands [#3992 @rjbou]
* opam var and opam option outside of opam config [#4116 @rjbou - fix #4119]
* Enable option var optimisation switch load [#4138 @rjbou]
* Integrate depext plugin [#3975 @rjbou @AltGr - fix #3790 #1519 #2426 #3692]
* Enable command/output display only from verbose level 3 [#4141 @rjbou]
* Add `opam install --check <pkg>` checks that `<pkg>` dependencies are already
  installed in the switch. It reports missing ones and exits with 1, 0 otherwise.
  It is used on a check only purpose, additionally to `--deps-only`.
  [#3854 @rjbou - fix #3823]
* Add `opam install <pkg> --ignore-conflicts` to use with `--deps-only` in case
  it is needed to install dependencies without taking conflicts into account.
  [#3853 @rjbou - fix #3846]
* Add `opam show --just-file <file>` shows information of a given file,
  without loading the switch state. It can be combined with other options, as
  field filter `--field`. It deprecates `--file` option. [#3729 @rjbou - fix
* Add `opam show --all-versions <pkg>` displays information of all versions of
  the given package. It can be used in combination of field filter. [#3867 @rjbou
  - fix #2980]
* Add `opam show --sort <pkg>` display on stdout a sorted opam file: all fields
  are alphabetically sorted. [#3866 @rjbou - fix ocaml/opam2web#173]
* opam show better error handling. [#4118 @rjbou - fix #3875]
* `opam show --field` are no longer required to end with a colon.
  [#3931 @rjbou]
* (*) `opam show --normalise` disable terminal width wrapping. [#3868 @rjbou -
  fix #3751]
* `opam env --check` permit to indicates if an opam environment is
  synchronized: returns 0 if up-to-date, 1 otherwise. [#4074 @rjbou - fix #3725]
* Add `opam switch export --freeze` to record VCS commit hash when a VCS url is
  specified. [#4055 @hannesm]
* Add `opam switch export --full` option, include extra-files in switch export,
  on import create an overlay directory with the file contents. [#4040 @hannesm]
* Optimize repository loading: we store the repository contents as .tar.gz
  files in ~/.opam/repo instead. [#3752 @AltGr - fix #3721]
* Handle failure or interruption of tar during `opam update`. [#3861 @AltGr]
* Fallback in case repository archive doesn't exist. [#4008 @rjbou]
* In case repository archive is corrupted, delete it and ask to launch an
  update. [#4075 @rjbou - fix #4053]
* When adding a repository, an error is displayed in case of mismatching urls,
  now both urls are displayed. [#4086 @rjbou - fix #4085]
* Handle url backend change to VCS of a package from repository. [#4007 @rjbou
  - fix #3991]
* Allow local compiler switch creation. [#3720 @rjbou - fix #3713]
* Switch creation, fix multiple compiler candidate. [#3884 @rjbou - fix #3874]
* Make reinstall handling stricter. [#3907 @AltGr]
* (*) `opam list --resolve`: restrain test dependencies to direct one instead of
  listing all test dependencies of queried package(s) [#3923 @rjbou - fix
* Update pin-depends confirmation message to add a skip option. [#3852 @rjbou -
  fix #3840]
* Add OPAMDROPWORKINGDIR environment variable for C. [#3792 @rjbou - fix #3727]
* Don't restrain copy to versioned file. [#3759 @rjbou]
* Don't fetch sources when working-dir is set. [#4046 @rjbou]
* Update in place source copy: [#3948 @rjbou]
  - review `sync_dirty` on VCS:
    - use VCS to synchronize, then rsync & remove others files
    - exclude `_build`, `_opam` & VCS directories
  - when `--inplace-build` is given, it does a dirty synchronization of the
    sources, in order to keep tracking package stats (clean, local or dirty).
* Fix `working-dir` messages on update command. [#3824 @rjbou]
* Working-dir fixes. [#3982 @rjbou]
* Update download errors handling during actions processing. [#3811 @AltGr]
* Update `ftp` command, to pass url last. [#3910 @hannesm]
* Terminate (with double dashes) list of command-line download option.
  [#3913 @cfcs]
* Repository: remove 'file://' prefix for darcs. [#3761 @rjbou]
* Opam{Git,Hg}: Fix diffs in presence of binary file. [#3879 @kit-ty-kate]
* Set core.autocrlf and core.eol for Git remotes. [#3882 @dra27]
* Add a git clean on `reset_tree` to keep source dir clean. [#3948 @rjbou]
* Lint W62: Add a lint check for SPDX license. [#3976 @AltGr]
* Lint: add result in json output. [#3848 @rjbou - fix #3046]
* Add lint codes in manpage. [#3903 @rjbou]
* Default configuration file: add `getconf` to required tools. [#3813 @rjbou]
* Clarify message in `opam init --yes`. [#3892 @dra27]
* Shell setup: don't advice an infinite sourcing loop. [#3832 @rjbou]
* Default configuration file: Add compilation target globals, `sys-ocaml-arch,
  `sys-ocaml-cc`, and `sys-ocaml-libc`. [#3900 @dra27]
* Ensure that environment is initialized lazily, not before init functions are
  called [#4111 @gasche]
* Fix OPAMLOGS handling, and logdir `opam_init` argument [#4117 @rjbou - fix
* Include base packages configuration variables in opam config report.
  [#3798 @dra27]
* Determine jobs number at launch (`OpamStateConfig`) [#4004 @rjbou - fix
* Fully test native Windows in the testsuite. [#3260 @dra27]
* Allow native Windows to use Cygwin tool. [#3348 @dra27]
* Deal with Windows path conventions (backslashes, .exe, etc.) [#3350 @dra27]
* Correct display of dir separator on Windows. [#3893 @dra27]
* Tested wrong variable in OPAMW_HasGlyp. [#3898 @dra27]
* Default use `fetch` on FreeBSD, `ftp` on OpenBSD. [#3904 @hannesm]
* Don't overwrite user's sandbow script modification. [#4020 #4092 @rjbou]
* 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]
* On MacOS sandbox script, always read write mount `/tmp` [#3742 @rjbou - fix
* Environment file right handling for empty switch. [#3899 @dra27]
* Add colon for fish MANPATH fix. [#4084 @rjbou - fix #4078]
* Update zsh check interactive terminal [#4095 @OCamlPro-mattiasdrp #4128
* Add package selection to `opam admin add-hashes` [#3787 @rjbou - fix #3767]
* Download files (patches, etc.) using a safe filename. [#3900 @dra27]
* `opam admin --add-constraints`, add constraint on depopts. [#4002 @rjbou -
  fix #3994]
* Add `format-version` field to all opam files. [#3478 @AltGr] [#3906 @AltGr]
* Clarify pin depend parse error. [#3762 @rjbou]
* Opam file extensions (`x-` fields) enhancement. [#4049 @hannesm]
* Add support for Z3 as a solver backend. [#3845 @AltGr]
* Interleave download actions with build/install actions. [#3777 @Armael]
  [#4083 @rjbou - fix #4080]
* Generalization of the job scheduler: provide separate job pools for different
  subsets of the tasks. [#3778 @AltGr]
* Refactor the return types of `OpamSolution.{apply,resolve_and_apply}`
  [#3781 @Armael]
* Use the scheduler pools to respect the download-jobs parameter.
  [#3791 @AltGr]
* Set the right opam file `format-version` field on upgrade. [#4014 @rjbou]
* Streamline the output from download action. [#3794 @AltGr]
* Use a character that displays better on terminals for download action. [
  #3802 @AltGr]
* Change symbol for download action. [#3862 @AltGr]
* Include the version number in "compilation failed" message. [#4052 @Armael]
* Propagate `--force` remove option to directory tracking revert function.
  [#4094 @rjbou - fix #4091]
* Add `OpamDirTack.string_of_changes` [#4107 @rjbou @hannesm]
* Introduce state `drop` function to replace `ignore (unlock ..)` for more
  lock-type-safety. [#3783 @gasche - #3812 @rjbou]
* Change `OpamStateTypes.switch_state.conf_files `from package_map` to
  `name_map` [#3799 @dra27]
* Fix handling of availability outside of switches. [#3864 @AltGr]
* Sorting formulas function. [#3945 @rjbou]
* Sort formula: fix `compare_formula` & add `compare` [#3960 @rjbou]
* Patch rewrite test. [#3456 @dra27]
* Command errors display: differentiate command not found & permission denied.
  [#3865 @rjbou]
* Factorize option functions in `OpamProcess` [#4016 @nobrakal]
* Use ocaml code for looking up commands in `PATH` [#4072 @Armael]
* Copy files using OCaml code instead of calling to cp or install
  [#4064 @Armael]
* Sort & clean pkg:depend. [#4060 @rjbou - fix #4057]
* Add `of_json` functions & crowbar. [#3776 @gasche]
* JSON (de)serialization for OpamParallel graph. [#3786 @gasche]
* Url: catch failure & specific exception. [#3946 @rjbou]
* Update: don't update installed dev package that is not pinned. [#3947 @rjbou]
* Use `OpamArg` helpers for option. [#4059 @rjbou]
* Steps towards sudo-enabled make install. [#3522 @dra27]
* Port build system to Dune (1.2) [#3618 @dra27]
* Update shell/msvs-detect to 0.4.0. [#3869 @dra27]
* Sort out repository script mode. [#3963 @dra27]
* Preliminary support for Dune 2.0. [#3965 @dra27]
* Update mccs.1.1+11 [#4109 #4146 @MisterDA]
* Fix developer mode option. [#3646 @rjbou]
* Ensure configure generates consistently. [#3935 @dra27]
* Documentation [#3542 @0xflotus] [#3571 @hannesm] [#3780 @gasche]
  [#3944 @tchajed] [#3955 @nbraud] [#4106 @vp2177] [#3863 @dra27] [#3554 @rjbou - fix
  #3540 #2255c #3612 #3606c] [#4058 @rjbou] [#4114 @rjbou @AltGr]

* opam exec: display command not found message. [#4133 @rjbou - fix #4131]
* Escape Windows paths on manpages. [#4129 @AltGr @rjbou - fix #4100]
* Fix opam installer opam file. [#4058 @rjbou]
* Fix various warnings. [#4132 @rjbou @AltGr - fix #4100]

* Do not fail if `$HOME/.ccache` is missing. [#3957 @mseri - fix]
* Add dune cache as rw. [#4019 @rjbou - fix #4012]
* Check both size and mtime for dirtrack cached entries. [#4038 @hannesm]
* Build man pages with dune. [#3937 @AltGr @dra27]
* make cold: fail if patch or bunzip2 missing. [#4006 @rjbou - fix #3842]
* Documentation [#3999 @maroneze]

* `opam lint --check-upstream` enables lint checks on archive urls. This
  option lead to download archives to check their checksum. [#3758 @rjbou]
* Lint W59: No url checksum given (if `check-upstream` enabled).
  [#3758 @rjbou]
* Lint E60: Unavailable archive or checksum mismatching (if `check-upstream`
  enabled). [#3758 @rjbou]
* Lint E61: Out-of-scope `with-test` variable in `run-test:` field.
  [#3763 @rjbou - fix AltGr/Camelus/issues/27]
* Lint W58: Restrain warning to filters. [#3871 @rjbou - fix
  ocaml/opam-repository#14280 (comment)]
* Lint E61: Restrain to `run-test:`. [#3860 @rjbou]
* Read jobs variable from `OpamStateConfig` [#3881 @dra27]
* Fix cppo detection. [#3915 @rjbou]
* Documentation [#3809#3891 @dra27]

* Remove mismatching extra-files: sort list before comparing them.
  [#3744 @rjbou]
* Update source of (version) pinned directory. [#3726 @rjbou - fix #3651]
* Fix `--ignore-pin-depends` with autopin. [#3736 @AltGr]
* Fix pin not installing/upgrading already pinned package. [#3800 @AltGr]
* Fix hg opam1.2 url parsing. [#3754 @rjbou]
* Use `git -c diff.noprefix=false diff`. [#3788/#3628 @Blaisorblade - fix
* Lint W47: Update warning message. [#3753 @rjbou - fix #3738]
* Harmonization of `opam config list` and `opam config var <var>`: resolve
  variable first with switch state (loading it only for package defined
  variables), otherwise, global state. [#3723 @rjbou - fix #3717]
* Considering the possibility that TMPDIR is unset. [#3597 @herbelin - fix
* Unconditionally display MANPATH when fish version is 2.7 or late.
  [#3728 @gregory-nisbet]
* Fix precise tracking mode: missing `to_hex` conversion. [#3796 @rjbou]
* Catch signal to select ones that are really cancelling a blocking state (e.g.
  waiting for a lock to be released). [#3541 @rjbou]
* `opam clean`: ignore errors trying to remove directories.
  [#3732 @kit-ty-kate]
* Documentation [#3731 @MisterDA]

* On init, retrieve `root is ok` from global options instead of initialization.
  [#3704 @rjbou - fix #3695]
* Regenerate missing environment file. [#3691 @rjbou - fix #3690 #3594]
* Documentation [#3703 @rjbou - fix #3700]

* Check consistency with opam file when reading lock file to suggest
  regeneration message [#3680 @rjbou - fix #3654]
* Remove pin depends messages. [#3679 @rjbou]
* Upgrade pin depends on pinning. [#3684 @rjbou - fix #3508]
* To avoid lint warning 57 (description error) on 1.2 opam file pinning, add
  auxiliary files (descr, url) before linting. [#3687 @rjbou]
* Don't check hash with --no-checksum on pull_upstream. [#3658 @rjbou - fix
* Lint E52: Fix `light_uninstall` flag. [#3631 @rjbou - fix #3625]
* On init, don't fail if empty compiler given. [#3633 @rjbou - fix #3614]
* Sandbox: make `/var` read-only instead of empty and rw. [#3605 @bobot - fix
* Handle symlinks in bwrap sandbox. [#3661 @mroch - fix #3660]
* Sandbox: Change one-line conditional to `if` statement which was incompatible
  with `set -e`. [#3645 @rjbou - fix #3607]
* Release use of unix sockets on MacOS. [#3663 @silene - fix #3659]
* Fix closure computation in the presence of cycle. [#3670 @AltGr - fix #3662
* Fix some cases of listing coinstallable package. [#3689 @AltGr]
* Extract archived source files of version-pinned packages. [#3610 @rjbou - fix
* Add function to upgrade opam file, including its auxiliary files: descr, url,
  files/. [#3624 @rjbou]
* Set `.out` suffix for `read_command_output` stdout file. [#3644 @rjbou]
* Default opam root is resolved at creation, in order to have the correct
  linked path. [#3681 @rjbou - fix #3622]
* Reinsert and deprecate `alias-of` & `no-autoinstall` option. [#3685 @rjbou -
  fix #3390]
* Updates for OCaml 4.07. [#3474 @dra27]
* Documentation [#3656 @rjbou - fix #3634 #3653 #3639] [#3685 @rjbou - fix

* Add `opam list --silent` to not write in the output, exit with return
  code 0 if the list is not empty, 1 otherwise. [#3533 @rjbou - fix #3525]
* Fix `opam list --external` [#3558 @rjbou - fix #3557
* Show command with local opam file returns local file information. Fixes also
  the non 1.2 conversion to 2.0 format of local files with `opam show --raw`.
  [#3536 @rjbou - fix #3423]
* Show command display string fields printed with quotes, as lists.
  [#3368 @rjbou - fix #3365]
* Pin edit: fix editing an opam file without a name field. [#3535 @rjbou]
* Don't execute validation hook if update is empty. [#3490 @hannesm]
* Git: fallback, fetch all repository remotes to get SHA1 with git < 2.1.
  [#3561 @rjbou - fix #3523 #3548]
* Lint E57: A description or a synopsis must be present and non empty.
  [#3581 @rjbou - fix ocaml/opam-repository#12729]
* Lint W58: Advise to use `with-test` and `with-doc` variables if `test`
  and `doc` are present. [#3591 @rjbou - fix #3580 ocaml/opam-repository#12729]
* Add `gtar` as OpenBSD required tool, as tar does not support the `J` flag.
  [#3538 @adamsteen]
* Hash: fallback to internal library in case of openssl error. [#3543 @rjbou -
  fix ocaml/opam-repository#12613]
* Respect user's TMPDIR when invoking bwrap sandbox. [#3487 @3noch]
* Add a way to mount unusual path in bwrap sandbox: introduction of
  `OPAM_USER_PATH_RO` environment variable. [#3540 @ErwanGa]
* opam admin: handle non http backend on repository upgrade: compute hash only
  for http or distant rsync backend [#3596 @rjbou - fix #3590]
* Upgrade to opam 2.0 format overlay opam files of pinned package.
  [#3528 @rjbou - fix #3513]
* Add compiler file translation to opam 2.0 format function. [#3530 @rjbou -
  fix ocaml/opam-repository#12523]
* Tar extract fail error message: if a tar extract fails, it checks the
  presence of underlying commands (bzip2, xz, lzma, gzip) to display the error
  message in verbose mode. [#3502 @rjbou - fix #3497]
* Remove link files only if it exists. [#3519 @rjbou - fix
* Remove GNUism from [#3481 @dra27 - fix #3480]
* Avoid sed -i, a GNU sed extension, use mv instead [#3603 @hannesm]
* Add patch & bunzip2 check in configure. [#3531 @rjbou - fix #3520]
* Not having wget or curl is now only a hard-error if src_ext/archives doesn't
  contain the archives (i.e. if make -C src_ext cache-archives has not been run)
  which means that this should no longer be a requirement for building with the
  "full" tarball. [#3572 @dra27 - fix #3551]
* C++ test for MCCS is now moved to the correct place and the message as to
  whether the solver will be build should work correctly with --disable-checks.
  Note that not having a C++ compiler is not considered an error if
  --disable-checks is specified because configure is permitted to believe that
  the MCCS library exists even if it couldn't detect it. [#3572 @dra27]

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

* 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

* 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

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

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

* 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,
* 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
* 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`,
* Added support for using `opam.locked` files instead of `opam` ones (`--locked`)
* Opam plugins are now made available across switches

* 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

* (*) 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`

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

* 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" & <
* 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
* Internally upgrade repositories in 1.2 format automatically to 2.0 (on `init`,
  `update` or `repo add`)

* 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

* Added pre and post hooks for package command sections; allowed per-switch
* 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

* (*) 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 repository defaults

* 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.

* 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
* 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
* (*) `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)
* Allow packages to specify extra remote overlay files within their definition
* Heuristic to detect bad solutions and print a hint when no solver is available
* (*) Proper URL handling with version-control + transport handling (e.g.
* Allow unescaped strings enclosed between `"""` markers in package definition
* 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,
* Allow fields `x-fieldname` in package definition files, for use by external
  tools (#2265)
* Extended, more useful JSON output (including full package failure logs)
* 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)

* 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

* 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
* 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`,
* 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
* 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
* Pinning URL can now be explicit in the form `VC+URL`, e.g. `git+ssh://`,
* New flexible way to specify download and solver commands in `~/.opam/config`
  or in variables `OPAMFETCH` and `OPAMEXTERNALSOLVER`
* Lots of bug-fixes

* 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
  - '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 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

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

* 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 `` to match `` (#1042)
* Add `OpamCompiler.eval_relop` (#1042)
* Add `` (#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 <> (#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/` 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, download it upstream
* suffix +opam to the versions of archives available on
* 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

Innovation. Community. Security.