## v1.8.0 (2024-12-03)
- [+ui] A scope, delimited by `#scope ... #endscope`,
        limits the effect of `#define`, `#def ... #enddef`, and `#undef`.
- [bug] Fix `cppo -version`, which used to print a blank line (#92).

## v1.7.0 (2024-08-22)
- [+ui] Multi-line macros, without line terminators `\`,
        can now be defined using `#def` and `#enddef`.
        These macro definitions can be nested.
- [+ui] Higher-order macros:
        a macro can now take a parameterized macro as a parameter.
- [compat] Better locations for some syntax error messages.

## v1.6.9 (2022-05-19)
- [bug] Fix multiline string support (#81)

## v1.6.8 (2021-09-17)
- [compat] Allow version strings without patch numbers, _e.g._ `8.13+beta1`
           The patch number will be set to 0 upon empty, _i.e._ `(8, 13, 0)`

## v1.6.7 (2020-12-21)
- [compat] Treat ~ and - the same in semver in order to parse
           OCaml 4.12.0 pre-release versions.
- [compat] Restore 4.02.3 compatibility.

## v1.6.6 (2019-05-27)
- [pkg] port build system to dune from jbuilder.
- [pkg] upgrade opam metadata to 2.0 format.
- [pkg] remove topkg and use dune-release.
- [compat] Use `String.capitalize_ascii` to remove warning.

## v1.6.5 (2018-09-12)
- [bug] Fix 'asr' operator (#61)

## v1.6.4 (2018-02-26)
- [compat] Tests should now work with older versions of jbuilder.

## v1.6.3 (2018-02-21)
- [compat] Fix tests.

## v1.6.1 (2018-01-25)
- [compat] Emit line directives always containing the file name,
           as mandated starting with ocaml 4.07.

## v1.6.0 (2017-08-07)
- [pkg] BREAKING: cppo and cppo_ocamlbuild are now two distinct opam
        packages.

## v1.5.0 (2017-04-24)
- [+ui] Added the `CAPITALIZE()` function.

## v1.4.0 (2016-08-19)
- [compat] Cppo is now safe-string ready.

## v1.3.2 (2016-04-20)
- [pkg] Cppo can now be built on MSVC.

## v1.3.1 (2015-09-20)
- [bug] Possible to have #endif between two matching parenthesis.

## v1.3.0 (2015-09-13)
- [+ui] Removed the need for escaping commas and parenthesis in macros.
- [+ui] Blanks is now allowed in argument list in macro definitions.
- [+ui] #directive with wrong arguments is now giving a proper error.
- [bug] Fixed expansion of __FILE__ and __LINE__.

## v1.1.2 (2014-11-10)
- [+ui] Ocamlbuild_cppo: added the ocamlbuild flag `cppo_V(NAME:VERSION)`,
        equivalent to `-V NAME:VERSION` (for _tags file).

## v1.1.1 (2014-11-10)
- [+ui] Ocamlbuild_cppo: added the ocamlbuild flag `cppo_V_OCAML`,
        equivalent to `-V OCAML:VERSION` (for _tags file).

## v1.1.0 (2014-11-04)
- [+ui] Added the `-V NAME:VERSION` option.
- [+ui] Support for tuples in comparisons: tuples can be constructed
        and compared, e.g. `#if (2 + 2, 5) < (4, 5)`.

## v1.0.1 (2014-10-20)
- [+ui] `#elif` and `#else` can now be used in the same #if-#else statement.
- [bug] Fixed the Ocamlbuild flag `cppo_n`.

## v1.0.0 (2014-09-06)
- [bug] OCaml comments are now better parsed. For example, (* '"' *) works.

## v0.9.4 (2014-06-10)
- [+ui] Added the ocamlbuild_cppo plugin for Ocamlbuild. To use it:
        `-plugin(cppo_ocamlbuild)`.

## v0.9.3 (2012-02-03)
- [pkg] New way of building the tar.gz archive.

## v0.9.2 (2011-08-12)
- [+ui] Added two predefined macros STRINGIFY and CONCAT for making
        string literals and for building identifiers respectively.

## v0.9.1 (2011-07-20)
- [+ui] Added support for processing sections of files using external programs
        (#ext/#endext, -x option)
- [doc] Moved and extended documentation into the README file.

## v0.9.0 (2009-11-17)

- initial public release
