| --- | |
| 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 cannot 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`. |