title: Release 0.40 short-description: Release notes for 0.40 ...
This has been possible with the Ninja backend for a long time but now the Visual Studio backend works too.
compute_int
method in the compiler objectsThis method can be used to evaluate the value of an expression. As an example:
cc = meson.get_compiler('c') two = cc.compute_int('1 + 1') # A very slow way of adding two numbers.
There is now a VS2017 backend (--backend=vs2017
) as well as a generic VS backend (--backend=vs
) that autodetects the currently active VS version.
If you have a directory inside your subprojects directory (usually subprojects/
) that is a git submodule, Meson will automatically initialize it if your build files refer to it. This will be done without needing a wrap file since git contains all the information needed.
Added a new option wrap-mode
that can be toggled to prevent Meson from downloading dependency projects. Attempting to do so will cause an error. This is useful for distro packagers and other cases where you must explicitly enforce that nothing is downloaded from the net during configuration or build.
Build targets got a new keyword argument override_options
that can be used to override system options. As an example if you have a target that you know can't be built with -Werror
enabled you can override the value of the option like this:
executable('foo', 'foo.c', override_options : ['werror=false'])
Note that this does not affect project options, only those options that come from Meson (language standards, unity builds etc).
Compiler objects got a new method get_define()
that returns the given preprocessor symbol as a string.
cc = meson.get_compiler('c') one = cc.get_define('__linux__') # returns '1' on Linux hosts
Meson now works under Cygwin and we have added it to our CI test matrix.
Custom targets can produce many output files. Previously it was only possible to install all of them in the same directory, but now you can install each output in its own directory like this:
custom_target('two_out', output : ['diff.h', 'diff.sh'], command : [creator, '@OUTDIR@'], install : true, install_dir : ['dir1', 'dir2'])
For backwards compatibility and for conciseness, if you only specify one directory all outputs will be installed into it.
The same feature is also available for Vala build targets. For instance, to install a shared library built by valac, the generated header, and the generated VAPI (respectively) into the default locations, you can do:
shared_library('valalib', 'mylib.vala', install : true, install_dir : [true, true, true])
To install any of the three in a custom directory, just pass it as a string instead of true
. To not install it, pass false
. You can also pass a single string (as before) and it will cause only the library to be installed, so this is a backwards-compatible change.
Some dependencies have many ways of being provided. As an example Qt can either be detected via pkg-config
or qmake
. Until now Meson has had a heuristic for selecting which method to choose but sometimes it does the wrong thing. This can now be overridden with the method
keyword like this:
qt5_dep = dependency('qt5', modules : 'core', method : 'qmake')
The default behavior of static libraries is to discard all symbols that are not directly referenced. This may lead to exported symbols being lost. Most compilers support “whole archive” linking that includes all symbols and code of a given static library. This is exposed with the link_whole
keyword.
shared_library('foo', 'foo.c', link_whole : some_static_library)
Note that Visual Studio compilers only support this functionality on VS 2015 and newer.
Up until now unity builds were either done for every target or none of them. Now unity builds can be specified to be enabled only for subprojects, which change seldom, and not for the master project, which changes a lot. This is enabled by setting the unity
option to subprojects
.
mesonintrospect
from scriptsMeson now sets the MESONINTROSPECT
environment variable in addition to MESON_SOURCE_ROOT
and other variables when running scripts. It is guaranteed to point to the correct mesonintrospect
script, which is important when running Meson uninstalled from git or when your PATH
s may not be set up correctly.
Specifically, the following Meson functions will set it: meson.add_install_script()
, meson.add_postconf_script()
, run_command()
, run_target()
.