--- title: Release 1.8.0 short-description: Release notes for 1.8.0 ... # New features Meson 1.8.0 was released on 28 April 2025 ## New argument `android_exe_type` for executables Android 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. ## 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. ## New C standard `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. ## 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. ```meson '1.5'.version_compare('>=1', '<2') ``` ## Improvements to Objective-C and Objective-C++ 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. ## 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](https://github.com/mesonbuild/meson/issues/new). 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. ## `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 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. ## The Wayland module is stable 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. ## New `swift_std` compiler option A new compiler option allows to set the language version that is passed to swiftc (`none`, `4`, `4.2`, `5` or `6`). ## 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.