| --- |
| title: Release 0.59.0 |
| short-description: Release notes for 0.59.0 |
| ... |
| |
| # New features |
| |
| ## Unescaped variables in pkgconfig files |
| |
| Spaces in variable values are escaped with `\`, this is required in the case the |
| value is a path that and is used in `cflags` or `libs` arguments. This was an |
| undocumented behaviour that caused issues in the case the variable is a space |
| separated list of items. |
| |
| For backward compatibility reasons this behaviour could not be changed, new |
| keyword arguments have thus been added: `unescaped_variables` and |
| `unescaped_uninstalled_variables`. |
| |
| ```meson |
| pkg = import('pkgconfig') |
| ... |
| pkg.generate(lib, |
| variables: { |
| 'mypath': '/path/with spaces/are/escaped', |
| }, |
| unescaped_variables: { |
| 'mylist': 'Hello World Is Not Escaped', |
| }, |
| ) |
| ``` |
| |
| ## The custom_target() function now accepts a feed argument |
| |
| It is now possible to provide a `feed: true` argument to `custom_target()` to |
| pipe the target's input file to the program's standard input. |
| |
| ## Separate functions for qt preprocess |
| |
| `qt.preprocess` is a large, complicated function that does a lot of things, |
| a new set of `compile_*` functions have been provided as well. These are |
| conceptually simpler, as they do a single thing. |
| |
| ## Cython as as first class language |
| |
| Meson now supports Cython as a first class language. This means you can write: |
| |
| ```meson |
| project('my project', 'cython') |
| |
| py = import('python').find_installation() |
| dep_py = py.dependency() |
| |
| py.extension_module( |
| 'foo', |
| 'foo.pyx', |
| dependencies : dep_py, |
| ) |
| ``` |
| |
| And avoid the step through a generator that was previously required. |
| |
| ## Support for the Wine Resource Compiler |
| |
| Users can now choose `wrc` as the `windres` binary in their cross files and |
| `windows.compile_resources` will handle it correctly. Together with `winegcc` |
| patches in Wine 6.12 this enables basic support for compiling projects as a |
| winelib by specifying `winegcc`/`wineg++` as the compiler and `wrc` as the |
| resource compiler in a cross file. |
| |
| ## New `vs2012` and `vs2013` backend options |
| |
| Adds the ability to generate Visual Studio 2012 and 2013 projects. This is an |
| extension to the existing Visual Studio 2010 projects so that it is no longer |
| required to manually upgrade the generated Visual Studio 2010 projects. |
| |
| Generating Visual Studio 2010 projects has also been fixed since its developer |
| command prompt does not provide a `%VisualStudioVersion%` envvar. |
| |
| ## Developer environment |
| |
| Expand the support for the `link_whole:` project option for pre-Visual Studio 2015 |
| Update 2, where previously Visual Studio 2015 Update 2 or later was required for |
| this, for the Ninja backend as well as the vs2010 (as well as the newly-added |
| vs2012 and vs2013 backends). |
| |
| ## Fs Module now accepts files objects |
| |
| It is now possible to define a `files()` object and run most Fs module |
| functions on the file, rather than passing a string and hoping it is in the |
| same directory. |
| |
| |
| ## Compiler argument checking for `get_supported_arguments` |
| |
| The compiler method `get_supported_arguments` now supports |
| a new keyword argument named `checked` that can be set to |
| one of `warn`, `require` or `off` (defaults to `off`) to |
| enforce argument checks. |
| |
| ## New custom dependency for libintl |
| |
| Meson can now find the library needed for translating messages via gettext. |
| This works both on systems where libc provides gettext, such as GNU or musl, |
| and on systems where the gettext project's standalone intl support library is |
| required, such as macOS. |
| |
| Rather than doing something such as: |
| |
| ``` |
| intl_dep = dependency('', required: false) |
| |
| if cc.has_function('ngettext') |
| intl_found = true |
| else |
| intl_dep = cc.find_library('intl', required: false) |
| intl_found = intl_dep.found() |
| endif |
| |
| if intl_found |
| # build options that need gettext |
| conf.set('ENABLE_NLS', 1) |
| endif |
| ``` |
| |
| one may simply use: |
| |
| ``` |
| intl_dep = dependency('intl', required: false) |
| |
| if intl_dep.found() |
| # build options that need gettext |
| conf.set('ENABLE_NLS', 1) |
| endif |
| ``` |
| |
| ## Parallelized `meson subprojects` commands |
| |
| All `meson subprojects` commands are now run on each subproject in parallel by |
| default. The number of processes can be controlled with `--num-processes` |
| argument. |
| |
| This speeds up considerably IO-bound operations such as downloads and git fetch. |
| |
| ## Using Vala no longer requires C in the project languages |
| |
| Meson will now add C automatically. Since the use of C is an implementation |
| detail of Vala, Meson shouldn't require users to add it. |
| |
| ## The `import()` function gains `required` and `disabler` arguments |
| |
| In addition, modules now have a `found()` method, like programs and |
| dependencies. This allows them to be conditionally required, and used in most |
| places that an object with a `found()` method can be. |
| |
| ## Objective C/C++ standard versions |
| |
| Objective C and C++ compilations will from now on use the language |
| versions set in `c_std` and `cpp_std`, respectively. It is not |
| possible to set the language version separately for Objective C and |
| plain C. |
| |
| ## Qt.preprocess source arguments deprecated |
| |
| The `qt.preprocess` method currently has this signature: |
| `qt.preprocess(name: str | None, *srcs: str)`, this is not a nice signature |
| because it's confusing, and there's a `sources` keyword argument as well. |
| Both of these pass sources through unmodified, this is a bit of a historical |
| accident, and not the way that any other module works. These have been |
| deprecated, so instead of: |
| ```meson |
| sources = qt.preprocess( |
| name, |
| list, of, sources, |
| sources : [more, sources], |
| ... # things to process, |
| ) |
| |
| executable( |
| 'foo', |
| sources, |
| ) |
| ``` |
| use |
| ```meson |
| processed = qt.preprocess( |
| name, |
| ... # thins to process |
| ) |
| |
| executable( |
| 'foo', |
| 'list', 'of', 'sources', 'more', 'sources', processed, |
| ) |
| ``` |
| |
| ## New `build target` methods |
| |
| The [[@build_tgt]] object now supports |
| the following two functions, to ensure feature compatibility with |
| [[@external_program]] objects: |
| |
| - `found()`: Always returns `true`. This function is meant |
| to make executables objects feature compatible with |
| `external program` objects. This simplifies |
| use-cases where an executable is used instead of an external program. |
| |
| - `path()`: **(deprecated)** does the exact same as `full_path()`. |
| **NOTE:** This function is solely kept for compatibility |
| with `external program` objects. It will be |
| removed once the, also deprecated, corresponding `path()` function in the |
| `external program` object is removed. |
| |
| ## Automatically set up Visual Studio environment |
| |
| When Meson is run on Windows it will automatically set up the |
| environment to use Visual Studio if no other compiler toolchain |
| can be detected. This means that you can run Meson commands from |
| any command prompt or directly from any IDE. This sets up the |
| 64 bit native environment. If you need any other, then you |
| need to set it up manually as before. |
| |
| ## `gnome.compile_schemas()` sets `GSETTINGS_SCHEMA_DIR` into devenv |
| |
| When using `gnome.compile_schemas()` the location of the compiled schema is |
| added to `GSETTINGS_SCHEMA_DIR` environment variable when using |
| [`meson devenv`](Commands.md#devenv) command. |
| |
| ## `update_desktop_database` added to `gnome.post_install()` |
| |
| Applications that install a `.desktop` file containing a `MimeType` need to update |
| the cache upon installation. Most applications do that using a custom script, |
| but it can now be done by Meson directly. |
| |
| See [`gnome.post_install()`](Gnome-module.md#gnomepost_install). |