|
|
|
name: dependency
|
|
|
|
returns: dep
|
|
|
|
description: |
|
|
|
|
Finds an external dependency (usually a library installed on your
|
|
|
|
system) with the given name with `pkg-config` and [with
|
|
|
|
CMake](Dependencies.md#cmake) if `pkg-config` fails. Additionally,
|
|
|
|
frameworks (OSX only) and [library-specific fallback detection
|
|
|
|
logic](Dependencies.md#dependencies-with-custom-lookup-functionality)
|
|
|
|
are also supported.
|
|
|
|
|
|
|
|
*Since 0.60.0* more than one name can be provided, they will be tried in order
|
|
|
|
and the first name to be found will be used. The fallback subproject will be
|
|
|
|
used only if none of the names are found on the system. Once one of the name has
|
|
|
|
been found, all other names are added into the cache so subsequent calls for any
|
|
|
|
of those name will return the same value. This is useful in case a dependency
|
|
|
|
could have different names, such as `png` and `libpng`.
|
|
|
|
|
|
|
|
* Since *0.64.0* a dependency fallback can be provided by WrapDB. Simply download
|
|
|
|
the database locally using `meson wrap update-db` command and Meson will
|
|
|
|
automatically fallback to subprojects provided by WrapDB if the dependency is
|
|
|
|
not found on the system and the project does not ship their own `.wrap` file.
|
|
|
|
|
|
|
|
Dependencies can also be resolved in two other ways:
|
|
|
|
|
|
|
|
* if the same name was used in a `meson.override_dependency` prior to
|
|
|
|
the call to `dependency`, the overriding dependency will be returned
|
|
|
|
unconditionally; that is, the overriding dependency will be used
|
|
|
|
independent of whether an external dependency is installed in the system.
|
|
|
|
Typically, `meson.override_dependency` will have been used by a
|
|
|
|
subproject.
|
|
|
|
|
|
|
|
* by a fallback subproject which, if needed, will be brought into the current
|
|
|
|
build specification as if [`subproject()`](#subproject) had been called.
|
|
|
|
The subproject can be specified with the `fallback` argument. Alternatively,
|
|
|
|
if the `fallback` argument is absent, *since 0.55.0* Meson can
|
|
|
|
automatically identify a subproject as a fallback if a wrap file
|
|
|
|
[provides](Wrap-dependency-system-manual.md#provide-section) the
|
|
|
|
dependency, or if a subproject has the same name as the dependency.
|
|
|
|
In the latter case, the subproject must use `meson.override_dependency` to
|
|
|
|
specify the replacement, or Meson will report a hard error. See the
|
|
|
|
[Wrap documentation](Wrap-dependency-system-manual.md#provide-section)
|
|
|
|
for more details. This automatic search can be controlled using the
|
|
|
|
`allow_fallback` keyword argument.
|
|
|
|
|
|
|
|
If `dependency_name` is `''`, the dependency is always not found. So
|
|
|
|
with `required: false`, this always returns a dependency object for
|
|
|
|
which the `found()` method returns `false`, and which can be passed
|
|
|
|
like any other dependency to the `dependencies:` keyword argument of a
|
|
|
|
`build_target`. This can be used to implement a dependency which is
|
|
|
|
sometimes not required e.g. in some branches of a conditional, or with
|
|
|
|
a `fallback:` kwarg, can be used to declare an optional dependency
|
|
|
|
that only looks in the specified subproject, and only if that's
|
|
|
|
allowed by `--wrap-mode`.
|
|
|
|
|
|
|
|
The returned object [[@dep]] also has additional methods.
|
|
|
|
|
|
|
|
notes:
|
|
|
|
- This function supports additional [library-specific](Dependencies.md#dependencies-with-custom-lookup-functionality)
|
|
|
|
keyword arguments that may also be accepted (e.g. `modules` specifies submodules to use for
|
|
|
|
dependencies such as Qt5 or Boost. `components` allows the user to manually
|
|
|
|
add CMake `COMPONENTS` for the `find_package` lookup)
|
|
|
|
|
|
|
|
varargs:
|
|
|
|
name: names
|
|
|
|
type: str
|
|
|
|
since: 0.60.0
|
|
|
|
min_varargs: 1
|
|
|
|
description: |
|
|
|
|
The names of the dependency to look up. The dependencies are looked up in
|
|
|
|
the order they are provided here. The first found dependency will then be
|
|
|
|
used. The fallback subproject will be used only if none of the names are
|
|
|
|
found on the system. Once one of the name has been found, all other names
|
|
|
|
are added into the cache so subsequent calls for any of those name will
|
|
|
|
return the same value. This is useful in case a dependency could have
|
|
|
|
different names, such as `png` and `libpng`.
|
|
|
|
|
|
|
|
**NOTE:** Before *0.60.0* only a single dependency name was allowed.
|
|
|
|
|
|
|
|
kwargs:
|
|
|
|
default_options:
|
|
|
|
type: list[str] | dict[str | bool | int | list[str]]
|
|
|
|
since: 0.38.0
|
|
|
|
description: |
|
|
|
|
An array of default option values
|
Add support for meson.options as a replacement for meson_options.txt
We will still try to load `meson_options.txt` if `meson.options` doesn't
exist. Because there are some advantages to using `meson.options` even
with older versions of meson (such as better text editor handling)
we will not warn about the existence of a `meson.options` file if a
`meson_options.txt` file or symlink also exists.
The name `meson.options` was picked instead of alternative proposals,
such as `meson_options.build` for a couple of reasons:
1. meson.options is shorter
2. While the syntax is the same, only the `option()` function may be
called in meson.options, while, it may not be called in meson.build
3. While the two files share a syntax and elementary types (strings,
arrays, etc), they have different purposes: `meson.build` declares
build targets, `meson.options` declares options. This is similar to
the difference between C's `.c` and `.h` extensions.
As an implementation detail `Interpreter.option_file` has been removed,
as it is used exactly once, in the `project()` call to read the options,
and we can just calculate it there and not store it.
Fixes: #11176
2 years ago
|
|
|
that override those set in the subproject's `meson.options`
|
|
|
|
(like `default_options` in [[project]], they only have
|
|
|
|
effect when Meson is run for the first time, and command line
|
|
|
|
arguments override any default options in build files)
|
|
|
|
*(since 1.2.0)*: A dictionary may now be passed.
|
|
|
|
|
|
|
|
allow_fallback:
|
|
|
|
type: bool
|
|
|
|
since: 0.56.0
|
|
|
|
description: |
|
|
|
|
Specifies whether Meson should automatically pick a fallback subproject
|
|
|
|
in case the dependency
|
|
|
|
is not found in the system. If `true` and the dependency is not found
|
|
|
|
on the system, Meson will fallback to a subproject that provides this
|
|
|
|
dependency. If `false`, Meson will not fallback even if a subproject
|
|
|
|
provides this dependency. By default, Meson will do so if `required`
|
|
|
|
is `true` or [`enabled`](Build-options.md#features); see the [Wrap
|
|
|
|
documentation](Wrap-dependency-system-manual.md#provide-section)
|
|
|
|
for more details.
|
|
|
|
|
|
|
|
fallback:
|
|
|
|
type: list[str] | str
|
|
|
|
description: |
|
|
|
|
Manually specifies a subproject fallback
|
|
|
|
to use in case the dependency is not found in the system.
|
|
|
|
This is useful if the automatic search is not applicable or if you
|
|
|
|
want to support versions of Meson older than 0.55.0. If the value is an
|
|
|
|
array `['subproj_name', 'subproj_dep']`, the first value is the name
|
|
|
|
of the subproject and the second is the variable name in that
|
|
|
|
subproject that contains a dependency object such as the return
|
|
|
|
value of [[declare_dependency]] or
|
|
|
|
[[dependency]], etc. Note that this means the
|
|
|
|
fallback dependency may be a not-found dependency, in which
|
|
|
|
case the value of the `required:` kwarg will be obeyed.
|
|
|
|
*Since 0.54.0* the value can be a single string, the subproject name;
|
|
|
|
in this case the subproject must use
|
|
|
|
`meson.override_dependency('dependency_name', subproj_dep)`
|
|
|
|
to specify the dependency object used in the superproject.
|
|
|
|
If the value is an empty list, it has the same effect as
|
|
|
|
`allow_fallback: false`.
|
|
|
|
|
|
|
|
language:
|
|
|
|
type: str
|
|
|
|
since: 0.42.0
|
|
|
|
description: |
|
|
|
|
Defines what language-specific dependency to find
|
|
|
|
if it's available for multiple languages.
|
|
|
|
|
|
|
|
method:
|
|
|
|
type: str
|
|
|
|
since: 0.40.0
|
|
|
|
default: "'auto'"
|
|
|
|
description: |
|
|
|
|
Defines the way the dependency is detected, the default is
|
|
|
|
`auto` but can be overridden to be e.g. `qmake` for Qt development,
|
|
|
|
and [different dependencies support different values](
|
|
|
|
Dependencies.md#dependencies-with-custom-lookup-functionality)
|
|
|
|
for this (though `auto` will work on all of them)
|
|
|
|
|
|
|
|
native:
|
|
|
|
type: bool
|
|
|
|
default: false
|
|
|
|
description: |
|
|
|
|
If set to `true`, causes Meson to find the dependency on
|
|
|
|
the build machine system rather than the host system (i.e. where the
|
|
|
|
cross compiled binary will run on), usually only needed if you build
|
|
|
|
a tool to be used during compilation.
|
|
|
|
|
|
|
|
not_found_message:
|
|
|
|
type: str
|
|
|
|
since: 0.50.0
|
|
|
|
description: An optional string that will be printed as a [[message]] if the dependency was not found.
|
|
|
|
|
|
|
|
required:
|
|
|
|
type: bool | feature
|
|
|
|
default: true
|
|
|
|
description: |
|
|
|
|
When set to `false`, Meson will proceed with the build
|
|
|
|
even if the dependency is not found.
|
|
|
|
|
|
|
|
When set to a [`feature`](Build-options.md#features) option, the feature
|
|
|
|
will control if it is searched and whether to fail if not found.
|
|
|
|
|
|
|
|
*(since 0.47.0)* The value of a `feature` option can also be passed.
|
|
|
|
|
|
|
|
static:
|
|
|
|
type: bool
|
|
|
|
default: false
|
|
|
|
description: |
|
|
|
|
Tells the dependency provider to try to get static
|
|
|
|
libraries instead of dynamic ones (note that this is not supported
|
|
|
|
by all dependency backends)
|
|
|
|
|
|
|
|
*Since 0.60.0* it also sets `default_library` option accordingly on the fallback
|
|
|
|
subproject if it was not set explicitly in `default_options` keyword argument.
|
|
|
|
|
|
|
|
version:
|
|
|
|
type: str
|
|
|
|
since: 0.37.0
|
|
|
|
description: |
|
|
|
|
Specifies the required version,
|
|
|
|
a string containing a
|
|
|
|
comparison operator followed by the version string, examples include
|
|
|
|
`>1.0.0`, `<=2.3.5` or `3.1.4` for exact matching.
|
|
|
|
You can also specify multiple restrictions by passing a list to this
|
|
|
|
keyword argument, such as: `['>=3.14.0', '<=4.1.0']`.
|
|
|
|
These requirements are never met if the version is unknown.
|
|
|
|
|
|
|
|
include_type:
|
|
|
|
type: str
|
|
|
|
default: "'preserve'"
|
|
|
|
since: 0.52.0
|
|
|
|
description: |
|
|
|
|
An enum flag, marking how the dependency
|
|
|
|
flags should be converted. Supported values are `'preserve'`, `'system'` and
|
|
|
|
`'non-system'`. System dependencies may be handled differently on some
|
|
|
|
platforms, for instance, using `-isystem` instead of `-I`, where possible.
|
|
|
|
If `include_type` is set to `'preserve'`, no additional conversion will be
|
|
|
|
performed.
|
|
|
|
|
|
|
|
disabler:
|
|
|
|
type: bool
|
|
|
|
default: false
|
|
|
|
since: 0.49.0
|
|
|
|
description: |
|
|
|
|
Returns a [[disabler]] object instead of a not-found dependency
|
|
|
|
if this kwarg is set to `true` and the dependency couldn't be found.
|