* separate accepted and auto-installed versions of Python dependencies

* bump tricore container to Debian 11
 * small configure cleanups
 -----BEGIN PGP SIGNATURE-----
 
 iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAmTsZ14UHHBib256aW5p
 QHJlZGhhdC5jb20ACgkQv/vSX3jHroMlVQf+Juomqo/luBwWwwguEZp32s+c+CYI
 HZJJJSIycq/VY2OsT9e+H1eMJYsCsdzJxn1NcnmEIUSMRkIuCxV5F62gaMl6BjgF
 tH8v4y1ZBDc0i0zw6qkuZM4sydNkK1XohGeOp8NkTE7F2fX0DT2AO17rSKIHh77R
 enNE5yq+s0YGHfYz7PbNvT1G+YXqt9SEEfCqIHkCQccjgFx9PEJu7PPuWdIYLG5s
 VVIyrbZzcX7OmQCCWdEZCe5t8swbOHtzE5D3JUVvfnUDj3BONXQybp/14rEikrjU
 fuy9sf3qW4XlwzPOUWFlPfxJIg8KWB1fL2wIppDn2gKrBB7fekwz5hlJRA==
 =lZmw
 -----END PGP SIGNATURE-----

Merge tag 'for-upstream' of https://gitlab.com/bonzini/qemu into staging

* separate accepted and auto-installed versions of Python dependencies
* bump tricore container to Debian 11
* small configure cleanups

# -----BEGIN PGP SIGNATURE-----
#
# iQFIBAABCAAyFiEE8TM4V0tmI4mGbHaCv/vSX3jHroMFAmTsZ14UHHBib256aW5p
# QHJlZGhhdC5jb20ACgkQv/vSX3jHroMlVQf+Juomqo/luBwWwwguEZp32s+c+CYI
# HZJJJSIycq/VY2OsT9e+H1eMJYsCsdzJxn1NcnmEIUSMRkIuCxV5F62gaMl6BjgF
# tH8v4y1ZBDc0i0zw6qkuZM4sydNkK1XohGeOp8NkTE7F2fX0DT2AO17rSKIHh77R
# enNE5yq+s0YGHfYz7PbNvT1G+YXqt9SEEfCqIHkCQccjgFx9PEJu7PPuWdIYLG5s
# VVIyrbZzcX7OmQCCWdEZCe5t8swbOHtzE5D3JUVvfnUDj3BONXQybp/14rEikrjU
# fuy9sf3qW4XlwzPOUWFlPfxJIg8KWB1fL2wIppDn2gKrBB7fekwz5hlJRA==
# =lZmw
# -----END PGP SIGNATURE-----
# gpg: Signature made Mon 28 Aug 2023 05:22:38 EDT
# gpg:                using RSA key F13338574B662389866C7682BFFBD25F78C7AE83
# gpg:                issuer "pbonzini@redhat.com"
# gpg: Good signature from "Paolo Bonzini <bonzini@gnu.org>" [full]
# gpg:                 aka "Paolo Bonzini <pbonzini@redhat.com>" [full]
# Primary key fingerprint: 46F5 9FBD 57D6 12E7 BFD4  E2F7 7E15 100C CD36 69B1
#      Subkey fingerprint: F133 3857 4B66 2389 866C  7682 BFFB D25F 78C7 AE83

* tag 'for-upstream' of https://gitlab.com/bonzini/qemu:
  configure: remove unnecessary mkdir -p
  configure: fix container_hosts misspellings and duplications
  target/i386: add support for VMX_SECONDARY_EXEC_ENABLE_USER_WAIT_PAUSE
  tests/docker: add python3-tomli dependency to containers
  Revert "tests: Use separate virtual environment for avocado"
  configure: switch to ensuregroup
  python: use vendored tomli
  configure: never use PyPI for Meson
  lcitool: bump libvirt-ci submodule and regenerate
  python: mkvenv: add ensuregroup command
  python: mkvenv: introduce TOML-like representation of dependencies
  python: mkvenv: tweak the matching of --diagnose to depspecs
  dockerfiles: bump tricore cross compiler container to Debian 11
  configure: fix and complete detection of tricore tools

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
Stefan Hajnoczi 2023-08-28 15:53:30 -04:00
commit eaf760ac0d
43 changed files with 377 additions and 112 deletions

View File

@ -103,7 +103,7 @@ crash-test-debian:
script: script:
- cd build - cd build
- make NINJA=":" check-venv - make NINJA=":" check-venv
- tests/venv/bin/python3 scripts/device-crash-test -q --tcg-only ./qemu-system-i386 - pyvenv/bin/python3 scripts/device-crash-test -q --tcg-only ./qemu-system-i386
build-system-fedora: build-system-fedora:
extends: extends:
@ -146,8 +146,8 @@ crash-test-fedora:
script: script:
- cd build - cd build
- make NINJA=":" check-venv - make NINJA=":" check-venv
- tests/venv/bin/python3 scripts/device-crash-test -q ./qemu-system-ppc - pyvenv/bin/python3 scripts/device-crash-test -q ./qemu-system-ppc
- tests/venv/bin/python3 scripts/device-crash-test -q ./qemu-system-riscv32 - pyvenv/bin/python3 scripts/device-crash-test -q ./qemu-system-riscv32
build-system-centos: build-system-centos:
extends: extends:

View File

@ -11,6 +11,6 @@ MAKE='/usr/local/bin/gmake'
NINJA='/usr/local/bin/ninja' NINJA='/usr/local/bin/ninja'
PACKAGING_COMMAND='pkg' PACKAGING_COMMAND='pkg'
PIP3='/usr/local/bin/pip-3.8' PIP3='/usr/local/bin/pip-3.8'
PKGS='alsa-lib bash bison bzip2 ca_root_nss capstone4 ccache cmocka ctags curl cyrus-sasl dbus diffutils dtc flex fusefs-libs3 gettext git glib gmake gnutls gsed gtk3 json-c libepoxy libffi libgcrypt libjpeg-turbo libnfs libslirp libspice-server libssh libtasn1 llvm lzo2 meson mtools ncurses nettle ninja opencv pixman pkgconf png py39-numpy py39-pillow py39-pip py39-sphinx py39-sphinx_rtd_theme py39-yaml python3 rpm2cpio sdl2 sdl2_image snappy sndio socat spice-protocol tesseract usbredir virglrenderer vte3 xorriso zstd' PKGS='alsa-lib bash bison bzip2 ca_root_nss capstone4 ccache cmocka ctags curl cyrus-sasl dbus diffutils dtc flex fusefs-libs3 gettext git glib gmake gnutls gsed gtk3 json-c libepoxy libffi libgcrypt libjpeg-turbo libnfs libslirp libspice-server libssh libtasn1 llvm lzo2 meson mtools ncurses nettle ninja opencv pixman pkgconf png py39-numpy py39-pillow py39-pip py39-sphinx py39-sphinx_rtd_theme py39-tomli py39-yaml python3 rpm2cpio sdl2 sdl2_image snappy sndio socat spice-protocol tesseract usbredir virglrenderer vte3 xorriso zstd'
PYPI_PKGS='' PYPI_PKGS=''
PYTHON='/usr/local/bin/python3' PYTHON='/usr/local/bin/python3'

View File

