mirror of
https://gitlab.com/qemu-project/qemu.git
synced 2026-10-28 14:04:39 +08:00
Merge tag 'python-pull-request' of https://gitlab.com/jsnow/qemu into staging
python upgrade to py312 # -----BEGIN PGP SIGNATURE----- # # iQIzBAABCgAdFiEE+ber27ys35W+dsvQfe+BBqr8OQ4FAmqYepEACgkQfe+BBqr8 # OQ6Nyg//SFe2COs76DIzWWTN21N/wo4pHAf6Q0nGGj2NKiPozN0aIAcKA9mw8ZXo # 6HQTjMJKOq4jnL9pYLNS2MzrhiJrvrR0gBymi0aD93EOAMtqXcLxgaCnpI4wFu8v # wosIehLduYMytrb80aY8oCbUOl+uTPOYHuDtUc7msBV5iqhFg56emjvOh7B+5SuE # iKc6ivljUVxoVat3pzKSZsxbVd+iYz3UI8cBPa8ISNkfxgCjUw/+t6cm3fBj+v8u # q0U2qVBfvMH6wPQ7qA+VZvwnf7UgTymbprGko17EkPZwgtKzM+k2Lr75GjfwLHx5 # i7sjKu7doWfRa7/+bNyYj+lZtCAcGJGZu6yuIE6vBj6eBB8LxGbw/zLU+p5Q+QJe # +np4dFLkK2rlBRNrg4o/66rCWO/b97F6GBtVOoNx44fWmXZfuKJxh0F6FCpvPvlf # fiAEHiSNmfmUXIeFGgq3OcP4ZB6BIGlHWA+F4U7gn1ZxGrtvZDImRdy0Qj2IjsL0 # lwBXSdS9FgX/lOe2oOGScZIepJsVhMVZ7y+u4g+//GLjLPO2JGLh3oZZdDXa6af8 # N//steftVLII0JWTB5z+6Hv3A5ek9AxiVSPPYLpTGcvp1Cgni+5BdiGqPs5554qC # Yh5/F0aafIJsMDSs9sO6U4X46DYp8/DSfJwr3Vn+Y9SSVgdSGlU= # =QZ+f # -----END PGP SIGNATURE----- # gpg: Signature made Wed Sep 2 20:35:45 2026 BST # gpg: using RSA key F9B7ABDBBCACDF95BE76CBD07DEF8106AAFC390E # gpg: Good signature from "John Snow (John Huston) <jsnow@redhat.com>" [full] # Primary key fingerprint: FAEB 9711 A12C F475 812F 18F2 88A9 064D 1835 61EB # Subkey fingerprint: F9B7 ABDB BCAC DF95 BE76 CBD0 7DEF 8106 AAFC 390E * tag 'python-pull-request' of https://gitlab.com/jsnow/qemu: sphinx: drop qapidoc back-compat overboiled spaghetti dinner sphinx: drop fakedbusdoc sphinx: require sphinx 7.2.6 python: remove stale setup.cfg options python: remove distutils workarounds python: allow mypy to run as the current python version python: fix license configuration python: upgrade to Python3.12+ qapi: update type hint for objects_seen tests: update emsdk-wasm64-cross tests: add Python3.12 to centos9.docker tests: re-add opencv2 and numpy dependencies tests: drop python3-devel mapping tests: update netbsd dependencies tests: update libvirt-ci, lcitool tests: update vm tests to prefer locally-built QEMU Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
1a8f18541e
43 files changed
+185
-521
No files matched your search
@@ -12,5 +12,5 @@ NINJA='/opt/homebrew/bin/ninja'
|
|||||||
PACKAGING_COMMAND='brew'
|
PACKAGING_COMMAND='brew'
|
||||||
PIP3='/opt/homebrew/bin/pip3'
|
PIP3='/opt/homebrew/bin/pip3'
|
||||||
PKGS='bash bc bindgen bison bzip2 capstone ccache cmocka coreutils ctags curl dbus diffutils dtc flex gcovr gettext git glib gnu-sed gnutls gtk+3 gtk-vnc jemalloc jpeg-turbo json-c libcbor libepoxy libffi libgcrypt libiscsi libnfs libpng libslirp libssh libtasn1 libusb llvm lzo make meson mtools ncurses nettle ninja pixman pkg-config python-setuptools python3 rpm2cpio rust sdl2 sdl2_image snappy socat sparse spice-protocol swtpm tesseract usbredir vde vte3 vulkan-tools xorriso zlib zstd'
|
PKGS='bash bc bindgen bison bzip2 capstone ccache cmocka coreutils ctags curl dbus diffutils dtc flex gcovr gettext git glib gnu-sed gnutls gtk+3 gtk-vnc jemalloc jpeg-turbo json-c libcbor libepoxy libffi libgcrypt libiscsi libnfs libpng libslirp libssh libtasn1 libusb llvm lzo make meson mtools ncurses nettle ninja pixman pkg-config python-setuptools python3 rpm2cpio rust sdl2 sdl2_image snappy socat sparse spice-protocol swtpm tesseract usbredir vde vte3 vulkan-tools xorriso zlib zstd'
|
||||||
PYPI_PKGS='sphinx sphinx-rtd-theme tomli'
|
PYPI_PKGS='numpy sphinx sphinx-rtd-theme tomli'
|
||||||
PYTHON='/opt/homebrew/bin/python3'
|
PYTHON='/opt/homebrew/bin/python3'
|
||||||
@@ -503,17 +503,16 @@ if test -n "$linux_arch" && ! test -d "$source_path/linux-headers/asm-$linux_arc
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
check_py_version() {
|
check_py_version() {
|
||||||
# We require python >= 3.9.
|
# We require python >= 3.12.
|
||||||
# NB: a True python conditional creates a non-zero return code (Failure)
|
# NB: a True python conditional creates a non-zero return code (Failure)
|
||||||
"$1" -c 'import sys; sys.exit(sys.version_info < (3,9))'
|
"$1" -c 'import sys; sys.exit(sys.version_info < (3,12))'
|
||||||
}
|
}
|
||||||
|
|
||||||
first_python=
|
first_python=
|
||||||
if test -z "${PYTHON}"; then
|
if test -z "${PYTHON}"; then
|
||||||
# A bare 'python' is traditionally python 2.x, but some distros
|
# A bare 'python' is traditionally python 2.x, but some distros
|
||||||
# have it as python 3.x, so check in both places.
|
# have it as python 3.x, so check in both places.
|
||||||
for binary in python3 python python3.14 python3.13 python3.12 \
|
for binary in python3 python python3.14 python3.13 python3.12; do
|
||||||
python3.11 python3.10 python3.9 ; do
|
|
||||||
if has "$binary"; then
|
if has "$binary"; then
|
||||||
python=$(command -v "$binary")
|
python=$(command -v "$binary")
|
||||||
if check_py_version "$python"; then
|
if check_py_version "$python"; then
|
||||||
@@ -902,7 +901,7 @@ then
|
|||||||
# If first_python is set, there was a binary somewhere even though
|
# If first_python is set, there was a binary somewhere even though
|
||||||
# it was not suitable. Use it for the error message.
|
# it was not suitable. Use it for the error message.
|
||||||
if test -n "$first_python"; then
|
if test -n "$first_python"; then
|
||||||
error_exit "Cannot use '$first_python', Python >= 3.9 is required." \
|
error_exit "Cannot use '$first_python', Python >= 3.12 is required." \
|
||||||
"Use --python=/path/to/python to specify a supported Python."
|
"Use --python=/path/to/python to specify a supported Python."
|
||||||
else
|
else
|
||||||
error_exit "Python not found. Use --python=/path/to/python"
|
error_exit "Python not found. Use --python=/path/to/python"
|
||||||
@@ -910,7 +909,7 @@ then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if ! check_py_version "$python"; then
|
if ! check_py_version "$python"; then
|
||||||
error_exit "Cannot use '$python', Python >= 3.9 is required." \
|
error_exit "Cannot use '$python', Python >= 3.12 is required." \
|
||||||
"Use --python=/path/to/python to specify a supported Python." \
|
"Use --python=/path/to/python to specify a supported Python." \
|
||||||
"Maybe try:" \
|
"Maybe try:" \
|
||||||
" CentOS: dnf install python3.12"
|
" CentOS: dnf install python3.12"
|
||||||
|
|||||||
+3
-8
@@ -51,14 +51,15 @@ sys.path.insert(0, os.path.join(qemu_docdir, "../scripts"))
|
|||||||
|
|
||||||
# If your documentation needs a minimal Sphinx version, state it here.
|
# If your documentation needs a minimal Sphinx version, state it here.
|
||||||
#
|
#
|
||||||
# 3.4.3 is the oldest version of Sphinx that ships on a platform we
|
# 7.2.6 is the oldest version of Sphinx that ships on a platform we
|
||||||
# pledge build support for.
|
# pledge build support for.
|
||||||
needs_sphinx = '3.4.3'
|
needs_sphinx = '7.2.6'
|
||||||
|
|
||||||
# Add any Sphinx extension module names here, as strings. They can be
|
# Add any Sphinx extension module names here, as strings. They can be
|
||||||
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
|
||||||
# ones.
|
# ones.
|
||||||
extensions = [
|
extensions = [
|
||||||
|
'dbusdoc',
|
||||||
'depfile',
|
'depfile',
|
||||||
'hxtool',
|
'hxtool',
|
||||||
'kerneldoc',
|
'kerneldoc',
|
||||||
@@ -67,12 +68,6 @@ extensions = [
|
|||||||
'qmp_lexer',
|
'qmp_lexer',
|
||||||
]
|
]
|
||||||
|
|
||||||
if sphinx.version_info[:3] > (4, 0, 0):
|
|
||||||
tags.add('sphinx4')
|
|
||||||
extensions += ['dbusdoc']
|
|
||||||
else:
|
|
||||||
extensions += ['fakedbusdoc']
|
|
||||||
|
|
||||||
# Add any paths that contain templates here, relative to this directory.
|
# Add any paths that contain templates here, relative to this directory.
|
||||||
templates_path = [os.path.join(qemu_docdir, '_templates')]
|
templates_path = [os.path.join(qemu_docdir, '_templates')]
|
||||||
|
|
||||||
|
|||||||
@@ -18,16 +18,4 @@ QEMU also implements the standard interfaces, such as
|
|||||||
:local:
|
:local:
|
||||||
:depth: 1
|
:depth: 1
|
||||||
|
|
||||||
.. only:: sphinx4
|
.. dbus-doc:: ui/dbus-display1.xml
|
||||||
|
|
||||||
.. dbus-doc:: ui/dbus-display1.xml
|
|
||||||
|
|
||||||
.. only:: not sphinx4
|
|
||||||
|
|
||||||
.. warning::
|
|
||||||
Sphinx 4 is required to build D-Bus documentation.
|
|
||||||
|
|
||||||
This is the content of ``ui/dbus-display1.xml``:
|
|
||||||
|
|
||||||
.. literalinclude:: ../../ui/dbus-display1.xml
|
|
||||||
:language: xml
|
|
||||||
@@ -23,16 +23,4 @@ dbus-vmstate object can be configured with the expected list of
|
|||||||
helpers by setting its ``id-list`` property, with a comma-separated
|
helpers by setting its ``id-list`` property, with a comma-separated
|
||||||
``Id`` list.
|
``Id`` list.
|
||||||
|
|
||||||
.. only:: sphinx4
|
.. dbus-doc:: backends/dbus-vmstate1.xml
|
||||||
|
|
||||||
.. dbus-doc:: backends/dbus-vmstate1.xml
|
|
||||||
|
|
||||||
.. only:: not sphinx4
|
|
||||||
|
|
||||||
.. warning::
|
|
||||||
Sphinx 4 is required to build D-Bus documentation.
|
|
||||||
|
|
||||||
This is the content of ``backends/dbus-vmstate1.xml``:
|
|
||||||
|
|
||||||
.. literalinclude:: ../../backends/dbus-vmstate1.xml
|
|
||||||
:language: xml
|
|
||||||
@@ -11,16 +11,4 @@ Objects are exported under ``/org/qemu/Vnc1/``.
|
|||||||
:local:
|
:local:
|
||||||
:depth: 1
|
:depth: 1
|
||||||
|
|
||||||
.. only:: sphinx4
|
.. dbus-doc:: tools/qemu-vnc/qemu-vnc1.xml
|
||||||
|
|
||||||
.. dbus-doc:: tools/qemu-vnc/qemu-vnc1.xml
|
|
||||||
|
|
||||||
.. only:: not sphinx4
|
|
||||||
|
|
||||||
.. warning::
|
|
||||||
Sphinx 4 is required to build D-Bus documentation.
|
|
||||||
|
|
||||||
This is the content of ``tools/qemu-vnc/qemu-vnc1.xml``:
|
|
||||||
|
|
||||||
.. literalinclude:: ../../tools/qemu-vnc/qemu-vnc1.xml
|
|
||||||
:language: xml
|
|
||||||
@@ -1,5 +1,5 @@
|
|||||||
# Used by readthedocs.io
|
# Used by readthedocs.io
|
||||||
# Should be in sync with the "installed" key of pythondeps.toml
|
# Should be in sync with the "installed" key of pythondeps.toml
|
||||||
|
|
||||||
sphinx==6.2.1
|
sphinx==7.2.6
|
||||||
sphinx_rtd_theme==1.2.2
|
sphinx_rtd_theme==1.2.2
|
||||||
@@ -1,230 +0,0 @@
|
|||||||
"""
|
|
||||||
Sphinx cross-version compatibility goop
|
|
||||||
"""
|
|
||||||
|
|
||||||
import re
|
|
||||||
from typing import (
|
|
||||||
TYPE_CHECKING,
|
|
||||||
Any,
|
|
||||||
Callable,
|
|
||||||
Optional,
|
|
||||||
Type,
|
|
||||||
)
|
|
||||||
|
|
||||||
from docutils import nodes
|
|
||||||
from docutils.nodes import Element, Node, Text
|
|
||||||
from docutils.statemachine import StringList
|
|
||||||
|
|
||||||
import sphinx
|
|
||||||
from sphinx import addnodes, util
|
|
||||||
from sphinx.directives import ObjectDescription
|
|
||||||
from sphinx.environment import BuildEnvironment
|
|
||||||
from sphinx.roles import XRefRole
|
|
||||||
from sphinx.util import docfields
|
|
||||||
from sphinx.util.docutils import (
|
|
||||||
ReferenceRole,
|
|
||||||
SphinxDirective,
|
|
||||||
switch_source_input,
|
|
||||||
)
|
|
||||||
from sphinx.util.typing import TextlikeNode
|
|
||||||
|
|
||||||
|
|
||||||
MAKE_XREF_WORKAROUND = sphinx.version_info[:3] < (4, 1, 0)
|
|
||||||
|
|
||||||
|
|
||||||
SpaceNode: Callable[[str], Node]
|
|
||||||
KeywordNode: Callable[[str, str], Node]
|
|
||||||
|
|
||||||
if sphinx.version_info[:3] >= (4, 0, 0):
|
|
||||||
SpaceNode = addnodes.desc_sig_space
|
|
||||||
KeywordNode = addnodes.desc_sig_keyword
|
|
||||||
else:
|
|
||||||
SpaceNode = Text
|
|
||||||
KeywordNode = addnodes.desc_annotation
|
|
||||||
|
|
||||||
|
|
||||||
def nested_parse_with_titles(
|
|
||||||
directive: SphinxDirective, content_node: Element
|
|
||||||
) -> None:
|
|
||||||
"""
|
|
||||||
This helper preserves error parsing context across sphinx versions.
|
|
||||||
"""
|
|
||||||
|
|
||||||
# necessary so that the child nodes get the right source/line set
|
|
||||||
content_node.document = directive.state.document
|
|
||||||
|
|
||||||
try:
|
|
||||||
# Modern sphinx (6.2.0+) supports proper offsetting for
|
|
||||||
# nested parse error context management
|
|
||||||
util.nodes.nested_parse_with_titles(
|
|
||||||
directive.state,
|
|
||||||
directive.content,
|
|
||||||
content_node,
|
|
||||||
content_offset=directive.content_offset,
|
|
||||||
)
|
|
||||||
except TypeError:
|
|
||||||
# No content_offset argument. Fall back to SSI method.
|
|
||||||
with switch_source_input(directive.state, directive.content):
|
|
||||||
util.nodes.nested_parse_with_titles(
|
|
||||||
directive.state, directive.content, content_node
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
# ###########################################
|
|
||||||
# xref compatibility hacks for Sphinx < 4.1 #
|
|
||||||
# ###########################################
|
|
||||||
|
|
||||||
# When we require >= Sphinx 4.1, the following function and the
|
|
||||||
# subsequent 3 compatibility classes can be removed. Anywhere in
|
|
||||||
# qapi_domain that uses one of these Compat* types can be switched to
|
|
||||||
# using the garden-variety lib-provided classes with no trickery.
|
|
||||||
|
|
||||||
|
|
||||||
def _compat_make_xref( # pylint: disable=unused-argument
|
|
||||||
self: sphinx.util.docfields.Field,
|
|
||||||
rolename: str,
|
|
||||||
domain: str,
|
|
||||||
target: str,
|
|
||||||
innernode: Type[TextlikeNode] = addnodes.literal_emphasis,
|
|
||||||
contnode: Optional[Node] = None,
|
|
||||||
env: Optional[BuildEnvironment] = None,
|
|
||||||
inliner: Any = None,
|
|
||||||
location: Any = None,
|
|
||||||
) -> Node:
|
|
||||||
"""
|
|
||||||
Compatibility workaround for Sphinx versions prior to 4.1.0.
|
|
||||||
|
|
||||||
Older sphinx versions do not use the domain's XRefRole for parsing
|
|
||||||
and formatting cross-references, so we need to perform this magick
|
|
||||||
ourselves to avoid needing to write the parser/formatter in two
|
|
||||||
separate places.
|
|
||||||
|
|
||||||
This workaround isn't brick-for-brick compatible with modern Sphinx
|
|
||||||
versions, because we do not have access to the parent directive's
|
|
||||||
state during this parsing like we do in more modern versions.
|
|
||||||
|
|
||||||
It's no worse than what pre-Sphinx 4.1.0 does, so... oh well!
|
|
||||||
"""
|
|
||||||
|
|
||||||
# Yes, this function is gross. Pre-4.1 support is a miracle.
|
|
||||||
# pylint: disable=too-many-locals
|
|
||||||
|
|
||||||
assert env
|
|
||||||
# Note: Sphinx's own code ignores the type warning here, too.
|
|
||||||
if not rolename:
|
|
||||||
return contnode or innernode(target, target) # type: ignore[call-arg]
|
|
||||||
|
|
||||||
# Get the role instance, but don't *execute it* - we lack the
|
|
||||||
# correct state to do so. Instead, we'll just use its public
|
|
||||||
# methods to do our reference formatting, and emulate the rest.
|
|
||||||
role = env.get_domain(domain).roles[rolename]
|
|
||||||
assert isinstance(role, XRefRole)
|
|
||||||
|
|
||||||
# XRefRole features not supported by this compatibility shim;
|
|
||||||
# these were not supported in Sphinx 3.x either, so nothing of
|
|
||||||
# value is really lost.
|
|
||||||
assert not target.startswith("!")
|
|
||||||
assert not re.match(ReferenceRole.explicit_title_re, target)
|
|
||||||
assert not role.lowercase
|
|
||||||
assert not role.fix_parens
|
|
||||||
|
|
||||||
# Code below based mostly on sphinx.roles.XRefRole; run() and
|
|
||||||
# create_xref_node()
|
|
||||||
options = {
|
|
||||||
"refdoc": env.docname,
|
|
||||||
"refdomain": domain,
|
|
||||||
"reftype": rolename,
|
|
||||||
"refexplicit": False,
|
|
||||||
"refwarn": role.warn_dangling,
|
|
||||||
}
|
|
||||||
refnode = role.nodeclass(target, **options)
|
|
||||||
title, target = role.process_link(env, refnode, False, target, target)
|
|
||||||
refnode["reftarget"] = target
|
|
||||||
classes = ["xref", domain, f"{domain}-{rolename}"]
|
|
||||||
refnode += role.innernodeclass(target, title, classes=classes)
|
|
||||||
|
|
||||||
# This is the very gross part of the hack. Normally,
|
|
||||||
# result_nodes takes a document object to which we would pass
|
|
||||||
# self.inliner.document. Prior to Sphinx 4.1, we don't *have* an
|
|
||||||
# inliner to pass, so we have nothing to pass here. However, the
|
|
||||||
# actual implementation of role.result_nodes in this case
|
|
||||||
# doesn't actually use that argument, so this winds up being
|
|
||||||
# ... fine. Rest easy at night knowing this code only runs under
|
|
||||||
# old versions of Sphinx, so at least it won't change in the
|
|
||||||
# future on us and lead to surprising new failures.
|
|
||||||
# Gross, I know.
|
|
||||||
result_nodes, _messages = role.result_nodes(
|
|
||||||
None, # type: ignore
|
|
||||||
env,
|
|
||||||
refnode,
|
|
||||||
is_ref=True,
|
|
||||||
)
|
|
||||||
return nodes.inline(target, "", *result_nodes)
|
|
||||||
|
|
||||||
|
|
||||||
class CompatField(docfields.Field):
|
|
||||||
if MAKE_XREF_WORKAROUND:
|
|
||||||
make_xref = _compat_make_xref
|
|
||||||
|
|
||||||
|
|
||||||
class CompatGroupedField(docfields.GroupedField):
|
|
||||||
if MAKE_XREF_WORKAROUND:
|
|
||||||
make_xref = _compat_make_xref
|
|
||||||
|
|
||||||
|
|
||||||
class CompatTypedField(docfields.TypedField):
|
|
||||||
if MAKE_XREF_WORKAROUND:
|
|
||||||
make_xref = _compat_make_xref
|
|
||||||
|
|
||||||
|
|
||||||
# ################################################################
|
|
||||||
# Nested parsing error location fix for Sphinx 5.3.0 < x < 6.2.0 #
|
|
||||||
# ################################################################
|
|
||||||
|
|
||||||
# When we require Sphinx 4.x, the TYPE_CHECKING hack where we avoid
|
|
||||||
# subscripting ObjectDescription at runtime can be removed in favor of
|
|
||||||
# just always subscripting the class.
|
|
||||||
|
|
||||||
# When we require Sphinx > 6.2.0, the rest of this compatibility hack
|
|
||||||
# can be dropped and QAPIObject can just inherit directly from
|
|
||||||
# ObjectDescription[Signature].
|
|
||||||
|
|
||||||
SOURCE_LOCATION_FIX = (5, 3, 0) <= sphinx.version_info[:3] < (6, 2, 0)
|
|
||||||
|
|
||||||
Signature = str
|
|
||||||
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
|
||||||
_BaseClass = ObjectDescription[Signature]
|
|
||||||
else:
|
|
||||||
_BaseClass = ObjectDescription
|
|
||||||
|
|
||||||
|
|
||||||
class ParserFix(_BaseClass):
|
|
||||||
|
|
||||||
_temp_content: StringList
|
|
||||||
_temp_offset: int
|
|
||||||
_temp_node: Optional[addnodes.desc_content]
|
|
||||||
|
|
||||||
def before_content(self) -> None:
|
|
||||||
# Work around a sphinx bug and parse the content ourselves.
|
|
||||||
self._temp_content = self.content
|
|
||||||
self._temp_offset = self.content_offset
|
|
||||||
self._temp_node = None
|
|
||||||
|
|
||||||
if SOURCE_LOCATION_FIX:
|
|
||||||
self._temp_node = addnodes.desc_content()
|
|
||||||
self.state.nested_parse(
|
|
||||||
self.content, self.content_offset, self._temp_node
|
|
||||||
)
|
|
||||||
# Sphinx will try to parse the content block itself,
|
|
||||||
# Give it nothingness to parse instead.
|
|
||||||
self.content = StringList()
|
|
||||||
self.content_offset = 0
|
|
||||||
|
|
||||||
def transform_content(self, content_node: addnodes.desc_content) -> None:
|
|
||||||
# Sphinx workaround: Inject our parsed content and restore state.
|
|
||||||
if self._temp_node:
|
|
||||||
content_node += self._temp_node.children
|
|
||||||
self.content = self._temp_content
|
|
||||||
self.content_offset = self._temp_offset
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
# D-Bus XML documentation extension, compatibility gunk for <sphinx4
|
|
||||||
#
|
|
||||||
# Copyright (C) 2021, Red Hat Inc.
|
|
||||||
#
|
|
||||||
# SPDX-License-Identifier: LGPL-2.1-or-later
|
|
||||||
#
|
|
||||||
# Author: Marc-André Lureau <marcandre.lureau@redhat.com>
|
|
||||||
"""dbus-doc is a Sphinx extension that provides documentation from D-Bus XML."""
|
|
||||||
|
|
||||||
from docutils.parsers.rst import Directive
|
|
||||||
from sphinx.application import Sphinx
|
|
||||||
from typing import Any, Dict
|
|
||||||
|
|
||||||
|
|
||||||
class FakeDBusDocDirective(Directive):
|
|
||||||
has_content = True
|
|
||||||
required_arguments = 1
|
|
||||||
|
|
||||||
def run(self):
|
|
||||||
return []
|
|
||||||
|
|
||||||
|
|
||||||
def setup(app: Sphinx) -> Dict[str, Any]:
|
|
||||||
"""Register a fake dbus-doc directive with Sphinx"""
|
|
||||||
app.add_directive("dbus-doc", FakeDBusDocDirective)
|
|
||||||
|
|
||||||
return dict(
|
|
||||||
parallel_read_safe = True,
|
|
||||||
parallel_write_safe = True
|
|
||||||
)
|
|
||||||
+28
-25
@@ -30,20 +30,10 @@ from sphinx.domains import (
|
|||||||
)
|
)
|
||||||
from sphinx.locale import _, __
|
from sphinx.locale import _, __
|
||||||
from sphinx.roles import XRefRole
|
from sphinx.roles import XRefRole
|
||||||
from sphinx.util import logging
|
from sphinx.util import docfields, logging
|
||||||
from sphinx.util.docutils import SphinxDirective
|
from sphinx.util.docutils import SphinxDirective
|
||||||
from sphinx.util.nodes import make_id, make_refnode
|
from sphinx.util.nodes import make_id, make_refnode
|
||||||
|
|
||||||
from compat import (
|
|
||||||
CompatField,
|
|
||||||
CompatGroupedField,
|
|
||||||
CompatTypedField,
|
|
||||||
KeywordNode,
|
|
||||||
ParserFix,
|
|
||||||
Signature,
|
|
||||||
SpaceNode,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from typing import (
|
from typing import (
|
||||||
@@ -157,7 +147,10 @@ class QAPIXRefRole(XRefRole):
|
|||||||
return results, []
|
return results, []
|
||||||
|
|
||||||
|
|
||||||
class QAPIDescription(ParserFix):
|
Signature = str
|
||||||
|
|
||||||
|
|
||||||
|
class QAPIDescription(ObjectDescription[Signature]):
|
||||||
"""
|
"""
|
||||||
Generic QAPI description.
|
Generic QAPI description.
|
||||||
|
|
||||||
@@ -315,7 +308,7 @@ class QAPIObject(QAPIDescription):
|
|||||||
|
|
||||||
doc_field_types = [
|
doc_field_types = [
|
||||||
# :feat name: descr
|
# :feat name: descr
|
||||||
CompatGroupedField(
|
docfields.GroupedField(
|
||||||
"feature",
|
"feature",
|
||||||
label=_("Features"),
|
label=_("Features"),
|
||||||
names=("feat",),
|
names=("feat",),
|
||||||
@@ -327,8 +320,8 @@ class QAPIObject(QAPIDescription):
|
|||||||
"""Return a prefix to put before the object name in the signature."""
|
"""Return a prefix to put before the object name in the signature."""
|
||||||
assert self.objtype
|
assert self.objtype
|
||||||
return [
|
return [
|
||||||
KeywordNode("", self.objtype.title()),
|
addnodes.desc_sig_keyword("", self.objtype.title()),
|
||||||
SpaceNode(" "),
|
addnodes.desc_sig_space(" "),
|
||||||
]
|
]
|
||||||
|
|
||||||
def get_signature_suffix(self) -> List[nodes.Node]:
|
def get_signature_suffix(self) -> List[nodes.Node]:
|
||||||
@@ -337,7 +330,7 @@ class QAPIObject(QAPIDescription):
|
|||||||
|
|
||||||
if "since" in self.options:
|
if "since" in self.options:
|
||||||
ret += [
|
ret += [
|
||||||
SpaceNode(" "),
|
addnodes.desc_sig_space(" "),
|
||||||
addnodes.desc_sig_element(
|
addnodes.desc_sig_element(
|
||||||
"", f"(Since: {self.options['since']})"
|
"", f"(Since: {self.options['since']})"
|
||||||
),
|
),
|
||||||
@@ -376,7 +369,7 @@ class QAPIObject(QAPIDescription):
|
|||||||
|
|
||||||
return sig
|
return sig
|
||||||
|
|
||||||
def _add_infopips(self, contentnode: addnodes.desc_content) -> None:
|
def _add_infopips(self, content_node: addnodes.desc_content) -> None:
|
||||||
# Add various eye-catches and things that go below the signature
|
# Add various eye-catches and things that go below the signature
|
||||||
# bar, but precede the user-defined content.
|
# bar, but precede the user-defined content.
|
||||||
infopips = nodes.container()
|
infopips = nodes.container()
|
||||||
@@ -420,7 +413,7 @@ class QAPIObject(QAPIDescription):
|
|||||||
)
|
)
|
||||||
|
|
||||||
if infopips.children:
|
if infopips.children:
|
||||||
contentnode.insert(0, infopips)
|
content_node.insert(0, infopips)
|
||||||
|
|
||||||
def _validate_field(self, field: nodes.field) -> None:
|
def _validate_field(self, field: nodes.field) -> None:
|
||||||
"""Validate field lists in this QAPI Object Description."""
|
"""Validate field lists in this QAPI Object Description."""
|
||||||
@@ -470,7 +463,17 @@ class QAPIObject(QAPIDescription):
|
|||||||
)
|
)
|
||||||
logger.warning(msg, location=field)
|
logger.warning(msg, location=field)
|
||||||
|
|
||||||
def transform_content(self, content_node: addnodes.desc_content) -> None:
|
def transform_content(
|
||||||
|
self,
|
||||||
|
# Sphinx changed the name of the content_node parameter
|
||||||
|
# sometime after Sphinx 7.2.6, so no matter which name we
|
||||||
|
# choose, either our minimum tests or our bleeding edge tests
|
||||||
|
# will complain about the parameter rename. Use the eventual
|
||||||
|
# name and silence the error for our minreq tests.
|
||||||
|
#
|
||||||
|
# pylint: disable=arguments-renamed
|
||||||
|
content_node: addnodes.desc_content
|
||||||
|
) -> None:
|
||||||
# This hook runs after before_content and the nested parse, but
|
# This hook runs after before_content and the nested parse, but
|
||||||
# before the DocFieldTransformer is executed.
|
# before the DocFieldTransformer is executed.
|
||||||
super().transform_content(content_node)
|
super().transform_content(content_node)
|
||||||
@@ -485,7 +488,7 @@ class QAPIObject(QAPIDescription):
|
|||||||
self._validate_field(field)
|
self._validate_field(field)
|
||||||
|
|
||||||
|
|
||||||
class SpecialTypedField(CompatTypedField):
|
class SpecialTypedField(docfields.TypedField):
|
||||||
def make_field(self, *args: Any, **kwargs: Any) -> nodes.field:
|
def make_field(self, *args: Any, **kwargs: Any) -> nodes.field:
|
||||||
ret = super().make_field(*args, **kwargs)
|
ret = super().make_field(*args, **kwargs)
|
||||||
|
|
||||||
@@ -518,14 +521,14 @@ class QAPICommand(QAPIObject):
|
|||||||
can_collapse=False,
|
can_collapse=False,
|
||||||
),
|
),
|
||||||
# :error: descr
|
# :error: descr
|
||||||
CompatField(
|
docfields.Field(
|
||||||
"error",
|
"error",
|
||||||
label=_("Errors"),
|
label=_("Errors"),
|
||||||
names=("error", "errors"),
|
names=("error", "errors"),
|
||||||
has_arg=False,
|
has_arg=False,
|
||||||
),
|
),
|
||||||
# :return TypeName: descr
|
# :return TypeName: descr
|
||||||
CompatGroupedField(
|
docfields.GroupedField(
|
||||||
"returnvalue",
|
"returnvalue",
|
||||||
label=_("Return"),
|
label=_("Return"),
|
||||||
rolename="type",
|
rolename="type",
|
||||||
@@ -533,7 +536,7 @@ class QAPICommand(QAPIObject):
|
|||||||
can_collapse=True,
|
can_collapse=True,
|
||||||
),
|
),
|
||||||
# :return-nodesc: TypeName
|
# :return-nodesc: TypeName
|
||||||
CompatField(
|
docfields.Field(
|
||||||
"returnvalue",
|
"returnvalue",
|
||||||
label=_("Return"),
|
label=_("Return"),
|
||||||
names=("return-nodesc",),
|
names=("return-nodesc",),
|
||||||
@@ -551,7 +554,7 @@ class QAPIEnum(QAPIObject):
|
|||||||
doc_field_types.extend(
|
doc_field_types.extend(
|
||||||
[
|
[
|
||||||
# :value name: descr
|
# :value name: descr
|
||||||
CompatGroupedField(
|
docfields.GroupedField(
|
||||||
"value",
|
"value",
|
||||||
label=_("Values"),
|
label=_("Values"),
|
||||||
names=("value",),
|
names=("value",),
|
||||||
@@ -568,7 +571,7 @@ class QAPIAlternate(QAPIObject):
|
|||||||
doc_field_types.extend(
|
doc_field_types.extend(
|
||||||
[
|
[
|
||||||
# :alt type name: descr
|
# :alt type name: descr
|
||||||
CompatTypedField(
|
docfields.TypedField(
|
||||||
"alternative",
|
"alternative",
|
||||||
label=_("Alternatives"),
|
label=_("Alternatives"),
|
||||||
names=("alt",),
|
names=("alt",),
|
||||||
|
|||||||
+5
-5
@@ -9,14 +9,14 @@ help:
|
|||||||
@echo "make check-minreqs:"
|
@echo "make check-minreqs:"
|
||||||
@echo " Run tests in the minreqs virtual environment."
|
@echo " Run tests in the minreqs virtual environment."
|
||||||
@echo " These tests use the oldest dependencies."
|
@echo " These tests use the oldest dependencies."
|
||||||
@echo " Requires: Python 3.9"
|
@echo " Requires: Python 3.12"
|
||||||
@echo " Hint (Fedora): 'sudo dnf install python3.9'"
|
@echo " Hint (Fedora): 'sudo dnf install python3.12'"
|
||||||
@echo ""
|
@echo ""
|
||||||
@echo "make check-tox:"
|
@echo "make check-tox:"
|
||||||
@echo " Run tests against multiple python versions."
|
@echo " Run tests against multiple python versions."
|
||||||
@echo " These tests use the newest dependencies."
|
@echo " These tests use the newest dependencies."
|
||||||
@echo " Requires: Python 3.9 - 3.11, and tox."
|
@echo " Requires: Python 3.12 - 3.14, and tox."
|
||||||
@echo " Hint (Fedora): 'sudo dnf install python3-tox python3.11'"
|
@echo " Hint (Fedora): 'sudo dnf install python3-tox python3.14'"
|
||||||
@echo " The variable QEMU_TOX_EXTRA_ARGS can be use to pass extra"
|
@echo " The variable QEMU_TOX_EXTRA_ARGS can be use to pass extra"
|
||||||
@echo " arguments to tox".
|
@echo " arguments to tox".
|
||||||
@echo ""
|
@echo ""
|
||||||
@@ -59,7 +59,7 @@ PIP_INSTALL = pip install --disable-pip-version-check
|
|||||||
min-venv: $(QEMU_MINVENV_DIR) $(QEMU_MINVENV_DIR)/bin/activate
|
min-venv: $(QEMU_MINVENV_DIR) $(QEMU_MINVENV_DIR)/bin/activate
|
||||||
$(QEMU_MINVENV_DIR) $(QEMU_MINVENV_DIR)/bin/activate: setup.cfg tests/minreqs.txt
|
$(QEMU_MINVENV_DIR) $(QEMU_MINVENV_DIR)/bin/activate: setup.cfg tests/minreqs.txt
|
||||||
@echo "VENV $(QEMU_MINVENV_DIR)"
|
@echo "VENV $(QEMU_MINVENV_DIR)"
|
||||||
@python3.9 -m venv $(QEMU_MINVENV_DIR)
|
@python3.12 -m venv $(QEMU_MINVENV_DIR)
|
||||||
@( \
|
@( \
|
||||||
echo "ACTIVATE $(QEMU_MINVENV_DIR)"; \
|
echo "ACTIVATE $(QEMU_MINVENV_DIR)"; \
|
||||||
. $(QEMU_MINVENV_DIR)/bin/activate; \
|
. $(QEMU_MINVENV_DIR)/bin/activate; \
|
||||||
|
|||||||
@@ -75,6 +75,7 @@ import site
|
|||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
import sys
|
||||||
import sysconfig
|
import sysconfig
|
||||||
|
import tomllib
|
||||||
from types import SimpleNamespace
|
from types import SimpleNamespace
|
||||||
from typing import (
|
from typing import (
|
||||||
Any,
|
Any,
|
||||||
@@ -134,20 +135,6 @@ except ImportError:
|
|||||||
HAVE_PACKAGING_VERSION = _import_ok
|
HAVE_PACKAGING_VERSION = _import_ok
|
||||||
|
|
||||||
|
|
||||||
# Try to load tomllib, with a fallback to tomli.
|
|
||||||
# HAVE_TOMLLIB is checked below, just-in-time, so that mkvenv does not fail
|
|
||||||
# outside the venv or before a potential call to ensurepip in checkpip().
|
|
||||||
_import_ok = True
|
|
||||||
try:
|
|
||||||
import tomllib
|
|
||||||
except ImportError:
|
|
||||||
try:
|
|
||||||
import tomli as tomllib
|
|
||||||
except ImportError:
|
|
||||||
_import_ok = False
|
|
||||||
|
|
||||||
HAVE_TOMLLIB = _import_ok
|
|
||||||
|
|
||||||
# Do not add any mandatory dependencies from outside the stdlib:
|
# Do not add any mandatory dependencies from outside the stdlib:
|
||||||
# This script *must* be usable standalone!
|
# This script *must* be usable standalone!
|
||||||
|
|
||||||
@@ -261,36 +248,6 @@ class QemuEnvBuilder(venv.EnvBuilder):
|
|||||||
return sysconfig.get_path("purelib")
|
return sysconfig.get_path("purelib")
|
||||||
return None
|
return None
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def compute_venv_libpath(context: SimpleNamespace) -> str:
|
|
||||||
"""
|
|
||||||
Compatibility wrapper for context.lib_path for Python < 3.12
|
|
||||||
"""
|
|
||||||
# Python 3.12+, not strictly necessary because it's documented
|
|
||||||
# to be the same as 3.10 code below:
|
|
||||||
if sys.version_info >= (3, 12):
|
|
||||||
return context.lib_path
|
|
||||||
|
|
||||||
# Python 3.10+
|
|
||||||
if "venv" in sysconfig.get_scheme_names():
|
|
||||||
lib_path = sysconfig.get_path(
|
|
||||||
"purelib", scheme="venv", vars={"base": context.env_dir}
|
|
||||||
)
|
|
||||||
assert lib_path is not None
|
|
||||||
return lib_path
|
|
||||||
|
|
||||||
# For Python <= 3.9 we need to hardcode this. Fortunately the
|
|
||||||
# code below was the same in Python 3.6-3.10, so there is only
|
|
||||||
# one case.
|
|
||||||
if sys.platform == "win32":
|
|
||||||
return os.path.join(context.env_dir, "Lib", "site-packages")
|
|
||||||
return os.path.join(
|
|
||||||
context.env_dir,
|
|
||||||
"lib",
|
|
||||||
"python%d.%d" % sys.version_info[:2],
|
|
||||||
"site-packages",
|
|
||||||
)
|
|
||||||
|
|
||||||
def ensure_directories(self, env_dir: DirType) -> SimpleNamespace:
|
def ensure_directories(self, env_dir: DirType) -> SimpleNamespace:
|
||||||
logger.debug("ensure_directories(env_dir=%s)", env_dir)
|
logger.debug("ensure_directories(env_dir=%s)", env_dir)
|
||||||
self._context = super().ensure_directories(env_dir)
|
self._context = super().ensure_directories(env_dir)
|
||||||
@@ -313,7 +270,8 @@ class QemuEnvBuilder(venv.EnvBuilder):
|
|||||||
assert parent_libpath is not None
|
assert parent_libpath is not None
|
||||||
logger.debug("parent_libpath: %s", parent_libpath)
|
logger.debug("parent_libpath: %s", parent_libpath)
|
||||||
|
|
||||||
our_libpath = self.compute_venv_libpath(context)
|
assert isinstance(context.lib_path, str)
|
||||||
|
our_libpath = context.lib_path
|
||||||
logger.debug("our_libpath: %s", our_libpath)
|
logger.debug("our_libpath: %s", our_libpath)
|
||||||
|
|
||||||
pth_file = os.path.join(our_libpath, "nested.pth")
|
pth_file = os.path.join(our_libpath, "nested.pth")
|
||||||
@@ -810,19 +768,8 @@ def _do_ensure(
|
|||||||
|
|
||||||
|
|
||||||
def _parse_groups(file: str) -> Dict[str, Dict[str, Any]]:
|
def _parse_groups(file: str) -> Dict[str, Dict[str, Any]]:
|
||||||
if not HAVE_TOMLLIB:
|
with open(file, "rb") as depfile:
|
||||||
if sys.version_info < (3, 11):
|
return tomllib.load(depfile)
|
||||||
raise Ouch("found no usable tomli, please install it")
|
|
||||||
|
|
||||||
raise Ouch(
|
|
||||||
"Python >=3.11 does not have tomllib... what have you done!?"
|
|
||||||
)
|
|
||||||
|
|
||||||
# Use loads() to support both tomli v1.2.x (Ubuntu 22.04,
|
|
||||||
# Debian bullseye-backports) and v2.0.x
|
|
||||||
with open(file, "r", encoding="ascii") as depfile:
|
|
||||||
contents = depfile.read()
|
|
||||||
return tomllib.loads(contents) # type: ignore
|
|
||||||
|
|
||||||
|
|
||||||
def ensure_group(
|
def ensure_group(
|
||||||
|
|||||||
+7
-26
@@ -8,22 +8,19 @@ download_url = https://www.qemu.org/download/
|
|||||||
description = QEMU Python Build, Debug and SDK tooling.
|
description = QEMU Python Build, Debug and SDK tooling.
|
||||||
long_description = file:PACKAGE.rst
|
long_description = file:PACKAGE.rst
|
||||||
long_description_content_type = text/x-rst
|
long_description_content_type = text/x-rst
|
||||||
|
license = GPL-2.0-or-later
|
||||||
classifiers =
|
classifiers =
|
||||||
Development Status :: 3 - Alpha
|
Development Status :: 3 - Alpha
|
||||||
License :: OSI Approved :: GNU General Public License v2 (GPLv2)
|
|
||||||
Natural Language :: English
|
Natural Language :: English
|
||||||
Operating System :: OS Independent
|
Operating System :: OS Independent
|
||||||
Programming Language :: Python :: 3 :: Only
|
Programming Language :: Python :: 3 :: Only
|
||||||
Programming Language :: Python :: 3.9
|
|
||||||
Programming Language :: Python :: 3.10
|
|
||||||
Programming Language :: Python :: 3.11
|
|
||||||
Programming Language :: Python :: 3.12
|
Programming Language :: Python :: 3.12
|
||||||
Programming Language :: Python :: 3.13
|
Programming Language :: Python :: 3.13
|
||||||
Programming Language :: Python :: 3.14
|
Programming Language :: Python :: 3.14
|
||||||
Typing :: Typed
|
Typing :: Typed
|
||||||
|
|
||||||
[options]
|
[options]
|
||||||
python_requires = >= 3.9
|
python_requires = >= 3.12
|
||||||
packages =
|
packages =
|
||||||
qemu.machine
|
qemu.machine
|
||||||
qemu.utils
|
qemu.utils
|
||||||
@@ -39,14 +36,12 @@ devel =
|
|||||||
distlib >= 0.3.6
|
distlib >= 0.3.6
|
||||||
flake8 >= 5.0.4
|
flake8 >= 5.0.4
|
||||||
fusepy >= 2.0.4
|
fusepy >= 2.0.4
|
||||||
isort >= 5.6.0
|
isort >= 5.11.3
|
||||||
# Max ver is temporary until we drop 3.9
|
mypy >= 1.4.0
|
||||||
mypy >= 1.4.0, <2.0.0
|
|
||||||
pylint >= 2.17.3
|
pylint >= 2.17.3
|
||||||
pylint != 3.2.4; python_version<"3.9"
|
pytest >= 6.2.4
|
||||||
pytest >= 6.0.2
|
|
||||||
tox >= 3.18.0
|
tox >= 3.18.0
|
||||||
sphinx >= 3.4.3
|
sphinx >= 7.2.6
|
||||||
|
|
||||||
# Provides qom-fuse functionality
|
# Provides qom-fuse functionality
|
||||||
fuse =
|
fuse =
|
||||||
@@ -69,9 +64,7 @@ exclude = __pycache__,
|
|||||||
|
|
||||||
[mypy]
|
[mypy]
|
||||||
strict = True
|
strict = True
|
||||||
python_version = 3.9
|
|
||||||
namespace_packages = True
|
namespace_packages = True
|
||||||
warn_unused_ignores = False
|
|
||||||
|
|
||||||
[mypy-qemu.utils.qom_fuse]
|
[mypy-qemu.utils.qom_fuse]
|
||||||
# fusepy has no type stubs:
|
# fusepy has no type stubs:
|
||||||
@@ -82,12 +75,6 @@ allow_subclassing_any = True
|
|||||||
[mypy-fuse]
|
[mypy-fuse]
|
||||||
ignore_missing_imports = True
|
ignore_missing_imports = True
|
||||||
|
|
||||||
[mypy-tomli]
|
|
||||||
ignore_missing_imports = True
|
|
||||||
|
|
||||||
[mypy-tomllib]
|
|
||||||
ignore_missing_imports = True
|
|
||||||
|
|
||||||
[mypy-distlib]
|
[mypy-distlib]
|
||||||
ignore_missing_imports = True
|
ignore_missing_imports = True
|
||||||
|
|
||||||
@@ -97,12 +84,6 @@ ignore_missing_imports = True
|
|||||||
[mypy-distlib.version]
|
[mypy-distlib.version]
|
||||||
ignore_missing_imports = True
|
ignore_missing_imports = True
|
||||||
|
|
||||||
[mypy-pip._vendor.distlib]
|
|
||||||
ignore_missing_imports = True
|
|
||||||
|
|
||||||
[mypy-pip._vendor.distlib.scripts]
|
|
||||||
ignore_missing_imports = True
|
|
||||||
|
|
||||||
[mypy-pip._vendor.distlib.version]
|
[mypy-pip._vendor.distlib.version]
|
||||||
ignore_missing_imports = True
|
ignore_missing_imports = True
|
||||||
|
|
||||||
@@ -164,7 +145,7 @@ multi_line_output=3
|
|||||||
# of python available on your system to run this test.
|
# of python available on your system to run this test.
|
||||||
|
|
||||||
[tox:tox]
|
[tox:tox]
|
||||||
envlist = py39, py310, py311, py312, py313, py314
|
envlist = py312, py313, py314
|
||||||
skip_missing_interpreters = true
|
skip_missing_interpreters = true
|
||||||
|
|
||||||
[testenv]
|
[testenv]
|
||||||
|
|||||||
@@ -83,23 +83,13 @@ class TestLinters:
|
|||||||
cwd="../tests/qemu-iotests/",
|
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):
|
def test_pylint_pkg(self):
|
||||||
os.environ["SETUPTOOLS_USE_DISTUTILS"] = "stdlib"
|
|
||||||
check_call([sys.executable, "-m", "pylint", "qemu/"])
|
check_call([sys.executable, "-m", "pylint", "qemu/"])
|
||||||
|
|
||||||
def test_pylint_scripts(self):
|
def test_pylint_scripts(self):
|
||||||
os.environ["SETUPTOOLS_USE_DISTUTILS"] = "stdlib"
|
|
||||||
check_call([sys.executable, "-m", "pylint", "scripts/"])
|
check_call([sys.executable, "-m", "pylint", "scripts/"])
|
||||||
|
|
||||||
def test_pylint_qapi(self):
|
def test_pylint_qapi(self):
|
||||||
os.environ["SETUPTOOLS_USE_DISTUTILS"] = "stdlib"
|
|
||||||
check_call(
|
check_call(
|
||||||
[
|
[
|
||||||
sys.executable,
|
sys.executable,
|
||||||
@@ -113,7 +103,6 @@ class TestLinters:
|
|||||||
)
|
)
|
||||||
|
|
||||||
def test_pylint_iotests(self):
|
def test_pylint_iotests(self):
|
||||||
os.environ["SETUPTOOLS_USE_DISTUTILS"] = "stdlib"
|
|
||||||
check_call(
|
check_call(
|
||||||
[sys.executable, "-m", "linters", "--pylint"],
|
[sys.executable, "-m", "linters", "--pylint"],
|
||||||
cwd="../tests/qemu-iotests/",
|
cwd="../tests/qemu-iotests/",
|
||||||
|
|||||||
+33
-33
@@ -1,5 +1,5 @@
|
|||||||
# This file lists the ***oldest possible dependencies*** needed to run
|
# This file lists the ***oldest possible dependencies*** needed to run
|
||||||
# "make check" successfully under ***Python 3.9***. It is used primarily
|
# "make check" successfully under ***Python 3.12***. It is used primarily
|
||||||
# by GitLab CI to ensure that our stated minimum versions in setup.cfg
|
# by GitLab CI to ensure that our stated minimum versions in setup.cfg
|
||||||
# are truthful and regularly validated.
|
# are truthful and regularly validated.
|
||||||
#
|
#
|
||||||
@@ -11,18 +11,11 @@
|
|||||||
# When adding new dependencies, pin the very oldest non-yanked version
|
# When adding new dependencies, pin the very oldest non-yanked version
|
||||||
# on PyPI that allows the test suite to pass.
|
# on PyPI that allows the test suite to pass.
|
||||||
|
|
||||||
# For some reason, the presence of packaging==14.0 below requires us to
|
|
||||||
# also pin setuptools to version 70 or below. Otherwise, the
|
|
||||||
# installation of the QEMU package itself fails, failing to find
|
|
||||||
# setuptools.
|
|
||||||
setuptools<=70
|
|
||||||
wheel==0.34.2
|
|
||||||
|
|
||||||
# Dependencies for qapidoc/qapi_domain et al
|
# Dependencies for qapidoc/qapi_domain et al
|
||||||
sphinx==3.4.3
|
sphinx==7.2.6
|
||||||
|
|
||||||
# Dependencies for qemu.machine
|
# Dependencies for qemu.machine
|
||||||
qemu.qmp==0.0.5
|
qemu.qmp==0.0.6
|
||||||
|
|
||||||
# Dependencies for mkvenv
|
# Dependencies for mkvenv
|
||||||
distlib==0.3.6
|
distlib==0.3.6
|
||||||
@@ -31,47 +24,54 @@ distlib==0.3.6
|
|||||||
fusepy==2.0.4
|
fusepy==2.0.4
|
||||||
|
|
||||||
# Test-runners, utilities, etc.
|
# Test-runners, utilities, etc.
|
||||||
pytest==6.0.2
|
pytest==6.2.4
|
||||||
|
|
||||||
# Linters
|
# Linters
|
||||||
flake8==5.0.4
|
flake8==6.1.0
|
||||||
isort==5.6.0
|
isort==5.11.3
|
||||||
mypy==1.4.0
|
mypy==1.4.0
|
||||||
pylint==2.17.3
|
pylint==3.0.0
|
||||||
|
|
||||||
# Transitive flake8 dependencies
|
# Transitive flake8 dependencies
|
||||||
mccabe==0.7.0
|
mccabe==0.7.0
|
||||||
pycodestyle==2.9.1
|
pycodestyle==2.11.0
|
||||||
pyflakes==2.5.0
|
pyflakes==3.1.0
|
||||||
|
|
||||||
# Transitive mypy dependencies
|
# Transitive mypy dependencies
|
||||||
mypy-extensions==1.0.0
|
mypy-extensions==1.0.0
|
||||||
tomli==1.1.0
|
|
||||||
typing-extensions==4.7.1
|
typing-extensions==4.7.1
|
||||||
|
|
||||||
# Transitive pylint dependencies
|
# Transitive pylint dependencies
|
||||||
astroid==2.15.4
|
astroid==3.0.0
|
||||||
dill==0.2
|
dill==0.3.7
|
||||||
lazy-object-proxy==1.4.0
|
|
||||||
platformdirs==2.2.0
|
platformdirs==2.2.0
|
||||||
toml==0.10.0
|
|
||||||
tomlkit==0.10.1
|
tomlkit==0.10.1
|
||||||
wrapt==1.14.0
|
|
||||||
|
|
||||||
# Transitive sphinx dependencies
|
# Transitive sphinx dependencies
|
||||||
Jinja2==2.7
|
|
||||||
MarkupSafe==1.1.0
|
|
||||||
alabaster==0.7.1
|
alabaster==0.7.1
|
||||||
babel==1.3
|
babel==2.9
|
||||||
docutils==0.12
|
certifi==2023.5.7
|
||||||
imagesize==0.5.0
|
charset-normalizer==2.0.0
|
||||||
packaging==14.0
|
docutils==0.18.1
|
||||||
pytz==2011b0
|
idna==2.5
|
||||||
requests==2.5.0
|
imagesize==1.3
|
||||||
snowballstemmer==1.1
|
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-applehelp==1.0.0
|
||||||
sphinxcontrib-devhelp==1.0.0
|
sphinxcontrib-devhelp==1.0.0
|
||||||
sphinxcontrib-htmlhelp==1.0.0
|
sphinxcontrib-htmlhelp==2.0.0
|
||||||
sphinxcontrib-jsmath==1.0.0
|
sphinxcontrib-jsmath==1.0.0
|
||||||
sphinxcontrib-qthelp==1.0.0
|
sphinxcontrib-qthelp==1.0.0
|
||||||
sphinxcontrib-serializinghtml==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
|
||||||
+5
-8
@@ -28,8 +28,8 @@ meson = { accepted = ">=1.12.0", installed = "1.12.0", canary = "meson" }
|
|||||||
|
|
||||||
[docs]
|
[docs]
|
||||||
# Please keep the installed versions in sync with docs/requirements.txt
|
# Please keep the installed versions in sync with docs/requirements.txt
|
||||||
sphinx = { accepted = ">=3.4.3", installed = "6.2.1", canary = "sphinx-build" }
|
sphinx = { accepted = ">=7.2.6", installed = "7.2.6", canary = "sphinx-build" }
|
||||||
sphinx_rtd_theme = { accepted = ">=0.5", installed = "1.2.2" }
|
sphinx_rtd_theme = { accepted = ">=1.2.2", installed = "1.2.2" }
|
||||||
|
|
||||||
# This test group is for dependencies required to run various tooling
|
# This test group is for dependencies required to run various tooling
|
||||||
# and tests that should always be installed at configure time. It should
|
# and tests that should always be installed at configure time. It should
|
||||||
@@ -38,14 +38,11 @@ sphinx_rtd_theme = { accepted = ">=0.5", installed = "1.2.2" }
|
|||||||
[tooling]
|
[tooling]
|
||||||
"qemu.qmp" = { accepted = ">=0.0.5", installed = "0.0.6" }
|
"qemu.qmp" = { accepted = ">=0.0.5", installed = "0.0.6" }
|
||||||
"qemu" = { path = "python/" }
|
"qemu" = { path = "python/" }
|
||||||
# NB: The following dependencies should be a little bit more modern than
|
"setuptools" = { accepted = ">=63.1.0" }
|
||||||
# the versions listed here, but we are still using Debian 11 for several
|
"wheel" = { accepted = ">=0.41.2" }
|
||||||
# GitLab CI tests, so we are further restricted.
|
|
||||||
"setuptools" = { accepted = ">=44.1.1" }
|
|
||||||
"wheel" = { accepted = ">=0.34.2" }
|
|
||||||
# pip should be guaranteed by mkvenv, this is merely a sanity check for
|
# pip should be guaranteed by mkvenv, this is merely a sanity check for
|
||||||
# which version we are counting on being present.
|
# which version we are counting on being present.
|
||||||
"pip" = { accepted = ">=20.3.4" }
|
"pip" = { accepted = ">=23.2.1" }
|
||||||
|
|
||||||
# This test group is for functional tests, and can include dependencies
|
# This test group is for functional tests, and can include dependencies
|
||||||
# fetched from PyPI.
|
# fetched from PyPI.
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ packages:
|
|||||||
- libsdl2-dev
|
- libsdl2-dev
|
||||||
- libsdl2-image-dev
|
- libsdl2-image-dev
|
||||||
- libseccomp-dev
|
- libseccomp-dev
|
||||||
- libselinux1-dev
|
- libselinux-dev
|
||||||
- libslirp-dev
|
- libslirp-dev
|
||||||
- libsnappy-dev
|
- libsnappy-dev
|
||||||
- libsndio-dev
|
- libsndio-dev
|
||||||
@@ -105,6 +105,8 @@ packages:
|
|||||||
- openssh-client
|
- openssh-client
|
||||||
- pkgconf
|
- pkgconf
|
||||||
- python3
|
- python3
|
||||||
|
- python3-numpy
|
||||||
|
- python3-opencv
|
||||||
- python3-pip
|
- python3-pip
|
||||||
- python3-setuptools
|
- python3-setuptools
|
||||||
- python3-sphinx
|
- python3-sphinx
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ packages:
|
|||||||
- libsdl2-dev
|
- libsdl2-dev
|
||||||
- libsdl2-image-dev
|
- libsdl2-image-dev
|
||||||
- libseccomp-dev
|
- libseccomp-dev
|
||||||
- libselinux1-dev
|
- libselinux-dev
|
||||||
- libslirp-dev
|
- libslirp-dev
|
||||||
- libsnappy-dev
|
- libsnappy-dev
|
||||||
- libsndio-dev
|
- libsndio-dev
|
||||||
@@ -106,6 +106,8 @@ packages:
|
|||||||
- openssh-client
|
- openssh-client
|
||||||
- pkgconf
|
- pkgconf
|
||||||
- python3
|
- python3
|
||||||
|
- python3-numpy
|
||||||
|
- python3-opencv
|
||||||
- python3-pip
|
- python3-pip
|
||||||
- python3-setuptools
|
- python3-setuptools
|
||||||
- python3-sphinx
|
- python3-sphinx
|
||||||
|
|||||||
@@ -75,7 +75,7 @@ packages:
|
|||||||
- libsdl2-dev
|
- libsdl2-dev
|
||||||
- libsdl2-image-dev
|
- libsdl2-image-dev
|
||||||
- libseccomp-dev
|
- libseccomp-dev
|
||||||
- libselinux1-dev
|
- libselinux-dev
|
||||||
- libslirp-dev
|
- libslirp-dev
|
||||||
- libsnappy-dev
|
- libsnappy-dev
|
||||||
- libsndio-dev
|
- libsndio-dev
|
||||||
@@ -104,6 +104,8 @@ packages:
|
|||||||
- openssh-client
|
- openssh-client
|
||||||
- pkgconf
|
- pkgconf
|
||||||
- python3
|
- python3
|
||||||
|
- python3-numpy
|
||||||
|
- python3-opencv
|
||||||
- python3-pip
|
- python3-pip
|
||||||
- python3-setuptools
|
- python3-setuptools
|
||||||
- python3-sphinx
|
- python3-sphinx
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ from .source import QAPISourceInfo
|
|||||||
|
|
||||||
# variants must be emitted before their container; track what has already
|
# variants must be emitted before their container; track what has already
|
||||||
# been output
|
# been output
|
||||||
objects_seen = set()
|
objects_seen: set[str] = set()
|
||||||
|
|
||||||
|
|
||||||
def gen_enum_lookup(name: str,
|
def gen_enum_lookup(name: str,
|
||||||
|
|||||||
@@ -83,6 +83,7 @@ RUN apk update && \
|
|||||||
pixman-dev \
|
pixman-dev \
|
||||||
pkgconf \
|
pkgconf \
|
||||||
pulseaudio-dev \
|
pulseaudio-dev \
|
||||||
|
py3-numpy \
|
||||||
py3-pip \
|
py3-pip \
|
||||||
py3-setuptools \
|
py3-setuptools \
|
||||||
py3-sphinx \
|
py3-sphinx \
|
||||||
|
|||||||
@@ -96,10 +96,10 @@ RUN dnf --quiet distro-sync -y && \
|
|||||||
pkgconfig \
|
pkgconfig \
|
||||||
pulseaudio-libs-devel \
|
pulseaudio-libs-devel \
|
||||||
python3-tomli \
|
python3-tomli \
|
||||||
python3.11 \
|
python3.12 \
|
||||||
python3.11-pip \
|
python3.12-pip \
|
||||||
python3.11-setuptools \
|
python3.12-setuptools \
|
||||||
python3.11-wheel \
|
python3.12-wheel \
|
||||||
rdma-core-devel \
|
rdma-core-devel \
|
||||||
rust \
|
rust \
|
||||||
rust-std-static \
|
rust-std-static \
|
||||||
@@ -129,7 +129,9 @@ RUN dnf --quiet distro-sync -y && \
|
|||||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/clang && \
|
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/clang && \
|
||||||
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/gcc
|
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/gcc
|
||||||
|
|
||||||
RUN /usr/bin/pip3.11 install \
|
RUN /usr/bin/pip3.12 install \
|
||||||
|
numpy \
|
||||||
|
opencv-python \
|
||||||
sphinx \
|
sphinx \
|
||||||
sphinx-rtd-theme
|
sphinx-rtd-theme
|
||||||
|
|
||||||
@@ -137,7 +139,7 @@ ENV CCACHE_WRAPPERSDIR="/usr/libexec/ccache-wrappers"
|
|||||||
ENV LANG="en_US.UTF-8"
|
ENV LANG="en_US.UTF-8"
|
||||||
ENV MAKE="/usr/bin/make"
|
ENV MAKE="/usr/bin/make"
|
||||||
ENV NINJA="/usr/bin/ninja"
|
ENV NINJA="/usr/bin/ninja"
|
||||||
ENV PYTHON="/usr/bin/python3.11"
|
ENV PYTHON="/usr/bin/python3.12"
|
||||||
# As a final step configure the user (if env is defined)
|
# As a final step configure the user (if env is defined)
|
||||||
ARG USER
|
ARG USER
|
||||||
ARG UID
|
ARG UID
|
||||||
|
|||||||
@@ -41,6 +41,8 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
|||||||
openssh-client \
|
openssh-client \
|
||||||
pkgconf \
|
pkgconf \
|
||||||
python3 \
|
python3 \
|
||||||
|
python3-numpy \
|
||||||
|
python3-opencv \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
python3-setuptools \
|
python3-setuptools \
|
||||||
python3-sphinx \
|
python3-sphinx \
|
||||||
@@ -130,7 +132,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
|||||||
libsdl2-dev:amd64 \
|
libsdl2-dev:amd64 \
|
||||||
libsdl2-image-dev:amd64 \
|
libsdl2-image-dev:amd64 \
|
||||||
libseccomp-dev:amd64 \
|
libseccomp-dev:amd64 \
|
||||||
libselinux1-dev:amd64 \
|
libselinux-dev:amd64 \
|
||||||
libslirp-dev:amd64 \
|
libslirp-dev:amd64 \
|
||||||
libsnappy-dev:amd64 \
|
libsnappy-dev:amd64 \
|
||||||
libsndio-dev:amd64 \
|
libsndio-dev:amd64 \
|
||||||
|
|||||||
@@ -41,6 +41,8 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
|||||||
openssh-client \
|
openssh-client \
|
||||||
pkgconf \
|
pkgconf \
|
||||||
python3 \
|
python3 \
|
||||||
|
python3-numpy \
|
||||||
|
python3-opencv \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
python3-setuptools \
|
python3-setuptools \
|
||||||
python3-sphinx \
|
python3-sphinx \
|
||||||
@@ -129,7 +131,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
|||||||
libsdl2-dev:arm64 \
|
libsdl2-dev:arm64 \
|
||||||
libsdl2-image-dev:arm64 \
|
libsdl2-image-dev:arm64 \
|
||||||
libseccomp-dev:arm64 \
|
libseccomp-dev:arm64 \
|
||||||
libselinux1-dev:arm64 \
|
libselinux-dev:arm64 \
|
||||||
libslirp-dev:arm64 \
|
libslirp-dev:arm64 \
|
||||||
libsnappy-dev:arm64 \
|
libsnappy-dev:arm64 \
|
||||||
libsndio-dev:arm64 \
|
libsndio-dev:arm64 \
|
||||||
|
|||||||
@@ -41,6 +41,8 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
|||||||
openssh-client \
|
openssh-client \
|
||||||
pkgconf \
|
pkgconf \
|
||||||
python3 \
|
python3 \
|
||||||
|
python3-numpy \
|
||||||
|
python3-opencv \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
python3-setuptools \
|
python3-setuptools \
|
||||||
python3-sphinx \
|
python3-sphinx \
|
||||||
@@ -128,7 +130,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
|||||||
libsdl2-dev:armhf \
|
libsdl2-dev:armhf \
|
||||||
libsdl2-image-dev:armhf \
|
libsdl2-image-dev:armhf \
|
||||||
libseccomp-dev:armhf \
|
libseccomp-dev:armhf \
|
||||||
libselinux1-dev:armhf \
|
libselinux-dev:armhf \
|
||||||
libslirp-dev:armhf \
|
libslirp-dev:armhf \
|
||||||
libsnappy-dev:armhf \
|
libsnappy-dev:armhf \
|
||||||
libsndio-dev:armhf \
|
libsndio-dev:armhf \
|
||||||
|
|||||||
@@ -41,6 +41,8 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
|||||||
openssh-client \
|
openssh-client \
|
||||||
pkgconf \
|
pkgconf \
|
||||||
python3 \
|
python3 \
|
||||||
|
python3-numpy \
|
||||||
|
python3-opencv \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
python3-setuptools \
|
python3-setuptools \
|
||||||
python3-sphinx \
|
python3-sphinx \
|
||||||
@@ -128,7 +130,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
|||||||
libsdl2-dev:i386 \
|
libsdl2-dev:i386 \
|
||||||
libsdl2-image-dev:i386 \
|
libsdl2-image-dev:i386 \
|
||||||
libseccomp-dev:i386 \
|
libseccomp-dev:i386 \
|
||||||
libselinux1-dev:i386 \
|
libselinux-dev:i386 \
|
||||||
libslirp-dev:i386 \
|
libslirp-dev:i386 \
|
||||||
libsnappy-dev:i386 \
|
libsnappy-dev:i386 \
|
||||||
libsndio-dev:i386 \
|
libsndio-dev:i386 \
|
||||||
|
|||||||
@@ -41,6 +41,8 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
|||||||
openssh-client \
|
openssh-client \
|
||||||
pkgconf \
|
pkgconf \
|
||||||
python3 \
|
python3 \
|
||||||
|
python3-numpy \
|
||||||
|
python3-opencv \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
python3-setuptools \
|
python3-setuptools \
|
||||||
python3-sphinx \
|
python3-sphinx \
|
||||||
@@ -129,7 +131,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
|||||||
libsdl2-dev:ppc64el \
|
libsdl2-dev:ppc64el \
|
||||||
libsdl2-image-dev:ppc64el \
|
libsdl2-image-dev:ppc64el \
|
||||||
libseccomp-dev:ppc64el \
|
libseccomp-dev:ppc64el \
|
||||||
libselinux1-dev:ppc64el \
|
libselinux-dev:ppc64el \
|
||||||
libslirp-dev:ppc64el \
|
libslirp-dev:ppc64el \
|
||||||
libsnappy-dev:ppc64el \
|
libsnappy-dev:ppc64el \
|
||||||
libsndio-dev:ppc64el \
|
libsndio-dev:ppc64el \
|
||||||
|
|||||||
@@ -41,6 +41,8 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
|||||||
openssh-client \
|
openssh-client \
|
||||||
pkgconf \
|
pkgconf \
|
||||||
python3 \
|
python3 \
|
||||||
|
python3-numpy \
|
||||||
|
python3-opencv \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
python3-setuptools \
|
python3-setuptools \
|
||||||
python3-sphinx \
|
python3-sphinx \
|
||||||
@@ -129,7 +131,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
|||||||
libsdl2-dev:riscv64 \
|
libsdl2-dev:riscv64 \
|
||||||
libsdl2-image-dev:riscv64 \
|
libsdl2-image-dev:riscv64 \
|
||||||
libseccomp-dev:riscv64 \
|
libseccomp-dev:riscv64 \
|
||||||
libselinux1-dev:riscv64 \
|
libselinux-dev:riscv64 \
|
||||||
libslirp-dev:riscv64 \
|
libslirp-dev:riscv64 \
|
||||||
libsnappy-dev:riscv64 \
|
libsnappy-dev:riscv64 \
|
||||||
libsndio-dev:riscv64 \
|
libsndio-dev:riscv64 \
|
||||||
|
|||||||
@@ -41,6 +41,8 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
|||||||
openssh-client \
|
openssh-client \
|
||||||
pkgconf \
|
pkgconf \
|
||||||
python3 \
|
python3 \
|
||||||
|
python3-numpy \
|
||||||
|
python3-opencv \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
python3-setuptools \
|
python3-setuptools \
|
||||||
python3-sphinx \
|
python3-sphinx \
|
||||||
@@ -129,7 +131,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
|||||||
libsdl2-dev:s390x \
|
libsdl2-dev:s390x \
|
||||||
libsdl2-image-dev:s390x \
|
libsdl2-image-dev:s390x \
|
||||||
libseccomp-dev:s390x \
|
libseccomp-dev:s390x \
|
||||||
libselinux1-dev:s390x \
|
libselinux-dev:s390x \
|
||||||
libslirp-dev:s390x \
|
libslirp-dev:s390x \
|
||||||
libsnappy-dev:s390x \
|
libsnappy-dev:s390x \
|
||||||
libsndio-dev:s390x \
|
libsndio-dev:s390x \
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
|||||||
libsdl2-dev \
|
libsdl2-dev \
|
||||||
libsdl2-image-dev \
|
libsdl2-image-dev \
|
||||||
libseccomp-dev \
|
libseccomp-dev \
|
||||||
libselinux1-dev \
|
libselinux-dev \
|
||||||
libslirp-dev \
|
libslirp-dev \
|
||||||
libsnappy-dev \
|
libsnappy-dev \
|
||||||
libsndio-dev \
|
libsndio-dev \
|
||||||
@@ -113,6 +113,8 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
|||||||
openssh-client \
|
openssh-client \
|
||||||
pkgconf \
|
pkgconf \
|
||||||
python3 \
|
python3 \
|
||||||
|
python3-numpy \
|
||||||
|
python3-opencv \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
python3-setuptools \
|
python3-setuptools \
|
||||||
python3-sphinx \
|
python3-sphinx \
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
# syntax = docker/dockerfile:1.5
|
# syntax = docker/dockerfile:1.5
|
||||||
|
|
||||||
ARG EMSDK_VERSION_QEMU=4.0.10
|
ARG EMSDK_VERSION_QEMU=5.0.2
|
||||||
ARG ZLIB_VERSION=1.3.2
|
ARG ZLIB_VERSION=1.3.2
|
||||||
ARG GLIB_MINOR_VERSION=2.84
|
ARG GLIB_MINOR_VERSION=2.84
|
||||||
ARG GLIB_VERSION=${GLIB_MINOR_VERSION}.0
|
ARG GLIB_VERSION=${GLIB_MINOR_VERSION}.0
|
||||||
@@ -27,7 +27,7 @@ RUN apt-get update && apt-get install -y \
|
|||||||
pkgconf \
|
pkgconf \
|
||||||
ninja-build \
|
ninja-build \
|
||||||
python3-pip
|
python3-pip
|
||||||
RUN pip3 install meson==${MESON_VERSION} tomli
|
RUN pip3 install --break-system-packages meson==${MESON_VERSION} tomli
|
||||||
RUN mkdir /build
|
RUN mkdir /build
|
||||||
WORKDIR /build
|
WORKDIR /build
|
||||||
RUN mkdir -p $TARGET
|
RUN mkdir -p $TARGET
|
||||||
|
|||||||
@@ -104,6 +104,8 @@ exec "$@"\n' > /usr/bin/nosync && \
|
|||||||
pkgconfig \
|
pkgconfig \
|
||||||
pulseaudio-libs-devel \
|
pulseaudio-libs-devel \
|
||||||
python3 \
|
python3 \
|
||||||
|
python3-numpy \
|
||||||
|
python3-opencv \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
python3-setuptools \
|
python3-setuptools \
|
||||||
python3-sphinx \
|
python3-sphinx \
|
||||||
|
|||||||
@@ -44,6 +44,8 @@ exec "$@"\n' > /usr/bin/nosync && \
|
|||||||
ninja-build \
|
ninja-build \
|
||||||
openssh-clients \
|
openssh-clients \
|
||||||
python3 \
|
python3 \
|
||||||
|
python3-numpy \
|
||||||
|
python3-opencv \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
python3-setuptools \
|
python3-setuptools \
|
||||||
python3-sphinx \
|
python3-sphinx \
|
||||||
|
|||||||
@@ -104,6 +104,8 @@ exec "$@"\n' > /usr/bin/nosync && \
|
|||||||
pkgconfig \
|
pkgconfig \
|
||||||
pulseaudio-libs-devel \
|
pulseaudio-libs-devel \
|
||||||
python3 \
|
python3 \
|
||||||
|
python3-numpy \
|
||||||
|
python3-opencv \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
python3-setuptools \
|
python3-setuptools \
|
||||||
python3-sphinx \
|
python3-sphinx \
|
||||||
|
|||||||
@@ -7,7 +7,7 @@
|
|||||||
FROM registry.opensuse.org/opensuse/leap:16.0
|
FROM registry.opensuse.org/opensuse/leap:16.0
|
||||||
|
|
||||||
RUN zypper update -y && \
|
RUN zypper update -y && \
|
||||||
zypper install -y \
|
zypper install -y --allow-downgrade \
|
||||||
Mesa-devel \
|
Mesa-devel \
|
||||||
alsa-lib-devel \
|
alsa-lib-devel \
|
||||||
bash \
|
bash \
|
||||||
@@ -95,6 +95,8 @@ RUN zypper update -y && \
|
|||||||
pkgconfig \
|
pkgconfig \
|
||||||
python3-Sphinx \
|
python3-Sphinx \
|
||||||
python3-base \
|
python3-base \
|
||||||
|
python3-numpy \
|
||||||
|
python3-opencv \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
python3-setuptools \
|
python3-setuptools \
|
||||||
python3-sphinx_rtd_theme \
|
python3-sphinx_rtd_theme \
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
|||||||
libsdl2-dev \
|
libsdl2-dev \
|
||||||
libsdl2-image-dev \
|
libsdl2-image-dev \
|
||||||
libseccomp-dev \
|
libseccomp-dev \
|
||||||
libselinux1-dev \
|
libselinux-dev \
|
||||||
libslirp-dev \
|
libslirp-dev \
|
||||||
libsnappy-dev \
|
libsnappy-dev \
|
||||||
libsndio-dev \
|
libsndio-dev \
|
||||||
@@ -113,6 +113,8 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
|
|||||||
openssh-client \
|
openssh-client \
|
||||||
pkgconf \
|
pkgconf \
|
||||||
python3 \
|
python3 \
|
||||||
|
python3-numpy \
|
||||||
|
python3-opencv \
|
||||||
python3-pip \
|
python3-pip \
|
||||||
python3-setuptools \
|
python3-setuptools \
|
||||||
python3-sphinx \
|
python3-sphinx \
|
||||||
|
|||||||
+1
-1
Submodule tests/lcitool/libvirt-ci updated: 5176e136ab...76b5dd5b5c.
@@ -4,16 +4,13 @@ mappings:
|
|||||||
Ubuntu2204:
|
Ubuntu2204:
|
||||||
|
|
||||||
python3:
|
python3:
|
||||||
CentOSStream9: python3.11
|
CentOSStream9: python3.12
|
||||||
|
|
||||||
python3-devel:
|
|
||||||
CentOSStream9: python3.11-devel
|
|
||||||
|
|
||||||
python3-pip:
|
python3-pip:
|
||||||
CentOSStream9: python3.11-pip
|
CentOSStream9: python3.12-pip
|
||||||
|
|
||||||
python3-setuptools:
|
python3-setuptools:
|
||||||
CentOSStream9: python3.11-setuptools
|
CentOSStream9: python3.12-setuptools
|
||||||
|
|
||||||
python3-sphinx:
|
python3-sphinx:
|
||||||
CentOSStream9:
|
CentOSStream9:
|
||||||
@@ -21,11 +18,17 @@ mappings:
|
|||||||
python3-sphinx-rtd-theme:
|
python3-sphinx-rtd-theme:
|
||||||
CentOSStream9:
|
CentOSStream9:
|
||||||
|
|
||||||
|
python3-opencv:
|
||||||
|
CentOSStream9:
|
||||||
|
|
||||||
python3-venv:
|
python3-venv:
|
||||||
CentOSStream9: python3.11
|
CentOSStream9: python3.12
|
||||||
|
|
||||||
python3-wheel:
|
python3-wheel:
|
||||||
CentOSStream9: python3.11-wheel
|
CentOSStream9: python3.12-wheel
|
||||||
|
|
||||||
|
python3-numpy:
|
||||||
|
CentOSStream9:
|
||||||
|
|
||||||
meson:
|
meson:
|
||||||
# Use Meson from PyPI wherever Rust is enabled
|
# Use Meson from PyPI wherever Rust is enabled
|
||||||
@@ -54,3 +57,9 @@ pypi_mappings:
|
|||||||
apk:
|
apk:
|
||||||
Fedora:
|
Fedora:
|
||||||
Debian12:
|
Debian12:
|
||||||
|
|
||||||
|
python3-numpy:
|
||||||
|
CentOSStream9: numpy
|
||||||
|
|
||||||
|
python3-opencv:
|
||||||
|
CentOSStream9: opencv-python
|
||||||
@@ -91,6 +91,8 @@ packages:
|
|||||||
- pkg-config
|
- pkg-config
|
||||||
- pulseaudio
|
- pulseaudio
|
||||||
- python3
|
- python3
|
||||||
|
- python3-numpy
|
||||||
|
- python3-opencv
|
||||||
- python3-pip
|
- python3-pip
|
||||||
- python3-setuptools
|
- python3-setuptools
|
||||||
- python3-sphinx
|
- python3-sphinx
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
paths:
|
paths:
|
||||||
pip3: /usr/bin/pip3.11
|
pip3: /usr/bin/pip3.12
|
||||||
python: /usr/bin/python3.11
|
python: /usr/bin/python3.12
|
||||||
@@ -5,7 +5,7 @@ ifeq ($(realpath $(SRC_PATH)),$(realpath .))
|
|||||||
VM_PYTHON = $(SRC_PATH)/vm-venv/bin/python3
|
VM_PYTHON = $(SRC_PATH)/vm-venv/bin/python3
|
||||||
VM_VENV = vm-venv
|
VM_VENV = vm-venv
|
||||||
else
|
else
|
||||||
VM_PYTHON = $(PYTHON)
|
VM_PYTHON = $(BUILD_DIR)/run $(PYTHON)
|
||||||
VM_VENV =
|
VM_VENV =
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|||||||
@@ -49,15 +49,17 @@
|
|||||||
"ncurses",
|
"ncurses",
|
||||||
"nettle",
|
"nettle",
|
||||||
"ninja",
|
"ninja",
|
||||||
|
"opencv",
|
||||||
"pixman",
|
"pixman",
|
||||||
"pkgconf",
|
"pkgconf",
|
||||||
"png",
|
"png",
|
||||||
"py311-pip",
|
"py312-numpy",
|
||||||
"py311-setuptools",
|
"py312-pip",
|
||||||
"py311-sphinx",
|
"py312-setuptools",
|
||||||
"py311-sphinx_rtd_theme",
|
"py312-sphinx",
|
||||||
"py311-tomli",
|
"py312-sphinx_rtd_theme",
|
||||||
"py311-wheel",
|
"py312-tomli",
|
||||||
|
"py312-wheel",
|
||||||
"python3",
|
"python3",
|
||||||
"rpm2cpio",
|
"rpm2cpio",
|
||||||
"rust",
|
"rust",
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ class NetBSDVM(basevm.BaseVM):
|
|||||||
"gmake",
|
"gmake",
|
||||||
"gsed",
|
"gsed",
|
||||||
"gettext-tools",
|
"gettext-tools",
|
||||||
|
"bison",
|
||||||
|
|
||||||
# libs: basic
|
# libs: basic
|
||||||
"dtc",
|
"dtc",
|
||||||
|
|||||||
Reference in new issue
Block a user