content: [build-system]
  requires = [
      "distlib~=0.4.0",
      "packaging>=23.2",
      "pyproject-metadata~=0.9.1",
      "tomli>=1.2.3,<3; python_version < '3.11'",
      "lark>=1.1.9,<2",
  ]
  build-backend = "py_build_cmake.build"
  backend-path = ["src"]
  
  [project]
  name = "py-build-cmake"
  readme = "README.md"
  requires-python = ">=3.7"
  license = "MIT"
  license-files = ["LICENSE"]
  authors = [{ "name" = "Pieter P", "email" = "pieter.p.dev@outlook.com" }]
  keywords = ["pep517", "cmake"]
  classifiers = [
      "Development Status :: 5 - Production/Stable",
      "Topic :: System :: Archiving :: Packaging",
      "Topic :: System :: Software Distribution",
      "Programming Language :: Python :: 3",
      "Programming Language :: Python :: 3.7",
      "Programming Language :: Python :: 3.8",
      "Programming Language :: Python :: 3.9",
      "Programming Language :: Python :: 3.10",
      "Programming Language :: Python :: 3.11",
      "Programming Language :: Python :: 3.12",
      "Programming Language :: Python :: 3.13",
      "Operating System :: POSIX :: Linux",
      "Operating System :: Microsoft :: Windows",
      "Operating System :: MacOS",
  ]
  dependencies = [
      "distlib~=0.4.0",
      "packaging>=23.2",
      "pyproject-metadata~=0.9.1",
      "tomli>=1.2.3,<3; python_version < '3.11'",
      "lark>=1.1.9,<2",
      "click>=8.1.3,<9",
  ]
  dynamic = ["version", "description"]
  
  [project.urls]
  Source = "https://github.com/tttapa/py-build-cmake"
  Documentation = "https://tttapa.github.io/py-build-cmake"
  Tracker = "https://github.com/tttapa/py-build-cmake/issues"
  
  [project.scripts]
  py-build-cmake = "py_build_cmake.cli:cli"
  
  [project.optional-dependencies]
  test = ["nox>=2023.4.22,<2026", "jinja2~=3.1.2"]
  docs = [
      "sphinx==8.2.3",
      "sphinx-book-theme==1.1.4",
      "sphinx_design==0.6.1",
      "myst-parser==4.0.1",
  ]
  
  [tool.py-build-cmake.module]
  name = "py_build_cmake"
  
  [tool.pytest.ini_options]
  minversion = "6.0"
  addopts = ["-ra", "--showlocals", "--strict-markers", "--strict-config"]
  xfail_strict = true
  filterwarnings = ["error"]
  log_cli_level = "INFO"
  testpaths = ["tests"]
  norecursedirs = ["tests/packages"]
  
  [tool.ruff]
  [tool.ruff.lint]
  select = [
      "E",
      "F",
      "W",   # flake8
      "B",   # flake8-bugbear
      "I",   # isort
      "C4",  # flake8-comprehensions
      "EM",  # flake8-errmsg
      "ICN", # flake8-import-conventions
      "G",   # flake8-logging-format
      "PGH", # pygrep-hooks
      "PIE", # flake8-pie
      "PL",  # pylint
      "PT",  # flake8-pytest-style
      "PTH", # flake8-use-pathlib
      "RET", # flake8-return
      "RUF", # Ruff-specific
      "SIM", # flake8-simplify
      "T20", # flake8-print
      "UP",  # pyupgrade
      "YTT", # flake8-2020
      "EXE", # flake8-executable
  ]
  extend-ignore = [
      "E501",    # Line too long
      "E731",    # Lambda assignment
      "PLR2004", # Magic values
      "PLR0913", # Too many function arguments
      "RET505",  # Unnecessary `elif` after `return`
      "RET506",  # Unnecessary `elif` after `raise`
      "PGH003",  # Specific rules `type: ignore`
  ]
  
  [tool.ruff.lint.per-file-ignores]
  "noxfile.py" = ["T20"]                                # Removes print statements
  "**/tests/**" = ["T20"]
  "examples/**" = ["T20"]
  "scripts/**" = ["T20"]
  "src/py_build_cmake/build.py" = ["T20"]
  "src/py_build_cmake/commands/cmake.py" = ["T20"]
  "src/py_build_cmake/commands/cmd_runner.py" = ["T20"]
  "src/py_build_cmake/config/load.py" = ["T20"]
  "src/py_build_cmake/help.py" = ["T20"]
  
  [tool.mypy]
  python_version = "3.8"
  files = "src/**/*.py"
  packages = "src/py_build_cmake"
  show_error_codes = true
  enable_error_code = [
      "type-arg",
      "redundant-cast",
      "redundant-self",
      "comparison-overlap",
      "no-any-return",
      "no-any-unimported",
      "unreachable",
      "redundant-expr",
      "possibly-undefined",
      "truthy-bool",
      "truthy-iterable",
      "ignore-without-code",
      "unused-awaitable",
      "unused-ignore",
  ]
  warn_unreachable = true
  strict_optional = true
  implicit_reexport = true
  