# This file lists the ***oldest possible dependencies*** needed to run
# "make check" successfully under ***Python 3.12***. It is used primarily
# by GitLab CI to ensure that our stated minimum versions in setup.cfg
# are truthful and regularly validated.
#
# This file should not contain any dependencies that are not expressed
# by the [devel] section of setup.cfg, except for transitive
# dependencies which must be enumerated here explicitly to eliminate
# dependency resolution ambiguity.
#
# When adding new dependencies, pin the very oldest non-yanked version
# on PyPI that allows the test suite to pass.

# Dependencies for qapidoc/qapi_domain et al
sphinx==7.2.6

# Dependencies for qemu.machine
qemu.qmp==0.0.6

# Dependencies for mkvenv
distlib==0.3.6

# Dependencies for FUSE support for qom-fuse
fusepy==2.0.4

# Test-runners, utilities, etc.
pytest==6.2.4

# Linters
flake8==6.1.0
isort==5.11.3
mypy==1.4.0
pylint==3.0.0

# Transitive flake8 dependencies
mccabe==0.7.0
pycodestyle==2.11.0
pyflakes==3.1.0

# Transitive mypy dependencies
mypy-extensions==1.0.0
typing-extensions==4.7.1

# Transitive pylint dependencies
astroid==3.0.0
dill==0.3.7
platformdirs==2.2.0
tomlkit==0.10.1

# Transitive sphinx dependencies
alabaster==0.7.1
babel==2.9
certifi==2023.5.7
charset-normalizer==2.0.0
docutils==0.18.1
idna==2.5
imagesize==1.3
Jinja2==3.0.0
MarkupSafe==2.0
packaging==21.0
Pygments==2.14
requests==2.25.0
snowballstemmer==2.0
sphinxcontrib-applehelp==1.0.0
sphinxcontrib-devhelp==1.0.0
sphinxcontrib-htmlhelp==2.0.0
sphinxcontrib-jsmath==1.0.0
sphinxcontrib-qthelp==1.0.0
sphinxcontrib-serializinghtml==1.1.9
urllib3==1.26

# Transitive pytest dependencies
attrs==19.2.0
iniconfig==1.0.0
pluggy==0.13
py==1.11.0
toml==0.10.0
