aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/markdown/Builtin-options.md63
-rw-r--r--docs/markdown/Cross-compilation.md14
-rw-r--r--docs/markdown/Dependencies.md8
-rw-r--r--docs/markdown/IDE-integration.md4
-rw-r--r--docs/markdown/Keyval-module.md4
-rw-r--r--docs/markdown/Machine-files.md121
-rw-r--r--docs/markdown/Reference-manual.md5
-rw-r--r--docs/markdown/Release-notes-for-0.55.0.md8
-rw-r--r--docs/markdown/Style-guide.md9
-rw-r--r--docs/markdown/Subprojects.md22
-rw-r--r--docs/markdown/Syntax.md20
-rw-r--r--docs/markdown/Tutorial.md14
-rw-r--r--docs/markdown/Users.md5
-rw-r--r--docs/markdown/Vala.md2
-rw-r--r--docs/markdown/howtox.md2
-rw-r--r--docs/markdown/snippets/keyval.md7
-rw-r--r--docs/markdown/snippets/per_subproject.md4
-rw-r--r--docs/markdown/snippets/project_options_in_machine_files.md52
-rw-r--r--docs/markdown/snippets/stdlib.md6
19 files changed, 322 insertions, 48 deletions
diff --git a/docs/markdown/Builtin-options.md b/docs/markdown/Builtin-options.md
index e7101d5..de801ab 100644
--- a/docs/markdown/Builtin-options.md
+++ b/docs/markdown/Builtin-options.md
@@ -17,7 +17,7 @@ by setting them inside `default_options` of `project()` in your `meson.build`.
For legacy reasons `--warnlevel` is the cli argument for the `warning_level` option.
-They can also be edited after setup using `meson configure`.
+They can also be edited after setup using `meson configure -Doption=value`.
Installation options are all relative to the prefix, except:
@@ -59,27 +59,27 @@ Options that are labeled "per machine" in the table are set per machine. See
the [specifying options per machine](#Specifying-options-per-machine) section
for details.
-| Option | Default value | Description | Is per machine |
-| ------ | ------------- | ----------- | -------------- |
-| auto_features {enabled, disabled, auto} | auto | Override value of all 'auto' features | no |
-| backend {ninja, vs,<br>vs2010, vs2015, vs2017, vs2019, xcode} | ninja | Backend to use | no |
-| buildtype {plain, debug,<br>debugoptimized, release, minsize, custom} | debug | Build type to use | no |
-| debug | true | Debug | no |
-| default_library {shared, static, both} | shared | Default library type | no |
-| errorlogs | true | Whether to print the logs from failing tests. | no |
-| install_umask {preserve, 0000-0777} | 022 | Default umask to apply on permissions of installed files | no |
-| layout {mirror,flat} | mirror | Build directory layout | no |
-| optimization {0, g, 1, 2, 3, s} | 0 | Optimization level | no |
-| pkg_config_path {OS separated path} | '' | Additional paths for pkg-config to search before builtin paths | yes |
-| cmake_prefix_path | [] | Additional prefixes for cmake to search before builtin paths | yes |
-| stdsplit | true | Split stdout and stderr in test logs | no |
-| strip | false | Strip targets on install | no |
-| unity {on, off, subprojects} | off | Unity build | no |
-| unity_size {>=2} | 4 | Unity file block size | no |
-| warning_level {0, 1, 2, 3} | 1 | Set the warning level. From 0 = none to 3 = highest | no |
-| werror | false | Treat warnings as errors | no |
-| wrap_mode {default, nofallback,<br>nodownload, forcefallback} | default | Wrap mode to use | no |
-| force_fallback_for | [] | Force fallback for those dependencies | no |
+| Option | Default value | Description | Is per machine | Is per subproject |
+| ------ | ------------- | ----------- | -------------- | ----------------- |
+| auto_features {enabled, disabled, auto} | auto | Override value of all 'auto' features | no | no |
+| backend {ninja, vs,<br>vs2010, vs2015, vs2017, vs2019, xcode} | ninja | Backend to use | no | no |
+| buildtype {plain, debug,<br>debugoptimized, release, minsize, custom} | debug | Build type to use | no | no |
+| debug | true | Debug | no | no |
+| default_library {shared, static, both} | shared | Default library type | no | yes |
+| errorlogs | true | Whether to print the logs from failing tests. | no | no |
+| install_umask {preserve, 0000-0777} | 022 | Default umask to apply on permissions of installed files | no | no |
+| layout {mirror,flat} | mirror | Build directory layout | no | no |
+| optimization {0, g, 1, 2, 3, s} | 0 | Optimization level | no | no |
+| pkg_config_path {OS separated path} | '' | Additional paths for pkg-config to search before builtin paths | yes | no |
+| cmake_prefix_path | [] | Additional prefixes for cmake to search before builtin paths | yes | no |
+| stdsplit | true | Split stdout and stderr in test logs | no | no |
+| strip | false | Strip targets on install | no | no |
+| unity {on, off, subprojects} | off | Unity build | no | no |
+| unity_size {>=2} | 4 | Unity file block size | no | no |
+| warning_level {0, 1, 2, 3} | 1 | Set the warning level. From 0 = none to 3 = highest | no | yes |
+| werror | false | Treat warnings as errors | no | yes |
+| wrap_mode {default, nofallback,<br>nodownload, forcefallback} | default | Wrap mode to use | no | no |
+| force_fallback_for | [] | Force fallback for those dependencies | no | no |
<a name="build-type-options"></a>
For setting optimization levels and toggling debug, you can either set the
@@ -215,3 +215,22 @@ the command line, as there was no `build.` prefix. Similarly named fields in
the `[properties]` section of the cross file would effect cross compilers, but
the code paths were fairly different allowing differences in behavior to crop
out.
+
+## Specifying options per subproject
+
+Since *0.54.0* `default_library` and `werror` built-in options can be defined
+per subproject. This is useful for example when building shared libraries in the
+main project, but static link a subproject, or when the main project must build
+with no warnings but some subprojects cannot.
+
+Most of the time this would be used either by the parent project by setting
+subproject's default_options (e.g. `subproject('foo', default_options: 'default_library=static')`),
+or by the user using the command line `-Dfoo:default_library=static`.
+
+The value is overriden in this order:
+- Value from parent project
+- Value from subproject's default_options if set
+- Value from subproject() default_options if set
+- Value from command line if set
+
+Since 0.56.0 `warning_level` can also be defined per subproject.
diff --git a/docs/markdown/Cross-compilation.md b/docs/markdown/Cross-compilation.md
index d86d417..c8cd728 100644
--- a/docs/markdown/Cross-compilation.md
+++ b/docs/markdown/Cross-compilation.md
@@ -268,7 +268,7 @@ invocation to use in your cross file is the following:
```ini
[properties]
-c_stdlib = ['mylibc', 'mylibc_dep'] # Subproject name, dependency name
+c_stdlib = ['mylibc', 'mylibc_dep'] # Subproject name, variable name
```
This specifies that C standard library is provided in the Meson
@@ -277,6 +277,18 @@ is used on every cross built C target in the entire source tree
(including subprojects) and the standard library is disabled. The
build definitions of these targets do not need any modification.
+Note that it is supported for any language, not only `c`, using `<lang>_stdlib`
+property.
+
+Since *0.56.0* the variable name parameter is no longer required as long as the
+subproject calls `meson.override_dependency('c_stdlib', mylibc_dep)`.
+The above example becomes:
+
+```ini
+[properties]
+c_stdlib = 'mylibc'
+```
+
## Changing cross file settings
Cross file settings are only read when the build directory is set up
diff --git a/docs/markdown/Dependencies.md b/docs/markdown/Dependencies.md
index a8f6d8a..b89a0aa 100644
--- a/docs/markdown/Dependencies.md
+++ b/docs/markdown/Dependencies.md
@@ -288,8 +288,12 @@ You can call `dependency` multiple times with different modules and
use those to link against your targets.
If your boost headers or libraries are in non-standard locations you
-can set the BOOST_ROOT, BOOST_INCLUDEDIR, and/or BOOST_LIBRARYDIR
-environment variables.
+can set the `BOOST_ROOT`, or the `BOOST_INCLUDEDIR` and `BOOST_LIBRARYDIR`
+environment variables. *(added in 0.56.0)* You can also set these
+parameters as `boost_root`, `boost_include`, and `boost_librarydir` in your
+native or cross machine file. Note that machine file variables are
+preferred to environment variables, and that specifying any of these
+disables system-wide search for boost.
You can set the argument `threading` to `single` to use boost
libraries that have been compiled for single-threaded use instead.
diff --git a/docs/markdown/IDE-integration.md b/docs/markdown/IDE-integration.md
index 2cc4f4f..816225f 100644
--- a/docs/markdown/IDE-integration.md
+++ b/docs/markdown/IDE-integration.md
@@ -25,7 +25,8 @@ With this command meson will configure the project and also generate
introspection information that is stored in `intro-*.json` files in the
`meson-info` directory. The introspection dump will be automatically updated
when meson is (re)configured, or the build options change. Thus, an IDE can
-watch for changes in this directory to know when something changed.
+watch for changes in this directory to know when something changed. Note that
+`meson-info.json` guaranteed to be the last file written.
The `meson-info` directory should contain the following files:
@@ -334,3 +335,4 @@ removal of a key) are unlikely and will be announced in the release notes.
- [Meson Cmake Wrapper](https://github.com/prozum/meson-cmake-wrapper) (for cmake IDEs) (currently unmaintained !!)
- [Meson-UI](https://github.com/michaelbadcrumble/meson-ui) (Meson build GUI)
- [Meson Syntax Highlighter](https://plugins.jetbrains.com/plugin/13269-meson-syntax-highlighter) plugin for JetBrains IDEs.
+- [asabil.meson](https://open-vsx.org/extension/asabil/meson) extension for VS Code/Codium
diff --git a/docs/markdown/Keyval-module.md b/docs/markdown/Keyval-module.md
index 643265e..afc48fa 100644
--- a/docs/markdown/Keyval-module.md
+++ b/docs/markdown/Keyval-module.md
@@ -1,5 +1,5 @@
---
-short-description: Unstable keyval module
+short-description: Keyval module
authors:
- name: Mark Schulte, Paolo Bonzini
years: [2017, 2019]
@@ -23,7 +23,7 @@ chosen the configuration options), output a ".config" file.
The module may be imported as follows:
``` meson
-keyval = import('unstable-keyval')
+keyval = import('keyval')
```
The following functions will then be available as methods on the object
diff --git a/docs/markdown/Machine-files.md b/docs/markdown/Machine-files.md
index 9011f79..5ac66a8 100644
--- a/docs/markdown/Machine-files.md
+++ b/docs/markdown/Machine-files.md
@@ -5,6 +5,37 @@ documentation on the common values used by both, for the specific values of
one or the other see the [cross compilation](Cross-compilation.md) and [native
environments](Native-environments.md).
+## Data Types
+
+There are four basic data types in a machine file:
+- strings
+- arrays
+- booleans
+- integers
+
+A string is specified single quoted:
+```ini
+[section]
+option1 = 'false'
+option2 = '2'
+```
+
+An array is enclosed in square brackets, and must consist of strings or booleans
+```ini
+[section]
+option = ['value']
+```
+
+A boolean must be either `true` or `false`, and unquoted.
+```ini
+option = false
+```
+
+An integer must be either an unquoted numeric constant;
+```ini
+option = 42
+```
+
## Sections
The following sections are allowed:
@@ -12,10 +43,12 @@ The following sections are allowed:
- binaries
- paths
- properties
+- project options
+- built-in options
### constants
-*Since 0.55.0*
+*Since 0.56.0*
String and list concatenation is supported using the `+` operator, joining paths
is supported using the `/` operator.
@@ -88,14 +121,16 @@ a = 'Hello'
### Binaries
The binaries section contains a list of binaries. These can be used
-internally by meson, or by the `find_program` function:
+internally by meson, or by the `find_program` function.
+
+These values must be either strings or an array of strings
Compilers and linkers are defined here using `<lang>` and `<lang>_ld`.
`<lang>_ld` is special because it is compiler specific. For compilers like
gcc and clang which are used to invoke the linker this is a value to pass to
their "choose the linker" argument (-fuse-ld= in this case). For compilers
like MSVC and Clang-Cl, this is the path to a linker for meson to invoke,
-such as `link.exe` or `lld-link.exe`. Support for ls is *new in 0.53.0*
+such as `link.exe` or `lld-link.exe`. Support for `ld` is *new in 0.53.0*
*changed in 0.53.1* the `ld` variable was replaced by `<lang>_ld`, because it
*regressed a large number of projects. in 0.53.0 the `ld` variable was used
@@ -113,8 +148,8 @@ llvm-config = '/usr/lib/llvm8/bin/llvm-config'
Cross example:
```ini
-c = '/usr/bin/i586-mingw32msvc-gcc'
-cpp = '/usr/bin/i586-mingw32msvc-g++'
+c = ['ccache', '/usr/bin/i586-mingw32msvc-gcc']
+cpp = ['ccache', '/usr/bin/i586-mingw32msvc-g++']
c_ld = 'gold'
cpp_ld = 'gold'
ar = '/usr/i586-mingw32msvc/bin/ar'
@@ -137,8 +172,10 @@ An incomplete list of internally used programs that can be overridden here is:
### Paths and Directories
+*Deprecated in 0.56.0* use the built-in section instead.
+
As of 0.50.0 paths and directories such as libdir can be defined in the native
-file in a paths section
+and cross files in a paths section. These should be strings.
```ini
[paths]
@@ -157,21 +194,79 @@ command line will override any options in the native file. For example, passing
In addition to special data that may be specified in cross files, this
section may contain random key value pairs accessed using the
-`meson.get_external_property()`
+`meson.get_external_property()`, or `meson.get_cross_property()`.
+
+*Changed in 0.56.0* putting `<lang>_args` and `<lang>_link_args` in the
+properties section has been deprecated, and should be put in the built-in
+options section.
+
+### Project specific options
+
+*New in 0.56.0*
+
+Path options are not allowed, those must be set in the `[paths]` section.
+
+Being able to set project specific options in a cross or native file can be
+done using the `[project options]` section of the specific file (if doing a
+cross build the options from the native file will be ignored)
+
+For setting options in subprojects use the `[<subproject>:project options]`
+section instead.
+
+```ini
+[project options]
+build-tests = true
+
+[zlib:project options]
+build-tests = false
+```
+
+### Meson built-in options
+
+Meson built-in options can be set the same way:
+
+```ini
+[built-in options]
+c_std = 'c99'
+```
+
+You can set some meson built-in options on a per-subproject basis, such as
+`default_library` and `werror`. The order of precedence is:
+1) Command line
+2) Machine file
+3) Build system definitions
+
+```ini
+[zlib:built-in options]
+default_library = 'static'
+werror = false
+```
+
+Options set on a per-subproject basis will inherit the
+option from the parent if the parent has a setting but the subproject
+doesn't, even when there is a default set meson language.
+
+```ini
+[built-in options]
+default_library = 'static'
+```
-## Properties
+will make subprojects use default_library as static.
-*New for native files in 0.54.0*
+Some options can be set on a per-machine basis (in other words, the value of
+the build machine can be different than the host machine in a cross compile).
+In these cases the values from both a cross file and a native file are used.
-The properties section can contain any variable you like, and is accessed via
-`meson.get_external_property`, or `meson.get_cross_property`.
+An incomplete list of options is:
+- pkg_config_path
+- cmake_prefix_path
## Loading multiple machine files
Native files allow layering (cross files can be layered since meson 0.52.0).
-More than one native file can be loaded, with values from a previous file being
+More than one file can be loaded, with values from a previous file being
overridden by the next. The intention of this is not overriding, but to allow
-composing native files. This composition is done by passing the command line
+composing files. This composition is done by passing the command line
argument multiple times:
```console
diff --git a/docs/markdown/Reference-manual.md b/docs/markdown/Reference-manual.md
index 966d408..a860f85 100644
--- a/docs/markdown/Reference-manual.md
+++ b/docs/markdown/Reference-manual.md
@@ -1977,6 +1977,9 @@ are immutable, all operations return their results as a new string.
- `startswith(string)`: returns true if string starts with the string
specified as the argument
+- `substring(start,end)` *(since 0.56.0)*: returns a substring specified from start to end.
+ Both `start` and `end` arguments are optional, so, for example, `'foobar'.substring()` will return `'foobar'`.
+
- `strip()`: removes whitespace at the beginning and end of the string.
*(since 0.43.0)* Optionally can take one positional string argument,
and all characters in that string will be stripped.
@@ -2264,7 +2267,7 @@ The following keyword arguments can be used:
some symbols to be exposed on Linux, and it should be passed via
`args` keyword argument, see below). Supported by the methods
`sizeof`, `has_type`, `has_function`, `has_member`, `has_members`,
- `check_header`, `has_header`, `has_header_symbol`.
+ `check_header`, `has_header`, `has_header_symbol`, `get_define`
**Note:** These compiler checks do not use compiler arguments added with
`add_*_arguments()`, via `-Dlang_args` on the command-line, or through
diff --git a/docs/markdown/Release-notes-for-0.55.0.md b/docs/markdown/Release-notes-for-0.55.0.md
index 534c452..cd3f795 100644
--- a/docs/markdown/Release-notes-for-0.55.0.md
+++ b/docs/markdown/Release-notes-for-0.55.0.md
@@ -305,3 +305,11 @@ $ meson compile "--ninja-args=['a,b', 'c d']"
dumping the AST (--ast): **new in 0.55.0**
- prints the AST of a meson.build as JSON
+## `--backend=vs` now matches `-Db_vscrt=from_buildtype` behaviour in the Ninja backend
+
+When `--buildtype=debugoptimized` is used with the Ninja backend, the VS CRT
+option used is `/MD`, which is the [behaviour documented for all
+backends](https://mesonbuild.com/Builtin-options.html#b_vscrt-from_buildtype).
+However, the Visual Studio backend was pass `/MT` in that case, which is inconsistent.
+
+If you need to use the MultiThreaded CRT, you should explicitly pass `-Db_vscrt=mt`
diff --git a/docs/markdown/Style-guide.md b/docs/markdown/Style-guide.md
index 960e60c..04a81e8 100644
--- a/docs/markdown/Style-guide.md
+++ b/docs/markdown/Style-guide.md
@@ -13,9 +13,12 @@ Always spaces.
## Naming Variable
-The most consistent naming convention is the snake case. Let say you would
-like to refer to your executable so something like `my_exe` would work or
-just `exe`.
+Snake case (stylized as `snake_case`) refers to the style of writing in which
+each space is replaced by an underscore (`_`) character, and the first letter of
+each word written in lowercase. It is the most common naming convention used
+in Meson build scripts as identifiers for variable.
+
+Let say you would like to refer to your executable so something like `my_exe`.
## Naming options
diff --git a/docs/markdown/Subprojects.md b/docs/markdown/Subprojects.md
index 9c54d69..02a83e6 100644
--- a/docs/markdown/Subprojects.md
+++ b/docs/markdown/Subprojects.md
@@ -236,6 +236,28 @@ the following command-line options:
but you only want to build against the library sources for a few
of them.
+ **Warning**: This could lead to mixing system and subproject version of the
+ same library in the same process. Take this case as example:
+ - Libraries `glib-2.0` and `gstreamer-1.0` are installed on your system.
+ - `gstreamer-1.0` depends on `glib-2.0`, pkg-config file `gstreamer-1.0.pc`
+ has `Requires: glib-2.0`.
+ - In your application build definition you do:
+ ```meson
+ executable('app', ...,
+ dependencies: [
+ dependency('glib-2.0', fallback: 'glib'),
+ dependency('gstreamer-1.0', fallback: 'gstreamer')],
+ )
+ ```
+ - You configure with `--force-fallback-for=glib`.
+ This result in linking to two different versions of library `glib-2.0`
+ because `dependency('glib-2.0', fallback: 'glib')` will return the
+ subproject dependency, but `dependency('gstreamer-1.0', fallback: 'gstreamer')`
+ will not fallback and return the system dependency, including `glib-2.0`
+ library. To avoid that situation, every dependency that itself depend on
+ `glib-2.0` must also be forced to fallback, in this case with
+ `--force-fallback-for=glib,gsteamer`.
+
## Download subprojects
*Since 0.49.0*
diff --git a/docs/markdown/Syntax.md b/docs/markdown/Syntax.md
index 7cb39e9..bbe3dbb 100644
--- a/docs/markdown/Syntax.md
+++ b/docs/markdown/Syntax.md
@@ -220,6 +220,26 @@ is_x86 = target.startswith('x86') # boolean value 'true'
is_bsd = target.to_lower().endswith('bsd') # boolean value 'true'
```
+#### .substring()
+
+Since 0.56.0, you can extract a substring from a string.
+
+```meson
+# Similar to the Python str[start:end] syntax
+target = 'x86_FreeBSD'
+platform = target.substring(0, 3) # prefix string value 'x86'
+system = target.substring(4) # suffix string value 'FreeBSD'
+```
+
+The method accepts negative values where negative `start` is relative to the end of
+string `len(string) - start` as well as negative `end`.
+
+```meson
+string = 'foobar'
+target.substring(-5, -3) # => 'oo'
+target.substring(1, -1) # => 'ooba'
+```
+
#### .split(), .join()
```meson
diff --git a/docs/markdown/Tutorial.md b/docs/markdown/Tutorial.md
index c5a4e6b..f108c0c 100644
--- a/docs/markdown/Tutorial.md
+++ b/docs/markdown/Tutorial.md
@@ -45,7 +45,10 @@ project('tutorial', 'c')
executable('demo', 'main.c')
```
-That is all. We are now ready to build our application. First we need
+That is all. Note that unlike Autotools you [do not need to add any source
+headers to the list of sources](FAQ.md#do-i-need-to-add-my-headers-to-the-sources-list-like-in-autotools).
+
+We are now ready to build our application. First we need
to initialize the build by going into the source directory and issuing
the following commands.
@@ -118,6 +121,15 @@ gtkdep = dependency('gtk+-3.0')
executable('demo', 'main.c', dependencies : gtkdep)
```
+If your app needs to use multiple libraries, you need to use separate
+[`dependency()`](Reference-manual.md#dependency) calls for each, like so:
+
+```meson
+gtkdeps = [dependency('gtk+-3.0'), dependency('gtksourceview-3.0')]
+```
+
+We don't need it for the current example.
+
Now we are ready to build. The thing to notice is that we do *not*
need to recreate our build directory, run any sort of magical commands
or the like. Instead we just type the exact same command as if we were
diff --git a/docs/markdown/Users.md b/docs/markdown/Users.md
index 49d30a4..307aef7 100644
--- a/docs/markdown/Users.md
+++ b/docs/markdown/Users.md
@@ -56,6 +56,7 @@ topic](https://github.com/topics/meson).
- [GtkDApp](https://gitlab.com/csoriano/GtkDApp), an application template for developing Flatpak apps with Gtk+ and D
- [GVfs](https://git.gnome.org/browse/gvfs/), a userspace virtual filesystem designed to work with the I/O abstraction of GIO
- [Hardcode-Tray](https://github.com/bil-elmoussaoui/Hardcode-Tray), fixes hardcoded tray icons in Linux
+ - [HarfBuzz](https://github.com/harfbuzz/harfbuzz), a text shaping engine
- [HelenOS](http://helenos.org), a portable microkernel-based multiserver operating system
- [HexChat](https://github.com/hexchat/hexchat), a cross-platform IRC client in C
- [IGT](https://gitlab.freedesktop.org/drm/igt-gpu-tools), Linux kernel graphics driver test suite
@@ -87,6 +88,7 @@ lookup based on OpenStreetMap data
format files
- [libui](https://github.com/andlabs/libui), a simple and portable (but not inflexible) GUI library in C that uses the native GUI technologies of each platform it supports
- [Libva](https://github.com/intel/libva), an implementation for the VA (VIdeo Acceleration) API
+ - [Libvirt](https://libvirt.org), a toolkit to manage virtualization platforms
- [Libzim](https://github.com/openzim/libzim), the reference implementation for the ZIM file format
- [Marker](https://github.com/fabiocolacio/Marker), a GTK-3 markdown editor
- [Mesa](https://gitlab.freedesktop.org/mesa/mesa/), an open source graphics driver project
@@ -96,6 +98,7 @@ format files
- [Nemo](https://github.com/linuxmint/nemo), the file manager for the Cinnamon desktop environment
- [OcherBook](https://github.com/ccoffing/OcherBook), an open source book reader for Kobo devices
- [oomd](https://github.com/facebookincubator/oomd), a userspace Out-Of-Memory (OOM) killer for Linux systems
+ - [Owl Chess](https://github.com/michaelbrockus/chess), a chess game written in Rust
- [OpenH264](https://github.com/cisco/openh264), open source H.264 codec
- [OpenHMD](https://github.com/OpenHMD/OpenHMD), a free and open source API and drivers for immersive technology, such as head mounted displays with built in head tracking
- [OpenTitan](https://github.com/lowRISC/opentitan), an open source silicon Root of Trust (RoT) project.
@@ -108,12 +111,14 @@ format files
- [Peek](https://github.com/phw/peek), simple animated GIF screen recorder with an easy to use interface
- [PicoLibc](https://github.com/keith-packard/picolibc), a standard C library for small embedded systems with limited RAM
- [PipeWire](https://github.com/PipeWire/pipewire), a framework for video and audio for containerized applications
+ - [Paper Rock Scissors](https://github.com/michaelbrockus/paper_rock_scissors), a game with weapons themed at home paper rock scissors style.
- [Pithos](https://github.com/pithos/pithos), a Pandora Radio client
- [Pitivi](https://github.com/pitivi/pitivi/), a nonlinear video editor
- [Playerctl](https://github.com/acrisci/playerctl), mpris command-line controller and library for spotify, vlc, audacious, bmp, cmus, and others
- [Polari](https://gitlab.gnome.org/GNOME/polari), an IRC client
- [qboot](https://github.com/bonzini/qboot), a minimal x86 firmware for booting Linux kernels
- [radare2](https://github.com/radare/radare2), unix-like reverse engineering framework and commandline tools (not the default)
+ - [QEMU](https://qemu.org), a processor emulator and virtualizer
- [RxDock](https://gitlab.com/rxdock/rxdock), a protein-ligand docking software designed for high throughput virtual screening (fork of rDock)
- [scrcpy](https://github.com/Genymobile/scrcpy), a cross platform application that provides display and control of Android devices connected on USB or over TCP/IP
- [Sequeler](https://github.com/Alecaddd/sequeler), a friendly SQL client for Linux, built with Vala and Gtk
diff --git a/docs/markdown/Vala.md b/docs/markdown/Vala.md
index cbb58a9..0a29847 100644
--- a/docs/markdown/Vala.md
+++ b/docs/markdown/Vala.md
@@ -237,7 +237,7 @@ dependencies = [
dependency('glib-2.0'),
dependency('gobject-2.0'),
meson.get_compiler('c').find_library('foo'),
- meson.get_compiler('vala').find_library('foo', dir: vapi_dir),
+ meson.get_compiler('vala').find_library('foo', dirs: vapi_dir),
]
sources = files('app.vala')
diff --git a/docs/markdown/howtox.md b/docs/markdown/howtox.md
index c89f883..0d1a2a2 100644
--- a/docs/markdown/howtox.md
+++ b/docs/markdown/howtox.md
@@ -25,7 +25,7 @@ for the host platform in cross builds can only be specified with a cross file.
There is a table of all environment variables supported [Here](Reference-tables.md#compiler-and-linker-selection-variables)
-## Set dynamic linker
+## Set linker
*New in 0.53.0*
diff --git a/docs/markdown/snippets/keyval.md b/docs/markdown/snippets/keyval.md
new file mode 100644
index 0000000..895de9b
--- /dev/null
+++ b/docs/markdown/snippets/keyval.md
@@ -0,0 +1,7 @@
+## `unstable-keyval` is now stable `keyval`
+
+The `unstable-keyval` has been renamed to `keyval` and now promises stability
+guarantees.
+
+Meson will print a warning when you load an `unstable-` module that has been
+stabilised (so `unstable-keyval` is still accepted for example).
diff --git a/docs/markdown/snippets/per_subproject.md b/docs/markdown/snippets/per_subproject.md
new file mode 100644
index 0000000..6de6068
--- /dev/null
+++ b/docs/markdown/snippets/per_subproject.md
@@ -0,0 +1,4 @@
+## Per subproject `warning_level` option
+
+`warning_level` can now be defined per subproject, in the same way as
+`default_library` and `werror`.
diff --git a/docs/markdown/snippets/project_options_in_machine_files.md b/docs/markdown/snippets/project_options_in_machine_files.md
new file mode 100644
index 0000000..8dab951
--- /dev/null
+++ b/docs/markdown/snippets/project_options_in_machine_files.md
@@ -0,0 +1,52 @@
+## Project and built-in options can be set in native or cross files
+
+A new set of sections has been added to the cross and native files, `[project
+options]` and `[<subproject_name>:project options]`, where `subproject_name`
+is the name of a subproject. Any options that are allowed in the project can
+be set from this section. They have the lowest precedent, and will be
+overwritten by command line arguments.
+
+
+```meson
+option('foo', type : 'string', value : 'foo')
+```
+
+```ini
+[project options]
+foo = 'other val'
+```
+
+```console
+meson build --native-file my.ini
+```
+
+Will result in the option foo having the value `other val`,
+
+```console
+meson build --native-file my.ini -Dfoo='different val'
+```
+
+Will result in the option foo having the value `different val`,
+
+
+Subproject options are assigned like this:
+
+```ini
+[zlib:project options]
+foo = 'some val'
+```
+
+Additionally meson level options can be set in the same way, using the
+`[built-in options]` section.
+
+```ini
+[built-in options]
+c_std = 'c99'
+```
+
+These options can also be set on a per-subproject basis, although only
+`default_library` and `werror` can currently be set:
+```ini
+[zlib:built-in options]
+default_library = 'static'
+```
diff --git a/docs/markdown/snippets/stdlib.md b/docs/markdown/snippets/stdlib.md
new file mode 100644
index 0000000..5e80dd5
--- /dev/null
+++ b/docs/markdown/snippets/stdlib.md
@@ -0,0 +1,6 @@
+## Custom standard library
+
+- It is not limited to cross builds any more, `<lang>_stdlib` property can be
+ set in native files.
+- The variable name parameter is no longer required as long as the subproject
+ calls `meson.override_dependency('c_stdlib', mylibc_dep)`.