|
| 1 | +--- |
| 2 | +title: Release 1.5.0 |
| 3 | +short-description: Release notes for 1.5.0 |
| 4 | +... |
| 5 | + |
| 6 | +# New features |
| 7 | + |
| 8 | +Meson 1.5.0 was released on 10 July 2024 |
| 9 | +## Support for `bztar` in `meson dist` |
| 10 | + |
| 11 | +The `bztar` format is now supported in `meson dist`. This format is also known |
| 12 | +as `bzip2`. |
| 13 | + |
| 14 | +## Cargo dependencies names now include the API version |
| 15 | + |
| 16 | +Cargo dependencies names are now in the format `<package_name>-<version>-rs`: |
| 17 | +- `package_name` is defined in `[package] name = ...` section of the `Cargo.toml`. |
| 18 | +- `version` is the API version deduced from `[package] version = ...` as follow: |
| 19 | + * `x.y.z` -> 'x' |
| 20 | + * `0.x.y` -> '0.x' |
| 21 | + * `0.0.x` -> '0' |
| 22 | + It allows to make different dependencies for uncompatible versions of the same |
| 23 | + crate. |
| 24 | +- `-rs` suffix is added to distinguish from regular system dependencies, for |
| 25 | + example `gstreamer-1.0` is a system pkg-config dependency and `gstreamer-0.22-rs` |
| 26 | + is a Cargo dependency. |
| 27 | + |
| 28 | +That means the `.wrap` file should have `dependency_names = foo-1-rs` in their |
| 29 | +`[provide]` section when `Cargo.toml` has package name `foo` and version `1.2`. |
| 30 | + |
| 31 | +This is a breaking change (Cargo subprojects are still experimental), previous |
| 32 | +versions were using `<package_name>-rs` format. |
| 33 | + |
| 34 | +## Added support `Cargo.lock` file |
| 35 | + |
| 36 | +When a (sub)project has a `Cargo.lock` file at its root, it is loaded to provide |
| 37 | +an automatic fallback for dependencies it defines, fetching code from |
| 38 | +https://crates.io or git. This is identical as providing `subprojects/*.wrap`, |
| 39 | +see [cargo wraps](Wrap-dependency-system-manual.md#cargo-wraps) dependency naming convention. |
| 40 | + |
| 41 | +## Meson now propagates its build type to CMake |
| 42 | + |
| 43 | +When the CMake build type variable, `CMAKE_BUILD_TYPE`, is not set via the |
| 44 | +`add_cmake_defines` method of the [`cmake options` object](CMake-module.md#cmake-options-object), |
| 45 | +it is inferred from the [Meson build type](Builtin-options.md#details-for-buildtype). |
| 46 | +Build types of the two build systems do not match perfectly. The mapping from |
| 47 | +Meson build type to CMake build type is as follows: |
| 48 | + |
| 49 | +- `debug` -> `Debug` |
| 50 | +- `debugoptimized` -> `RelWithDebInfo` |
| 51 | +- `release` -> `Release` |
| 52 | +- `minsize` -> `MinSizeRel` |
| 53 | + |
| 54 | +No CMake build type is set for the `plain` Meson build type. The inferred CMake |
| 55 | +build type overrides any `CMAKE_BUILD_TYPE` environment variable. |
| 56 | + |
| 57 | +## compiler.run() method is now available for all languages |
| 58 | + |
| 59 | +It used to be only implemented for C-like and D languages, but it is now available |
| 60 | +for all languages. |
| 61 | + |
| 62 | +## dependencies created by compiler.find_library implement the `name()` method |
| 63 | + |
| 64 | +Previously, for a [[@dep]] that might be returned by either [[dependency]] or |
| 65 | +[[compiler.find_library]], the method might or might not exist with no way |
| 66 | +of telling. |
| 67 | + |
| 68 | +## New version_argument kwarg for find_program |
| 69 | + |
| 70 | +When finding an external program with `find_program`, the `version_argument` |
| 71 | +can be used to override the default `--version` argument when trying to parse |
| 72 | +the version of the program. |
| 73 | + |
| 74 | +For example, if the following is used: |
| 75 | +```meson |
| 76 | +foo = find_program('foo', version_argument: '-version') |
| 77 | +``` |
| 78 | + |
| 79 | +meson will internally run `foo -version` when trying to find the version of `foo`. |
| 80 | + |
| 81 | +## Meson configure handles changes to options in more cases |
| 82 | + |
| 83 | +Meson configure now correctly handles updates to the options file without a full |
| 84 | +reconfigure. This allows making a change to the `meson.options` or |
| 85 | +`meson_options.txt` file without a reconfigure. |
| 86 | + |
| 87 | +For example, this now works: |
| 88 | +```sh |
| 89 | +meson setup builddir |
| 90 | +git pull |
| 91 | +meson configure builddir -Doption-added-by-pull=value |
| 92 | +``` |
| 93 | + |
| 94 | +## New meson format command |
| 95 | + |
| 96 | +This command is similar to `muon fmt` and allows to format a `meson.build` |
| 97 | +document. |
| 98 | + |
| 99 | +## Added support for GCC's `null_terminated_string_arg` function attribute |
| 100 | + |
| 101 | +You can now check if a compiler support the `null_terminated_string_arg` |
| 102 | +function attribute via the `has_function_attribute()` method on the |
| 103 | +[[@compiler]] object. |
| 104 | + |
| 105 | +```meson |
| 106 | +cc = meson.get_compiler('c') |
| 107 | +
|
| 108 | +if cc.has_function_attribute('null_terminated_string_arg') |
| 109 | + # We have it... |
| 110 | +endif |
| 111 | +``` |
| 112 | + |
| 113 | +## A new dependency for ObjFW is now supported |
| 114 | + |
| 115 | +For example, you can create a simple application written using ObjFW like this: |
| 116 | + |
| 117 | +```meson |
| 118 | +project('SimpleApp', 'objc') |
| 119 | +
|
| 120 | +objfw_dep = dependency('objfw', version: '>= 1.0') |
| 121 | +
|
| 122 | +executable('SimpleApp', 'SimpleApp.m', |
| 123 | + dependencies: [objfw_dep]) |
| 124 | +``` |
| 125 | + |
| 126 | +Modules are also supported. A test case using ObjFWTest can be created like |
| 127 | +this: |
| 128 | + |
| 129 | +```meson |
| 130 | +project('Tests', 'objc') |
| 131 | +
|
| 132 | +objfwtest_dep = dependency('objfw', version: '>= 1.1', modules: ['ObjFWTest']) |
| 133 | +
|
| 134 | +executable('Tests', ['FooTest.m', 'BarTest.m'], |
| 135 | + dependencies: [objfwtest_dep]) |
| 136 | +``` |
| 137 | + |
| 138 | +## Support of indexed `@PLAINNAME@` and `@BASENAME@` |
| 139 | + |
| 140 | +In `custom_target()` and `configure_file()` with multiple inputs, |
| 141 | +it is now possible to specify index for `@PLAINNAME@` and `@BASENAME@` |
| 142 | +macros in `output`: |
| 143 | +``` |
| 144 | +custom_target('target_name', |
| 145 | + |
| 146 | + input: [dep1, dep2], |
| 147 | + command: cmd) |
| 148 | +``` |
| 149 | + |
| 150 | +## Required kwarg on more `compiler` methods |
| 151 | + |
| 152 | +The following `compiler` methods now support the `required` keyword argument: |
| 153 | + |
| 154 | +- `compiler.compiles()` |
| 155 | +- `compiler.links()` |
| 156 | +- `compiler.runs()` |
| 157 | + |
| 158 | +```meson |
| 159 | +cc.compiles(valid, name: 'valid', required : true) |
| 160 | +cc.links(valid, name: 'valid', required : true) |
| 161 | +cc.run(valid, name: 'valid', required : true) |
| 162 | +
|
| 163 | +assert(not cc.compiles(valid, name: 'valid', required : opt)) |
| 164 | +assert(not cc.links(valid, name: 'valid', required : opt)) |
| 165 | +res = cc.run(valid, name: 'valid', required : opt) |
| 166 | +assert(res.compiled()) |
| 167 | +assert(res.returncode() == 0) |
| 168 | +assert(res.stdout() == '') |
| 169 | +assert(res.stderr() == '') |
| 170 | +``` |
| 171 | + |
| 172 | +## The Meson test program supports a new "--interactive" argument |
| 173 | + |
| 174 | +`meson test --interactive` invokes tests with stdout, stdin and stderr |
| 175 | +connected directly to the calling terminal. This can be useful when running |
| 176 | +integration tests that run in containers or virtual machines which can spawn a |
| 177 | +debug shell if a test fails. |
| 178 | + |
| 179 | +## meson test now sets the `MESON_TEST_ITERATION` environment variable |
| 180 | + |
| 181 | +`meson test` will now set the `MESON_TEST_ITERATION` environment variable to the |
| 182 | +current iteration of the test. This will always be `1` unless `--repeat` is used |
| 183 | +to run the same test multiple times. |
| 184 | + |
| 185 | +## The Meson test program supports a new "--max-lines" argument |
| 186 | + |
| 187 | +By default `meson test` only shows the last 100 lines of test output from tests |
| 188 | +that produce large amounts of output. This default can now be changed with the |
| 189 | +new `--max-lines` option. For example, `--max-lines=1000` will increase the |
| 190 | +maximum number of log output lines from 100 to 1000. |
| 191 | + |
| 192 | +## Basic support for TI Arm Clang (tiarmclang) |
| 193 | + |
| 194 | +Support for TI's newer [Clang-based ARM toolchain](https://www.ti.com/tool/ARM-CGT). |
| 195 | + |
| 196 | +## Support for Texas Instruments C6000 C/C++ compiler |
| 197 | + |
| 198 | +Meson now supports the TI C6000 C/C++ compiler use for the C6000 cpu family. |
| 199 | +The example cross file is available in `cross/ti-c6000.txt`. |
| 200 | + |
| 201 | +## Wayland stable protocols can be versioned |
| 202 | + |
| 203 | +The wayland module now accepts a version number for stable protocols. |
| 204 | + |
| 205 | +```meson |
| 206 | +wl_mod = import('unstable-wayland') |
| 207 | +
|
| 208 | +wl_mod.find_protocol( |
| 209 | + 'linux-dmabuf', |
| 210 | + state: 'stable' |
| 211 | + version: 1 |
| 212 | +) |
| 213 | +``` |
| 214 | + |
0 commit comments