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]
    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)

  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.
