| --- | |
| title: Release 1.2.0 | |
| short-description: Release notes for 1.2.0 | |
| ... | |
| # New features | |
| Meson 1.2.0 was released on 17 July 2023 | |
| ## Added Metrowerks C/C++ toolchains | |
| Added support for the Metrowerks Embedded ARM and Metrowerks Embedded PowerPC toolchains (https://www.nxp.com/docs/en/reference-manual/CWMCUKINCMPREF.pdf). | |
| The implementation is somewhat experimental. It has been tested on a few projects and works fairly well, but may have issues. | |
| ## Added str.splitlines method | |
| [[str.splitlines]] can now be used to split a string into an array of lines. | |
| ## `generator.process(generator.process(...))` | |
| Added support for code like this: | |
| ```meson | |
| gen1 = generator(...) | |
| gen2 = generator(...) | |
| gen2.process(gen1.process('input.txt')) | |
| ``` | |
| ## Extra files keyword in `declare_dependency` | |
| `declare_dependency` have a new `extra_files` keyword, | |
| to add extra files to a target. It is used mostly for IDE integration. | |
| ## Added a new '--genvslite' option for use with 'meson setup ...' | |
| To facilitate a more usual visual studio work-flow of supporting and switching between | |
| multiple build configurations (buildtypes) within the same solution, among other | |
| [reasons](https://github.com/mesonbuild/meson/pull/11049), use of this new option | |
| has the effect of setting up multiple ninja back-end-configured build directories, | |
| named with their respective buildtype suffix. E.g. 'somebuilddir_debug', | |
| 'somebuilddir_release', etc. as well as a '_vs'-suffixed directory that contains the | |
| generated multi-buildtype solution. Building/cleaning/rebuilding in the solution | |
| now launches the meson build (compile) of the corresponding buildtype-suffixed build | |
| directory, instead of using Visual Studio's native engine. | |
| ## `gnome.generate_gir()` now supports `env` kwarg | |
| `gnome.generate_gir()` now accepts the `env` kwarg which lets you set environment variables. | |
| ## More data in introspection files | |
| - Used compilers are listed in `intro-compilers.json` | |
| - Information about `host`, `build` and `target` machines | |
| are lister in `intro-machines.json` | |
| - `intro-dependencies.json` now includes internal dependencies, | |
| and relations between dependencies. | |
| - `intro-targets.json` now includes dependencies, `vs_module_defs`, | |
| `win_subsystem`, and linker parameters. | |
| ## Machine objects get `kernel` and `subsystem` properties | |
| Meson has traditionally provided a `system` property to detect the | |
| system being run on. However this is not enough to reliably | |
| differentiate between e.g. an iOS platform from a watchOS one. Two new | |
| properties, namely `kernel` and `subsystem` have been added so these | |
| setups can be reliably detected. | |
| These new properties are not necessary in cross files for now, but if | |
| they are not defined and a build file tries to access them, Meson will | |
| exit with a hard error. It is expected that at some point in the | |
| future defining the new properties will become mandatory. | |
| ## default_options and override_options may now be dictionaries | |
| Instead of passing them as `default_options : ['key=value']`, they can now be | |
| passed as `default_options : {'key': 'value'}`, and the same for | |
| `override_options`. | |
| ## New override of `find_program('meson')` | |
| In some cases, it has been useful for build scripts to access the Meson command | |
| used to invoke the build script. This has led to various ad-hoc solutions that | |
| can be very brittle and project-specific. | |
| ```meson | |
| meson_prog = find_program('meson') | |
| ``` | |
| This call will supply the build script with an external program pointing at the | |
| invoked Meson. | |
| Because Meson also uses `find_program` for program lookups internally, this | |
| override will also be handled in cases similar to the following: | |
| ```meson | |
| custom_target( | |
| # ... | |
| command: [ | |
| 'meson', | |
| ], | |
| # ... | |
| ) | |
| run_command( | |
| 'meson', | |
| # ... | |
| ) | |
| run_target( | |
| 'tgt', | |
| command: [ | |
| 'meson', | |
| # ... | |
| ] | |
| ) | |
| ``` | |
| ## Find more specific python version on Windows | |
| You can now use `python3.x`, where `x` is the minor version, | |
| to find a more specific version of python on Windows, when | |
| using the python module. On other platforms, it was already | |
| working as `python3.x` is the executable name. | |
| ## Python module can now compile bytecode | |
| A new builtin option is available: `-Dpython.bytecompile=2`. It can be used to | |
| compile bytecode for all pure python files installed via the python module. | |
| ## rust.bindgen allows passing extra arguments to rustc | |
| This may be necessary to pass extra `cfg`s or to change warning levels. | |
| ## Support for defining crate names of Rust dependencies in Rust targets | |
| Rust supports defining a different crate name for a dependency than what the | |
| actual crate name during compilation of that dependency was. | |
| This allows using multiple versions of the same crate at once, or simply using | |
| a shorter name of the crate for convenience. | |
| ```meson | |
| a_dep = dependency('some-very-long-name') | |
| my_executable = executable('my-executable', 'src/main.rs', | |
| rust_dependency_map : { | |
| 'some_very_long_name' : 'a', | |
| }, | |
| dependencies : [a_dep], | |
| ) | |
| ``` | |
| ## A machine file may be used to pass extra arguments to clang in a bindgen call | |
| Because of the way that bindgen proxies arguments to clang the only choice to | |
| add extra arguments currently is to wrap bindgen in a script, since the | |
| arguments must come after a `--`. This is inelegant, and not very portable. Now | |
| a `bindgen_clang_arguments` field may be placed in the machine file for the host | |
| machine, and these arguments will be added to every bindgen call for clang. This | |
| is intended to be useful for things like injecting `--target` arguments. | |
| ## Add a `link_with` keyword to `rust.test()` | |
| This can already be be worked around by creating `declare_dependency()` objects | |
| to pass to the `dependencies` keyword, but this cuts out the middle man. | |
| ## Rust now supports the b_ndebug option | |
| Which controls the `debug_assertions` cfg, which in turn controls | |
| `debug_assert!()` macro. This macro is roughly equivalent to C's `assert()`, as | |
| it can be toggled with command line options, unlike Rust's `assert!()`, which | |
| cannot be turned off, and is not designed to be. | |
| ## Wildcards in list of tests to run | |
| The `meson test` command now accepts wildcards in the list of test names. | |
| For example `meson test basic*` will run all tests whose name begins | |
| with "basic". | |
| meson will report an error if the given test name does not match any | |
| existing test. meson will log a warning if two redundant test names | |
| are given (for example if you give both "proj:basic" and "proj:"). | |
| ## New for the generation of Visual Studio vcxproj projects | |
| When vcxproj is generated, another file vcxproj.filters is generated in parallel. | |
| It enables to set a hierarchy of the files inside the solution following their place on filesystem. | |