@ -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 bison bzip2 capstone ccache cmocka ctags curl dbus diffutils dtc flex gcovr gettext git glib gnu-sed gnutls gtk+3 jemalloc jpeg-turbo json-c libepoxy libffi libgcrypt libiscsi libnfs libpng libslirp libssh libtasn1 libusb llvm lzo make meson mtools ncurses nettle ninja pixman pkg-config python3 rpm2cpio sdl2 sdl2_image snappy socat sparse spice-protocol tesseract usbredir vde vte3 xorriso zlib zstd' PKGS='bash bc bison bzip2 capstone ccache cmocka ctags curl dbus diffutils dtc flex gcovr gettext git glib gnu-sed gnutls gtk+3 jemalloc jpeg-turbo json-c libepoxy libffi libgcrypt libiscsi libnfs libpng libslirp libssh libtasn1 libusb llvm lzo make meson mtools ncurses nettle ninja pixman pkg-config python3 rpm2cpio sdl2 sdl2_image snappy socat sparse spice-protocol tesseract usbredir vde vte3 xorriso zlib zstd'
PYPI_PKGS='PyYAML numpy pillow sphinx sphinx-rtd-theme' PYPI_PKGS='PyYAML numpy pillow sphinx sphinx-rtd-theme tomli'
PYTHON='/opt/homebrew/bin/python3' PYTHON='/opt/homebrew/bin/python3'

31
configure vendored
View File

@ -1018,19 +1018,14 @@ fi
python="$python -B" python="$python -B"
mkvenv="$python ${source_path}/python/scripts/mkvenv.py" mkvenv="$python ${source_path}/python/scripts/mkvenv.py"
mkvenv_flags="" # Finish preparing the virtual environment using vendored .whl files
if test "$download" = "enabled" ; then
mkvenv_flags="--online"
fi
if ! $mkvenv ensure \ if $python -c 'import sys; sys.exit(sys.version_info >= (3,11))'; then
$mkvenv_flags \ $mkvenv ensure --dir "${source_path}/python/wheels" \
--dir "${source_path}/python/wheels" \ 'tomli>=1.2.0' || exit 1
--diagnose "meson" \
"meson>=0.63.0" ;
then
exit 1
fi fi
$mkvenv ensuregroup --dir "${source_path}/python/wheels" \
${source_path}/pythondeps.toml meson || exit 1
# At this point, we expect Meson to be installed and available. # At this point, we expect Meson to be installed and available.
# We expect mkvenv or pip to have created pyvenv/bin/meson for us. # We expect mkvenv or pip to have created pyvenv/bin/meson for us.
@ -1047,10 +1042,9 @@ if test "$download" = "enabled" -a "$docs" = "enabled" ; then
fi fi
if test "$docs" != "disabled" ; then if test "$docs" != "disabled" ; then
if ! $mkvenv ensure \ if ! $mkvenv ensuregroup \
$mkvenv_flags \ $mkvenv_flags \
--diagnose "sphinx-build" \ ${source_path}/pythondeps.toml docs;
"sphinx>=1.6.0" "sphinx-rtd-theme>=0.5.0";
then then
if test "$docs" = "enabled" ; then if test "$docs" = "enabled" ; then
exit 1 exit 1
@ -1271,6 +1265,7 @@ fi
: ${cross_prefix_sh4="sh4-linux-gnu-"} : ${cross_prefix_sh4="sh4-linux-gnu-"}
: ${cross_prefix_sparc64="sparc64-linux-gnu-"} : ${cross_prefix_sparc64="sparc64-linux-gnu-"}
: ${cross_prefix_sparc="$cross_prefix_sparc64"} : ${cross_prefix_sparc="$cross_prefix_sparc64"}
: ${cross_prefix_tricore="tricore-"}
: ${cross_prefix_x86_64="x86_64-linux-gnu-"} : ${cross_prefix_x86_64="x86_64-linux-gnu-"}
: ${cross_cc_aarch64_be="$cross_cc_aarch64"} : ${cross_cc_aarch64_be="$cross_cc_aarch64"}
@ -1357,7 +1352,7 @@ probe_target_compiler() {
sh4) container_hosts=x86_64 ;; sh4) container_hosts=x86_64 ;;
sparc64) container_hosts=x86_64 ;; sparc64) container_hosts=x86_64 ;;
tricore) container_hosts=x86_64 ;; tricore) container_hosts=x86_64 ;;
x86_64) container_hosts="aarch64 ppc64el x86_64" ;; x86_64) container_hosts="aarch64 ppc64le x86_64" ;;
xtensa*) container_hosts=x86_64 ;; xtensa*) container_hosts=x86_64 ;;
esac esac
@ -1458,17 +1453,12 @@ probe_target_compiler() {
tricore) tricore)
container_image=debian-tricore-cross container_image=debian-tricore-cross
container_cross_prefix=tricore- container_cross_prefix=tricore-
container_cross_as=tricore-as
container_cross_ld=tricore-ld
container_cross_cc=tricore-gcc
break
;; ;;
x86_64) x86_64)
container_image=debian-amd64-cross container_image=debian-amd64-cross
container_cross_prefix=x86_64-linux-gnu- container_cross_prefix=x86_64-linux-gnu-
;; ;;
xtensa*) xtensa*)
container_hosts=x86_64
container_image=debian-xtensa-cross container_image=debian-xtensa-cross
# default to the dc232b cpu # default to the dc232b cpu
@ -1785,7 +1775,6 @@ fi
for target in $target_list; do for target in $target_list; do
target_dir="$target" target_dir="$target"
target_name=$(echo $target | cut -d '-' -f 1)$EXESUF target_name=$(echo $target | cut -d '-' -f 1)$EXESUF
mkdir -p "$target_dir"
case $target in case $target in
*-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;; *-user) symlink "../qemu-$target_name" "$target_dir/qemu-$target_name" ;;
*) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;; *) symlink "../qemu-system-$target_name" "$target_dir/qemu-system-$target_name" ;;

View File

@ -61,19 +61,19 @@ Under ``tests/avocado/`` as the root we have:
:: ::
$ make check-venv (needed only the first time to create the venv) $ make check-venv (needed only the first time to create the venv)
$ ./tests/venv/bin/avocado run -t acpi tests/avocado $ ./pyvenv/bin/avocado run -t acpi tests/avocado
The above will run all acpi avocado tests including this one. The above will run all acpi avocado tests including this one.
In order to run the individual tests, perform the following: In order to run the individual tests, perform the following:
:: ::
$ ./tests/venv/bin/avocado run tests/avocado/acpi-bits.py --tap - $ ./pyvenv/bin/avocado run tests/avocado/acpi-bits.py --tap -
The above will produce output in tap format. You can omit "--tap -" in the The above will produce output in tap format. You can omit "--tap -" in the
end and it will produce output like the following: end and it will produce output like the following:
:: ::
$ ./tests/venv/bin/avocado run tests/avocado/acpi-bits.py $ ./pyvenv/bin/avocado run tests/avocado/acpi-bits.py
Fetching asset from tests/avocado/acpi-bits.py:AcpiBitsTest.test_acpi_smbios_bits Fetching asset from tests/avocado/acpi-bits.py:AcpiBitsTest.test_acpi_smbios_bits
JOB ID : eab225724da7b64c012c65705dc2fa14ab1defef JOB ID : eab225724da7b64c012c65705dc2fa14ab1defef
JOB LOG : /home/anisinha/avocado/job-results/job-2022-10-10T17.58-eab2257/job.log JOB LOG : /home/anisinha/avocado/job-results/job-2022-10-10T17.58-eab2257/job.log

View File

