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.
