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 Qt 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: array[str] | dict[str | bool | int | array[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: array[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 array 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
    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)

      Leaving this value unset will result in an implementation defined default
      value. For most dependencies this means the value of the `prefer_static`
      option, but some custom dependencies have their own method for determining
      the most useful default option.

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

      *Since 0.63.0* when the `prefer_static` option is used to calculate the
      default value.

  version:
    type: array[str] | 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 an array 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.