@ -894,9 +894,9 @@ You can run the avocado tests simply by executing:
make check-avocado make check-avocado
This involves the automatic creation of Python virtual environment This involves the automatic installation, from PyPI, of all the
within the build tree (at ``tests/venv``) which will have all the necessary avocado-framework dependencies into the QEMU venv within the
right dependencies, and will save tests results also within the build tree (at ``./pyvenv``). Test results are also saved within the
build tree (at ``tests/results``). build tree (at ``tests/results``).
Note: the build environment must be using a Python 3 stack, and have Note: the build environment must be using a Python 3 stack, and have
@ -953,7 +953,7 @@ may be invoked by running:
.. code:: .. code::
tests/venv/bin/avocado run $OPTION1 $OPTION2 tests/avocado/ pyvenv/bin/avocado run $OPTION1 $OPTION2 tests/avocado/
Note that if ``make check-avocado`` was not executed before, it is Note that if ``make check-avocado`` was not executed before, it is
possible to create the Python virtual environment with the dependencies possible to create the Python virtual environment with the dependencies
@ -968,20 +968,20 @@ a test file. To run tests from a single file within the build tree, use:
.. code:: .. code::
tests/venv/bin/avocado run tests/avocado/$TESTFILE pyvenv/bin/avocado run tests/avocado/$TESTFILE
To run a single test within a test file, use: To run a single test within a test file, use:
.. code:: .. code::
tests/venv/bin/avocado run tests/avocado/$TESTFILE:$TESTCLASS.$TESTNAME pyvenv/bin/avocado run tests/avocado/$TESTFILE:$TESTCLASS.$TESTNAME
Valid test names are visible in the output from any previous execution Valid test names are visible in the output from any previous execution
of Avocado or ``make check-avocado``, and can also be queried using: of Avocado or ``make check-avocado``, and can also be queried using:
.. code:: .. code::
tests/venv/bin/avocado list tests/avocado pyvenv/bin/avocado list tests/avocado
Manual Installation Manual Installation
~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~

View File

