--- /dev/null
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+import os
+from subprocess import check_call
+import sys
+
+
+class TestLinters:
+
+ def test_flake8_pkg(self):
+ check_call([sys.executable, "-m", "flake8", "qemu/"])
+
+ def test_flake8_scripts(self):
+ check_call([sys.executable, "-m", "flake8", "scripts/"])
+
+ def test_flake8_qapi(self):
+ check_call(
+ [
+ sys.executable,
+ "-m",
+ "flake8",
+ "../scripts/qapi/",
+ "../docs/sphinx/qapidoc.py",
+ "../docs/sphinx/qapi_domain.py",
+ ]
+ )
+
+ def test_isort_pkg(self):
+ check_call([sys.executable, "-m", "isort", "-c", "qemu/"])
+
+ def test_isort_scripts(self):
+ check_call([sys.executable, "-m", "isort", "-c", "scripts/"])
+
+ def test_isort_qapi(self):
+ check_call(
+ [
+ sys.executable,
+ "-m",
+ "isort",
+ "--sp",
+ ".",
+ "-c",
+ "../scripts/qapi/",
+ ]
+ )
+
+ def test_isort_qapi_sphinx(self):
+ # Force isort to recognize 'compat' as a local module and not
+ # third-party
+ check_call(
+ [
+ sys.executable,
+ "-m",
+ "isort",
+ "--sp",
+ ".",
+ "-c",
+ "-p",
+ "compat",
+ "../docs/sphinx/qapi_domain.py",
+ "../docs/sphinx/qapidoc.py",
+ ]
+ )
+
+ def test_mypy_pkg(self):
+ check_call([sys.executable, "-m", "mypy", "-p", "qemu"])
+
+ def test_mypy_scripts(self):
+ check_call([sys.executable, "-m", "mypy", "scripts/"])
+
+ def test_mypy_qapi(self):
+ check_call([sys.executable, "-m", "mypy", "../scripts/qapi"])
+
+ def test_mypy_iotests(self):
+ check_call(
+ [sys.executable, "-m", "linters", "--mypy"],
+ cwd="../tests/qemu-iotests/",
+ )
+
+ # Setuptools v60 introduced the SETUPTOOLS_USE_DISTUTILS=stdlib
+ # workaround; stdlib distutils was fully removed in Python
+ # 3.12+. Once we are on >=3.12+ exclusively, this workaround can be
+ # dropped safely. Until then, it is needed for some versions on
+ # Fedora/Debian distributions which relied upon distro-patched
+ # setuptools present in CPython, but not within setuptools itself.
+
+ def test_pylint_pkg(self):
+ os.environ["SETUPTOOLS_USE_DISTUTILS"] = "stdlib"
+ check_call([sys.executable, "-m", "pylint", "qemu/"])
+
+ def test_pylint_scripts(self):
+ os.environ["SETUPTOOLS_USE_DISTUTILS"] = "stdlib"
+ check_call([sys.executable, "-m", "pylint", "scripts/"])
+
+ def test_pylint_qapi(self):
+ os.environ["SETUPTOOLS_USE_DISTUTILS"] = "stdlib"
+ check_call(
+ [
+ sys.executable,
+ "-m",
+ "pylint",
+ "--rcfile=../scripts/qapi/pylintrc",
+ "../scripts/qapi/",
+ "../docs/sphinx/qapidoc.py",
+ "../docs/sphinx/qapi_domain.py",
+ ]
+ )
+
+ def test_pylint_iotests(self):
+ os.environ["SETUPTOOLS_USE_DISTUTILS"] = "stdlib"
+ check_call(
+ [sys.executable, "-m", "linters", "--pylint"],
+ cwd="../tests/qemu-iotests/",
+ )