name: declare_dependency
returns: dep
description: |
  This function returns a [[@dep]] object that
  behaves like the return value of [[dependency]] but is
  internal to the current build. One use case for this is in
  subprojects. This allows a subproject to easily specify how it should
  be used. This makes it interchangeable with the same dependency that
  is provided externally by the system. Another common use case is to
  declare project targets as dependencies so they may be used as
  dependencies of other build targets.

kwargs:
  compile_args:
    type: list[str]
    description: Compile arguments to use.

  dependencies:
    type: list[dep]
    description: Other dependencies needed to use this dependency.

  include_directories:
    type: list[inc | str]
    description: |
      the directories to add to header search path,
      must be [[@inc]] objects or *(since 0.50.0)* plain strings.

  link_args:
    type: list[str]
    description: Link arguments to use.

  link_with:
    type: list[lib]
    description: Libraries to link against.

  link_whole:
    type: list[lib]
    since: 0.46.0
    description: Libraries to link fully, same as [[executable]].

  sources:
    type: list[str | file | custom_tgt | custom_idx | generated_list]
    description: |
      sources to add to targets
      (or generated header files
      that should be built before sources including them are built)

  extra_files:
    type: list[str | file]
    since: 1.2.0
    description: |
      extra files to add to targets.
      mostly used for IDE integration.

  version:
    type: str
    description: |
      the version of this dependency,
      such as `1.2.3`. Defaults to the project version.

  variables:
    type: dict[str] | list[str]
    since: 0.54.0
    description: |
      a dictionary of arbitrary strings,
      this is meant to be used
      in subprojects where special variables would be provided via cmake or
      pkg-config. *since 0.56.0* it can also be a list of `'key=value'` strings.

  d_module_versions:
    type: str | int | list[str | int]
    since: 0.62.0
    description: |
      The [D version identifiers](https://dlang.org/spec/version.html#version) to add
      during the compilation of D source files.

  d_import_dirs:
    type: list[inc | str]
    since: 0.62.0
    description: |
      the directories to add to the string search path (i.e. `-J` switch for DMD).
      Must be [[@inc]] objects or plain strings.

  objects:
    type: list[extracted_obj]
    since: 1.1.0
    description: |
      a list of object files, to be linked directly into the targets that use the
      dependency.
