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