|
|
|
---
|
|
|
|
title: Release 0.47
|
|
|
|
short-description: Release notes for 0.47
|
|
|
|
...
|
|
|
|
|
|
|
|
# New features
|
|
|
|
|
|
|
|
## Allow early return from a script
|
|
|
|
|
|
|
|
Added the function `subdir_done()`. Its invocation exits the current
|
|
|
|
script at the point of invocation. All previously invoked build
|
|
|
|
targets and commands are build/executed. All following ones are
|
|
|
|
ignored. If the current script was invoked via `subdir()` the parent
|
|
|
|
script continues normally.
|
|
|
|
|
|
|
|
## Concatenate string literals returned from `get_define()`
|
|
|
|
|
|
|
|
After obtaining the value of a preprocessor symbol consecutive string
|
|
|
|
literals are merged into a single string literal. For example a
|
|
|
|
preprocessor symbol's value `"ab" "cd"` is returned as `"abcd"`.
|
|
|
|
|
|
|
|
## ARM compiler(version 6) for C and CPP
|
|
|
|
|
|
|
|
Cross-compilation is now supported for ARM targets using ARM compiler
|
|
|
|
version 6 - ARMCLANG. The required ARMCLANG compiler options for
|
|
|
|
building a shareable library are not included in the current Meson
|
|
|
|
implementation for ARMCLANG support, so it can not build shareable
|
|
|
|
libraries. This current Meson implementation for ARMCLANG support can
|
|
|
|
not build assembly files with arm syntax (we need to use armasm
|
|
|
|
instead of ARMCLANG for the `.s` files with this syntax) and only
|
|
|
|
supports GNU syntax.
|
|
|
|
|
|
|
|
The default extension of the executable output is `.axf`. The
|
|
|
|
environment path should be set properly for the ARM compiler
|
|
|
|
executables. The `--target`, `-mcpu` options with the appropriate
|
|
|
|
values should be mentioned in the cross file as shown in the snippet
|
|
|
|
below.
|
|
|
|
|
|
|
|
```ini
|
|
|
|
[properties]
|
|
|
|
c_args = ['--target=arm-arm-none-eabi', '-mcpu=cortex-m0plus']
|
|
|
|
cpp_args = ['--target=arm-arm-none-eabi', '-mcpu=cortex-m0plus']
|
|
|
|
```
|
|
|
|
|
|
|
|
Note:
|
|
|
|
- The current changes are tested on Windows only.
|
|
|
|
- PIC support is not enabled by default for ARM,
|
|
|
|
if users want to use it, they need to add the required arguments
|
|
|
|
explicitly from cross-file(`c_args`/`cpp_args`) or some other way.
|
|
|
|
|
|
|
|
## New base build option for LLVM (Apple) bitcode support
|
|
|
|
|
|
|
|
When building with clang on macOS, you can now build your static and
|
|
|
|
shared binaries with embedded bitcode by enabling the `b_bitcode`
|
|
|
|
[base option](Builtin-options.md#base-options) by passing
|
|
|
|
`-Db_bitcode=true` to Meson.
|
|
|
|
|
|
|
|
This is better than passing the options manually in the environment
|
|
|
|
since Meson will automatically disable conflicting options such as
|
|
|
|
`b_asneeded`, and will disable bitcode support on targets that don't
|
|
|
|
support it such as `shared_module()`.
|
|
|
|
|
|
|
|
Since this requires support in the linker, it is currently only
|
|
|
|
enabled when using Apple ld. In the future it can be extended to clang
|
|
|
|
on other platforms too.
|
|
|
|
|
|
|
|
## New compiler check: `check_header()`
|
|
|
|
|
|
|
|
The existing compiler check `has_header()` only checks if the header
|
|
|
|
exists, either with the `__has_include` C++11 builtin, or by running
|
|
|
|
the pre-processor.
|
|
|
|
|
|
|
|
However, sometimes the header you are looking for is unusable on some
|
|
|
|
platforms or with some compilers in a way that is only detectable at
|
|
|
|
compile-time. For such cases, you should use `check_header()` which
|
|
|
|
will include the header and run a full compile.
|
|
|
|
|
|
|
|
Note that `has_header()` is much faster than `check_header()`, so it
|
|
|
|
should be used whenever possible.
|
|
|
|
|
|
|
|
## New action `copy:` for `configure_file()`
|
|
|
|
|
|
|
|
In addition to the existing actions `configuration:` and `command:`,
|
|
|
|
[[configure_file]] now accepts a
|
|
|
|
keyword argument `copy:` which specifies a new action to copy the file
|
|
|
|
specified with the `input:` keyword argument to a file in the build
|
|
|
|
directory with the name specified with the `output:` keyword argument.
|
|
|
|
|
|
|
|
These three keyword arguments are, as before, mutually exclusive. You
|
|
|
|
can only do one action at a time.
|
|
|
|
|
|
|
|
## New keyword argument `encoding:` for `configure_file()`
|
|
|
|
|
|
|
|
Add a new keyword to
|
|
|
|
[[configure_file]] that allows
|
|
|
|
the developer to specify the input and output file encoding. The
|
|
|
|
default value is the same as before: UTF-8.
|
|
|
|
|
|
|
|
In the past, Meson would not handle non-UTF-8/ASCII files correctly,
|
|
|
|
and in the worst case would try to coerce it to UTF-8 and mangle the
|
|
|
|
data. UTF-8 is the standard encoding now, but sometimes it is
|
|
|
|
necessary to process files that use a different encoding.
|
|
|
|
|
|
|
|
For additional details see [#3135](https://github.com/mesonbuild/meson/pull/3135).
|
|
|
|
|
|
|
|
## New keyword argument `output_format:` for `configure_file()`
|
|
|
|
|
|
|
|
When called without an input file, `configure_file` generates a C
|
|
|
|
header file by default. A keyword argument was added to allow
|
|
|
|
specifying the output format, for example for use with nasm or yasm:
|
|
|
|
|
|
|
|
```meson
|
|
|
|
conf = configuration_data()
|
|
|
|
conf.set('FOO', 1)
|
|
|
|
|
|
|
|
configure_file('config.asm',
|
|
|
|
configuration: conf,
|
|
|
|
output_format: 'nasm')
|
|
|
|
```
|
|
|
|
|
|
|
|
## Substitutions in `custom_target(depfile:)`
|
|
|
|
|
|
|
|
The `depfile` keyword argument to `custom_target` now accepts the `@BASENAME@`
|
|
|
|
and `@PLAINNAME@` substitutions.
|
|
|
|
|
|
|
|
## Deprecated `build_always:` for custom targets
|
|
|
|
|
|
|
|
Setting `build_always` to `true` for a custom target not only marks
|
|
|
|
the target to be always considered out of date, but also adds it to
|
|
|
|
the set of default targets. This option is therefore deprecated and
|
|
|
|
the new option `build_always_stale` is introduced.
|
|
|
|
|
|
|
|
`build_always_stale` *only* marks the target to be always considered
|
|
|
|
out of date, but does not add it to the set of default targets. The
|
|
|
|
old behaviour can be achieved by combining `build_always_stale` with
|
|
|
|
`build_by_default`.
|
|
|
|
|
|
|
|
The documentation has been updated accordingly.
|
|
|
|
|
|
|
|
## New built-in object type: dictionary
|
|
|
|
|
|
|
|
Meson dictionaries use a syntax similar to python's dictionaries, but
|
|
|
|
have a narrower scope: they are immutable, keys can only be string
|
|
|
|
literals, and initializing a dictionary with duplicate keys causes a
|
|
|
|
fatal error.
|
|
|
|
|
|
|
|
Example usage:
|
|
|
|
|
|
|
|
```meson
|
|
|
|
d = {'foo': 42, 'bar': 'baz'}
|
|
|
|
|
|
|
|
foo = d.get('foo')
|
|
|
|
foobar = d.get('foobar', 'fallback-value')
|
|
|
|
|
|
|
|
foreach key, value : d
|
|
|
|
Do something with key and value
|
|
|
|
endforeach
|
|
|
|
```
|
|
|
|
|
|
|
|
## Array options treat `-Dopt=` and `-Dopt=[]` as equivalent
|
|
|
|
|
|
|
|
Prior to this change passing -Dopt= to an array opt would be
|
|
|
|
interpreted as `['']` (an array with an empty string), now `-Dopt=` is
|
|
|
|
the same as `-Dopt=[]`, an empty list.
|
|
|
|
|
|
|
|
## Feature detection based on `meson_version:` in `project()`
|
|
|
|
|
|
|
|
Meson will now print a `WARNING:` message during configuration if you
|
|
|
|
use a function or a keyword argument that was added in a Meson version
|
|
|
|
that's newer than the version specified inside `project()`. For
|
|
|
|
example:
|
|
|
|
|
|
|
|
```meson
|
|
|
|
project('featurenew', meson_version: '>=0.43')
|
|
|
|
|
|
|
|
cdata = configuration_data()
|
|
|
|
cdata.set('FOO', 'bar')
|
|
|
|
message(cdata.get_unquoted('FOO'))
|
|
|
|
```
|
|
|
|
|
|
|
|
This will output:
|
|
|
|
|
|
|
|
```
|
|
|
|
The Meson build system
|
|
|
|
Version: 0.47.0.dev1
|
|
|
|
Source dir: C:\path\to\srctree
|
|
|
|
Build dir: C:\path\to\buildtree
|
|
|
|
Build type: native build
|
|
|
|
Project name: featurenew
|
|
|
|
Project version: undefined
|
|
|
|
Build machine cpu family: x86_64
|
|
|
|
Build machine cpu: x86_64
|
|
|
|
WARNING: Project targeting '>=0.43' but tried to use feature introduced in '0.44.0': configuration_data.get_unquoted()
|
|
|
|
Message: bar
|
|
|
|
Build targets in project: 0
|
|
|
|
WARNING: Project specifies a minimum meson_version '>=0.43' which conflicts with:
|
|
|
|
* 0.44.0: {'configuration_data.get_unquoted()'}
|
|
|
|
```
|
|
|
|
|
|
|
|
## New type of build option for features
|
|
|
|
|
|
|
|
A new type of [option called `feature`](Build-options.md#features) can
|
|
|
|
be defined in `meson_options.txt` for the traditional `enabled /
|
|
|
|
disabled / auto` tristate. The value of this option can be passed to
|
|
|
|
the `required` keyword argument of functions `dependency()`,
|
|
|
|
`find_library()`, `find_program()` and `add_languages()`.
|
|
|
|
|
|
|
|
A new global option `auto_features` has been added to override the
|
|
|
|
value of all `auto` features. It is intended to be used by packagers
|
|
|
|
to have full control on which feature must be enabled or disabled.
|
|
|
|
|
|
|
|
## New options to `gnome.gdbus_codegen()`
|
|
|
|
|
|
|
|
You can now pass additional arguments to gdbus-codegen using the
|
|
|
|
`extra_args` keyword. This is the same for the other gnome function
|
|
|
|
calls.
|
|
|
|
|
|
|
|
Meson now automatically adds autocleanup support to the generated
|
|
|
|
code. This can be modified by setting the autocleanup keyword.
|
|
|
|
|
|
|
|
For example:
|
|
|
|
|
|
|
|
```meson
|
|
|
|
sources += gnome.gdbus_codegen('com.mesonbuild.Test',
|
|
|
|
'com.mesonbuild.Test.xml',
|
|
|
|
autocleanup : 'none',
|
|
|
|
extra_args : ['--pragma-once'])
|
|
|
|
```
|
|
|
|
|
|
|
|
## Made 'install' a top level Meson command
|
|
|
|
|
|
|
|
You can now run `meson install` in your build directory and it will do
|
|
|
|
the install. It has several command line options you can toggle the
|
|
|
|
behaviour that is not in the default `ninja install` invocation. This
|
|
|
|
is similar to how `meson test` already works.
|
|
|
|
|
|
|
|
For example, to install only the files that have changed, you can do:
|
|
|
|
|
|
|
|
```console
|
|
|
|
$ meson install --only-changed
|
|
|
|
```
|
|
|
|
|
|
|
|
## `install_mode:` keyword argument extended to all installable targets
|
|
|
|
|
|
|
|
It is now possible to pass an `install_mode` argument to all
|
|
|
|
installable targets, such as `executable()`, libraries, headers, man
|
|
|
|
pages and custom/generated targets.
|
|
|
|
|
|
|
|
The `install_mode` argument can be used to specify the file mode in
|
|
|
|
symbolic format and optionally the owner/uid and group/gid for the
|
|
|
|
installed files.
|
|
|
|
|
|
|
|
## New built-in option `install_umask` with a default value 022
|
|
|
|
|
|
|
|
This umask is used to define the default permissions of files and
|
|
|
|
directories created in the install tree. Files will preserve their
|
|
|
|
executable mode, but the exact permissions will obey the
|
|
|
|
`install_umask`.
|
|
|
|
|
|
|
|
The `install_umask` can be overridden in the Meson command-line:
|
|
|
|
|
|
|
|
```console
|
|
|
|
$ meson --install-umask=027 builddir/
|
|
|
|
```
|
|
|
|
|
|
|
|
A project can also override the default in the `project()` call:
|
|
|
|
|
|
|
|
```meson
|
|
|
|
project('myproject', 'c',
|
|
|
|
default_options : ['install_umask=027'])
|
|
|
|
```
|
|
|
|
|
|
|
|
To disable the `install_umask`, set it to `preserve`, in which case
|
|
|
|
permissions are copied from the files in their origin.
|
|
|
|
|
|
|
|
## Octal and binary string literals
|
|
|
|
|
|
|
|
Octal and binary integer literals can now be used in build and option files.
|
|
|
|
|
|
|
|
```meson
|
|
|
|
int_493 = 0o755
|
|
|
|
int_1365 = 0b10101010101
|
|
|
|
```
|
|
|
|
|
|
|
|
## New keyword arguments: 'check' and 'capture' for `run_command()`
|
|
|
|
|
|
|
|
If `check:` is `true`, then the configuration will fail if the command
|
|
|
|
returns a non-zero exit status. The default value is `false` for
|
|
|
|
compatibility reasons.
|
|
|
|
|
|
|
|
`run_command()` used to always capture the output and stored it for
|
|
|
|
use in build files. However, sometimes the stdout is in a binary
|
|
|
|
format which is meant to be discarded. For that case, you can now set
|
|
|
|
the `capture:` keyword argument to `false`.
|
|
|
|
|
|
|
|
## Windows resource files dependencies
|
|
|
|
|
|
|
|
The `compile_resources()` function of the `windows` module now takes
|
|
|
|
the `depend_files:` and `depends:` keywords.
|
|
|
|
|
|
|
|
When using binutils's `windres`, dependencies on files `#include`'d by
|
|
|
|
the preprocessor are now automatically tracked.
|
|
|
|
|
|
|
|
## Polkit support for privileged installation
|
|
|
|
|
|
|
|
When running `install`, if installation fails with a permission error
|
|
|
|
and `pkexec` is available, Meson will attempt to use it to spawn a
|
|
|
|
permission dialog for privileged installation and retry the
|
|
|
|
installation.
|
|
|
|
|
|
|
|
If `pkexec` is not available, the old behaviour is retained and you
|
|
|
|
will need to explicitly run the install step with `sudo`.
|