The Meson Build System
http://mesonbuild.com/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
522 lines
19 KiB
522 lines
19 KiB
name: meson |
|
long_name: Meson object |
|
description: | |
|
The `meson` object allows you to introspect various properties of the |
|
system. This object is always mapped in the `meson` variable. |
|
|
|
methods: |
|
- name: add_dist_script |
|
returns: void |
|
since: 0.48.0 |
|
description: | |
|
Causes the script given as argument to run during `dist` |
|
operation after the |
|
distribution source has been generated but before it is |
|
archived. Note that this runs the script file that is in the |
|
_staging_ directory, not the one in the source directory. If the |
|
script file cannot be found in the staging directory, it is a hard |
|
error. The `MESON_DIST_ROOT` environment variables is set when dist scripts is |
|
run. |
|
|
|
*(since 0.54.0)* The `MESON_SOURCE_ROOT` and `MESON_BUILD_ROOT` |
|
environment variables are set when dist scripts are run. They are path to the |
|
root source and build directory of the main project, even when the script |
|
comes from a subproject. |
|
|
|
*(since 0.58.0)* This command can be invoked from a subproject, it was a hard |
|
error in earlier versions. Subproject dist scripts will only be executed |
|
when running `meson dist --include-subprojects`. `MESON_PROJECT_SOURCE_ROOT`, |
|
`MESON_PROJECT_BUILD_ROOT` and `MESON_PROJECT_DIST_ROOT` environment |
|
variables are set when dist scripts are run. They are identical to |
|
`MESON_SOURCE_ROOT`, `MESON_BUILD_ROOT` and `MESON_DIST_ROOT` for main project |
|
scripts, but for subproject scripts they have the path to the root of the |
|
subproject appended, usually `subprojects/<subproject-name>`. |
|
|
|
*(since 1.4.0)* The `MESONREWRITE` environment variable contains the path |
|
to the rewrite command that corresponds to the `meson` executable that |
|
was used to configure the build. (This might be a different path than the |
|
first executable found in `PATH`.) It can be used to remove or replace |
|
any [[run_command]] that depends on the revision control system from the |
|
build configuration. Note that the value will contain many parts. For |
|
example, it may be `python3 /path/to/meson.py introspect`. The user is |
|
responsible for splitting the string to an array if needed by splitting |
|
lexically like a UNIX shell would. If your script uses Python, |
|
`shlex.split()` is the easiest correct way to do this. |
|
|
|
posargs: |
|
script_name: |
|
type: str | file | external_program |
|
description: | |
|
The script to execute. |
|
|
|
*(since 0.55.0)* The output of [[find_program]] as well as strings are accepted. |
|
|
|
*(since 0.57.0)* [[@file]] objects and the output of [[configure_file]] may be used. |
|
|
|
varargs: |
|
name: arg |
|
type: str | file | external_program |
|
since: 0.49.0 |
|
description: | |
|
Additional arguments |
|
|
|
*(since 0.55.0)* The output of [[configure_file]], [[files]], and [[find_program]] |
|
as well as strings are accepted. |
|
|
|
- name: add_install_script |
|
returns: void |
|
description: | |
|
Causes the script given as an argument to be run during the install step, |
|
this script will have the environment variables `MESON_SOURCE_ROOT`, |
|
`MESON_BUILD_ROOT`, `MESON_INSTALL_PREFIX`, |
|
`MESON_INSTALL_DESTDIR_PREFIX`, and `MESONINTROSPECT` set. |
|
All positional arguments are passed as parameters. |
|
|
|
*(since 0.54.0)* If `meson install` is called with the `--quiet` option, the |
|
environment variable `MESON_INSTALL_QUIET` will be set. |
|
|
|
*(since 1.1.0)* If `meson install` is called with the `--dry-run` option, the |
|
environment variable `MESON_INSTALL_DRY_RUN` will be set. |
|
|
|
Meson uses the `DESTDIR` environment variable as set by the |
|
inherited environment to determine the (temporary) installation |
|
location for files. Your install script must be aware of this while |
|
manipulating and installing files. The correct way to handle this is |
|
with the `MESON_INSTALL_DESTDIR_PREFIX` variable which is always set |
|
and contains `DESTDIR` (if set) and `prefix` joined together. This |
|
is useful because both are usually absolute paths and there are |
|
platform-specific edge-cases in joining two absolute paths. |
|
|
|
In case it is needed, `MESON_INSTALL_PREFIX` is also always set and |
|
has the value of the `prefix` option passed to Meson. |
|
|
|
`MESONINTROSPECT` contains the path to the introspect command that |
|
corresponds to the `meson` executable that was used to configure the |
|
build. (This might be a different path than the first executable |
|
found in `PATH`.) It can be used to query build configuration. Note |
|
that the value will contain many parts, f.ex., it may be `python3 |
|
/path/to/meson.py introspect`. The user is responsible for splitting |
|
the string to an array if needed by splitting lexically like a UNIX |
|
shell would. If your script uses Python, `shlex.split()` is the |
|
easiest correct way to do this. |
|
|
|
posargs: |
|
script_name: |
|
type: str | file | external_program | exe | custom_tgt | custom_idx |
|
description: | |
|
The script to execute. |
|
|
|
*(since 0.55.0)* The output of [[find_program]], [[executable]], |
|
[[custom_target]], as well as strings are accepted. |
|
|
|
*(since 0.57.0)* [[@file]] objects and the output of [[configure_file]] may be used. |
|
|
|
varargs: |
|
name: arg |
|
type: str | file | external_program | exe | custom_tgt | custom_idx |
|
since: 0.49.0 |
|
description: | |
|
Additional arguments |
|
|
|
*(since 0.55.0)* The output of [[find_program]], [[executable]], |
|
[[custom_target]], as well as strings are accepted. |
|
|
|
kwargs: |
|
skip_if_destdir: |
|
type: bool |
|
since: 0.57.0 |
|
default: false |
|
description: | |
|
If `true` the script will not be run if DESTDIR is set during installation. |
|
This is useful in the case the script updates system wide |
|
cache that is only needed when copying files into final destination. |
|
|
|
install_tag: |
|
type: str |
|
since: 0.60.0 |
|
description: | |
|
A string used by the `meson install --tags` command |
|
to install only a subset of the files. |
|
By default the script has no install tag which means it is not being run when |
|
`meson install --tags` argument is specified. |
|
|
|
dry_run: |
|
type: bool |
|
since: 1.1.0 |
|
default: false |
|
description: | |
|
If `true` the script will be run even if `--dry-run` option is provided to |
|
the `meson install` command. The script can use the `MESON_INSTALL_DRY_RUN` |
|
variable to determine if it is in dry run mode or not. |
|
|
|
- name: add_postconf_script |
|
returns: void |
|
description: | |
|
Runs the given command after all project files have been generated. |
|
This script will have the environment variables |
|
`MESON_SOURCE_ROOT` and `MESON_BUILD_ROOT` set. |
|
|
|
posargs_inherit: meson.add_dist_script |
|
varargs_inherit: meson.add_dist_script |
|
|
|
- name: backend |
|
returns: str |
|
since: 0.37.0 |
|
description: | |
|
Returns a string representing the current backend: |
|
|
|
- `ninja` |
|
- `vs2010` |
|
- `vs2012` |
|
- `vs2013` |
|
- `vs2015` |
|
- `vs2017` |
|
- `vs2019` |
|
- `vs2022` |
|
- `xcode` |
|
|
|
- name: build_options |
|
returns: str |
|
since: 1.1.0 |
|
description: | |
|
Returns a string with the configuration line used to set the current project up. |
|
notes: |
|
- | |
|
**Do not try to parse this string!** |
|
|
|
You should use [[cfg_data.set_quoted]] to safely escape any embedded |
|
quotes prior to storing it into e.g. a C header macro. |
|
|
|
The contents returned by this function are the same as the |
|
"Build Options:" line reported in `<builddir>/meson-logs/meson-log.txt`. |
|
|
|
- name: build_root |
|
returns: str |
|
deprecated: 0.56.0 |
|
description: | |
|
Returns a string with the absolute path to the build root directory. |
|
This function will return the |
|
build root of the parent project if called from a subproject, which is usually |
|
not what you want. Try using [[meson.current_build_dir]] or [[meson.project_build_root]]. |
|
In the rare cases where the root of the main project is needed, |
|
use [[meson.global_build_root]] that has the same behaviour but with a more explicit |
|
name. |
|
|
|
- name: source_root |
|
returns: str |
|
deprecated: 0.56.0 |
|
description: | |
|
Returns a string with the absolute path to the source root directory. |
|
|
|
This function will return the source root of the |
|
parent project if called from a subproject, which is usually not what you want. |
|
Try using [[meson.current_source_dir]] or [[meson.project_source_root]]. |
|
In the rare cases where the root of the main project is needed, |
|
use [[meson.global_source_root]] that has the same behaviour but with a more explicit |
|
name. |
|
|
|
notes: |
|
- | |
|
You should use the [[files]] function |
|
to refer to files in the root source directory instead of |
|
constructing paths manually with [[meson.source_root]]. |
|
|
|
- name: project_build_root |
|
returns: str |
|
since: 0.56.0 |
|
description: Returns a string with the absolute path to the build root directory of the current (sub)project. |
|
|
|
- name: project_source_root |
|
returns: str |
|
since: 0.56.0 |
|
description: Returns a string with the absolute path to the source root directory of the current (sub)project. |
|
|
|
- name: global_build_root |
|
returns: str |
|
since: 0.58.0 |
|
description: | |
|
Returns a string with the absolute path to the build root directory. |
|
This function will return the build root of the |
|
main project if called from a subproject, which is usually not what you want. |
|
It is usually preferable to use [[meson.current_build_dir]] or [[meson.project_build_root]]. |
|
|
|
- name: global_source_root |
|
returns: str |
|
since: 0.58.0 |
|
description: | |
|
Returns a string with the absolute path to the source root directory. |
|
This function will return the source root of the |
|
main project if called from a subproject, which is usually not what you want. |
|
It is usually preferable to use [[meson.current_source_dir]] or [[meson.project_source_root]]. |
|
|
|
- name: current_build_dir |
|
returns: str |
|
description: Returns a string with the absolute path to the current build directory. |
|
|
|
- name: current_source_dir |
|
returns: str |
|
description: Returns a string to the current source directory. |
|
notes: |
|
- | |
|
**You do not need to use this function!** |
|
|
|
When passing files from the current source directory to a function since |
|
that is the default. Also, you can use the [[files]] function to |
|
refer to files in the current or any other source directory instead |
|
of constructing paths manually with [[meson.current_source_dir]]. |
|
|
|
- name: get_compiler |
|
returns: compiler |
|
description: Returns a [[@compiler]] object describing a compiler. |
|
|
|
posargs: |
|
language: |
|
type: str |
|
description: | |
|
The language of the compiler to return. |
|
|
|
See our [list of supported languages](Reference-tables.md#language-arguments-parameter-names). |
|
|
|
kwargs: |
|
native: |
|
type: bool |
|
default: false |
|
description: | |
|
When set to `true` Meson returns the compiler for the build |
|
machine (the "native" compiler) and when `false` it returns the host |
|
compiler (the "cross" compiler). If `native` is omitted, Meson |
|
returns the "cross" compiler if we're currently cross-compiling and |
|
the "native" compiler if we're not. |
|
|
|
- name: get_cross_property |
|
returns: any |
|
deprecated: 0.58.0 |
|
description: | |
|
Returns the given property from a cross file, the optional fallback_value |
|
is returned if not cross compiling or the given property is not found. |
|
|
|
This method is replaced by [[meson.get_external_property]]. |
|
|
|
arg_flattening: false |
|
posargs_inherit: meson.get_external_property |
|
optargs_inherit: meson.get_external_property |
|
|
|
- name: get_external_property |
|
returns: any |
|
since: 0.54.0 |
|
description: | |
|
Returns the given property from a native or cross file. |
|
The optional fallback_value is returned if the given property is not found. |
|
|
|
arg_flattening: false |
|
|
|
posargs: |
|
propname: |
|
type: str |
|
description: Name of the property in the cross / native file. |
|
|
|
optargs: |
|
fallback_value: |
|
type: any |
|
description: Value to return if `propname` is not set in the machine file. |
|
|
|
kwargs: |
|
native: |
|
type: bool |
|
description: | |
|
Setting `native` to `true` forces retrieving a variable from the |
|
native file, even when cross-compiling. |
|
If `native: false` or not specified, the variable is retrieved from the |
|
cross-file if cross-compiling, and from the native-file when not cross-compiling. |
|
|
|
- name: has_external_property |
|
returns: bool |
|
since: 0.58.0 |
|
description: Checks whether the given property exist in a native or cross file. |
|
posargs_inherit: meson.get_external_property |
|
kwargs_inherit: meson.get_external_property |
|
|
|
- name: can_run_host_binaries |
|
returns: bool |
|
since: 0.55.0 |
|
description: | |
|
Returns true if the build machine can run binaries compiled for the host. |
|
This returns `true` unless you are |
|
cross compiling, need a helper to run host binaries, and don't have one. |
|
For example when cross compiling from Linux to Windows, one can use `wine` |
|
as the helper. |
|
|
|
- name: has_exe_wrapper |
|
returns: bool |
|
deprecated: 0.55.0 |
|
description: Use [[meson.can_run_host_binaries]] instead. |
|
|
|
- name: install_dependency_manifest |
|
returns: void |
|
description: | |
|
Installs a manifest file |
|
containing a list of all subprojects, their versions and license names |
|
to the file name given as the argument. |
|
|
|
If license files are defined as well, they will be copied next to the |
|
manifest and referenced in it. |
|
|
|
If this function is not used, the builtin option `licensedir` can |
|
be used to install the manifest to a given directory with the name |
|
`depmf.json`. |
|
|
|
posargs: |
|
output_name: |
|
type: str |
|
description: Name of the manifest file to install |
|
|
|
- name: override_find_program |
|
returns: void |
|
since: 0.46.0 |
|
description: | |
|
specifies that whenever [[find_program]] is used to find a program |
|
named `progname`, Meson should not look it up on the system but |
|
instead return `program`, which may either be the result of |
|
[[find_program]], [[configure_file]] or [[executable]]. |
|
|
|
*(since 0.55.0)* If a version |
|
check is passed to [[find_program]] for a program that has been overridden with |
|
an executable, the current project version is used. |
|
|
|
posargs: |
|
progname: |
|
type: str |
|
description: The name of the program to override. |
|
|
|
program: |
|
type: exe | file | external_program |
|
description: The program to set as the override for `progname`. |
|
|
|
- name: override_dependency |
|
returns: void |
|
since: 0.54.0 |
|
description: | |
|
Specifies that whenever [[dependency]] with `name` is used, Meson should not |
|
look it up on the system but instead return `dep_object`, which may either be |
|
the result of [[dependency]] or [[declare_dependency]]. |
|
|
|
Doing this in a subproject allows the parent |
|
project to retrieve the dependency without having to know the dependency |
|
variable name: `dependency(name, fallback : subproject_name)`. |
|
|
|
posargs: |
|
name: |
|
type: str |
|
description: The name of the dependency to override. |
|
|
|
dep_object: |
|
type: dep |
|
description: The dependency to set as the override for `name`. |
|
|
|
kwargs: |
|
native: |
|
type: bool |
|
default: false |
|
description: | |
|
If set to `true`, the dependency is always overwritten for the build machine. |
|
Otherwise, the dependency is overwritten for the host machine, which |
|
differs from the build machine when cross-compiling. |
|
|
|
static: |
|
type: bool |
|
since: 0.60.0 |
|
description: | |
|
Used to override static and/or shared dependencies separately. |
|
If not specified it is assumed |
|
`dep_object` follows `default_library` option value. |
|
|
|
- name: is_cross_build |
|
returns: bool |
|
description: Returns `true` if the current build is a [cross build](Cross-compilation.md) and `false` otherwise. |
|
|
|
- name: is_subproject |
|
returns: bool |
|
description: Returns `true` if the current project is being built as a subproject of some other project and `false` otherwise. |
|
|
|
- name: is_unity |
|
returns: bool |
|
description: Returns `true` when doing a [unity build](Unity-builds.md) (multiple sources are combined before compilation to reduce build time) and `false` otherwise. |
|
|
|
- name: project_version |
|
returns: str |
|
description: Returns the version string specified in [[project]] function call. |
|
|
|
- name: project_license |
|
returns: list[str] |
|
since: 0.45.0 |
|
description: Returns the array of licenses specified in [[project]] function call. |
|
|
|
- name: project_license_files |
|
returns: list[file] |
|
since: 1.1.0 |
|
description: Returns the array of license files specified in the [[project]] function call. |
|
|
|
- name: project_name |
|
returns: str |
|
description: Returns the project name specified in the [[project]] function call. |
|
|
|
- name: version |
|
returns: str |
|
description: Return a string with the version of Meson. |
|
|
|
- name: add_devenv |
|
returns: void |
|
since: 0.58.0 |
|
description: | |
|
add an [[@env]] object (returned by [[environment]]) |
|
to the list of environments that will be applied when using [`meson devenv`](Commands.md#devenv) |
|
command line. |
|
|
|
This is useful for developers who wish to use the project without |
|
installing it, it is often needed to set for example the path to plugins |
|
directory, etc. Alternatively, a list or dictionary can be passed as first |
|
argument. |
|
|
|
``` meson |
|
devenv = environment() |
|
devenv.set('PLUGINS_PATH', meson.current_build_dir()) |
|
... |
|
meson.add_devenv(devenv) |
|
``` |
|
|
|
After configuring and compiling that project, a terminal can be opened with |
|
the environment set: |
|
|
|
```sh |
|
$ meson devenv -C <builddir> |
|
$ echo $PLUGINS_PATH |
|
/path/to/source/subdir |
|
``` |
|
|
|
See [`meson devenv`](Commands.md#devenv) command documentation for a list of |
|
environment variables that are set by default by Meson. |
|
|
|
posargs: |
|
env: |
|
type: env | str | list[str] | dict[str] | dict[list[str]] |
|
description: | |
|
The [[@env]] object to add. |
|
Since *0.62.0* list of strings is allowed in dictionary values. In that |
|
case values are joined using the separator. |
|
kwargs: |
|
separator: |
|
type: str |
|
since: 0.62.0 |
|
description: | |
|
The separator to use for the initial values defined in |
|
the first positional argument. If not explicitly specified, the default |
|
path separator for the host operating system will be used, i.e. ';' for |
|
Windows and ':' for UNIX/POSIX systems. |
|
method: |
|
type: str |
|
since: 0.62.0 |
|
description: | |
|
Must be one of 'set', 'prepend', or 'append' |
|
(defaults to 'set'). Controls if initial values defined in the first |
|
positional argument are prepended, appended or replace the current value |
|
of the environment variable.
|
|
|