aboutsummaryrefslogtreecommitdiffstats
path: root/meson/docs/markdown/Release-notes-for-0.52.0.md
diff options
context:
space:
mode:
authorAngelos Mouzakitis <a.mouzakitis@virtualopensystems.com>2023-10-10 14:33:42 +0000
committerAngelos Mouzakitis <a.mouzakitis@virtualopensystems.com>2023-10-10 14:33:42 +0000
commitaf1a266670d040d2f4083ff309d732d648afba2a (patch)
tree2fc46203448ddcc6f81546d379abfaeb323575e9 /meson/docs/markdown/Release-notes-for-0.52.0.md
parente02cda008591317b1625707ff8e115a4841aa889 (diff)
Add submodule dependency filesHEADmaster
Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec
Diffstat (limited to 'meson/docs/markdown/Release-notes-for-0.52.0.md')
-rw-r--r--meson/docs/markdown/Release-notes-for-0.52.0.md252
1 files changed, 252 insertions, 0 deletions
diff --git a/meson/docs/markdown/Release-notes-for-0.52.0.md b/meson/docs/markdown/Release-notes-for-0.52.0.md
new file mode 100644
index 000000000..05e2dc27e
--- /dev/null
+++ b/meson/docs/markdown/Release-notes-for-0.52.0.md
@@ -0,0 +1,252 @@
+---
+title: Release 0.52.0
+short-description: Release notes for 0.52.0
+...
+
+# New features
+
+## Gettext targets are ignored if `gettext` is not installed
+
+Previously the `i18n` module has errored out when `gettext` tools are
+not installed on the system. Starting with this version they will
+become no-ops instead. This makes it easier to build projects on
+minimal environments (such as when bootstrapping) that do not have
+translation tools installed.
+
+## Support taking environment values from a dictionary
+
+`environment()` now accepts a dictionary as first argument. If
+provided, each key/value pair is added into the `environment_object`
+as if `set()` method was called for each of them.
+
+On the various functions that take an `env:` keyword argument, you may
+now give a dictionary.
+
+## alias_target
+
+``` meson
+runtarget alias_target(target_name, dep1, ...)
+```
+
+This function creates a new top-level target. Like all top-level
+targets, this integrates with the selected backend. For instance, with
+Ninja you can run it as `ninja target_name`. This is a dummy target
+that does not execute any command, but ensures that all dependencies
+are built. Dependencies can be any build target (e.g. return value of
+executable(), custom_target(), etc)
+
+
+## Enhancements to the pkg_config_path argument
+
+Setting sys_root in the [properties] section of your cross file will
+now set PKG_CONFIG_SYSROOT_DIR automatically for host system
+dependencies when cross compiling.
+
+## The Meson test program now accepts an additional "--gdb-path" argument to specify the GDB binary
+
+`meson test --gdb testname` invokes GDB with the specific test case. However, sometimes GDB is not in the path or a GDB replacement is wanted.
+Therefore, a `--gdb-path` argument was added to specify which binary is executed (per default `gdb`):
+
+```console
+$ meson test --gdb --gdb-path /my/special/location/for/gdb testname
+$ meson test --gdb --gdb-path cgdb testname
+```
+
+## Better support for illumos and Solaris
+
+illumos (and hopefully Solaris) support has been dramatically
+improved, and one can reasonably expect projects to compile.
+
+## Splitting of Compiler.get_function_attribute('visibility')
+
+On macOS there is no `protected` visibility, which results in the
+visbility check always failing. 0.52.0 introduces two changes to
+improve this situation:
+
+1. the "visibility" check no longer includes "protected"
+2. a new set of "split" checks are introduced which check for a single
+ attribute instead of all attributes.
+
+These new attributes are:
+* visibility:default
+* visibility:hidden
+* visibility:internal
+* visibility:protected
+
+## Clang-tidy target
+
+If `clang-tidy` is installed and the project's source root contains a
+`.clang-tidy` (or `_clang-tidy`) file, Meson will automatically define
+a `clang-tidy` target that runs Clang-Tidy on all source files.
+
+If you have defined your own `clang-tidy` target, Meson will not
+generate its own target.
+
+## Add blocks dependency
+
+Add `dependency('blocks')` to use the Clang blocks extension.
+
+## Meson's builtin b_lundef is now supported on macOS
+
+This has always been possible, but there are some additional
+restrictions on macOS (mainly do to Apple only features). With the
+linker internal re-architecture this has become possible
+
+## Compiler and dynamic linker representation split
+
+0.52.0 inclues a massive refactor of the representaitons of compilers to
+tease apart the representations of compilers and dynamic linkers (ld). This
+fixes a number of compiler/linker combinations. In particular this fixes
+use GCC and vanilla clang on macOS.
+
+## Add `depth` option to `wrap-git`
+
+To allow shallow cloning, an option `depth` has been added to `wrap-git`.
+This applies recursively to submodules when `clone-recursive` is set to `true`.
+
+Note that the git server may have to be configured to support shallow cloning
+not only for branches but also for tags.
+
+## Enhancements to the source_set module
+
+`SourceSet` objects now provide the `all_dependencies()` method, that
+complement the existing `all_sources()` method.
+
+## added `--only test(s)` option to run_project_tests.py
+
+Individual tests or a list of tests from run_project_tests.py can be selected like:
+```
+python run_project_tests.py --only fortran
+
+python run_project_tests.py --only fortran python3
+```
+
+This assists Meson development by only running the tests for the
+portion of Meson being worked on during local development.
+
+## Experimental Webassembly support via Emscripten
+
+Meson now supports compiling code to Webassembly using the Emscripten
+compiler. As with most things regarding Webassembly, this support is
+subject to change.
+
+## Version check in `find_program()`
+
+A new `version` keyword argument has been added to `find_program` to
+specify the required version. See [`dependency()`](#dependency) for
+argument format. The version of the program is determined by running
+`program_name --version` command. If stdout is empty it fallbacks to
+stderr. If the output contains more text than simply a version number,
+only the first occurrence of numbers separated by dots is kept. If the
+output is more complicated than that, the version checking will have
+to be done manually using [`run_command()`](#run_command).
+
+## Added `vs_module_defs` to `shared_module()`
+
+Like `shared_library()`, `shared_module()` now accepts
+`vs_module_defs` argument for controlling symbol exports, etc.
+
+## Improved support for static libraries
+
+Static libraries had numerous shortcomings in the past, especially
+when using uninstalled static libraries. This release brings many
+internal changes in the way they are handled, including:
+
+- `link_whole:` of static libraries. In the example below, lib2 used to miss
+ symbols from lib1 and was unusable.
+```meson
+lib1 = static_library(sources)
+lib2 = static_library(other_sources, link_whole : lib1, install : true)
+```
+- `link_with:` of a static library with an uninstalled static library. In the
+example below, lib2 now implicitly promote `link_with:` to `link_whole:` because
+the installed lib2 would oterhwise be unusable.
+```meson
+lib1 = static_library(sources, install : false)
+lib2 = static_library(sources, link_with : lib1, install : true)
+```
+- pkg-config generator do not include uninstalled static libraries. In the example
+ below, the generated `.pc` file used to be unusable because it contained
+ `Libs.private: -llib1` and `lib1.a` is not installed. `lib1` is now omitted
+ from the `.pc` file because the `link_with:` has been promoted to
+ `link_whole:` (see above) and thus lib1 is not needed to use lib2.
+```meson
+lib1 = static_library(sources, install : false)
+lib2 = both_libraries(sources, link_with : lib1, install : true)
+pkg.generate(lib2)
+```
+
+Many projects have been using `extract_all_objects()` to work around
+those issues, and hopefully those hacks could now be removed. Since
+this is a pretty large change, please double check if your static
+libraries behave correctly, and report any regression.
+
+## Enhancements to the kconfig module
+
+`kconfig.load()` may now accept a `configure_file()` as input file.
+
+## Added `include_type` kwarg to `dependency`
+
+The `dependency()` function now has a `include_type` kwarg. It can take the
+values `'preserve'`, `'system'` and `'non-system'`. If it is set to `'system'`,
+all include directories of the dependency are marked as system dependencies.
+
+The default value of `include_type` is `'preserve'`.
+
+Additionally, it is also possible to check and change the
+`include_type` state of an existing dependency object with the new
+`include_type()` and `as_system()` methods.
+
+## Enhancements to `configure_file()`
+
+`input:` now accepts multiple input file names for `command:`-configured file.
+
+`depfile:` keyword argument is now accepted. The dependency file can
+list all the additional files the configure target depends on.
+
+## Projects args can be set separately for build and host machines (potentially breaking change)
+
+Simplify `native` flag behavior in `add_global_arguments`,
+`add_global_link_arguments`, `add_project_arguments` and
+`add_project_link_arguments`. The rules are now very simple:
+
+ - `native: true` affects `native: true` targets
+
+ - `native: false` affects `native: false` targets
+
+ - No native flag is the same as `native: false`
+
+This further simplifies behavior to match the "build vs host" decision
+done in last release with `c_args` vs `build_c_args`. The underlying
+motivation in both cases is to execute the same commands whether the
+overall build is native or cross.
+
+## Allow checking if a variable is a disabler
+
+Added the function `is_disabler(var)`. Returns true if a variable is a disabler
+and false otherwise.
+
+
+## gtkdoc-check support
+
+`gnome.gtkdoc()` now has a `check` keyword argument. If `true` runs it
+will run `gtkdoc-check` when running unit tests. Note that this has
+the downside of rebuilding the doc for each build, which is often very
+slow. It usually should be enabled only in CI.
+
+## `gnome.gtkdoc()` returns target object
+
+`gnome.gtkdoc()` now returns a target object that can be passed as
+dependency to other targets using generated doc files (e.g. in
+`content_files` of another doc).
+
+## Dist is now a top level command
+
+Previously creating a source archive could only be done with `ninja
+dist`. Starting with this release Meson provides a top level `dist`
+that can be invoked directly. It also has a command line option to
+determine which kinds of archives to create:
+
+```meson
+meson dist --formats=xztar,zip
+```