title: Release 1.5.0 short-description: Release notes for 1.5.0 ...
Meson 1.5.0 was released on 10 July 2024
bztar in meson distThe bztar format is now supported in meson dist. This format is also known as bzip2.
Cargo dependencies names are now in the format <package_name>-<version>-rs:
package_name is defined in [package] name = ... section of the Cargo.toml.version is the API version deduced from [package] version = ... as follow:x.y.z -> ‘x’0.x.y -> ‘0.x’0.0.x -> ‘0’ It allows to make different dependencies for incompatible versions of the same crate.-rs suffix is added to distinguish from regular system dependencies, for example gstreamer-1.0 is a system pkg-config dependency and gstreamer-0.22-rs is a Cargo dependency.That means the .wrap file should have dependency_names = foo-1-rs in their [provide] section when Cargo.toml has package name foo and version 1.2.
This is a breaking change (Cargo subprojects are still experimental), previous versions were using <package_name>-rs format.
Cargo.lock fileWhen a (sub)project has a Cargo.lock file at its root, it is loaded to provide an automatic fallback for dependencies it defines, fetching code from https://crates.io or git. This is identical as providing subprojects/*.wrap, see cargo wraps dependency naming convention.
When the CMake build type variable, CMAKE_BUILD_TYPE, is not set via the add_cmake_defines method of the cmake options object, it is inferred from the Meson build type. Build types of the two build systems do not match perfectly. The mapping from Meson build type to CMake build type is as follows:
debug -> Debugdebugoptimized -> RelWithDebInforelease -> Releaseminsize -> MinSizeRelNo CMake build type is set for the plain Meson build type. The inferred CMake build type overrides any CMAKE_BUILD_TYPE environment variable.
It used to be only implemented for C-like and D languages, but it is now available for all languages.
name() methodPreviously, for a [[@dep]] that might be returned by either [[dependency]] or [[compiler.find_library]], the method might or might not exist with no way of telling.
When finding an external program with find_program, the version_argument can be used to override the default --version argument when trying to parse the version of the program.
For example, if the following is used:
foo = find_program('foo', version_argument: '-version')
meson will internally run foo -version when trying to find the version of foo.
Meson configure now correctly handles updates to the options file without a full reconfigure. This allows making a change to the meson.options or meson_options.txt file without a reconfigure.
For example, this now works:
meson setup builddir git pull meson configure builddir -Doption-added-by-pull=value
This command is similar to muon fmt and allows to format a meson.build document.
null_terminated_string_arg function attributeYou can now check if a compiler support the null_terminated_string_arg function attribute via the has_function_attribute() method on the [[@compiler]] object.
cc = meson.get_compiler('c') if cc.has_function_attribute('null_terminated_string_arg') # We have it... endif
For example, you can create a simple application written using ObjFW like this:
project('SimpleApp', 'objc') objfw_dep = dependency('objfw', version: '>= 1.0') executable('SimpleApp', 'SimpleApp.m', dependencies: [objfw_dep])
Modules are also supported. A test case using ObjFWTest can be created like this:
project('Tests', 'objc') objfwtest_dep = dependency('objfw', version: '>= 1.1', modules: ['ObjFWTest']) executable('Tests', ['FooTest.m', 'BarTest.m'], dependencies: [objfwtest_dep])
@PLAINNAME@ and @BASENAME@In custom_target() and configure_file() with multiple inputs, it is now possible to specify index for @PLAINNAME@ and @BASENAME@ macros in output:
custom_target('target_name',
output: '@PLAINNAME0@.dl',
input: [dep1, dep2],
command: cmd)
compiler methodsThe following compiler methods now support the required keyword argument:
compiler.compiles()compiler.links()compiler.runs()cc.compiles(valid, name: 'valid', required : true) cc.links(valid, name: 'valid', required : true) cc.run(valid, name: 'valid', required : true) assert(not cc.compiles(valid, name: 'valid', required : opt)) assert(not cc.links(valid, name: 'valid', required : opt)) res = cc.run(valid, name: 'valid', required : opt) assert(res.compiled()) assert(res.returncode() == 0) assert(res.stdout() == '') assert(res.stderr() == '')
meson test --interactive invokes tests with stdout, stdin and stderr connected directly to the calling terminal. This can be useful when running integration tests that run in containers or virtual machines which can spawn a debug shell if a test fails.
MESON_TEST_ITERATION environment variablemeson test will now set the MESON_TEST_ITERATION environment variable to the current iteration of the test. This will always be 1 unless --repeat is used to run the same test multiple times.
By default meson test only shows the last 100 lines of test output from tests that produce large amounts of output. This default can now be changed with the new --max-lines option. For example, --max-lines=1000 will increase the maximum number of log output lines from 100 to 1000.
Support for TI's newer Clang-based ARM toolchain.
Meson now supports the TI C6000 C/C++ compiler use for the C6000 cpu family. The example cross file is available in cross/ti-c6000.txt.
The wayland module now accepts a version number for stable protocols.
wl_mod = import('unstable-wayland') wl_mod.find_protocol( 'linux-dmabuf', state: 'stable' version: 1 )