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 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.