name: dep
long_name: Dependency object
description: Abstract representation of a dependency

methods:
  - name: found
    returns: bool
    description: Returns whether the dependency was found.

  - name: name
    since: 0.48.0
    returns: str
    description: |
      Returns the name of the dependency that was searched.
      Returns `'internal'` for dependencies created with
      [[declare_dependency]].

  - name: get_pkgconfig_variable
    since: 0.36.0
    deprecated: 0.56.0
    returns: str
    description: |
      Gets the pkg-config variable specified,
      or, if invoked on a non pkg-config
      dependency, error out.

    posargs:
      var_name:
        type: str
        description: Name of the variable to query

    kwargs:
      define_variable:
        type: list[str]
        since: 0.44.0
        description: |
          You can also redefine a
          variable by passing a list to this kwarg
          that can affect the retrieved variable: `['prefix', '/'])`.

          *(Since 1.3.0)* Multiple variables can be specified in pairs.

      default:
        type: str
        since: 0.45.0
        description: |
          The value to return if the variable was not found.
          A warning is issued if the variable is not defined and this kwarg is not set.

  - name: get_configtool_variable
    since: 0.44.0
    deprecated: 0.56.0
    returns: str
    description: |
      Gets the command line argument from the config tool (with `--` prepended), or,
      if invoked on a non config-tool dependency, error out.

    posargs:
      var_name:
        type: str
        description: Name of the variable to query

  - name: type_name
    returns: str
    description: |
      Returns a string describing the type of the
      dependency, the most common values are `internal` for deps created
      with [[declare_dependency]] and `pkgconfig` for system dependencies
      obtained with Pkg-config.

  - name: version
    returns: str
    description: |
      the version number as a string,
      for example `1.2.8`.
      `unknown` if the dependency provider doesn't support determining the
      version.

  - name: include_type
    returns: str
    since: 0.52.0
    description: Returns the value set by the `include_type` kwarg.

  - name: as_system
    returns: dep
    since: 0.52.0
    description: |
      Returns a copy of the dependency object, which has changed the value of `include_type`
      to `value`. The `value` argument is optional and
      defaults to `'preserve'`.

    optargs:
      value:
        type: str
        description: The new value. See [[dependency]] for supported values.

  - name: as_link_whole
    returns: dep
    since: 0.56.0
    description: |
      Only dependencies created with [[declare_dependency]],
      returns a copy of the dependency object with all
      link_with arguments changed to link_whole. This is useful for example for
      fallback dependency from a subproject built with `default_library=static`.
      Note that all `link_with` objects must be static libraries otherwise an error
      will be raised when trying to `link_whole` a shared library.

  - name: partial_dependency
    returns: dep
    since: 0.46.0
    description: |
      Returns a new dependency object with the same name, version, found status,
      type name, and methods as the object that called it. This new
      object will only inherit other attributes from its parent as
      controlled by keyword arguments.

      If the parent has any dependencies, those will be applied to the new
      partial dependency with the same rules. So, given:

      ```meson
      dep1 = declare_dependency(compile_args : '-Werror=foo', link_with : 'libfoo')
      dep2 = declare_dependency(compile_args : '-Werror=bar', dependencies : dep1)
      dep3 = dep2.partial_dependency(compile_args : true)
      ```

      dep3 will add `['-Werror=foo', '-Werror=bar']` to the compiler args
      of any target it is added to, but libfoo will not be added to the
      link_args.

      The following arguments will add the following attributes:

      - compile_args: any arguments passed to the compiler
      - link_args: any arguments passed to the linker
      - links: anything passed via link_with or link_whole
      - includes: any include_directories
      - sources: any compiled or static sources the dependency has

    warnings:
      - A bug present until 0.50.1 results in the above behavior
        not working correctly.

    kwargs:
      compile_args:
        type: bool
        default: false
        description: Whether to include compile_args

      link_args:
        type: bool
        default: false
        description: Whether to include link_args

      links:
        type: bool
        default: false
        description: Whether to include links

      includes:
        type: bool
        default: false
        description: Whether to include includes

      sources:
        type: bool
        default: false
        description: Whether to include sources

  - name: get_variable
    returns: str
    since: 0.51.0
    description: |
      A generic variable getter method, which replaces the
      `get_*type*_variable` methods. This allows one to get the variable
      from a dependency without knowing specifically how that dependency
      was found. If `default_value` is set and the value cannot be gotten
      from the object then `default_value` is returned, if it is not set
      then an error is raised.

    warnings:
      - Before 1.3.0, specifying multiple pkgconfig_define pairs would silently
        malform the results. Only the first variable would be redefined, but
        its value would contain both the second variable name, as well as its
        value.

    optargs:
      varname:
        type: str
        since: 0.58.0
        description: |
          This argument is used as a default value
          for `cmake`, `pkgconfig`, `configtool` and `internal` keyword
          arguments. It is useful in the common case where `pkgconfig` and `internal`
          use the same variable name, in which case it's easier to write `dep.get_variable('foo')`
          instead of `dep.get_variable(pkgconfig: 'foo', internal: 'foo')`.

    kwargs:
      cmake:
        type: str
        description: The CMake variable name

      pkgconfig:
        type: str
        description: The pkgconfig variable name

      configtool:
        type: str
        description: The configtool variable name

      internal:
        type: str
        since: 0.54.0
        description: The internal variable name

      default_value:
        type: str
        description: The default value to return when the variable does not exist

      pkgconfig_define:
        type: list[str]
        description: See [[dep.get_pkgconfig_variable]]
