The Meson Build System
http://mesonbuild.com/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
215 lines
6.8 KiB
215 lines
6.8 KiB
7 months ago
|
---
|
||
|
title: Release 1.5.0
|
||
|
short-description: Release notes for 1.5.0
|
||
|
...
|
||
|
|
||
|
# New features
|
||
|
|
||
|
Meson 1.5.0 was released on 10 July 2024
|
||
|
## Support for `bztar` in `meson dist`
|
||
|
|
||
|
The `bztar` format is now supported in `meson dist`. This format is also known
|
||
|
as `bzip2`.
|
||
|
|
||
|
## Cargo dependencies names now include the API version
|
||
|
|
||
|
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 uncompatible 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.
|
||
|
|
||
|
## Added support `Cargo.lock` file
|
||
|
|
||
|
When 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](Wrap-dependency-system-manual.md#cargo-wraps) dependency naming convention.
|
||
|
|
||
|
## Meson now propagates its build type to CMake
|
||
|
|
||
|
When the CMake build type variable, `CMAKE_BUILD_TYPE`, is not set via the
|
||
|
`add_cmake_defines` method of the [`cmake options` object](CMake-module.md#cmake-options-object),
|
||
|
it is inferred from the [Meson build type](Builtin-options.md#details-for-buildtype).
|
||
|
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` -> `Debug`
|
||
|
- `debugoptimized` -> `RelWithDebInfo`
|
||
|
- `release` -> `Release`
|
||
|
- `minsize` -> `MinSizeRel`
|
||
|
|
||
|
No CMake build type is set for the `plain` Meson build type. The inferred CMake
|
||
|
build type overrides any `CMAKE_BUILD_TYPE` environment variable.
|
||
|
|
||
|
## compiler.run() method is now available for all languages
|
||
|
|
||
|
It used to be only implemented for C-like and D languages, but it is now available
|
||
|
for all languages.
|
||
|
|
||
|
## dependencies created by compiler.find_library implement the `name()` method
|
||
|
|
||
|
Previously, 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.
|
||
|
|
||
|
## New version_argument kwarg for find_program
|
||
|
|
||
|
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:
|
||
|
```meson
|
||
|
foo = find_program('foo', version_argument: '-version')
|
||
|
```
|
||
|
|
||
|
meson will internally run `foo -version` when trying to find the version of `foo`.
|
||
|
|
||
|
## Meson configure handles changes to options in more cases
|
||
|
|
||
|
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:
|
||
|
```sh
|
||
|
meson setup builddir
|
||
|
git pull
|
||
|
meson configure builddir -Doption-added-by-pull=value
|
||
|
```
|
||
|
|
||
|
## New meson format command
|
||
|
|
||
|
This command is similar to `muon fmt` and allows to format a `meson.build`
|
||
|
document.
|
||
|
|
||
|
## Added support for GCC's `null_terminated_string_arg` function attribute
|
||
|
|
||
|
You can now check if a compiler support the `null_terminated_string_arg`
|
||
|
function attribute via the `has_function_attribute()` method on the
|
||
|
[[@compiler]] object.
|
||
|
|
||
|
```meson
|
||
|
cc = meson.get_compiler('c')
|
||
|
|
||
|
if cc.has_function_attribute('null_terminated_string_arg')
|
||
|
# We have it...
|
||
|
endif
|
||
|
```
|
||
|
|
||
|
## A new dependency for ObjFW is now supported
|
||
|
|
||
|
For example, you can create a simple application written using ObjFW like this:
|
||
|
|
||
|
```meson
|
||
|
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:
|
||
|
|
||
|
```meson
|
||
|
project('Tests', 'objc')
|
||
|
|
||
|
objfwtest_dep = dependency('objfw', version: '>= 1.1', modules: ['ObjFWTest'])
|
||
|
|
||
|
executable('Tests', ['FooTest.m', 'BarTest.m'],
|
||
|
dependencies: [objfwtest_dep])
|
||
|
```
|
||
|
|
||
|
## Support of indexed `@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)
|
||
|
```
|
||
|
|
||
|
## Required kwarg on more `compiler` methods
|
||
|
|
||
|
The following `compiler` methods now support the `required` keyword argument:
|
||
|
|
||
|
- `compiler.compiles()`
|
||
|
- `compiler.links()`
|
||
|
- `compiler.runs()`
|
||
|
|
||
|
```meson
|
||
|
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() == '')
|
||
|
```
|
||
|
|
||
|
## The Meson test program supports a new "--interactive" argument
|
||
|
|
||
|
`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 now sets the `MESON_TEST_ITERATION` environment variable
|
||
|
|
||
|
`meson 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.
|
||
|
|
||
|
## The Meson test program supports a new "--max-lines" argument
|
||
|
|
||
|
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.
|
||
|
|
||
|
## Basic support for TI Arm Clang (tiarmclang)
|
||
|
|
||
|
Support for TI's newer [Clang-based ARM toolchain](https://www.ti.com/tool/ARM-CGT).
|
||
|
|
||
|
## Support for Texas Instruments C6000 C/C++ compiler
|
||
|
|
||
|
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`.
|
||
|
|
||
|
## Wayland stable protocols can be versioned
|
||
|
|
||
|
The wayland module now accepts a version number for stable protocols.
|
||
|
|
||
|
```meson
|
||
|
wl_mod = import('unstable-wayland')
|
||
|
|
||
|
wl_mod.find_protocol(
|
||
|
'linux-dmabuf',
|
||
|
state: 'stable'
|
||
|
version: 1
|
||
|
)
|
||
|
```
|
||
|
|