diff options
Diffstat (limited to 'meson/docs/markdown/Release-notes-for-0.40.0.md')
-rw-r--r-- | meson/docs/markdown/Release-notes-for-0.40.0.md | 152 |
1 files changed, 152 insertions, 0 deletions
diff --git a/meson/docs/markdown/Release-notes-for-0.40.0.md b/meson/docs/markdown/Release-notes-for-0.40.0.md new file mode 100644 index 000000000..53bc9bad9 --- /dev/null +++ b/meson/docs/markdown/Release-notes-for-0.40.0.md @@ -0,0 +1,152 @@ +--- +title: Release 0.40 +short-description: Release notes for 0.40 +... + +# New features + +## Outputs of generators can be used in custom targets in the VS backend + +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 objects + +This method can be used to evaluate the value of an expression. As an +example: + +```meson +cc = meson.get_compiler('c') +two = cc.compute_int('1 + 1') # A very slow way of adding two numbers. +``` + +## Visual Studio 2017 support + +There is now a VS2017 backend (`--backend=vs2017`) as well as a +generic VS backend (`--backend=vs`) that autodetects the currently +active VS version. + +## Automatic initialization of subprojects that are git submodules + +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. + +## No download mode for wraps + +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. + +## Overriding options per target + +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: + +```meson +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 object get define + +Compiler objects got a new method `get_define()` that returns the +given preprocessor symbol as a string. + +```meson +cc = meson.get_compiler('c') +one = cc.get_define('__linux__') # returns '1' on Linux hosts +``` + +## Cygwin support + +Meson now works under Cygwin and we have added it to our CI test +matrix. + +## Multiple install directories + +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: + +```meson +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: + +```meson +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. + +## Can specify method of obtaining dependencies + +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: + +```meson +qt5_dep = dependency('qt5', modules : 'core', method : 'qmake') +``` + +## Link whole contents of static libraries + +The default behavior of static libraries is to discard all symbols +that are not 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. + +```meson +shared_library('foo', 'foo.c', link_whole : some_static_library) +``` + +Note that Visual Studio compilers only support this functionality on +VS 2015 and newer. + +## Unity builds only for subprojects + +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`. + +## Running `mesonintrospect` from scripts + +Meson 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()`. |