Files
qemu/python/Makefile

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

132 lines
3.8 KiB
Makefile
Raw Permalink Normal View History

QEMU_VENV_DIR=.dev-venv
QEMU_MINVENV_DIR=.min-venv
QEMU_TOX_EXTRA_ARGS ?=
.PHONY: help
help:
@echo "python packaging help:"
@echo ""
@echo "make check-minreqs:"
@echo " Run tests in the minreqs virtual environment."
@echo " These tests use the oldest dependencies."
python: upgrade to Python3.12+ With Python3.9 EOL and Python3.10 soon to be EOL (October 2026), and with ... no other supported build platform actually using Python 3.11, require the use of Python3.12 or later. Additionally, as part of this upgrade, remove the use of tomllib from mkvenv as it is now standard in the Python stdlib: leaving this transitional code in causes a regression with mypy which becomes confused about the overloaded use of 'tomllib'. Our current minimum requirements as determined by standard repository packages on supported distributions is as follows: distro EOS python3 pip setuptools sphinx wheel Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> ------------------------------------------------------------------------- centos_stream_9 2026-12-12 3.9.25 21.3.1 53.0.0 3.4.3 0.36.2 centos_stream_9+ 2026-12-12 3.12.13 23.2.1 68.2.2 --- 0.41.2 freebsd -- 3.12.14 23.3.2 63.1.0 9.0.4 0.48.0 ubuntu_24_04 2028-04-23 3.12.3 24.0 68.1.2 7.2.6 0.42.0 centos_stream_10 2030-01-01 3.12.13 23.3.2 69.0.3 7.2.6 0.41.2 alpine_3_21 2026-11-01 3.12.14 24.3.1 70.3.0 8.1.3 0.43.0 debian_13 2028-08-09 3.13.5 25.1.1 78.1.1 8.1.3 0.46.1 fedora_43 2026-12-09 3.14.7 25.1.1 78.1.1 8.2.3 0.45.1 ubuntu_26_04 2031-05-29 3.14.4 25.1.1 78.1.1 8.2.3 0.46.3 fedora_44 2027-06-02 3.14.7 26.0.1 80.10.2 8.2.3 0.45.1 macports -- 3.14.7 26.0.1 80.10.2 9.1.0 0.48.0 alpine_3_22 2027-05-01 3.12.14 25.1.1 80.9.0 8.2.3 0.46.3 alpine_3_23 2027-11-01 3.12.14 25.1.1 80.9.0 8.2.3 0.46.3 openbsd -- 3.14.6 26.2.1 80.9.0 9.1.0 0.48.0 alpine_3_24 2028-06-01 3.14.7 26.1.2 82.0.1 9.1.0 0.47.0 pkgsrc_current -- 3.13.15 26.2.1 84.0.0 9.1.0 0.48.0 CentOS stream 9 note: python3.12, python3.12-pip, python3.12-setuptools and python3.12-wheel are available as optional packages in the standard repository. Sphinx is not available, but can be side-loaded from PyPI using pip3.12. Signed-off-by: John Snow <jsnow@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Message-ID: <20260825215851.1780608-10-jsnow@redhat.com> Signed-off-by: John Snow <jsnow@redhat.com>
2026-08-25 17:58:44 -04:00
@echo " Requires: Python 3.12"
@echo " Hint (Fedora): 'sudo dnf install python3.12'"
@echo ""
@echo "make check-tox:"
@echo " Run tests against multiple python versions."
@echo " These tests use the newest dependencies."
python: upgrade to Python3.12+ With Python3.9 EOL and Python3.10 soon to be EOL (October 2026), and with ... no other supported build platform actually using Python 3.11, require the use of Python3.12 or later. Additionally, as part of this upgrade, remove the use of tomllib from mkvenv as it is now standard in the Python stdlib: leaving this transitional code in causes a regression with mypy which becomes confused about the overloaded use of 'tomllib'. Our current minimum requirements as determined by standard repository packages on supported distributions is as follows: distro EOS python3 pip setuptools sphinx wheel Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> ------------------------------------------------------------------------- centos_stream_9 2026-12-12 3.9.25 21.3.1 53.0.0 3.4.3 0.36.2 centos_stream_9+ 2026-12-12 3.12.13 23.2.1 68.2.2 --- 0.41.2 freebsd -- 3.12.14 23.3.2 63.1.0 9.0.4 0.48.0 ubuntu_24_04 2028-04-23 3.12.3 24.0 68.1.2 7.2.6 0.42.0 centos_stream_10 2030-01-01 3.12.13 23.3.2 69.0.3 7.2.6 0.41.2 alpine_3_21 2026-11-01 3.12.14 24.3.1 70.3.0 8.1.3 0.43.0 debian_13 2028-08-09 3.13.5 25.1.1 78.1.1 8.1.3 0.46.1 fedora_43 2026-12-09 3.14.7 25.1.1 78.1.1 8.2.3 0.45.1 ubuntu_26_04 2031-05-29 3.14.4 25.1.1 78.1.1 8.2.3 0.46.3 fedora_44 2027-06-02 3.14.7 26.0.1 80.10.2 8.2.3 0.45.1 macports -- 3.14.7 26.0.1 80.10.2 9.1.0 0.48.0 alpine_3_22 2027-05-01 3.12.14 25.1.1 80.9.0 8.2.3 0.46.3 alpine_3_23 2027-11-01 3.12.14 25.1.1 80.9.0 8.2.3 0.46.3 openbsd -- 3.14.6 26.2.1 80.9.0 9.1.0 0.48.0 alpine_3_24 2028-06-01 3.14.7 26.1.2 82.0.1 9.1.0 0.47.0 pkgsrc_current -- 3.13.15 26.2.1 84.0.0 9.1.0 0.48.0 CentOS stream 9 note: python3.12, python3.12-pip, python3.12-setuptools and python3.12-wheel are available as optional packages in the standard repository. Sphinx is not available, but can be side-loaded from PyPI using pip3.12. Signed-off-by: John Snow <jsnow@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Message-ID: <20260825215851.1780608-10-jsnow@redhat.com> Signed-off-by: John Snow <jsnow@redhat.com>
2026-08-25 17:58:44 -04:00
@echo " Requires: Python 3.12 - 3.14, and tox."
@echo " Hint (Fedora): 'sudo dnf install python3-tox python3.14'"
@echo " The variable QEMU_TOX_EXTRA_ARGS can be use to pass extra"
@echo " arguments to tox".
@echo ""
@echo "make check-dev:"
@echo " Run tests in a venv against your default python3 version."
@echo " These tests use the newest dependencies."
@echo " Requires: Python 3.x"
@echo ""
@echo "make check:"
@echo " Run tests in your *current environment*."
@echo " Performs no environment setup of any kind."
@echo ""
@echo "make develop:"
@echo " Install deps needed for 'make check',"
@echo " and install the qemu package in editable mode."
@echo " (Can be used in or outside of a venv.)"
@echo ""
@echo "make min-venv"
@echo " Creates the minreqs virtual environment ($(QEMU_MINVENV_DIR))"
@echo ""
@echo "make dev-venv"
@echo " Creates a simple venv for check-dev. ($(QEMU_VENV_DIR))"
@echo ""
@echo "make clean:"
@echo " Remove package build output."
@echo ""
@echo "make distclean:"
@echo " remove venv files, qemu package forwarder,"
@echo " built distribution files, and everything from 'make clean'."
@echo ""
@echo -e "Have a nice day ^_^\n"
.PHONY: pipenv check-pipenv
pipenv check-pipenv:
@echo "pipenv was dropped; try 'make check-minreqs' or 'make min-venv'"
@exit 1
PIP_INSTALL = pip install --disable-pip-version-check
.PHONY: min-venv
min-venv: $(QEMU_MINVENV_DIR) $(QEMU_MINVENV_DIR)/bin/activate
$(QEMU_MINVENV_DIR) $(QEMU_MINVENV_DIR)/bin/activate: setup.cfg tests/minreqs.txt
@echo "VENV $(QEMU_MINVENV_DIR)"
python: upgrade to Python3.12+ With Python3.9 EOL and Python3.10 soon to be EOL (October 2026), and with ... no other supported build platform actually using Python 3.11, require the use of Python3.12 or later. Additionally, as part of this upgrade, remove the use of tomllib from mkvenv as it is now standard in the Python stdlib: leaving this transitional code in causes a regression with mypy which becomes confused about the overloaded use of 'tomllib'. Our current minimum requirements as determined by standard repository packages on supported distributions is as follows: distro EOS python3 pip setuptools sphinx wheel Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> ------------------------------------------------------------------------- centos_stream_9 2026-12-12 3.9.25 21.3.1 53.0.0 3.4.3 0.36.2 centos_stream_9+ 2026-12-12 3.12.13 23.2.1 68.2.2 --- 0.41.2 freebsd -- 3.12.14 23.3.2 63.1.0 9.0.4 0.48.0 ubuntu_24_04 2028-04-23 3.12.3 24.0 68.1.2 7.2.6 0.42.0 centos_stream_10 2030-01-01 3.12.13 23.3.2 69.0.3 7.2.6 0.41.2 alpine_3_21 2026-11-01 3.12.14 24.3.1 70.3.0 8.1.3 0.43.0 debian_13 2028-08-09 3.13.5 25.1.1 78.1.1 8.1.3 0.46.1 fedora_43 2026-12-09 3.14.7 25.1.1 78.1.1 8.2.3 0.45.1 ubuntu_26_04 2031-05-29 3.14.4 25.1.1 78.1.1 8.2.3 0.46.3 fedora_44 2027-06-02 3.14.7 26.0.1 80.10.2 8.2.3 0.45.1 macports -- 3.14.7 26.0.1 80.10.2 9.1.0 0.48.0 alpine_3_22 2027-05-01 3.12.14 25.1.1 80.9.0 8.2.3 0.46.3 alpine_3_23 2027-11-01 3.12.14 25.1.1 80.9.0 8.2.3 0.46.3 openbsd -- 3.14.6 26.2.1 80.9.0 9.1.0 0.48.0 alpine_3_24 2028-06-01 3.14.7 26.1.2 82.0.1 9.1.0 0.47.0 pkgsrc_current -- 3.13.15 26.2.1 84.0.0 9.1.0 0.48.0 CentOS stream 9 note: python3.12, python3.12-pip, python3.12-setuptools and python3.12-wheel are available as optional packages in the standard repository. Sphinx is not available, but can be side-loaded from PyPI using pip3.12. Signed-off-by: John Snow <jsnow@redhat.com> Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> Message-ID: <20260825215851.1780608-10-jsnow@redhat.com> Signed-off-by: John Snow <jsnow@redhat.com>
2026-08-25 17:58:44 -04:00
@python3.12 -m venv $(QEMU_MINVENV_DIR)
@( \
echo "ACTIVATE $(QEMU_MINVENV_DIR)"; \
. $(QEMU_MINVENV_DIR)/bin/activate; \
echo "INSTALL -r tests/minreqs.txt $(QEMU_MINVENV_DIR)";\
$(PIP_INSTALL) -r tests/minreqs.txt 1>/dev/null; \
echo "INSTALL -e qemu $(QEMU_MINVENV_DIR)"; \
python: fix editable installs for modern pip/setuptools The way editable installs work has changed at some point since Fedora 40 was released. Generally, we should be opting to use pyproject.toml installs (PEP517/518) - but those are not fully supported until v61 of setuptools, and CentOS Stream 9 ships v53. Until that time, we can make use of a transitional feature in pip/setuptools to use "legacy" editable installs, which is enough to fix "make check-dev" on modern local workstations for now. By using the environment variable approach to configure pip, we avoid any problems for older versions of pip that don't recognize this option, so it's harmless. The config-settings option first appeared in v23 of pip. editable_mode was first supported by setuptools in v64. (I'm not currently precisely aware of when the default behavior of '-e' switched away from 'compat', but it appears to be a joint effect between setuptools and pip versions.) Version information for supported build platforms: distro python3 pip setuptools sphinx -------------------------------------------------------- centos_stream_9 3.9.23 21.3.1 53.0.0 3.4.3 ubuntu_22_04 3.10.12 22.0.2 59.6.0 4.3.2 ** pyproject.toml installs supported as of here ** freebsd 3.11.13 23.3.2 63.1.0 5.3.0 debian_12 3.11.2 23.0.1 66.1.1 5.3.0 ubuntu_24_04 3.12.3 24.0 68.1.2 7.2.6 centos_stream_10 3.12.11 23.3.2 69.0.3 7.2.6 fedora_41 3.13.5 24.2 69.2.0 7.3.7 alpine_3_19 3.11.13 23.3.1 70.3.0 6.2.1 alpine_3_20 3.12.11 24.0 70.3.0 7.2.6 alpine_3_21 3.12.11 24.3.1 70.3.0 8.1.3 ubuntu_24_10 3.12.7 24.2 74.1.2 7.4.7 fedora_42 3.13.5 24.3.1 74.1.3 8.1.3 ubuntu_25_04 3.13.3 25.0 75.8.0 8.1.3 macports 3.13.5 25.1.1 78.1.1 8.2.3 openbsd 3.12.11 25.1.1 79.0.1 8.2.3 alpine_3_22 3.12.11 25.1.1 80.9.0 8.2.3 homebrew 3.13.5 --- 80.9.0 8.2.3 pkgsrc_current 3.12.11 25.1.1 80.9.0 8.2.3 Signed-off-by: John Snow <jsnow@redhat.com> Message-ID: <20250715222548.198888-1-jsnow@redhat.com> Tested-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
2025-07-15 18:25:48 -04:00
PIP_CONFIG_SETTINGS="editable_mode=compat" $(PIP_INSTALL) -e . 1>/dev/null; \
)
@touch $(QEMU_MINVENV_DIR)
.PHONY: check-minreqs
check-minreqs: min-venv
@( \
echo "ACTIVATE $(QEMU_MINVENV_DIR)"; \
. $(QEMU_MINVENV_DIR)/bin/activate; \
make check; \
)
.PHONY: dev-venv
dev-venv: $(QEMU_VENV_DIR) $(QEMU_VENV_DIR)/bin/activate
$(QEMU_VENV_DIR) $(QEMU_VENV_DIR)/bin/activate: setup.cfg
@echo "VENV $(QEMU_VENV_DIR)"
@python3 -m venv $(QEMU_VENV_DIR)
@( \
echo "ACTIVATE $(QEMU_VENV_DIR)"; \
. $(QEMU_VENV_DIR)/bin/activate; \
echo "INSTALL qemu[devel] $(QEMU_VENV_DIR)"; \
make develop 1>/dev/null; \
)
@touch $(QEMU_VENV_DIR)
.PHONY: check-dev
check-dev: dev-venv
@( \
echo "ACTIVATE $(QEMU_VENV_DIR)"; \
. $(QEMU_VENV_DIR)/bin/activate; \
make check; \
)
.PHONY: develop
develop:
python: fix editable installs for modern pip/setuptools The way editable installs work has changed at some point since Fedora 40 was released. Generally, we should be opting to use pyproject.toml installs (PEP517/518) - but those are not fully supported until v61 of setuptools, and CentOS Stream 9 ships v53. Until that time, we can make use of a transitional feature in pip/setuptools to use "legacy" editable installs, which is enough to fix "make check-dev" on modern local workstations for now. By using the environment variable approach to configure pip, we avoid any problems for older versions of pip that don't recognize this option, so it's harmless. The config-settings option first appeared in v23 of pip. editable_mode was first supported by setuptools in v64. (I'm not currently precisely aware of when the default behavior of '-e' switched away from 'compat', but it appears to be a joint effect between setuptools and pip versions.) Version information for supported build platforms: distro python3 pip setuptools sphinx -------------------------------------------------------- centos_stream_9 3.9.23 21.3.1 53.0.0 3.4.3 ubuntu_22_04 3.10.12 22.0.2 59.6.0 4.3.2 ** pyproject.toml installs supported as of here ** freebsd 3.11.13 23.3.2 63.1.0 5.3.0 debian_12 3.11.2 23.0.1 66.1.1 5.3.0 ubuntu_24_04 3.12.3 24.0 68.1.2 7.2.6 centos_stream_10 3.12.11 23.3.2 69.0.3 7.2.6 fedora_41 3.13.5 24.2 69.2.0 7.3.7 alpine_3_19 3.11.13 23.3.1 70.3.0 6.2.1 alpine_3_20 3.12.11 24.0 70.3.0 7.2.6 alpine_3_21 3.12.11 24.3.1 70.3.0 8.1.3 ubuntu_24_10 3.12.7 24.2 74.1.2 7.4.7 fedora_42 3.13.5 24.3.1 74.1.3 8.1.3 ubuntu_25_04 3.13.3 25.0 75.8.0 8.1.3 macports 3.13.5 25.1.1 78.1.1 8.2.3 openbsd 3.12.11 25.1.1 79.0.1 8.2.3 alpine_3_22 3.12.11 25.1.1 80.9.0 8.2.3 homebrew 3.13.5 --- 80.9.0 8.2.3 pkgsrc_current 3.12.11 25.1.1 80.9.0 8.2.3 Signed-off-by: John Snow <jsnow@redhat.com> Message-ID: <20250715222548.198888-1-jsnow@redhat.com> Tested-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Markus Armbruster <armbru@redhat.com>
2025-07-15 18:25:48 -04:00
PIP_CONFIG_SETTINGS="editable_mode=compat" $(PIP_INSTALL) -e .[devel]
.PHONY: check
check:
@pytest -v tests/*.py
.PHONY: check-tox
check-tox:
@tox $(QEMU_TOX_EXTRA_ARGS)
.PHONY: check-coverage
check-coverage:
@coverage run -m pytest -v tests/*.py
@coverage combine
@coverage html
@coverage report
.PHONY: clean
clean:
python3 setup.py clean --all
rm -f pyproject.toml
.PHONY: distclean
distclean: clean
rm -rf qemu.egg-info/ .eggs/ dist/
rm -rf $(QEMU_VENV_DIR) $(QEMU_MINVENV_DIR) .tox/
rm -f .coverage .coverage.*
rm -rf htmlcov/