diff options
Diffstat (limited to 'docs/markdown/Release-notes-for-1.1.0.md')
-rw-r--r-- | docs/markdown/Release-notes-for-1.1.0.md | 224 |
1 files changed, 224 insertions, 0 deletions
diff --git a/docs/markdown/Release-notes-for-1.1.0.md b/docs/markdown/Release-notes-for-1.1.0.md new file mode 100644 index 000000000..d05394828 --- /dev/null +++ b/docs/markdown/Release-notes-for-1.1.0.md @@ -0,0 +1,224 @@ +--- +title: Release 1.1.0 +short-description: Release notes for 1.1.0 +... + +# New features + +Meson 1.1.0 was released on 10 April 2023 +## `clang-cl` now accepts `cpp_std=c++20` + +Requires `clang-cl` 13 or later. + +## coercing values in the option() function is deprecated + +Currently code such as: +```meson +option('foo', type : 'boolean', value : 'false') +``` +works, because Meson coerces `'false'` to `false`. + +This should be avoided, and will now result in a deprecation warning. + +## New `declare_dependency(objects: )` argument + +A new argument to `declare_dependency` makes it possible to add objects +directly to executables that use an internal dependency, without going +for example through `link_whole`. + +## Dump devenv into file and select format + +`meson devenv --dump [<filename>]` command now takes an optional filename argument +to write the environment into a file instead of printing to stdout. + +A new `--dump-format` argument has been added to select which shell format +should be used. There are currently 3 formats supported: +- `sh`: Lines are in the format `VAR=/prepend:$VAR:/append`. +- `export`: Same as `sh` but with extra `export VAR` lines. +- `vscode`: Same as `sh` but without `$VAR` substitution because they do not + seems to be properly supported by vscode. + +## Feature objects now have an enable_auto_if method + +This performs the opposite task of the disable_auto_if method, enabling the +feature if the condition is true. + +## Add a FeatureOption.enable_if and .disable_if + +These are useful when features need to be constrained to pass to [[dependency]], +as the behavior of an `auto` and `disabled` or `enabled` feature is markedly +different. consider the following case: + +```meson +opt = get_option('feature').disable_auto_if(not foo) +if opt.enabled() and not foo + error('Cannot enable feat when foo is not also enabled') +endif +dep = dependency('foo', required : opt) +``` + +This could be simplified to +```meson +opt = get_option('feature').disable_if(not foo, error_message : 'Cannot enable feature when foo is not also enabled') +dep = dependency('foo', required : opt) +``` + +For a real life example, here is some code in mesa: +```meson +_llvm = get_option('llvm') +dep_llvm = null_dep +with_llvm = false +if _llvm.allowed() + dep_llvm = dependency( + 'llvm', + version : _llvm_version, + modules : llvm_modules, + optional_modules : llvm_optional_modules, + required : ( + with_amd_vk or with_gallium_radeonsi or with_gallium_opencl or with_clc + or _llvm.enabled() + ), + static : not _shared_llvm, + fallback : ['llvm', 'dep_llvm'], + include_type : 'system', + ) + with_llvm = dep_llvm.found() +endif +if with_llvm + ... +elif with_amd_vk and with_aco_tests + error('ACO tests require LLVM, but LLVM is disabled.') +elif with_gallium_radeonsi or with_swrast_vk + error('The following drivers require LLVM: RadeonSI, SWR, Lavapipe. One of these is enabled, but LLVM is disabled.') +elif with_gallium_opencl + error('The OpenCL "Clover" state tracker requires LLVM, but LLVM is disabled.') +elif with_clc + error('The CLC compiler requires LLVM, but LLVM is disabled.') +else + draw_with_llvm = false +endif +``` + +simplified to: +```meson +_llvm = get_option('llvm') \ + .enable_if(with_amd_vk and with_aco_tests, error_message : 'ACO tests requires LLVM') \ + .enable_if(with_gallium_radeonsi, error_message : 'RadeonSI requires LLVM') \ + .enable_if(with_swrast_vk, error_message : 'Vulkan SWRAST requires LLVM') \ + .enable_if(with_gallium_opencl, error_message : 'The OpenCL Clover state trackers requires LLVM') \ + .enable_if(with_clc, error_message : 'CLC library requires LLVM') + +dep_llvm = dependency( + 'llvm', + version : _llvm_version, + modules : llvm_modules, + optional_modules : llvm_optional_modules, + required : _llvm, + static : not _shared_llvm, + fallback : ['llvm', 'dep_llvm'], + include_type : 'system', +) +with_llvm = dep_llvm.found() +``` + +## Generated objects can be passed in the `objects:` keyword argument + +In previous versions of Meson, generated objects could only be +passed as sources of a build target. This was confusing, therefore +generated objects can now be passed in the `objects:` keyword +argument as well. + +## The project function now supports setting the project license files + +This goes together with the license name. The license files can be +automatically installed via [[meson.install_dependency_manifest]], +or queried via [[meson.project_license_files]]. + +## A new core directory option "licensedir" is available + +This will install a dependency manifest to the specified directory, if none +is is explicitly set. + +## `sudo meson install` now drops privileges when rebuilding targets + +It is common to install projects using sudo, which should not affect build +outputs but simply install the results. Unfortunately, since the ninja backend +updates a state file when run, it's not safe to run ninja as root at all. + +It has always been possible to carefully build with: + +``` +ninja && sudo meson install --no-rebuild +``` + +Meson now tries to be extra safe as a general solution. `sudo meson install` +will attempt to rebuild, but has learned to run `ninja` as the original +(pre-sudo or pre-doas) user, ensuring that build outputs are generated/compiled +as non-root. + +## `meson install` now supports user-preferred root elevation tools + +Previously, when installing a project, if any files could not be installed due +to insufficient permissions the install process was automatically re-run using +polkit. Now it prompts to ask whether that is desirable, and checks for +CLI-based tools such as sudo or opendoas or `$MESON_ROOT_CMD`, first. + +Meson will no longer attempt privilege elevation at all, when not running +interactively. + +## Support for reading options from meson.options + +Support has been added for reading options from `meson.options` instead of +`meson_options.txt`. These are equivalent, but not using the `.txt` extension +for a build file has a few advantages, chief among them many tools and text +editors expect a file with the `.txt` extension to be plain text files, not +build scripts. + +## Redirect introspection outputs to stderr + +`meson introspect` used to disable logging to `stdout` to not interfere with generated json. +It now redirect outputs to `stderr` to allow printing warnings to the console +while keeping `stdout` clean for json outputs. + +## New "none" backend + +The `--backend=none` option has been added, to configure a project that has no +build rules, only install rules. This avoids depending on ninja. + +## compiler.preprocess() + +Dependencies keyword argument can now be passed to `compiler.preprocess()` to +add include directories or compiler arguments. + +Generated sources such as custom targets are now allowed too. + +## New pybind11 custom dependency + +`dependency('pybind11')` works with pkg-config and cmake without any special +support, but did not handle the `pybind11-config` script. + +This is useful because the config-tool will work out of the box when pybind11 +is installed, but the pkg-config and cmake files are shoved into python's +site-packages, which makes it impossible to use in an out of the box manner. + + +## Allow --reconfigure and --wipe of empty builddir + +`meson setup --reconfigure builddir` and `meson setup --wipe builddir` are now +accepting `builddir/` to be empty or containing a previously failed setup attempt. +Note that in that case previously passed command line options must be repeated +as only a successful build saves configured options. + +This is useful for example with scripts that always repeat all options, +`meson setup builddir --wipe -Dfoo=bar` will always work regardless whether +it is a first invocation or not. + +## Allow custom install scripts to run with `--dry-run` option + +An new `dry_run` keyword is added to `meson.add_install_script()` +to allow a custom install script to run when meson is invoked +with `meson install --dry-run`. + +In dry run mode, the `MESON_INSTALL_DRY_RUN` environment variable +is set. + |