@ -14,6 +14,8 @@ Commands:
post_init post_init
post-venv initialization post-venv initialization
ensure Ensure that the specified package is installed. ensure Ensure that the specified package is installed.
ensuregroup
Ensure that the specified package group is installed.
-------------------------------------------------- --------------------------------------------------
@ -44,8 +46,24 @@ options:
--online Install packages from PyPI, if necessary. --online Install packages from PyPI, if necessary.
--dir DIR Path to vendored packages where we may install from. --dir DIR Path to vendored packages where we may install from.
--------------------------------------------------
usage: mkvenv ensuregroup [-h] [--online] [--dir DIR] file group...
positional arguments:
file pointer to a TOML file
group section name in the TOML file
options:
-h, --help show this help message and exit
--online Install packages from PyPI, if necessary.
--dir DIR Path to vendored packages where we may install from.
""" """
# The duplication between importlib and pkg_resources does not help
# pylint: disable=too-many-lines
# Copyright (C) 2022-2023 Red Hat, Inc. # Copyright (C) 2022-2023 Red Hat, Inc.
# #
# Authors: # Authors:
@ -69,6 +87,7 @@ import sysconfig
from types import SimpleNamespace from types import SimpleNamespace
from typing import ( from typing import (
Any, Any,
Dict,
Iterator, Iterator,
Optional, Optional,
Sequence, Sequence,
@ -95,6 +114,18 @@ except ImportError:
except ImportError: except ImportError:
HAVE_DISTLIB = False HAVE_DISTLIB = False
# 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().
HAVE_TOMLLIB = True
try:
import tomllib
except ImportError:
try:
import tomli as tomllib
except ImportError:
HAVE_TOMLLIB = False
# 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!
@ -786,40 +817,68 @@ def pip_install(
) )
def _make_version_constraint(info: Dict[str, str], install: bool) -> str:
"""
Construct the version constraint part of a PEP 508 dependency
specification (for example '>=0.61.5') from the accepted and
installed keys of the provided dictionary.
:param info: A dictionary corresponding to a TOML key-value list.
:param install: True generates install constraints, False generates
presence constraints
"""
if install and "installed" in info:
return "==" + info["installed"]
dep_spec = info.get("accepted", "")
dep_spec = dep_spec.strip()
# Double check that they didn't just use a version number
if dep_spec and dep_spec[0] not in "!~><=(":
raise Ouch(
"invalid dependency specifier " + dep_spec + " in dependency file"
)
return dep_spec
def _do_ensure( def _do_ensure(
dep_specs: Sequence[str], group: Dict[str, Dict[str, str]],
online: bool = False, online: bool = False,
wheels_dir: Optional[Union[str, Path]] = None, wheels_dir: Optional[Union[str, Path]] = None,
prog: Optional[str] = None,
) -> Optional[Tuple[str, bool]]: ) -> Optional[Tuple[str, bool]]:
""" """
Use pip to ensure we have the package specified by @dep_specs. Use pip to ensure we have the packages specified in @group.
If the package is already installed, do nothing. If online and If the packages are already installed, do nothing. If online and
wheels_dir are both provided, prefer packages found in wheels_dir wheels_dir are both provided, prefer packages found in wheels_dir
first before connecting to PyPI. first before connecting to PyPI.
:param dep_specs: :param group: A dictionary of dictionaries, corresponding to a
PEP 508 dependency specifications. e.g. ['meson>=0.61.5']. section in a pythondeps.toml file.
:param online: If True, fall back to PyPI. :param online: If True, fall back to PyPI.
:param wheels_dir: If specified, search this path for packages. :param wheels_dir: If specified, search this path for packages.
""" """
absent = [] absent = []
present = [] present = []
for spec in dep_specs: canary = None
matcher = distlib.version.LegacyMatcher(spec) for name, info in group.items():
ver = _get_version(matcher.name) constraint = _make_version_constraint(info, False)
matcher = distlib.version.LegacyMatcher(name + constraint)
print(f"mkvenv: checking for {matcher}", file=sys.stderr)
ver = _get_version(name)
if ( if (
ver is None ver is None
# Always pass installed package to pip, so that they can be # Always pass installed package to pip, so that they can be
# updated if the requested version changes # updated if the requested version changes
or not _is_system_package(matcher.name) or not _is_system_package(name)
or not matcher.match(distlib.version.LegacyVersion(ver)) or not matcher.match(distlib.version.LegacyVersion(ver))
): ):
absent.append(spec) absent.append(name + _make_version_constraint(info, True))
if len(absent) == 1:
canary = info.get("canary", None)
else: else:
logger.info("found %s %s", matcher.name, ver) logger.info("found %s %s", name, ver)
present.append(matcher.name) present.append(name)
if present: if present:
generate_console_scripts(present) generate_console_scripts(present)
@ -839,7 +898,7 @@ def _do_ensure(
absent[0], absent[0],
online, online,
wheels_dir, wheels_dir,
prog if absent[0] == dep_specs[0] else None, canary,
) )
return None return None
@ -867,12 +926,83 @@ def ensure(
be presented to the user. e.g., 'sphinx-build' can be used as a be presented to the user. e.g., 'sphinx-build' can be used as a
bellwether for the presence of 'sphinx'. bellwether for the presence of 'sphinx'.
""" """
print(f"mkvenv: checking for {', '.join(dep_specs)}", file=sys.stderr)
if not HAVE_DISTLIB: if not HAVE_DISTLIB:
raise Ouch("a usable distlib could not be found, please install it") raise Ouch("a usable distlib could not be found, please install it")
result = _do_ensure(dep_specs, online, wheels_dir, prog) # Convert the depspecs to a dictionary, as if they came
# from a section in a pythondeps.toml file
group: Dict[str, Dict[str, str]] = {}
for spec in dep_specs:
name = distlib.version.LegacyMatcher(spec).name
group[name] = {}
spec = spec.strip()
pos = len(name)
ver = spec[pos:].strip()
if ver:
group[name]["accepted"] = ver
if prog:
group[name]["canary"] = prog
prog = None
result = _do_ensure(group, online, wheels_dir)
if result:
# Well, that's not good.
if result[1]:
raise Ouch(result[0])
raise SystemExit(f"\n{result[0]}\n\n")
def _parse_groups(file: str) -> Dict[str, Dict[str, Any]]:
if not HAVE_TOMLLIB:
if sys.version_info < (3, 11):
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(
file: str,
groups: Sequence[str],
online: bool = False,
wheels_dir: Optional[Union[str, Path]] = None,
) -> None:
"""
Use pip to ensure we have the package specified by @dep_specs.
If the package is already installed, do nothing. If online and
wheels_dir are both provided, prefer packages found in wheels_dir
first before connecting to PyPI.
:param dep_specs:
PEP 508 dependency specifications. e.g. ['meson>=0.61.5'].
:param online: If True, fall back to PyPI.
:param wheels_dir: If specified, search this path for packages.
"""
if not HAVE_DISTLIB:
raise Ouch("found no usable distlib, please install it")
parsed_deps = _parse_groups(file)
to_install: Dict[str, Dict[str, str]] = {}
for group in groups:
try:
to_install.update(parsed_deps[group])
except KeyError as exc:
raise Ouch(f"group {group} not defined") from exc
result = _do_ensure(to_install, online, wheels_dir)
if result: if result:
# Well, that's not good. # Well, that's not good.
if result[1]: if result[1]:
@ -907,6 +1037,37 @@ def _add_post_init_subcommand(subparsers: Any) -> None:
subparsers.add_parser("post_init", help="post-venv initialization") subparsers.add_parser("post_init", help="post-venv initialization")
def _add_ensuregroup_subcommand(subparsers: Any) -> None:
subparser = subparsers.add_parser(
"ensuregroup",
help="Ensure that the specified package group is installed.",
)
subparser.add_argument(
"--online",
action="store_true",
help="Install packages from PyPI, if necessary.",
)
subparser.add_argument(
"--dir",
type=str,
action="store",
help="Path to vendored packages where we may install from.",
)
subparser.add_argument(
"file",
type=str,
action="store",
help=("Path to a TOML file describing package groups"),
)
subparser.add_argument(
"group",
type=str,
action="store",
help="One or more package group names",
nargs="+",
)
def _add_ensure_subcommand(subparsers: Any) -> None: def _add_ensure_subcommand(subparsers: Any) -> None:
subparser = subparsers.add_parser( subparser = subparsers.add_parser(
"ensure", help="Ensure that the specified package is installed." "ensure", help="Ensure that the specified package is installed."
@ -964,6 +1125,7 @@ def main() -> int:
_add_create_subcommand(subparsers) _add_create_subcommand(subparsers)
_add_post_init_subcommand(subparsers) _add_post_init_subcommand(subparsers)
_add_ensure_subcommand(subparsers) _add_ensure_subcommand(subparsers)
_add_ensuregroup_subcommand(subparsers)
args = parser.parse_args() args = parser.parse_args()
try: try:
@ -982,6 +1144,13 @@ def main() -> int:
wheels_dir=args.dir, wheels_dir=args.dir,
prog=args.diagnose, prog=args.diagnose,
) )
if args.command == "ensuregroup":
ensure_group(
file=args.file,
groups=args.group,
online=args.online,
wheels_dir=args.dir,
)
logger.debug("mkvenv.py %s: exiting", args.command) logger.debug("mkvenv.py %s: exiting", args.command)
except Ouch as exc: except Ouch as exc:
print("\n*** Ouch! ***\n", file=sys.stderr) print("\n*** Ouch! ***\n", file=sys.stderr)

View File

@ -43,13 +43,16 @@ def main() -> int:
packages = { packages = {
"meson==0.63.3": "meson==0.63.3":
"d677b809c4895dcbaac9bf6c43703fcb3609a4b24c6057c78f828590049cf43a", "d677b809c4895dcbaac9bf6c43703fcb3609a4b24c6057c78f828590049cf43a",
"tomli==2.0.1":
"939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc",
} }
vendor_dir = Path(__file__, "..", "..", "wheels").resolve() vendor_dir = Path(__file__, "..", "..", "wheels").resolve()
with tempfile.NamedTemporaryFile(mode="w", encoding="utf-8") as file: with tempfile.NamedTemporaryFile(mode="w", encoding="utf-8") as file:
for dep_spec, checksum in packages.items(): for dep_spec, checksum in packages.items():
file.write(f"{dep_spec} --hash=sha256:{checksum}") print(f"{dep_spec} --hash=sha256:{checksum}", file=file)
file.flush() file.flush()
cli_args = [ cli_args = [

View File

@ -94,6 +94,12 @@ 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-urwid] [mypy-urwid]
ignore_missing_imports = True ignore_missing_imports = True

Binary file not shown.

32
pythondeps.toml Normal file
View File

@ -0,0 +1,32 @@
# This file describes Python package requirements to be
# installed in the pyvenv Python virtual environment.
#
# Packages are placed in groups, which are installed using
# the ensuregroup subcommand of python/scripts/mkvenv.py.
# Each group forms a TOML section and each entry in the
# section is a TOML key-value list describing a package.
# All fields are optional; valid fields are:
#
# - accepted: accepted versions when using a system package
# - installed: fixed version to install in the virtual environment
# if a system package is not found; if not specified,
# the minimum and maximum
# - canary: if specified, use this program name to present more
# precise error diagnostics to the user. For example,
# 'sphinx-build' can be used as a bellwether for the
# presence of 'sphinx' in the system.
[meson]
# The install key should match the version in python/wheels/
meson = { accepted = ">=0.63.0", installed = "0.63.3", canary = "meson" }
[docs]
sphinx = { accepted = ">=1.6", installed = "5.3.0", canary = "sphinx-build" }
sphinx_rtd_theme = { accepted = ">=0.5", installed = "1.1.1" }
[avocado]
# Note that qemu.git/python/ is always implicitly installed.
# Prefer an LTS version when updating the accepted versions of
# avocado-framework, for example right now the limit is 92.x.
avocado-framework = { accepted = "(>=88.1, <93.0)", installed = "88.1", canary = "avocado" }
pycdlib = { accepted = ">=1.11.0" }

View File

@ -4,7 +4,7 @@
# KVM and x86_64, or tests that are generic enough to be valid for all # KVM and x86_64, or tests that are generic enough to be valid for all
# targets. Such a test list can be generated with: # targets. Such a test list can be generated with:
# #
# ./tests/venv/bin/avocado list --filter-by-tags-include-empty \ # ./pyvenv/bin/avocado list --filter-by-tags-include-empty \
# --filter-by-tags-include-empty-key -t accel:kvm,arch:x86_64 \ # --filter-by-tags-include-empty-key -t accel:kvm,arch:x86_64 \
# tests/avocado/ # tests/avocado/
# #
@ -22,7 +22,7 @@
# - tests/avocado/virtio_check_params.py:VirtioMaxSegSettingsCheck.test_machine_types # - tests/avocado/virtio_check_params.py:VirtioMaxSegSettingsCheck.test_machine_types
# #
make get-vm-images make get-vm-images
./tests/venv/bin/avocado run \ ./pyvenv/bin/avocado run \
--job-results-dir=tests/results/ \ --job-results-dir=tests/results/ \
tests/avocado/boot_linux.py:BootLinuxX8664.test_pc_i440fx_kvm \ tests/avocado/boot_linux.py:BootLinuxX8664.test_pc_i440fx_kvm \
tests/avocado/boot_linux.py:BootLinuxX8664.test_pc_q35_kvm \ tests/avocado/boot_linux.py:BootLinuxX8664.test_pc_q35_kvm \

View File

@ -43,7 +43,7 @@ except ModuleNotFoundError as exc:
print(f"Module '{exc.name}' not found.") print(f"Module '{exc.name}' not found.")
print(" Try 'make check-venv' from your build directory,") print(" Try 'make check-venv' from your build directory,")
print(" and then one way to run this script is like so:") print(" and then one way to run this script is like so:")
print(f' > $builddir/tests/venv/bin/python3 "{path}"') print(f' > $builddir/pyvenv/bin/python3 "{path}"')
sys.exit(1) sys.exit(1)
logger = logging.getLogger('device-crash-test') logger = logging.getLogger('device-crash-test')

View File

@ -1228,7 +1228,7 @@ FeatureWordInfo feature_word_info[FEATURE_WORDS] = {
"vmx-invpcid-exit", "vmx-vmfunc", "vmx-shadow-vmcs", "vmx-encls-exit", "vmx-invpcid-exit", "vmx-vmfunc", "vmx-shadow-vmcs", "vmx-encls-exit",
"vmx-rdseed-exit", "vmx-pml", NULL, NULL, "vmx-rdseed-exit", "vmx-pml", NULL, NULL,
"vmx-xsaves", NULL, NULL, NULL, "vmx-xsaves", NULL, NULL, NULL,
NULL, "vmx-tsc-scaling", NULL, NULL, NULL, "vmx-tsc-scaling", "vmx-enable-user-wait-pause", NULL,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
}, },
.msr = { .msr = {
@ -1545,6 +1545,10 @@ static FeatureDep feature_dependencies[] = {
.from = { FEAT_8000_0001_ECX, CPUID_EXT3_SVM }, .from = { FEAT_8000_0001_ECX, CPUID_EXT3_SVM },
.to = { FEAT_SVM, ~0ull }, .to = { FEAT_SVM, ~0ull },
}, },
{
.from = { FEAT_VMX_SECONDARY_CTLS, VMX_SECONDARY_EXEC_ENABLE_USER_WAIT_PAUSE },
.to = { FEAT_7_0_ECX, CPUID_7_0_ECX_WAITPKG },
},
}; };
typedef struct X86RegisterInfo32 { typedef struct X86RegisterInfo32 {

View File

@ -1111,6 +1111,7 @@ uint64_t x86_cpu_get_supported_feature_word(FeatureWord w,
#define VMX_SECONDARY_EXEC_ENABLE_PML 0x00020000 #define VMX_SECONDARY_EXEC_ENABLE_PML 0x00020000
#define VMX_SECONDARY_EXEC_XSAVES 0x00100000 #define VMX_SECONDARY_EXEC_XSAVES 0x00100000
#define VMX_SECONDARY_EXEC_TSC_SCALING 0x02000000 #define VMX_SECONDARY_EXEC_TSC_SCALING 0x02000000
#define VMX_SECONDARY_EXEC_ENABLE_USER_WAIT_PAUSE 0x04000000
#define VMX_PIN_BASED_EXT_INTR_MASK 0x00000001 #define VMX_PIN_BASED_EXT_INTR_MASK 0x00000001
#define VMX_PIN_BASED_NMI_EXITING 0x00000008 #define VMX_PIN_BASED_NMI_EXITING 0x00000008

View File

@ -89,10 +89,8 @@ distclean-tcg: $(DISTCLEAN_TCG_TARGET_RULES)
# Build up our target list from the filtered list of ninja targets # Build up our target list from the filtered list of ninja targets
TARGETS=$(patsubst libqemu-%.fa, %, $(filter libqemu-%.fa, $(ninja-targets))) TARGETS=$(patsubst libqemu-%.fa, %, $(filter libqemu-%.fa, $(ninja-targets)))
TESTS_VENV_DIR=$(BUILD_DIR)/tests/venv TESTS_VENV_TOKEN=$(BUILD_DIR)/pyvenv/tests.group
TESTS_VENV_REQ=$(SRC_PATH)/tests/requirements.txt
TESTS_RESULTS_DIR=$(BUILD_DIR)/tests/results TESTS_RESULTS_DIR=$(BUILD_DIR)/tests/results
TESTS_PYTHON=$(TESTS_VENV_DIR)/bin/python3
ifndef AVOCADO_TESTS ifndef AVOCADO_TESTS
AVOCADO_TESTS=tests/avocado AVOCADO_TESTS=tests/avocado
endif endif
@ -108,20 +106,19 @@ else
endif endif
quiet-venv-pip = $(quiet-@)$(call quiet-command-run, \ quiet-venv-pip = $(quiet-@)$(call quiet-command-run, \
$(TESTS_PYTHON) -m pip -q --disable-pip-version-check $1, \ $(PYTHON) -m pip -q --disable-pip-version-check $1, \
"VENVPIP","$1") "VENVPIP","$1")
$(TESTS_VENV_DIR): $(TESTS_VENV_REQ) $(TESTS_VENV_TOKEN): $(SRC_PATH)/pythondeps.toml
$(call quiet-command, $(PYTHON) -m venv $@, VENV, $@)
$(call quiet-venv-pip,install -e "$(SRC_PATH)/python/") $(call quiet-venv-pip,install -e "$(SRC_PATH)/python/")
$(call quiet-venv-pip,install -r $(TESTS_VENV_REQ)) $(PYTHON) python/scripts/mkvenv.py ensuregroup --online $< avocado
$(call quiet-command, touch $@) $(call quiet-command, touch $@)
$(TESTS_RESULTS_DIR): $(TESTS_RESULTS_DIR):
$(call quiet-command, mkdir -p $@, \ $(call quiet-command, mkdir -p $@, \
MKDIR, $@) MKDIR, $@)
check-venv: $(TESTS_VENV_DIR) check-venv: $(TESTS_VENV_TOKEN)
FEDORA_31_ARCHES_TARGETS=$(patsubst %-softmmu,%, $(filter %-softmmu,$(TARGETS))) FEDORA_31_ARCHES_TARGETS=$(patsubst %-softmmu,%, $(filter %-softmmu,$(TARGETS)))
FEDORA_31_ARCHES_CANDIDATES=$(patsubst ppc64,ppc64le,$(FEDORA_31_ARCHES_TARGETS)) FEDORA_31_ARCHES_CANDIDATES=$(patsubst ppc64,ppc64le,$(FEDORA_31_ARCHES_TARGETS))
@ -131,7 +128,7 @@ FEDORA_31_DOWNLOAD=$(filter $(FEDORA_31_ARCHES),$(FEDORA_31_ARCHES_CANDIDATES))
# download one specific Fedora 31 image # download one specific Fedora 31 image
get-vm-image-fedora-31-%: check-venv get-vm-image-fedora-31-%: check-venv
$(call quiet-command, \ $(call quiet-command, \
$(TESTS_PYTHON) -m avocado vmimage get \ $(PYTHON) -m avocado vmimage get \
--distro=fedora --distro-version=31 --arch=$*, \ --distro=fedora --distro-version=31 --arch=$*, \
"AVOCADO", "Downloading avocado tests VM image for $*") "AVOCADO", "Downloading avocado tests VM image for $*")
@ -140,7 +137,7 @@ get-vm-images: check-venv $(patsubst %,get-vm-image-fedora-31-%, $(FEDORA_31_DOW
check-avocado: check-venv $(TESTS_RESULTS_DIR) get-vm-images check-avocado: check-venv $(TESTS_RESULTS_DIR) get-vm-images
$(call quiet-command, \ $(call quiet-command, \
$(TESTS_PYTHON) -m avocado \ $(PYTHON) -m avocado \
--show=$(AVOCADO_SHOW) run --job-results-dir=$(TESTS_RESULTS_DIR) \ --show=$(AVOCADO_SHOW) run --job-results-dir=$(TESTS_RESULTS_DIR) \
$(if $(AVOCADO_TAGS),, --filter-by-tags-include-empty \ $(if $(AVOCADO_TAGS),, --filter-by-tags-include-empty \
--filter-by-tags-include-empty-key) \ --filter-by-tags-include-empty-key) \
@ -163,7 +160,7 @@ check:
check-build: run-ninja check-build: run-ninja
check-clean: check-clean:
rm -rf $(TESTS_VENV_DIR) $(TESTS_RESULTS_DIR) rm -rf $(TESTS_RESULTS_DIR)
clean: check-clean clean-tcg clean: check-clean clean-tcg
distclean: distclean-tcg distclean: distclean-tcg

View File

@ -133,7 +133,8 @@ RUN /usr/bin/pip3.8 install \
meson==0.63.2 \ meson==0.63.2 \
pillow \ pillow \
sphinx \ sphinx \
sphinx-rtd-theme sphinx-rtd-theme \
tomli
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers" ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
ENV LANG "en_US.UTF-8" ENV LANG "en_US.UTF-8"

View File

@ -58,7 +58,12 @@ RUN DEBIAN_FRONTEND=noninteractive eatmydata \
libc6-dev-sh4-cross \ libc6-dev-sh4-cross \
gcc-sparc64-linux-gnu \ gcc-sparc64-linux-gnu \
libc6-dev-sparc64-cross \ libc6-dev-sparc64-cross \
python3-venv python3-pip \
python3-setuptools \
python3-venv \
python3-wheel
RUN /usr/bin/pip3 install tomli
ENV QEMU_CONFIGURE_OPTS --disable-system --disable-docs --disable-tools ENV QEMU_CONFIGURE_OPTS --disable-system --disable-docs --disable-tools
ENV DEF_TARGET_LIST aarch64-linux-user,alpha-linux-user,arm-linux-user,hppa-linux-user,i386-linux-user,m68k-linux-user,mips-linux-user,mips64-linux-user,mips64el-linux-user,mipsel-linux-user,ppc-linux-user,ppc64-linux-user,ppc64le-linux-user,riscv64-linux-user,s390x-linux-user,sh4-linux-user,sparc64-linux-user ENV DEF_TARGET_LIST aarch64-linux-user,alpha-linux-user,arm-linux-user,hppa-linux-user,i386-linux-user,m68k-linux-user,mips-linux-user,mips64-linux-user,mips64el-linux-user,mipsel-linux-user,ppc-linux-user,ppc64-linux-user,ppc64le-linux-user,riscv64-linux-user,s390x-linux-user,sh4-linux-user,sparc64-linux-user

View File

@ -1,6 +1,6 @@
# THIS FILE WAS AUTO-GENERATED # THIS FILE WAS AUTO-GENERATED
# #
# $ lcitool dockerfile --layers all --cross x86_64 debian-11 qemu # $ lcitool dockerfile --layers all --cross-arch x86_64 debian-11 qemu
# #
# https://gitlab.com/libvirt/libvirt-ci # https://gitlab.com/libvirt/libvirt-ci
@ -47,9 +47,11 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
python3-opencv \ python3-opencv \
python3-pillow \ python3-pillow \
python3-pip \ python3-pip \
python3-setuptools \
python3-sphinx \ python3-sphinx \
python3-sphinx-rtd-theme \ python3-sphinx-rtd-theme \
python3-venv \ python3-venv \
python3-wheel \
python3-yaml \ python3-yaml \
rpm2cpio \ rpm2cpio \
sed \ sed \
@ -65,6 +67,8 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \ sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \
dpkg-reconfigure locales dpkg-reconfigure locales
RUN /usr/bin/pip3 install tomli
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers" 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"

View File

@ -115,9 +115,11 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
python3-opencv \ python3-opencv \
python3-pillow \ python3-pillow \
python3-pip \ python3-pip \
python3-setuptools \
python3-sphinx \ python3-sphinx \
python3-sphinx-rtd-theme \ python3-sphinx-rtd-theme \
python3-venv \ python3-venv \
python3-wheel \
python3-yaml \ python3-yaml \
rpm2cpio \ rpm2cpio \
sed \ sed \
@ -143,6 +145,8 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/g++ && \ ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/g++ && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/gcc ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/gcc
RUN /usr/bin/pip3 install tomli
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers" 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"

View File

@ -1,6 +1,6 @@
# THIS FILE WAS AUTO-GENERATED # THIS FILE WAS AUTO-GENERATED
# #
# $ lcitool dockerfile --layers all --cross aarch64 debian-11 qemu # $ lcitool dockerfile --layers all --cross-arch aarch64 debian-11 qemu
# #
# https://gitlab.com/libvirt/libvirt-ci # https://gitlab.com/libvirt/libvirt-ci
@ -47,9 +47,11 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
python3-opencv \ python3-opencv \
python3-pillow \ python3-pillow \
python3-pip \ python3-pip \
python3-setuptools \
python3-sphinx \ python3-sphinx \
python3-sphinx-rtd-theme \ python3-sphinx-rtd-theme \
python3-venv \ python3-venv \
python3-wheel \
python3-yaml \ python3-yaml \
rpm2cpio \ rpm2cpio \
sed \ sed \
@ -65,6 +67,8 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \ sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \
dpkg-reconfigure locales dpkg-reconfigure locales
RUN /usr/bin/pip3 install tomli
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers" 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"

View File

@ -1,6 +1,6 @@
# THIS FILE WAS AUTO-GENERATED # THIS FILE WAS AUTO-GENERATED
# #
# $ lcitool dockerfile --layers all --cross armv6l debian-11 qemu # $ lcitool dockerfile --layers all --cross-arch armv6l debian-11 qemu
# #
# https://gitlab.com/libvirt/libvirt-ci # https://gitlab.com/libvirt/libvirt-ci
@ -47,9 +47,11 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
python3-opencv \ python3-opencv \
python3-pillow \ python3-pillow \
python3-pip \ python3-pip \
python3-setuptools \
python3-sphinx \ python3-sphinx \
python3-sphinx-rtd-theme \ python3-sphinx-rtd-theme \
python3-venv \ python3-venv \
python3-wheel \
python3-yaml \ python3-yaml \
rpm2cpio \ rpm2cpio \
sed \ sed \
@ -65,6 +67,8 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \ sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \
dpkg-reconfigure locales dpkg-reconfigure locales
RUN /usr/bin/pip3 install tomli
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers" 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"

View File

@ -1,6 +1,6 @@
# THIS FILE WAS AUTO-GENERATED # THIS FILE WAS AUTO-GENERATED
# #
# $ lcitool dockerfile --layers all --cross armv7l debian-11 qemu # $ lcitool dockerfile --layers all --cross-arch armv7l debian-11 qemu
# #
# https://gitlab.com/libvirt/libvirt-ci # https://gitlab.com/libvirt/libvirt-ci
@ -47,9 +47,11 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
python3-opencv \ python3-opencv \
python3-pillow \ python3-pillow \
python3-pip \ python3-pip \
python3-setuptools \
python3-sphinx \ python3-sphinx \
python3-sphinx-rtd-theme \ python3-sphinx-rtd-theme \
python3-venv \ python3-venv \
python3-wheel \
python3-yaml \ python3-yaml \
rpm2cpio \ rpm2cpio \
sed \ sed \
@ -65,6 +67,8 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \ sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \
dpkg-reconfigure locales dpkg-reconfigure locales
RUN /usr/bin/pip3 install tomli
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers" 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"

View File

@ -21,11 +21,15 @@ RUN apt-get update && \
flex \ flex \
git \ git \
ninja-build \ ninja-build \
python3-venv && \ python3-pip \
python3-setuptools \
python3-venv \
python3-wheel && \
# Install QEMU build deps for use in CI # Install QEMU build deps for use in CI
DEBIAN_FRONTEND=noninteractive eatmydata \ DEBIAN_FRONTEND=noninteractive eatmydata \
apt build-dep -yy --arch-only qemu apt build-dep -yy --arch-only qemu
RUN /usr/bin/pip3 install tomli
ENV TOOLCHAIN_INSTALL /opt ENV TOOLCHAIN_INSTALL /opt
ENV TOOLCHAIN_RELEASE 16.0.0 ENV TOOLCHAIN_RELEASE 16.0.0

View File

@ -1,6 +1,6 @@
# THIS FILE WAS AUTO-GENERATED # THIS FILE WAS AUTO-GENERATED
# #
# $ lcitool dockerfile --layers all --cross mips64el debian-11 qemu # $ lcitool dockerfile --layers all --cross-arch mips64el debian-11 qemu
# #
# https://gitlab.com/libvirt/libvirt-ci # https://gitlab.com/libvirt/libvirt-ci
@ -47,9 +47,11 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
python3-opencv \ python3-opencv \
python3-pillow \ python3-pillow \
python3-pip \ python3-pip \
python3-setuptools \
python3-sphinx \ python3-sphinx \
python3-sphinx-rtd-theme \ python3-sphinx-rtd-theme \
python3-venv \ python3-venv \
python3-wheel \
python3-yaml \ python3-yaml \
rpm2cpio \ rpm2cpio \
sed \ sed \
@ -65,6 +67,8 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \ sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \
dpkg-reconfigure locales dpkg-reconfigure locales
RUN /usr/bin/pip3 install tomli
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers" 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"

View File

@ -1,6 +1,6 @@
# THIS FILE WAS AUTO-GENERATED # THIS FILE WAS AUTO-GENERATED
# #
# $ lcitool dockerfile --layers all --cross mipsel debian-11 qemu # $ lcitool dockerfile --layers all --cross-arch mipsel debian-11 qemu
# #
# https://gitlab.com/libvirt/libvirt-ci # https://gitlab.com/libvirt/libvirt-ci
@ -47,9 +47,11 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
python3-opencv \ python3-opencv \
python3-pillow \ python3-pillow \
python3-pip \ python3-pip \
python3-setuptools \
python3-sphinx \ python3-sphinx \
python3-sphinx-rtd-theme \ python3-sphinx-rtd-theme \
python3-venv \ python3-venv \
python3-wheel \
python3-yaml \ python3-yaml \
rpm2cpio \ rpm2cpio \
sed \ sed \
@ -65,6 +67,8 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \ sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \
dpkg-reconfigure locales dpkg-reconfigure locales
RUN /usr/bin/pip3 install tomli
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers" 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"

View File

@ -1,6 +1,6 @@
# THIS FILE WAS AUTO-GENERATED # THIS FILE WAS AUTO-GENERATED
# #
# $ lcitool dockerfile --layers all --cross ppc64le debian-11 qemu # $ lcitool dockerfile --layers all --cross-arch ppc64le debian-11 qemu
# #
# https://gitlab.com/libvirt/libvirt-ci # https://gitlab.com/libvirt/libvirt-ci
@ -47,9 +47,11 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
python3-opencv \ python3-opencv \
python3-pillow \ python3-pillow \
python3-pip \ python3-pip \
python3-setuptools \
python3-sphinx \ python3-sphinx \
python3-sphinx-rtd-theme \ python3-sphinx-rtd-theme \
python3-venv \ python3-venv \
python3-wheel \
python3-yaml \ python3-yaml \
rpm2cpio \ rpm2cpio \
sed \ sed \
@ -65,6 +67,8 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \ sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \
dpkg-reconfigure locales dpkg-reconfigure locales
RUN /usr/bin/pip3 install tomli
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers" 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"

View File

@ -1,6 +1,6 @@
# THIS FILE WAS AUTO-GENERATED # THIS FILE WAS AUTO-GENERATED
# #
# $ lcitool dockerfile --layers all --cross riscv64 debian-sid qemu-minimal # $ lcitool dockerfile --layers all --cross-arch riscv64 debian-sid qemu-minimal
# #
# https://gitlab.com/libvirt/libvirt-ci # https://gitlab.com/libvirt/libvirt-ci

View File

@ -1,6 +1,6 @@
# THIS FILE WAS AUTO-GENERATED # THIS FILE WAS AUTO-GENERATED
# #
# $ lcitool dockerfile --layers all --cross s390x debian-11 qemu # $ lcitool dockerfile --layers all --cross-arch s390x debian-11 qemu
# #
# https://gitlab.com/libvirt/libvirt-ci # https://gitlab.com/libvirt/libvirt-ci
@ -47,9 +47,11 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
python3-opencv \ python3-opencv \
python3-pillow \ python3-pillow \
python3-pip \ python3-pip \
python3-setuptools \
python3-sphinx \ python3-sphinx \
python3-sphinx-rtd-theme \ python3-sphinx-rtd-theme \
python3-venv \ python3-venv \
python3-wheel \
python3-yaml \ python3-yaml \
rpm2cpio \ rpm2cpio \
sed \ sed \
@ -65,6 +67,8 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \ sed -Ei 's,^# (en_US\.UTF-8 .*)$,\1,' /etc/locale.gen && \
dpkg-reconfigure locales dpkg-reconfigure locales
RUN /usr/bin/pip3 install tomli
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers" 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"

View File

@ -9,7 +9,7 @@
# #
# SPDX-License-Identifier: GPL-2.0-or-later # SPDX-License-Identifier: GPL-2.0-or-later
# #
FROM docker.io/library/debian:buster-slim FROM docker.io/library/debian:11-slim
MAINTAINER Philippe Mathieu-Daudé <f4bug@amsat.org> MAINTAINER Philippe Mathieu-Daudé <f4bug@amsat.org>
@ -36,6 +36,8 @@ RUN apt update && \
python3-wheel \ python3-wheel \
python3-venv python3-venv
RUN /usr/bin/pip3 install tomli
RUN curl -#SL https://github.com/bkoppelmann/package_940/releases/download/tricore-toolchain-9.40/tricore-toolchain-9.4.0.tar.gz \ RUN curl -#SL https://github.com/bkoppelmann/package_940/releases/download/tricore-toolchain-9.40/tricore-toolchain-9.4.0.tar.gz \
| tar -xzC /usr/local/ | tar -xzC /usr/local/

View File

@ -24,6 +24,7 @@ ENV PACKAGES \
nettle-devel.i686 \ nettle-devel.i686 \
pcre-devel.i686 \ pcre-devel.i686 \
pixman-devel.i686 \ pixman-devel.i686 \
python3-tomli \
sysprof-capture-devel.i686 \ sysprof-capture-devel.i686 \
zlib-devel.i686 zlib-devel.i686

View File

@ -1,6 +1,6 @@
# THIS FILE WAS AUTO-GENERATED # THIS FILE WAS AUTO-GENERATED
# #
# $ lcitool dockerfile --layers all --cross mingw32 fedora-38 qemu # $ lcitool dockerfile --layers all --cross-arch mingw32 fedora-38 qemu
# #
# https://gitlab.com/libvirt/libvirt-ci # https://gitlab.com/libvirt/libvirt-ci

View File

@ -1,6 +1,6 @@
# THIS FILE WAS AUTO-GENERATED # THIS FILE WAS AUTO-GENERATED
# #
# $ lcitool dockerfile --layers all --cross mingw64 fedora-38 qemu # $ lcitool dockerfile --layers all --cross-arch mingw64 fedora-38 qemu
# #
# https://gitlab.com/libvirt/libvirt-ci # https://gitlab.com/libvirt/libvirt-ci

View File

@ -4,7 +4,7 @@
# #
# https://gitlab.com/libvirt/libvirt-ci # https://gitlab.com/libvirt/libvirt-ci
FROM registry.opensuse.org/opensuse/leap:15.4 FROM registry.opensuse.org/opensuse/leap:15.5
RUN zypper update -y && \ RUN zypper update -y && \
zypper install -y \ zypper install -y \
@ -90,9 +90,9 @@ RUN zypper update -y && \
pcre-devel-static \ pcre-devel-static \
pipewire-devel \ pipewire-devel \
pkgconfig \ pkgconfig \
python39-base \ python311-base \
python39-pip \ python311-pip \
python39-setuptools \ python311-setuptools \
rdma-core-devel \ rdma-core-devel \
sed \ sed \
snappy-devel \ snappy-devel \
@ -125,18 +125,18 @@ RUN zypper update -y && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/g++ && \ ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/g++ && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/gcc ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/gcc
RUN /usr/bin/pip3.9 install \ RUN /usr/bin/pip3.11 install \
PyYAML \ PyYAML \
meson==0.63.2 \ meson==0.63.2 \
pillow \ pillow \
sphinx \ sphinx \
sphinx-rtd-theme sphinx-rtd-theme
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers" 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.9" ENV PYTHON "/usr/bin/python3.11"
# 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

View File

@ -141,7 +141,9 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/g++ && \ ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/g++ && \
ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/gcc ln -s /usr/bin/ccache /usr/libexec/ccache-wrappers/gcc
RUN /usr/bin/pip3 install meson==0.63.2 RUN /usr/bin/pip3 install \
meson==0.63.2 \
tomli
ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers" ENV CCACHE_WRAPPERSDIR "/usr/libexec/ccache-wrappers"
ENV LANG "en_US.UTF-8" ENV LANG "en_US.UTF-8"

View File

@ -117,6 +117,7 @@ RUN export DEBIAN_FRONTEND=noninteractive && \
python3-pip \ python3-pip \
python3-sphinx \ python3-sphinx \
python3-sphinx-rtd-theme \ python3-sphinx-rtd-theme \
python3-tomli \
python3-venv \ python3-venv \
python3-yaml \ python3-yaml \
rpm2cpio \ rpm2cpio \

@ -1 +1 @@
Subproject commit 9bff3b763b5531a1490e238bfbf77306dc3a6dbb Subproject commit bbd55b4d18cce8f89b5167675e434a6941315634

View File

@ -9,7 +9,7 @@ mappings:
python3: python3:
CentOSStream8: python38 CentOSStream8: python38
OpenSUSELeap15: python39-base OpenSUSELeap15: python311-base
python3-PyYAML: python3-PyYAML:
CentOSStream8: python38-PyYAML CentOSStream8: python38-PyYAML
@ -17,7 +17,7 @@ mappings:
python3-devel: python3-devel:
CentOSStream8: python38-devel CentOSStream8: python38-devel
OpenSUSELeap15: python39-devel OpenSUSELeap15: python311-devel
python3-docutils: python3-docutils:
CentOSStream8: CentOSStream8:
@ -37,7 +37,7 @@ mappings:
python3-pip: python3-pip:
CentOSStream8: python38-pip CentOSStream8: python38-pip
OpenSUSELeap15: python39-pip OpenSUSELeap15: python311-pip
python3-pillow: python3-pillow:
CentOSStream8: CentOSStream8:
@ -49,7 +49,7 @@ mappings:
python3-setuptools: python3-setuptools:
CentOSStream8: python38-setuptools CentOSStream8: python38-setuptools
OpenSUSELeap15: python39-setuptools OpenSUSELeap15: python311-setuptools
python3-sphinx: python3-sphinx:
CentOSStream8: CentOSStream8:
@ -59,13 +59,22 @@ mappings:
CentOSStream8: CentOSStream8:
OpenSUSELeap15: OpenSUSELeap15:
python3-tomli:
# test using tomllib
apk:
Fedora:
Debian12:
OpenSUSELeap15:
# Not available for Python 3.8
CentOSStream8:
python3-venv: python3-venv:
CentOSStream8: python38 CentOSStream8: python38
OpenSUSELeap15: python39-base OpenSUSELeap15: python311-base
python3-wheel: python3-wheel:
CentOSStream8: python38-wheel CentOSStream8: python38-wheel
OpenSUSELeap15: python39-pip OpenSUSELeap15: python311-pip
pypi_mappings: pypi_mappings:
# Request more recent version # Request more recent version
@ -75,3 +84,10 @@ pypi_mappings:
# Drop packages that need devel headers # Drop packages that need devel headers
python3-numpy: python3-numpy:
OpenSUSELeap15: OpenSUSELeap15:
# see above
python3-tomli:
apk:
Fedora:
Debian12:
OpenSUSELeap15:

View File

@ -85,7 +85,7 @@ packages:
- pam - pam
- pcre-static - pcre-static
- pixman - pixman
- pipewire - libpipewire-dev
- pkg-config - pkg-config
- pulseaudio - pulseaudio
- python3 - python3
@ -96,6 +96,7 @@ packages:
- python3-pip - python3-pip
- python3-sphinx - python3-sphinx
- python3-sphinx-rtd-theme - python3-sphinx-rtd-theme
- python3-tomli
- python3-venv - python3-venv
- rpm2cpio - rpm2cpio
- sdl2 - sdl2

View File

@ -1,3 +1,3 @@
paths: paths:
pip3: /usr/bin/pip3.9 pip3: /usr/bin/pip3.11
python: /usr/bin/python3.9 python: /usr/bin/python3.11

View File

@ -1,6 +0,0 @@
# Add Python module requirements, one per line, to be installed
# in the tests/venv Python virtual environment. For more info,
# refer to: https://pip.pypa.io/en/stable/user_guide/#id1
# Note that qemu.git/python/ is always implicitly installed.
avocado-framework==88.1
pycdlib==1.11.0

View File

@ -5,7 +5,7 @@ ifeq ($(realpath $(SRC_PATH)),$(realpath .))
VM_PYTHON = PYTHONPATH=$(SRC_PATH)/python /usr/bin/env python3 VM_PYTHON = PYTHONPATH=$(SRC_PATH)/python /usr/bin/env python3
VM_VENV = VM_VENV =
else else
VM_PYTHON = $(TESTS_PYTHON) VM_PYTHON = $(PYTHON)
VM_VENV = check-venv VM_VENV = check-venv
endif endif

View File

@ -56,6 +56,7 @@
"py39-pip", "py39-pip",
"py39-sphinx", "py39-sphinx",
"py39-sphinx_rtd_theme", "py39-sphinx_rtd_theme",
"py39-tomli",
"py39-yaml", "py39-yaml",
"python3", "python3",
"rpm2cpio", "rpm2cpio",