|
|
|
---
|
|
|
|
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 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.
|
|
|
|
|
|
|
|
## 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
|
|
|
|
)
|
|
|
|
```
|
|
|
|
|