|
|
|
---
|
|
|
|
title: YAML Reference manual
|
|
|
|
short-description: Editing and maintaining the Reference manual
|
|
|
|
...
|
|
|
|
|
|
|
|
# Reference Manual
|
|
|
|
|
|
|
|
The [Reference Manual](Reference-manual.md) is automatically generated out of YAML
|
|
|
|
files in `docs/yaml`. This allows the Meson project to enforce a consistent
|
|
|
|
style of the Reference Manual and enables easier style changes to the generated
|
|
|
|
Markdown files without touching the actual documentation.
|
|
|
|
Additionally, multiple generation backends can be supported (besides the
|
|
|
|
Markdown generator for mesonbuild.com).
|
|
|
|
|
|
|
|
The generator that reads these YAML files is located in `docs/refman`, with the
|
|
|
|
main executable being `docs/genrefman.py`. By default `genrefman.py` will load
|
|
|
|
the yaml manual using a strict subset of yaml at the cost of loading slowly.
|
|
|
|
You may optionally disable all these safety checks using the `fastyaml` loader,
|
|
|
|
which will significantly speed things up at the cost of being less correct.
|
|
|
|
|
|
|
|
## Linking to the Reference Manual
|
|
|
|
|
|
|
|
Links to the Reference Manual can be inserted *anywhere* in the Meson docs with
|
|
|
|
tags like this: `[[<tag>]]`. This guarantees that links remain stable (even if
|
|
|
|
the structure of the Reference Manual changes) and are uniformly formatted
|
|
|
|
everywhere.
|
|
|
|
|
|
|
|
To link to functions, the function name should be put into the tag:
|
|
|
|
`[[<func name>]]`.
|
|
|
|
Methods (for all kinds of objects, including modules) can be linked to like
|
|
|
|
this: `[[<object name>.<method name>]]`.
|
|
|
|
To link to objects themself, the `[[@<object name>]]` syntax can be used.
|
|
|
|
|
|
|
|
These tags do **not** need to be put in inline code! A hotdoc extension handles
|
|
|
|
the formatting here. If tags need to be placed (for instance, to include reference
|
|
|
|
directly in code blocks), the `[[#<remaining tag>]]` syntax should be used.
|
|
|
|
|
|
|
|
Examples:
|
|
|
|
- Functions: [[executable]]
|
|
|
|
- Methods: [[meson.version]]
|
|
|
|
- Objects: [[@str]]
|
|
|
|
|
|
|
|
Now the same in a code block:
|
|
|
|
|
|
|
|
```meson
|
|
|
|
[[#@str]] [[executable]]('main', [
|
|
|
|
'file_@0@.cpp'.format([[#meson.version]])
|
|
|
|
])
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## Directory structure
|
|
|
|
|
|
|
|
The directory structure under `docs/yaml` is important, since it determines how
|
|
|
|
the YAML files are interpreted:
|
|
|
|
|
|
|
|
- `builtins`: Documentation for builtin objects, such as `meson`
|
|
|
|
- `elementary`: Strings, lists, integers, void, etc.
|
|
|
|
- `objects`: All Objects returned by functions and methods but **not** modules
|
|
|
|
- `functions`: All root meson functions ([[executable]], [[project]], etc.)
|
|
|
|
|
|
|
|
Finally, modules are defined inside the `modules` subdirectory. Here, each
|
|
|
|
module has its own directory. The module itself **must** be in a file called
|
|
|
|
`module.yaml`. All objects returned by the module are then located next to this
|
|
|
|
file.
|
|
|
|
|
|
|
|
The name of the YAML files themself are ignored (with the exception of
|
|
|
|
`module.yaml`) and carry no specific meaning. However, it is recommended to name
|
|
|
|
the YAML files after the `name` entry of the object.
|
|
|
|
|
|
|
|
All objects and functions whose name starts with a `_` are marked as private and
|
|
|
|
are *not* exported in the final documents. The primary purpose of these files
|
|
|
|
is to make inheriting functions and arguments easier.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
# YAML schema
|
|
|
|
|
|
|
|
The YAML files themself are structured as follows:
|
|
|
|
|
|
|
|
## Functions
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
name: executable # The name of the function [required]
|
|
|
|
returns: build_tgt # Must be a `name` of an existing object [required]
|
|
|
|
description: |
|
|
|
|
The first line until the first dot of the description is the brief.
|
|
|
|
All other lines are not part of the brief and should document the function
|
|
|
|
|
|
|
|
Here the full Markdown syntax is supported, such as links, `inline code`,
|
|
|
|
code blocks, and references to other parts of the Reference Manual: [[@str]].
|
|
|
|
|
|
|
|
This is true for **all** description keys in all YAML files. Defining a
|
|
|
|
description is **always** required.
|
|
|
|
|
|
|
|
since: 0.42.0 # A valid Meson version
|
|
|
|
deprecated: 100.99.0 # A valid Meson version
|
|
|
|
|
|
|
|
example: |
|
|
|
|
Similar to `description`, but is put under a different section and should
|
|
|
|
contain an example.
|
|
|
|
|
|
|
|
notes:
|
|
|
|
- A list of notes that should stand out.
|
|
|
|
- Should be used sparingly.
|
|
|
|
- Notes are optional.
|
|
|
|
|
|
|
|
warnings:
|
|
|
|
- Similar to notes, but a warning
|
|
|
|
- Warnings are also optional.
|
|
|
|
|
|
|
|
|
|
|
|
# To avoid duplicating documentation / code, argument inheritence is supported with
|
|
|
|
# the following optional keys:
|
|
|
|
|
|
|
|
posargs_inherit: _build_target_base # Use the posargs definition of `_build_target_base` here
|
|
|
|
optargs_inherit: _build_target_base # Use the optargs definition of `_build_target_base` here
|
|
|
|
varargs_inherit: _build_target_base # Use the varargs definition of `_build_target_base` here
|
|
|
|
kwargs_inherit: _build_target_base # Add all kwargs of `_build_target_base` to this function
|
|
|
|
|
|
|
|
|
|
|
|
posargs:
|
|
|
|
arg_name:
|
|
|
|
type: bool | dep # [required]
|
|
|
|
description: Some text. # [required]
|
|
|
|
since: 0.42.0
|
|
|
|
deprecated: 100.99.0
|
|
|
|
default: false # Is technically supported buy should **not** be used for posargs
|
|
|
|
|
|
|
|
another_arg:
|
|
|
|
...
|
|
|
|
|
|
|
|
optargs:
|
|
|
|
optional_arg:
|
|
|
|
type: int # [required]
|
|
|
|
description: Hello World # [required]
|
|
|
|
since: 0.42.0
|
|
|
|
deprecated: 100.99.0
|
|
|
|
default: false # Default values can make sense here
|
|
|
|
|
|
|
|
next_arg:
|
|
|
|
...
|
|
|
|
|
|
|
|
varargs:
|
|
|
|
name: Some name # [required]
|
|
|
|
type: str | list[str | int] # [required]
|
|
|
|
description: Some helpful text # [required]
|
|
|
|
since: 0.42.0
|
|
|
|
deprecated: 100.99.0
|
|
|
|
min_varargs: 1
|
|
|
|
max_varargs: 21
|
|
|
|
|
|
|
|
|
|
|
|
kwargs:
|
|
|
|
kwarg_name:
|
|
|
|
type: str # [required]
|
|
|
|
description: Meson is great! # [required]
|
|
|
|
since: 0.42.0
|
|
|
|
deprecated: 100.99.0
|
|
|
|
default: false
|
|
|
|
required: false # Some kwargs may be required
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|
## Objects
|
|
|
|
|
|
|
|
```yaml
|
|
|
|
name: build_tgt # [required]
|
|
|
|
long_name: Build target # [required]
|
|
|
|
description: Just some description. # [required]
|
|
|
|
example: Same as for functions
|
|
|
|
|
|
|
|
# Objects can be marked as containers. In this case they can be used in a `type`
|
|
|
|
# like this `container[held | objects]`. Currently this only makes sense for
|
|
|
|
# lists and dicts. There is almost no reason to set this to true for other objects.
|
|
|
|
is_container: true
|
|
|
|
|
|
|
|
since: 0.42.0
|
|
|
|
deprecated: 100.99.0
|
|
|
|
|
|
|
|
# Notes and warnings work the same as with functions
|
|
|
|
notes:
|
|
|
|
warnings:
|
|
|
|
|
|
|
|
# Inheritance is also supported for objects. Here all methods from the parent
|
|
|
|
# object are inherited. The trick with `_private` objects also works here
|
|
|
|
# to help with more complex structures.
|
|
|
|
extends: tgt
|
|
|
|
|
|
|
|
# Methods are a list of functions (see the previous section).
|
|
|
|
methods:
|
|
|
|
- ...
|
|
|
|
```
|