aboutsummaryrefslogtreecommitdiffstats
path: root/meson/docs/markdown/Release-notes-for-0.55.0.md
diff options
context:
space:
mode:
Diffstat (limited to 'meson/docs/markdown/Release-notes-for-0.55.0.md')
-rw-r--r--meson/docs/markdown/Release-notes-for-0.55.0.md332
1 files changed, 332 insertions, 0 deletions
diff --git a/meson/docs/markdown/Release-notes-for-0.55.0.md b/meson/docs/markdown/Release-notes-for-0.55.0.md
new file mode 100644
index 000000000..110dd1d71
--- /dev/null
+++ b/meson/docs/markdown/Release-notes-for-0.55.0.md
@@ -0,0 +1,332 @@
+---
+title: Release 0.55.0
+short-description: Release notes for 0.55.0
+...
+
+# New features
+
+## rpath removal now more careful
+
+On Linux-like systems, Meson adds rpath entries to allow running apps
+in the build tree, and then removes those build-time-only rpath
+entries when installing. Rpath entries may also come in via LDFLAGS
+and via .pc files. Meson used to remove those latter rpath entries by
+accident, but is now more careful.
+
+## Added ability to specify targets in `meson compile`
+
+It's now possible to specify targets in `meson compile`, which will
+result in building only the requested targets.
+
+Usage: `meson compile [TARGET [TARGET...]]`
+`TARGET` has the following syntax: `[PATH/]NAME[:TYPE]`.
+`NAME`: name of the target from `meson.build` (e.g. `foo` from `executable('foo', ...)`).
+`PATH`: path to the target relative to the root `meson.build` file. Note: relative path for a target specified in the root `meson.build` is `./`.
+`TYPE`: type of the target (e.g. `shared_library`, `executable` and etc)
+
+`PATH` and/or `TYPE` can be omitted if the resulting `TARGET` can be used to uniquely identify the target in `meson.build`.
+
+For example targets from the following code:
+```meson
+shared_library('foo', ...)
+static_library('foo', ...)
+executable('bar', ...)
+```
+can be invoked with `meson compile foo:shared_library foo:static_library bar`.
+
+## Test protocol for gtest
+
+Due to the popularity of Gtest (google test) among C and C++
+developers Meson now supports a special protocol for gtest. With this
+protocol Meson injects arguments to gtests to output JUnit, reads that
+JUnit, and adds the output to the JUnit it generates.
+
+## meson.add_*_script methods accept new types
+
+All three (`add_install_script`, `add_dist_script`, and
+`add_postconf_script`) now accept ExternalPrograms (as returned by
+`find_program`), Files, and the output of `configure_file`. The dist and
+postconf methods cannot accept other types because of when they are run.
+While dist could, in theory, take other dependencies, it would require more
+extensive changes, particularly to the backend.
+
+```meson
+meson.add_install_script(find_program('foo'), files('bar'))
+meson.add_dist_script(find_program('foo'), files('bar'))
+meson.add_postconf_script(find_program('foo'), files('bar'))
+```
+
+The install script variant is also able to accept custom_targets,
+custom_target indexes, and build targets (executables, libraries), and
+can use built executables a the script to run
+
+```meson
+installer = executable('installer', ...)
+meson.add_install_script(installer, ...)
+meson.add_install_script('foo.py', installer)
+```
+
+## Machine file constants
+
+Native and cross files now support string and list concatenation using
+the `+` operator, and joining paths using the `/` operator. Entries
+defined in the `[constants]` section can be used in any other section.
+An entry defined in any other section can be used only within that
+same section and only after it has been defined.
+
+```ini
+[constants]
+toolchain = '/toolchain'
+common_flags = ['--sysroot=' + toolchain + '/sysroot']
+
+[properties]
+c_args = common_flags + ['-DSOMETHING']
+cpp_args = c_args + ['-DSOMETHING_ELSE']
+
+[binaries]
+c = toolchain + '/gcc'
+```
+
+## Configure CMake subprojects with Meson.subproject_options
+
+Meson now supports passing configuration options to CMake and
+overriding certain build details extracted from the CMake subproject.
+
+The new CMake configuration options object is very similar to the
+[configuration data
+object](Reference-manual.md#configuration-data-object) object returned
+by [`configuration_data`](Reference-manual.md#configuration_data). It
+is generated by the `subproject_options` function
+
+All configuration options have to be set *before* the subproject is
+configured and must be passed to the `subproject` method via the
+`options` key. Altering the configuration object won't have any effect
+on previous `cmake.subproject` calls.
+
+**Note:** The `cmake_options` kwarg for the `subproject` function is
+now deprecated since it is replaced by the new `options` system.
+
+## find_program: Fixes when the program has been overridden by executable
+
+When a program has been overridden by an executable, the returned
+object of find_program() had some issues:
+
+```meson
+# In a subproject:
+exe = executable('foo', ...)
+meson.override_find_program('foo', exe)
+
+# In main project:
+# The version check was crashing Meson.
+prog = find_program('foo', version : '>=1.0')
+
+# This was crashing Meson.
+message(prog.path())
+
+# New method to be consistent with built objects.
+message(prog.full_path())
+```
+
+## Response files enabled on Linux, reined in on Windows
+
+Meson used to always use response files on Windows,
+but never on Linux.
+
+It now strikes a happier balance, using them on both platforms,
+but only when needed to avoid command line length limits.
+
+## `unstable-kconfig` module renamed to `unstable-keyval`
+
+The `unstable-kconfig` module is now renamed to `unstable-keyval`. We
+expect this module to become stable once it has some usage experience,
+specifically in the next or the following release
+
+
+## Fatal warnings in `gnome.generate_gir()`
+
+`gnome.generate_gir()` now has `fatal_warnings` keyword argument to
+abort when a warning is produced. This is useful for example in CI
+environment where it's important to catch potential issues.
+
+## b_ndebug support for D language compilers
+
+D Language compilers will now set -release/--release/-frelease (depending on
+the compiler) when the b_ndebug flag is set.
+
+## Meson test now produces JUnit xml from results
+
+Meson will now generate a JUnit compatible XML file from test results.
+it will be in the `meson-logs` directory and is called
+`testlog.junit.xml`.
+
+## Config tool based dependencies no longer search PATH for cross compiling
+
+Before 0.55.0 config tool based dependencies (llvm-config,
+cups-config, etc), would search system $PATH if they weren't defined
+in the cross file. This has been a source of bugs and has been
+deprecated. It is now removed, config tool binaries must be specified
+in the cross file now or the dependency will not be found.
+
+## Rename has_exe_wrapper -> can_run_host_binaries
+
+The old name was confusing as it didn't really match the behavior of
+the function. The old name remains as an alias (the behavior hasn't
+changed), but is now deprecated.
+
+## String concatenation in meson_options.txt
+
+It is now possible to use string concatenation (with the `+`
+opperator) in the `meson_options.txt` file. This allows splitting long
+option descriptions.
+
+```meson
+option(
+ 'testoption',
+ type : 'string',
+ value : 'optval',
+ description : 'An option with a very long description' +
+ 'that does something in a specific context'
+)
+```
+
+## Wrap fallback URL
+
+Wrap files can now define `source_fallback_url` and
+`patch_fallback_url` to be used in case the main server is temporaly
+down.
+
+## Clang coverage support
+
+llvm-cov is now used to generate coverage information when clang is
+used as the compiler.
+
+## Local wrap source and patch files
+
+It is now possible to use the `patch_filename` and `source_filename`
+value in a `.wrap` file without `*_url` to specify a local source /
+patch file. All local files must be located in the
+`subprojects/packagefiles` directory. The `*_hash` entries are
+optional with this setup.
+
+## Local wrap patch directory
+
+Wrap files can now specify `patch_directory` instead of
+`patch_filename` in the case overlay files are local. Every files in
+that directory, and subdirectories, will be copied to the subproject
+directory. This can be used for example to add `meson.build` files to
+a project not using Meson build system upstream. The patch directory
+must be placed in `subprojects/packagefiles` directory.
+
+## Patch on all wrap types
+
+`patch_*` keys are not limited to `wrap-file` any more, they can be
+specified for all wrap types.
+
+## link_language argument added to all targets
+
+Previously the `link_language` argument was only supposed to be
+allowed in executables, because the linker used needs to be the linker
+for the language that implements the main function. Unfortunately it
+didn't work in that case, and, even worse, if it had been implemented
+properly it would have worked for *all* targets. In 0.55.0 this
+restriction has been removed, and the bug fixed. It now is valid for
+`executable` and all derivative of `library`.
+
+## meson dist --no-tests
+
+`meson dist` has a new option `--no-tests` to skip build and tests of
+generated packages. It can be used to not waste time for example when
+done in CI that already does its own testing.
+
+## Force fallback for
+
+A newly-added `--force-fallback-for` command line option can now be
+used to force fallback for specific subprojects.
+
+Example:
+
+```
+meson builddir/ --force-fallback-for=foo,bar
+```
+
+## Implicit dependency fallback
+
+`dependency('foo')` now automatically fallback if the dependency is
+not found on the system but a subproject wrap file or directory exists
+with the same name.
+
+That means that simply adding `subprojects/foo.wrap` is enough to add
+fallback to any `dependency('foo')` call. It is however requires that
+the subproject call `meson.override_dependency('foo', foo_dep)` to
+specify which dependency object should be used for `foo`.
+
+## Wrap file `provide` section
+
+Wrap files can define the dependencies it provides in the `[provide]`
+section. When `foo.wrap` provides the dependency `foo-1.0` any call do
+`dependency('foo-1.0')` will automatically fallback to that subproject
+even if no `fallback` keyword argument is given. See [Wrap
+documentation](Wrap-dependency-system-manual.md#provide_section).
+
+## `find_program()` fallback
+
+When a program cannot be found on the system but a wrap file has its
+name in the `[provide]` section, that subproject will be used as
+fallback.
+
+## Test scripts are given the exe wrapper if needed
+
+Meson will now set the `MESON_EXE_WRAPPER` as the properly wrapped and
+joined representation. For Unix-like OSes this means python's
+shelx.join, on Windows an implementation that attempts to properly
+quote windows argument is used. This allow wrapper scripts to run test
+binaries, instead of just skipping.
+
+for example, if the wrapper is `['emulator', '--script']`, it will be passed
+as `MESON_EXE_WRAPPER="emulator --script"`.
+
+## Added ability to specify backend arguments in `meson compile`
+
+It's now possible to specify backend specific arguments in `meson compile`.
+
+Usage: `meson compile [--vs-args=args] [--ninja-args=args]`
+
+```
+ --ninja-args NINJA_ARGS Arguments to pass to `ninja` (applied only on `ninja` backend).
+ --vs-args VS_ARGS Arguments to pass to `msbuild` (applied only on `vs` backend).
+```
+
+These arguments use the following syntax:
+
+If you only pass a single string, then it is considered to have all
+values separated by commas. Thus invoking the following command:
+
+```
+$ meson compile --ninja-args=-n,-d,explain
+```
+
+would add `-n`, `-d` and `explain` arguments to ninja invocation.
+
+If you need to have commas or spaces in your string values, then you
+need to pass the value with proper shell quoting like this:
+
+```
+$ meson compile "--ninja-args=['a,b', 'c d']"
+```
+
+## Introspection API changes
+
+dumping the AST (--ast): **new in 0.55.0**
+- prints the AST of a meson.build as JSON
+
+## `--backend=vs` now matches `-Db_vscrt=from_buildtype` behaviour in the Ninja backend
+
+When `--buildtype=debugoptimized` is used with the Ninja backend, the
+VS CRT option used is `/MD`, which is the [behaviour documented for
+all
+backends](https://mesonbuild.com/Builtin-options.html#b_vscrt-from_buildtype).
+However, the Visual Studio backend was pass `/MT` in that case, which
+is inconsistent.
+
+If you need to use the MultiThreaded CRT, you should explicitly pass
+`-Db_vscrt=mt`