New features (in development)

Changes to the b_sanitize option

Before 1.8 the b_sanitize option was a combo option, which is an enumerated set of values. In 1.8 this was changed to a free-form array of options where available sanitizers are not hardcoded anymore but instead verified via a compiler check.

This solves a number of longstanding issues such as:

  • Sanitizers may be supported by a compiler, but not on a specific platform (OpenBSD).
  • New sanitizers are not recognized by Meson.
  • Using sanitizers in previously-unsupported combinations.

To not break backwards compatibility, calling get_option('b_sanitize') continues to return the configured value as a string, with a guarantee that address,undefined remains ordered.

i18n module xgettext

There is a new xgettext function in i18n module that acts as a wrapper around xgettext. It allows to extract strings to translate from source files.

This function is convenient, because:

  • It can find the sources files from a build target;
  • It will use an intermediate file when the number of source files is too big to be handled directly from the command line;
  • It is able to get strings to translate from the dependencies of the given targets.

version_compare now accept multiple compare strings

Is it now possible to compare version against multiple values, to check for a range of version for instance.

'1.5'.version_compare('>=1', '<2')

Per project subproject options rewrite

You can now define per-subproject values for all shared configuration options. As an example you might want to enable optimizations on only one subproject:

meson configure -Dnumbercruncher:optimization=3

Subproject specific values can be removed with -U

meson configure -Unumbercruncher:optimization

This is a major change in how options are handled, and the implementation will evolve over the next few releases of Meson. If this change causes an error in your builds, please report an issue on GitHub.

We have tried to keep backwards compatibility as much as possible, but this may lead to some build breakage.

objects added correctly to Rust executables

Any objects included in a Rust executable were previously ignored. They are now added correctly.

The test function in the rust module now supports the link_whole keyword argument in addition to link_with and dependencies.

Meson can run "rustdoc" on Rust projects

Meson now defines a rustdoc target if the project uses the Rust programming language. The target runs rustdoc on all Rust sources, using the rustdoc program from the same Rust toolchain as the rustc compiler.

New option to execute a slice of tests

When tests take a long time to run a common strategy is to slice up the tests into multiple sets, where each set is executed on a separate machine. You can now use the --slice i/n argument for meson test to create n slices and execute the ith slice.

Valgrind now fails tests if errors are found

Valgrind does not reflect an error in its exit code by default, meaning a test may silently pass despite memory errors. Meson now exports VALGRIND_OPTS such that Valgrind will exit with status 1 to indicate an error if VALGRIND_OPTS is not set in the environment.

The results of the search are