summaryrefslogtreecommitdiff
path: root/docs/markdown/Release-notes-for-1.10.0.md
diff options
context:
space:
mode:
Diffstat (limited to 'docs/markdown/Release-notes-for-1.10.0.md')
-rw-r--r--docs/markdown/Release-notes-for-1.10.0.md290
1 files changed, 290 insertions, 0 deletions
diff --git a/docs/markdown/Release-notes-for-1.10.0.md b/docs/markdown/Release-notes-for-1.10.0.md
new file mode 100644
index 000000000..36a528563
--- /dev/null
+++ b/docs/markdown/Release-notes-for-1.10.0.md
@@ -0,0 +1,290 @@
+---
+title: Release 1.10.0
+short-description: Release notes for 1.10.0
+...
+
+# New features
+
+Meson 1.10.0 was released on 08 December 2025
+## Support for the `counted_by` attribute
+
+`compiler.has_function_attribute()` now supports for the new `counted_by`
+attribute.
+
+## Added a `values()` method for dictionaries
+
+Mesons built-in [[@dict]] type now supports the [[dict.values]] method
+to retrieve the dictionary values as an array, analogous to the
+[[dict.keys]] method.
+
+```meson
+dict = { 'b': 'world', 'a': 'hello' }
+
+[[#dict.keys]] # Returns ['a', 'b']
+[[#dict.values]] # Returns ['hello', 'world']
+```
+
+## Add cmd_array method to ExternalProgram
+
+Added a new `cmd_array()` method to the `ExternalProgram` object that returns
+an array containing the command(s) for the program. This is particularly useful
+in cases like pyInstaller where the Python command is `meson.exe runpython`,
+and the full path should not be used but rather the command array.
+
+The method returns a list of strings representing the complete command needed
+to execute the external program, which may differ from just the full path
+returned by `full_path()` in cases where wrapper commands or interpreters are
+involved.
+
+## Microchip XC32 compiler support
+
+The Microchip XC32 compiler is now supported.
+
+## Added OS/2 support
+
+Meson now supports OS/2 system. Especially, `shortname` kwarg and
+`os2_emxomf` builtin option are introduced.
+
+`shortname` is used to specify a short DLL name fitting to a 8.3 rule.
+
+```meson
+lib = library('foo_library',
+ ...
+ shortname: 'foo',
+ ...
+)
+```
+
+This will generate `foo.dll` not `foo_library.dll` on OS/2. If
+`shortname` is not used, `foo_libr.dll` which is truncated up to 8
+characters is generated.
+
+`os2_emxomf` is used to generate OMF files with OMF tool-chains.
+
+```
+meson setup --os2-emxomf builddir
+```
+
+This will generate OMF object files and `.lib` library files. If
+`--os2-emxomf` is not used, AOUT object files and `.a` library files are
+generated.
+
+## Android cross file generator
+
+The `env2mfile` command now supports a `--android` argument. When
+specified, it tells the cross file generator to create cross files for
+all Android toolchains located on the current machines.
+
+This typically creates many files, so the `-o` argument specifies the
+output directory. A typical use case goes like this:
+
+```
+meson env2mfile --android -o androidcross
+meson setup --cross-file \
+ androidcross/android-29.0.14033849-android35-aarch64-cross.txt \
+ builddir
+```
+
+## Array `.slice()` method
+
+Arrays now have a `.slice()` method which allows for subsetting of arrays.
+
+## `-Db_msvcrt` on clang
+
+`-Db_msvcrt` will now link the appropriate runtime library, and set
+the appropriate preprocessor symbols, also when the compiler is clang.
+This is only supported when using `link.exe` or `lld-link.exe` as the
+linker.
+
+## Added `build_subdir` arg to various targets
+
+`custom_target()`, `build_target()` and `configure_file()` now support
+the `build_subdir` argument. This directs meson to place the build
+result within the specified sub-directory path of the build directory.
+
+```meson
+configure_file(input : files('config.h.in'),
+ output : 'config.h',
+ build_subdir : 'config-subdir',
+ install_dir : 'share/appdir',
+ configuration : conf)
+```
+
+This places the build result, `config.h`, in a sub-directory named
+`config-subdir`, creating it if necessary. To prevent collisions
+within the build directory, `build_subdir` is not allowed to match a
+file or directory in the source directory nor contain '..' to refer to
+the parent of the build directory. `build_subdir` does not affect the
+install directory path at all; `config.h` will be installed as
+`share/appdir/config.h`. `build_subdir` may contain multiple levels of
+directory names.
+
+This allows construction of files within the build system that have
+any required trailing path name components as well as building
+multiple files with the same basename from the same source directory.
+
+## Support for Cargo workspaces
+
+When parsing `Cargo.toml` files, Meson now recognizes workspaces
+and will process all the required members and any requested optional
+members of the workspace.
+
+For the time being it is recommended to regroup all Cargo dependencies inside a
+single workspace invoked from the main Meson project. When invoking multiple
+different Cargo subprojects from Meson, feature resolution of common
+dependencies might be wrong.
+
+## Experimental Codegen module
+
+A new module wrapping some common code generators has been added. Currently it supports lex/flex and yacc/bison.
+
+## Methods from compiler object now accept strings for include_directories
+
+The various [[@compiler]] methods with a `include_directories` keyword argument
+now accept stings or array of strings, in addition to [[@inc]] objects
+generated from [[include_directories]] function, as it was already the case for
+[[build_target]] family of functions.
+
+## `meson format` has a new `--check-diff` option
+
+When using `meson format --check-only` to verify formatting in CI, it would
+previously silently exit with an error code if the code was not formatted
+correctly.
+
+A new `--check-diff` option has been added which will instead print a diff of
+the required changes and then exit with an error code.
+
+## `-Db_thinlto_cache` now supported for GCC
+
+`-Db_thinlto_cache` is now supported for GCC 15's incremental LTO, as is
+`-Db_thinlto_cache_dir`.
+
+## Using `meson.get_compiler()` to get a language from another project is marked broken
+
+Meson currently will return a compiler instance from the `meson.get_compiler()`
+call, if that language has been initialized in any project. This can result in
+situations where a project can only work as a subproject, or if a dependency is
+provided by a subproject rather than by a pre-built dependency.
+
+## Experimental C++ import std support
+
+**Note**: this feature is experimental and not guaranteed to be
+ backwards compatible or even exist at all in future Meson releases.
+
+Meson now supports `import std`, a new, modular way of using the C++
+standard library. This support is enabled with the new `cpp_importstd`
+option. It defaults to `false`, but you can set it to `true` either
+globally or per-target using `override_options` in the usual way.
+
+The implementation has many limitations. The biggest one is that the
+same module file is used on _all_ targets. That means you can not mix
+multiple different C++ standards versions as the compiled module file
+can only be used with the same compiler options as were used to build
+it. This feature only works with the Ninja backend.
+
+As `import std` is a major new feature in compilers, expect to
+encounter toolchain issues when using it. For an example [see
+here](https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122614).
+
+## Common `Cargo.lock` for all Cargo subprojects
+
+Whenever Meson finds a `Cargo.lock` file in the toplevel directory
+of the project, it will use it to resolve the versions of Cargo
+subprojects in preference to per-subproject `Cargo.lock` files.
+Per-subproject lock files are only used if the invoking project
+did not have a `Cargo.lock` file itself.
+
+If you wish to experiment with Cargo subprojects, it is recommended
+to use `cargo` to set up `Cargo.lock` and `Cargo.toml` files,
+encompassing all Rust targets, in the toplevel source directory.
+Cargo subprojects remain unstable and subject to change.
+
+## Add a configure log in meson-logs
+
+Add a second log file `meson-setup.txt` which contains the configure logs
+displayed on stdout during the meson `setup` stage.
+It allows user to navigate through the setup logs without searching in the terminal
+or the extensive informations of `meson-log.txt`.
+
+## Added new `namingscheme` option
+
+Traditionally Meson has named output targets so that they don't clash
+with each other. This has meant, among other things, that on Windows
+Meson uses a nonstandard `.a` suffix for static libraries because both
+static libraries and import libraries have the suffix `.lib`.
+
+There is now an option `namingscheme` that can be set to
+`platform`. This new platform native naming scheme that replicates
+what Rust does. That is, shared libraries on Windows get a suffix
+`.dll`, static libraries get `.lib` and import libraries have the name
+`.dll.lib`.
+
+We expect to change the default value of this option to `platform` in
+a future major version. Until that happens we reserve the right to
+alter how `platform` actually names its output files.
+
+## Rewriter improvements
+
+The [rewriter](Rewriter.md) added support for writing the `project()`
+`license_files` argument and for reading dict-valued kwargs.
+
+It also removed the unused but mandatory `value` arguments to the
+`default-options delete` and `kwargs delete` CLI subcommands. To allow
+scripts to continue supporting previous releases, these arguments are
+still accepted (with a warning) if they're all equal to the empty string.
+
+## Passing `-C default-linker-libraries` to rustc
+
+When calling rustc, Meson now passes the `-C default-linker-libraries` option.
+While rustc passes the necessary libraries for Rust programs, they are rarely
+enough for mixed Rust/C programs.
+
+## `rustc` will receive `-C embed-bitcode=no` and `-C lto` command line options
+
+With this release, Meson passes command line arguments to `rustc` to
+enable LTO when the `b_lto` built-in option is set to true. As an
+optimization, Meson also passes `-C embed-bitcode=no` when LTO is
+disabled; note that this is incompatible with passing `-C lto` via
+`rust_args`.
+
+## New method to handle GNU and Windows symbol visibility for C/C++/ObjC/ObjC++
+
+Defining public API of a cross platform C/C++/ObjC/ObjC++ library is often
+painful and requires copying macro snippets into every projects, typically using
+`__declspec(dllexport)`, `__declspec(dllimport)` or
+`__attribute__((visibility("default")))`.
+
+Meson can now generate a header file that defines exactly what's needed for
+all supported platforms:
+[`snippets.symbol_visibility_header()`](Snippets-module.md#symbol_visibility_header).
+
+## Vala BuildTarget dependency enhancements
+
+A BuildTarget that has Vala sources can now get a File dependency for its
+generated header, vapi, and gir files.
+
+```meson
+lib = library('foo', 'foo.vala')
+lib_h = lib.vala_header()
+lib_s = static_lib('static', 'static.c', lib_h)
+
+lib_vapi = lib.vala_vapi()
+
+custom_target(
+ 'foo-typelib',
+ command : ['g-ir-compiler', '--output', '@OUTPUT@', '@INPUT@'],
+ input : lib.vala_gir(),
+ output : 'Foo-1.0.typelib'
+)
+```
+
+`static.c` will not start compilation until `lib.h` is generated.
+
+## `i18n.xgettext` now accepts CustomTarget and CustomTargetIndex as sources
+
+Previously, [[@custom_tgt]] were accepted but silently ignored, and
+[[@custom_idx]] were not accepted.
+
+Now, they both can be used, and the generated outputs will be scanned to extract
+translation strings.
+