# Copyright (C) 2026 Free Software Foundation, Inc.
#
# This file is part of GCC.
#
# GCC is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3, or (at your option)
# any later version.
#
# GCC is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with GCC; see the file COPYING.  If not, write to
# the Free Software Foundation, 51 Franklin Street, Fifth Floor,
# Boston, MA 02110-1301, USA.

# This pyproject.toml file is used to facilitate installation of all required
# python dependencies.  It is not used to distribute gcc related packages.
#
# Users of uv can get all potentially needed with
#   uv sync --all-groups
# Whereas users of pip can use
#   python -m pip install . --group all
# Note that these include packages only used in a subset of projects.

[build-system]
requires = ["setuptools>=66.1"]
build-backend = "setuptools.build_meta"

[project]
name = "gcc"
dynamic = ["version"]
description = "Tools used when building and developing gcc"
readme = "README"
# As of August 2026, upstream python supports only versions from 3.10 and above.
# Currently supported LTS distributions and unices all provide packages for
# at least python 3.10.
# pip added support for groups in 25.1 which requires python version 3.9
# pytest-pyodide, used by libffi, requires python 3.10
# black 26.0 requires python 3.10
requires-python = ">=3.10"

# Upper bounds below are conservative compatibility limits; not all projects
# publish or strictly follow Semantic Versioning.
dependencies = [
	# we keep the black version pinned to an explicit calendar year
	# in order to take advantage of black's stability policy.
	"black ~= 26.0",
	"GitPython<4",
	"jsonschema<5",
	"polib ~= 1.2.0",     # does not indicate use of semver
	"pytest<10",
	"python-dateutil<3",  # does not indicate use of semver
	"PyYAML<7",           # does not indicate use of semver
	"requests<3",
	"semantic-version<3",
	"Unidecode<2",        # does not indicate use of semver
	"unidiff<2",          # does not indicate use of semver
]

[dependency-groups]
ada = ["Pygments<3"]
libffi = ["pytest-pyodide"]
all = [
	{ include-group = "ada" },
	{ include-group = "libffi" },
]

[tool.setuptools]
# Disable package discovery
packages = []

[tool.setuptools.dynamic]
version = { file = ["gcc/BASE-VER"] }

[tool.black]
# target is same as requires-python
target-version = ["py310"]
