title: Release 1.8.0 short-description: Release notes for 1.8.0 ...
Meson 1.8.0 was released on 28 April 2025
android_exe_type
for executablesAndroid application executables actually need to be linked as a shared object, which is loaded from a pre-warmed JVM. Meson projects can now specify a new argument android_exe_type
and set it to application
, in order produce such a shared library only on Android targets.
This makes it possible to use the same meson.build
file for both Android and non-Android systems.
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:
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.
c2y
(and gnu2y
)The c2y
standard and its companion gnu2y
are now supported when using either Clang 19.0.0 or newer, or GCC 15.0.0 or newer.
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:
version_compare
now accept multiple compare stringsIs it now possible to compare version against multiple values, to check for a range of version for instance.
'1.5'.version_compare('>=1', '<2')
Meson does not assume anymore that gcc/g++ always support Objective-C and Objective-C++, and instead checks that they can actually do a basic compile.
Furthermore, Objective-C and Objective-C++ now support the same language standards as C and C++ respectively.
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 executablesAny objects included in a Rust executable were previously ignored. They are now added correctly.
rust.test
now supports link_whole
The test
function in the rust
module now supports the link_whole
keyword argument in addition to link_with
and dependencies
.
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.
The Wayland module has been tested in several projects and had the last breaking change in Meson 0.64.0; it is now marked as stable.
swift_std
compiler optionA new compiler option allows to set the language version that is passed to swiftc (none
, 4
, 4.2
, 5
or 6
).
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 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.