aboutsummaryrefslogtreecommitdiffstats
path: root/meson/docs/markdown/Release-notes-for-0.40.0.md
diff options
context:
space:
mode:
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.md152
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()`.