name: project
returns: void
description: |
  The first function called in each project, to initialize Meson.

  The first argument to this function must be a string defining the name
  of this project.

  The project name can be any string you want, it's not used for
  anything except descriptive purposes. However since it is written to
  e.g. the dependency manifest it usually makes sense to have it be the
  same as the project tarball or pkg-config name. So for example you
  would probably want to use the name _libfoobar_ instead of _The Foobar
  Library_.

  It may be followed by the array of programming languages that the project uses.

  *(since 0.40.0)* The array of languages is optional.

  These languages may be used both for `native: false` (the default)
  (host machine) targets and for `native: true` (build machine) targets.
  *(since 0.56.0)* The build machine compilers for the specified
  languages are not required.

  Supported values for languages are `c`, `cpp` (for `C++`), `cuda`,
  `cython`, `d`, `objc`, `objcpp`, `fortran`, `java`, `cs` (for `C#`),
  `swift`, `nasm`, `masm`, `linearasm`, `vala` and `rust`.

posargs:
  project_name:
    type: str
    description: The name of the project.

varargs:
  name: language
  type: str
  description: The languages that Meson should initialize.

kwargs:
  default_options:
    type: array[str] | dict[str | bool | int | array[str]]
    description: |
      Accepts strings in the form `key=value`
      which have the same format as options to `meson configure`.
      For example to set the default project type you would
      set this: `default_options : ['buildtype=debugoptimized']`. Note
      that these settings are only used when running Meson for the first
      time.

      Note that some options can override the default behavior;
      for example, using `c_args` here means that the `CFLAGS`
      environment variable is not used. Consider using
      [[add_project_arguments()]] instead.

      Also note that not all options are taken into account when
      building as a subproject, and the exact set of options
      that are per-subproject has increased over time; for more
      information, see [core options](Builtin-options.md#core-options)
      and [compiler options](Builtin-options.md#compiler-options).

      *(since 1.2.0)*: A dictionary may now be passed.

  version:
    type: str | file
    description: |
      A free form string describing the version of this project.
      You can access the value in your Meson build files
      with [[meson.project_version]]. *(Since 0.57.0)* this can also be a
      [[@file]] object pointing to a file that contains exactly one line of
      text.

  meson_version:
    type: str
    description: |
      Takes a string describing which Meson version the project requires.
      Usually something like `>=0.28.0`.

  license:
    type: str | array[str]
    description: |
      Takes a string or array of strings describing the license(s) the code is under.

      This *should* be an [SPDX license expression](https://spdx.dev/ids/),
      using the standardized license identifier from the [SPDX license
      list](https://spdx.org/licenses/).  Usually this would be something like
      `license : 'GPL-2.0-or-later'`. If there are multiple licenses you can use the
      `AND` and `OR` operators to join them: `license : 'Apache-2.0 OR GPL-2.0'`.

      For backwards compatibility reasons you can also pass an array of
      licenses here. This is not recommended, as it is ambiguous: `license :
      ['Apache-2.0', 'GPL-2.0-only']` instead use an SPDX expression: `license
      : 'Apache-2.0 OR GPL-2.0-only'`, which makes it clear that the license
      mean OR, not AND.

      Note that the text is informal and is only written to the dependency
      manifest. Meson does not do any license validation, you are responsible
      for verifying that you abide by all licensing terms. You can access the
      value in your Meson build files with `meson.project_license()`.

  license_files:
    type: str | array[str]
    since: 1.1.0
    description: |
      Takes a string or array of strings with the paths to the license file(s)
      the code is under.

      This enhances the value of the `license` kwarg by allowing to specify both
      the short license name and the full license text. Usually this would be
      something like `license_files: ['COPYING']`.

      Note that the files are informal and are only installed with the dependency
      manifest. Meson does not do any license validation, you are responsible
      for verifying that you abide by all licensing terms. You can access the
      value in your Meson build files with [[meson.project_license_files]].

  subproject_dir:
    type: str
    default: "'subprojects'"
    description: |
      Specifies the top level directory name that holds Meson subprojects.
      This is only meant as a compatibility option
      for existing code bases that house their embedded source code in a
      custom directory. All new projects should not set this but instead
      use the default value. It should be noted that this keyword
      argument is ignored inside subprojects. There can be only one
      subproject dir and it is set in the top level Meson file.
