All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Marc-André Lureau" <marcandre.lureau@gmail.com>
To: Paolo Bonzini <pbonzini@redhat.com>
Cc: Thomas Huth <thuth@redhat.com>, QEMU <qemu-devel@nongnu.org>
Subject: Re: [PATCH 24/24] configure: automatically parse command line for meson -D options
Date: Fri, 8 Oct 2021 00:41:03 +0400	[thread overview]
Message-ID: <CAJ+F1C+YriVhkYRtiHe=US3MmhEyLkVPnfwuAJqYvSOCR-uGEg@mail.gmail.com> (raw)
In-Reply-To: <20211007130829.632254-19-pbonzini@redhat.com>

[-- Attachment #1: Type: text/plain, Size: 58112 bytes --]

Hi

On Thu, Oct 7, 2021 at 5:28 PM Paolo Bonzini <pbonzini@redhat.com> wrote:

> Right now meson_options.txt lists about 90 options.  Each option
> needs code in configure to parse it and pass the option down to Meson as
> a -D command-line argument; in addition the default must be duplicated
> between configure and meson_options.txt.  This series tries to remove
> the code duplication by generating the case statement for those --enable
> and --disable options, as well as the corresponding help text.
>
> About 80% of the options can be handled completely by the new mechanism.
> Eight meson options are not of the --enable/--disable kind.  Six more need
> to be parsed in configure for various reasons documented in the patch,
> but they still have their help automatically generated.
>
> The advantages are:
>
> - less code in configure
>
> - parsing and help is more consistent (for example --enable-blobs was
>   not supported)
>
> - options are described entirely in one place, meson_options.txt.
>   This make it more attractive to use Meson options instead of
>   hand-crafted configure options and config-host.mak
>
> A few options change name: --enable-tcmalloc and --enable-jemalloc
> become --enable-malloc={tcmalloc,jemalloc}; --disable-blobs becomes
> --disable-install-blobs; --enable-trace-backend becomes
> --enable-trace-backends.
>
> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
>

I have not investigated why, but this broke at least
--enable-trace-backend=log for me:
ERROR: unknown option --enable-trace-backend=log

---
>  configure                     | 540 ++--------------------------------
>  docs/devel/build-system.rst   | 133 +++++----
>  meson_options.txt             |   8 +
>  scripts/meson-buildoptions.py |  92 ++++++
>  scripts/meson-buildoptions.sh | 256 ++++++++++++++++
>  5 files changed, 449 insertions(+), 580 deletions(-)
>
> diff --git a/configure b/configure
> index d979476e03..4e1dfbea14 100755
> --- a/configure
> +++ b/configure
> @@ -286,41 +286,8 @@ for opt do
>    esac
>  done
>
> -brlapi="auto"
> -curl="auto"
> -iconv="auto"
> -curses="auto"
> -docs="auto"
> -fdt="auto"
> -netmap="auto"
> -sdl="auto"
> -sdl_image="auto"
> -virtiofsd="auto"
> -virtfs="auto"
> -libudev="auto"
> -mpath="auto"
> -vnc="auto"
> -sparse="auto"
> -vde="auto"
> -vnc_sasl="auto"
> -vnc_jpeg="auto"
> -vnc_png="auto"
> -xkbcommon="auto"
> -alsa="auto"
> -coreaudio="auto"
> -dsound="auto"
> -jack="auto"
> -oss="auto"
> -pa="auto"
> -xen=${default_feature:+disabled}
>  xen_ctrl_version="$default_feature"
> -xen_pci_passthrough="auto"
> -linux_aio="auto"
> -linux_io_uring="auto"
> -cap_ng="auto"
> -attr="auto"
>  xfs="$default_feature"
> -tcg="enabled"
>  membarrier="$default_feature"
>  vhost_kernel="$default_feature"
>  vhost_net="$default_feature"
> @@ -328,15 +295,8 @@ vhost_crypto="$default_feature"
>  vhost_scsi="$default_feature"
>  vhost_vsock="$default_feature"
>  vhost_user="no"
> -vhost_user_blk_server="auto"
>  vhost_user_fs="$default_feature"
>  vhost_vdpa="$default_feature"
> -bpf="auto"
> -kvm="auto"
> -hax="auto"
> -hvf="auto"
> -whpx="auto"
> -nvmm="auto"
>  rdma="$default_feature"
>  pvrdma="$default_feature"
>  gprof="no"
> @@ -346,7 +306,6 @@ sanitizers="no"
>  tsan="no"
>  fortify_source="$default_feature"
>  strip_opt="yes"
> -tcg_interpreter="false"
>  mingw32="no"
>  gcov="no"
>  EXESUF=""
> @@ -354,62 +313,32 @@ modules="no"
>  module_upgrades="no"
>  prefix="/usr/local"
>  qemu_suffix="qemu"
> -slirp="auto"
>  bsd="no"
>  linux="no"
>  solaris="no"
>  profiler="no"
> -cocoa="auto"
>  softmmu="yes"
>  linux_user="no"
>  bsd_user="no"
> -blobs="true"
>  pkgversion=""
>  pie=""
>  qom_cast_debug="yes"
>  trace_backends="log"
>  trace_file="trace"
> -spice="auto"
> -spice_protocol="auto"
> -rbd="auto"
> -smartcard="auto"
> -u2f="auto"
> -libusb="auto"
> -usb_redir="auto"
>  opengl="$default_feature"
>  cpuid_h="no"
>  avx2_opt="$default_feature"
> -capstone="auto"
> -lzo="auto"
> -snappy="auto"
> -bzip2="auto"
> -lzfse="auto"
> -zstd="auto"
>  guest_agent="$default_feature"
>  guest_agent_with_vss="no"
>  guest_agent_ntddscsi="no"
> -guest_agent_msi="auto"
>  vss_win32_sdk="$default_feature"
>  win_sdk="no"
>  want_tools="$default_feature"
> -libiscsi="auto"
> -libnfs="auto"
>  coroutine=""
>  coroutine_pool="$default_feature"
>  debug_stack_usage="no"
>  crypto_afalg="no"
> -cfi="false"
> -cfi_debug="false"
> -seccomp="auto"
> -glusterfs="auto"
> -gtk="auto"
>  tls_priority="NORMAL"
> -gnutls="auto"
> -nettle="auto"
> -gcrypt="auto"
> -auth_pam="auto"
> -vte="auto"
> -virglrenderer="auto"
>  tpm="$default_feature"
>  libssh="$default_feature"
>  live_block_migration=${default_feature:-yes}
> @@ -427,24 +356,34 @@ qed=${default_feature:-yes}
>  parallels=${default_feature:-yes}
>  libxml2="auto"
>  debug_mutex="no"
> -libpmem="auto"
> -default_devices="true"
>  plugins="$default_feature"
> -fuzzing="false"
>  rng_none="no"
>  secret_keyring="$default_feature"
>  libdaxctl="auto"
>  meson=""
> +meson_args=""
>  ninja=""
> +gio="$default_feature"
>  skip_meson=no
> -gettext="auto"
> -fuse="auto"
> -fuse_lseek="auto"
> -multiprocess="auto"
>  slirp_smbd="$default_feature"
>
> -malloc_trim="auto"
> -gio="$default_feature"
> +# The following Meson options are handled manually (still they
> +# are included in the automatically generated help message)
> +
> +# 1. Track which submodules are needed
> +capstone="auto"
> +fdt="auto"
> +slirp="auto"
> +
> +# 2. Support --with/--without option
> +default_devices="true"
> +
> +# 3. Automatically enable/disable other options
> +tcg="enabled"
> +cfi="false"
> +
> +# 4. Detection partly done in configure
> +xen=${default_feature:+disabled}
>
>  # parse CC options second
>  for opt do
> @@ -874,11 +813,6 @@ for opt do
>                         error_exit "Can't mix --target-list-exclude with
> --target-list"
>                     fi
>    ;;
> -  --enable-trace-backends=*) trace_backends="$optarg"
> -  ;;
> -  # XXX: backwards compatibility
> -  --enable-trace-backend=*) trace_backends="$optarg"
> -  ;;
>    --with-trace-file=*) trace_file="$optarg"
>    ;;
>    --with-default-devices) default_devices="true"
> @@ -941,42 +875,10 @@ for opt do
>      # configure to be used by RPM and similar macros that set
>      # lots of directory switches by default.
>    ;;
> -  --disable-sdl) sdl="disabled"
> -  ;;
> -  --enable-sdl) sdl="enabled"
> -  ;;
> -  --disable-sdl-image) sdl_image="disabled"
> -  ;;
> -  --enable-sdl-image) sdl_image="enabled"
> -  ;;
>    --disable-qom-cast-debug) qom_cast_debug="no"
>    ;;
>    --enable-qom-cast-debug) qom_cast_debug="yes"
>    ;;
> -  --disable-virtfs) virtfs="disabled"
> -  ;;
> -  --enable-virtfs) virtfs="enabled"
> -  ;;
> -  --disable-libudev) libudev="disabled"
> -  ;;
> -  --enable-libudev) libudev="enabled"
> -  ;;
> -  --disable-virtiofsd) virtiofsd="disabled"
> -  ;;
> -  --enable-virtiofsd) virtiofsd="enabled"
> -  ;;
> -  --disable-mpath) mpath="disabled"
> -  ;;
> -  --enable-mpath) mpath="enabled"
> -  ;;
> -  --disable-vnc) vnc="disabled"
> -  ;;
> -  --enable-vnc) vnc="enabled"
> -  ;;
> -  --disable-gettext) gettext="disabled"
> -  ;;
> -  --enable-gettext) gettext="enabled"
> -  ;;
>    --audio-drv-list=*) audio_drv_list="$optarg"
>    ;;
>    --block-drv-rw-whitelist=*|--block-drv-whitelist=*)
> block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
> @@ -1007,24 +909,8 @@ for opt do
>    ;;
>    --disable-tsan) tsan="no"
>    ;;
> -  --enable-sparse) sparse="enabled"
> -  ;;
> -  --disable-sparse) sparse="disabled"
> -  ;;
>    --disable-strip) strip_opt="no"
>    ;;
> -  --disable-vnc-sasl) vnc_sasl="disabled"
> -  ;;
> -  --enable-vnc-sasl) vnc_sasl="enabled"
> -  ;;
> -  --disable-vnc-jpeg) vnc_jpeg="disabled"
> -  ;;
> -  --enable-vnc-jpeg) vnc_jpeg="enabled"
> -  ;;
> -  --disable-vnc-png) vnc_png="disabled"
> -  ;;
> -  --enable-vnc-png) vnc_png="enabled"
> -  ;;
>    --disable-slirp) slirp="disabled"
>    ;;
>    --enable-slirp) slirp="enabled"
> @@ -1033,113 +919,17 @@ for opt do
>    ;;
>    --enable-slirp=*) slirp="$optarg"
>    ;;
> -  --disable-vde) vde="disabled"
> -  ;;
> -  --enable-vde) vde="enabled"
> -  ;;
> -  --disable-netmap) netmap="disabled"
> -  ;;
> -  --enable-netmap) netmap="enabled"
> -  ;;
>    --disable-xen) xen="disabled"
>    ;;
>    --enable-xen) xen="enabled"
>    ;;
> -  --disable-xen-pci-passthrough) xen_pci_passthrough="disabled"
> -  ;;
> -  --enable-xen-pci-passthrough) xen_pci_passthrough="enabled"
> -  ;;
> -  --disable-alsa) alsa="disabled"
> -  ;;
> -  --enable-alsa) alsa="enabled"
> -  ;;
> -  --disable-coreaudio) coreaudio="disabled"
> -  ;;
> -  --enable-coreaudio) coreaudio="enabled"
> -  ;;
> -  --disable-dsound) dsound="disabled"
> -  ;;
> -  --enable-dsound) dsound="enabled"
> -  ;;
> -  --disable-jack) jack="disabled"
> -  ;;
> -  --enable-jack) jack="enabled"
> -  ;;
> -  --disable-oss) oss="disabled"
> -  ;;
> -  --enable-oss) oss="enabled"
> -  ;;
> -  --disable-pa) pa="disabled"
> -  ;;
> -  --enable-pa) pa="enabled"
> -  ;;
> -  --disable-brlapi) brlapi="disabled"
> -  ;;
> -  --enable-brlapi) brlapi="enabled"
> -  ;;
> -  --disable-kvm) kvm="disabled"
> -  ;;
> -  --enable-kvm) kvm="enabled"
> -  ;;
> -  --disable-hax) hax="disabled"
> -  ;;
> -  --enable-hax) hax="enabled"
> -  ;;
> -  --disable-hvf) hvf="disabled"
> -  ;;
> -  --enable-hvf) hvf="enabled"
> -  ;;
> -  --disable-nvmm) nvmm="disabled"
> -  ;;
> -  --enable-nvmm) nvmm="enabled"
> -  ;;
> -  --disable-whpx) whpx="disabled"
> -  ;;
> -  --enable-whpx) whpx="enabled"
> -  ;;
> -  --disable-tcg-interpreter) tcg_interpreter="false"
> -  ;;
> -  --enable-tcg-interpreter) tcg_interpreter="true"
> -  ;;
> -  --disable-cap-ng)  cap_ng="disabled"
> -  ;;
> -  --enable-cap-ng) cap_ng="enabled"
> -  ;;
>    --disable-tcg) tcg="disabled"
>                   plugins="no"
>    ;;
>    --enable-tcg) tcg="enabled"
>    ;;
> -  --disable-malloc-trim) malloc_trim="disabled"
> -  ;;
> -  --enable-malloc-trim) malloc_trim="enabled"
> -  ;;
> -  --disable-spice) spice="no"
> -  ;;
> -  --enable-spice)
> -      spice_protocol="yes"
> -      spice="yes"
> -  ;;
> -  --disable-spice-protocol)
> -      spice_protocol="no"
> -      spice="no"
> -  ;;
> -  --enable-spice-protocol) spice_protocol="yes"
> -  ;;
> -  --disable-libiscsi) libiscsi="disabled"
> -  ;;
> -  --enable-libiscsi) libiscsi="enabled"
> -  ;;
> -  --disable-libnfs) libnfs="disabled"
> -  ;;
> -  --enable-libnfs) libnfs="enabled"
> -  ;;
>    --enable-profiler) profiler="yes"
>    ;;
> -  --disable-cocoa) cocoa="disabled"
> -  ;;
> -  --enable-cocoa) cocoa="enabled"
> -  ;;
>    --disable-system) softmmu="no"
>    ;;
>    --enable-system) softmmu="yes"
> @@ -1183,22 +973,6 @@ for opt do
>    ;;
>    --disable-cfi) cfi="false"
>    ;;
> -  --enable-cfi-debug) cfi_debug="true"
> -  ;;
> -  --disable-cfi-debug) cfi_debug="false"
> -  ;;
> -  --disable-curses) curses="disabled"
> -  ;;
> -  --enable-curses) curses="enabled"
> -  ;;
> -  --disable-iconv) iconv="disabled"
> -  ;;
> -  --enable-iconv) iconv="enabled"
> -  ;;
> -  --disable-curl) curl="disabled"
> -  ;;
> -  --enable-curl) curl="enabled"
> -  ;;
>    --disable-fdt) fdt="disabled"
>    ;;
>    --enable-fdt) fdt="enabled"
> @@ -1207,28 +981,10 @@ for opt do
>    ;;
>    --enable-fdt=*) fdt="$optarg"
>    ;;
> -  --disable-linux-aio) linux_aio="disabled"
> -  ;;
> -  --enable-linux-aio) linux_aio="enabled"
> -  ;;
> -  --disable-linux-io-uring) linux_io_uring="disabled"
> -  ;;
> -  --enable-linux-io-uring) linux_io_uring="enabled"
> -  ;;
> -  --disable-attr) attr="disabled"
> -  ;;
> -  --enable-attr) attr="enabled"
> -  ;;
>    --disable-membarrier) membarrier="no"
>    ;;
>    --enable-membarrier) membarrier="yes"
>    ;;
> -  --disable-bpf) bpf="disabled"
> -  ;;
> -  --enable-bpf) bpf="enabled"
> -  ;;
> -  --disable-blobs) blobs="false"
> -  ;;
>    --with-pkgversion=*) pkgversion="$optarg"
>    ;;
>    --with-coroutine=*) coroutine="$optarg"
> @@ -1243,10 +999,6 @@ for opt do
>    ;;
>    --disable-crypto-afalg) crypto_afalg="no"
>    ;;
> -  --disable-docs) docs="disabled"
> -  ;;
> -  --enable-docs) docs="enabled"
> -  ;;
>    --disable-vhost-net) vhost_net="no"
>    ;;
>    --enable-vhost-net) vhost_net="yes"
> @@ -1263,10 +1015,6 @@ for opt do
>    ;;
>    --enable-vhost-vsock) vhost_vsock="yes"
>    ;;
> -  --disable-vhost-user-blk-server) vhost_user_blk_server="disabled"
> -  ;;
> -  --enable-vhost-user-blk-server) vhost_user_blk_server="enabled"
> -  ;;
>    --disable-vhost-user-fs) vhost_user_fs="no"
>    ;;
>    --enable-vhost-user-fs) vhost_user_fs="yes"
> @@ -1275,60 +1023,16 @@ for opt do
>    ;;
>    --enable-opengl) opengl="yes"
>    ;;
> -  --disable-rbd) rbd="disabled"
> -  ;;
> -  --enable-rbd) rbd="enabled"
> -  ;;
>    --disable-xfsctl) xfs="no"
>    ;;
>    --enable-xfsctl) xfs="yes"
>    ;;
> -  --disable-smartcard) smartcard="disabled"
> -  ;;
> -  --enable-smartcard) smartcard="enabled"
> -  ;;
> -  --disable-u2f) u2f="disabled"
> -  ;;
> -  --enable-u2f) u2f="enabled"
> -  ;;
> -  --disable-libusb) libusb="disabled"
> -  ;;
> -  --enable-libusb) libusb="enabled"
> -  ;;
> -  --disable-usb-redir) usb_redir="disabled"
> -  ;;
> -  --enable-usb-redir) usb_redir="enabled"
> -  ;;
>    --disable-zlib-test)
>    ;;
> -  --disable-lzo) lzo="disabled"
> -  ;;
> -  --enable-lzo) lzo="enabled"
> -  ;;
> -  --disable-snappy) snappy="disabled"
> -  ;;
> -  --enable-snappy) snappy="enabled"
> -  ;;
> -  --disable-bzip2) bzip2="disabled"
> -  ;;
> -  --enable-bzip2) bzip2="enabled"
> -  ;;
> -  --enable-lzfse) lzfse="enabled"
> -  ;;
> -  --disable-lzfse) lzfse="disabled"
> -  ;;
> -  --disable-zstd) zstd="disabled"
> -  ;;
> -  --enable-zstd) zstd="enabled"
> -  ;;
>    --enable-guest-agent) guest_agent="yes"
>    ;;
>    --disable-guest-agent) guest_agent="no"
>    ;;
> -  --enable-guest-agent-msi) guest_agent_msi="enabled"
> -  ;;
> -  --disable-guest-agent-msi) guest_agent_msi="disabled"
> -  ;;
>    --with-vss-sdk) vss_win32_sdk=""
>    ;;
>    --with-vss-sdk=*) vss_win32_sdk="$optarg"
> @@ -1345,12 +1049,6 @@ for opt do
>    ;;
>    --disable-tools) want_tools="no"
>    ;;
> -  --enable-seccomp) seccomp="enabled"
> -  ;;
> -  --disable-seccomp) seccomp="disabled"
> -  ;;
> -  --disable-glusterfs) glusterfs="disabled"
> -  ;;
>    --disable-avx2) avx2_opt="no"
>    ;;
>    --enable-avx2) avx2_opt="yes"
> @@ -1359,9 +1057,6 @@ for opt do
>    ;;
>    --enable-avx512f) avx512f_opt="yes"
>    ;;
> -
> -  --enable-glusterfs) glusterfs="enabled"
> -  ;;
>    --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
>        echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
>    ;;
> @@ -1371,28 +1066,8 @@ for opt do
>    --enable-uuid|--disable-uuid)
>        echo "$0: $opt is obsolete, UUID support is always built" >&2
>    ;;
> -  --disable-gtk) gtk="disabled"
> -  ;;
> -  --enable-gtk) gtk="enabled"
> -  ;;
>    --tls-priority=*) tls_priority="$optarg"
>    ;;
> -  --disable-gnutls) gnutls="disabled"
> -  ;;
> -  --enable-gnutls) gnutls="enabled"
> -  ;;
> -  --disable-nettle) nettle="disabled"
> -  ;;
> -  --enable-nettle) nettle="enabled"
> -  ;;
> -  --disable-gcrypt) gcrypt="disabled"
> -  ;;
> -  --enable-gcrypt) gcrypt="enabled"
> -  ;;
> -  --disable-auth-pam) auth_pam="disabled"
> -  ;;
> -  --enable-auth-pam) auth_pam="enabled"
> -  ;;
>    --enable-rdma) rdma="yes"
>    ;;
>    --disable-rdma) rdma="no"
> @@ -1401,14 +1076,6 @@ for opt do
>    ;;
>    --disable-pvrdma) pvrdma="no"
>    ;;
> -  --disable-vte) vte="disabled"
> -  ;;
> -  --enable-vte) vte="enabled"
> -  ;;
> -  --disable-virglrenderer) virglrenderer="disabled"
> -  ;;
> -  --enable-virglrenderer) virglrenderer="enabled"
> -  ;;
>    --disable-tpm) tpm="no"
>    ;;
>    --enable-tpm) tpm="yes"
> @@ -1425,18 +1092,6 @@ for opt do
>    ;;
>    --enable-numa) numa="yes"
>    ;;
> -  --disable-libxml2) libxml2="disabled"
> -  ;;
> -  --enable-libxml2) libxml2="enabled"
> -  ;;
> -  --disable-tcmalloc) tcmalloc="no"
> -  ;;
> -  --enable-tcmalloc) tcmalloc="yes"
> -  ;;
> -  --disable-jemalloc) jemalloc="no"
> -  ;;
> -  --enable-jemalloc) jemalloc="yes"
> -  ;;
>    --disable-replication) replication="no"
>    ;;
>    --enable-replication) replication="yes"
> @@ -1502,14 +1157,6 @@ for opt do
>    ;;
>    --disable-debug-mutex) debug_mutex=no
>    ;;
> -  --enable-libpmem) libpmem="enabled"
> -  ;;
> -  --disable-libpmem) libpmem="disabled"
> -  ;;
> -  --enable-xkbcommon) xkbcommon="enabled"
> -  ;;
> -  --disable-xkbcommon) xkbcommon="disabled"
> -  ;;
>    --enable-plugins) if test "$mingw32" = "yes"; then
>                          error_exit "TCG plugins not currently supported
> on Windows platforms"
>                      else
> @@ -1522,10 +1169,6 @@ for opt do
>    ;;
>    --disable-containers) use_containers="no"
>    ;;
> -  --enable-fuzzing) fuzzing=true
> -  ;;
> -  --disable-fuzzing) fuzzing=false
> -  ;;
>    --gdb=*) gdb_bin="$optarg"
>    ;;
>    --enable-rng-none) rng_none=yes
> @@ -1536,22 +1179,6 @@ for opt do
>    ;;
>    --disable-keyring) secret_keyring="no"
>    ;;
> -  --enable-libdaxctl) libdaxctl="enabled"
> -  ;;
> -  --disable-libdaxctl) libdaxctl="disabled"
> -  ;;
> -  --enable-fuse) fuse="enabled"
> -  ;;
> -  --disable-fuse) fuse="disabled"
> -  ;;
> -  --enable-fuse-lseek) fuse_lseek="enabled"
> -  ;;
> -  --disable-fuse-lseek) fuse_lseek="disabled"
> -  ;;
> -  --enable-multiprocess) multiprocess="enabled"
> -  ;;
> -  --disable-multiprocess) multiprocess="disabled"
> -  ;;
>    --enable-gio) gio=yes
>    ;;
>    --disable-gio) gio=no
> @@ -1714,9 +1341,6 @@ for config in $mak_wilds; do
>      fi
>  done
>
> -# Enumerate public trace backends for --help output
> -trace_backend_list=$(echo $(grep -le '^PUBLIC = True$'
> "$source_path"/scripts/tracetool/backend/*.py | sed -e
> 's/^.*\/\(.*\)\.py$/\1/'))
> -
>  if test x"$show_help" = x"yes" ; then
>  cat << EOF
>
> @@ -1793,18 +1417,12 @@ Advanced options (experts only):
>                             (by default affects only QEMU, not tools like
> qemu-img)
>    --enable-block-drv-whitelist-in-tools
>                             use block whitelist also in tools instead of
> only QEMU
> -  --enable-trace-backends=B Set trace backend
> -                           Available backends: $trace_backend_list
>    --with-trace-file=NAME   Full PATH,NAME of file to store traces
>                             Default:trace-<pid>
> -  --disable-slirp          disable SLIRP userspace network connectivity
> -  --enable-tcg-interpreter enable TCI (TCG with bytecode interpreter,
> experimental and slow)
> -  --enable-malloc-trim     enable libc malloc_trim() for memory
> optimization
>    --cpu=CPU                Build for host CPU [$cpu]
>    --with-coroutine=BACKEND coroutine backend. Supported options:
>                             ucontext, sigaltstack, windows
>    --enable-gcov            enable test coverage analysis with gcov
> -  --disable-blobs          disable installing provided firmware blobs
>    --with-vss-sdk=SDK-path  enable Windows VSS support in QEMU Guest Agent
>    --with-win-sdk=SDK-path  path to Windows Platform SDK (to build VSS
> .tlb)
>    --tls-priority           default TLS protocol/cipher priority string
> @@ -1823,9 +1441,7 @@ cat << EOF
>    user            supported user emulation targets
>    linux-user      all linux usermode emulation targets
>    bsd-user        all BSD usermode emulation targets
> -  docs            build documentation
>    guest-agent     build the QEMU Guest Agent
> -  guest-agent-msi build guest agent Windows MSI installation package
>    pie             Position Independent Executables
>    modules         modules support (non-Windows)
>    module-upgrades try to load modules from alternate paths for upgrades
> @@ -1835,98 +1451,26 @@ cat << EOF
>    sparse          sparse checker
>    safe-stack      SafeStack Stack Smash Protection. Depends on
>                    clang/llvm >= 3.7 and requires coroutine backend
> ucontext.
> -  cfi             Enable Control-Flow Integrity for indirect function
> calls.
> -                  In case of a cfi violation, QEMU is terminated with
> SIGILL
> -                  Depends on lto and is incompatible with modules
> -                  Automatically enables Link-Time Optimization (lto)
> -  cfi-debug       In case of a cfi violation, a message containing the
> line that
> -                  triggered the error is written to stderr. After the
> error,
> -                  QEMU is still terminated with SIGILL
> -  gnutls          GNUTLS cryptography support
> -  nettle          nettle cryptography support
> -  gcrypt          libgcrypt cryptography support
> -  auth-pam        PAM access control
> -  sdl             SDL UI
> -  sdl-image       SDL Image support for icons
> -  gtk             gtk UI
> -  vte             vte support for the gtk UI
> -  curses          curses UI
> -  iconv           font glyph conversion support
> -  vnc             VNC UI support
> -  vnc-sasl        SASL encryption for VNC server
> -  vnc-jpeg        JPEG lossy compression for VNC server
> -  vnc-png         PNG compression for VNC server
> -  cocoa           Cocoa UI (Mac OS X only)
> -  virtfs          VirtFS
> -  virtiofsd       build virtiofs daemon (virtiofsd)
> -  libudev         Use libudev to enumerate host devices
> -  mpath           Multipath persistent reservation passthrough
> -  xen             xen backend driver support
> -  xen-pci-passthrough    PCI passthrough support for Xen
> -  alsa            ALSA sound support
> -  coreaudio       CoreAudio sound support
> -  dsound          DirectSound sound support
> -  jack            JACK sound support
> -  oss             OSS sound support
> -  pa              PulseAudio sound support
> -  brlapi          BrlAPI (Braile)
> -  curl            curl connectivity
>    membarrier      membarrier system call (for Linux 4.14+ or Windows)
> -  fdt             fdt device tree
> -  kvm             KVM acceleration support
> -  hax             HAX acceleration support
> -  hvf             Hypervisor.framework acceleration support
> -  nvmm            NVMM acceleration support
> -  whpx            Windows Hypervisor Platform acceleration support
>    rdma            Enable RDMA-based migration
>    pvrdma          Enable PVRDMA support
> -  vde             support for vde network
> -  netmap          support for netmap network
> -  linux-aio       Linux AIO support
> -  linux-io-uring  Linux io_uring support
> -  cap-ng          libcap-ng support
> -  attr            attr and xattr support
>    vhost-net       vhost-net kernel acceleration support
>    vhost-vsock     virtio sockets device support
>    vhost-scsi      vhost-scsi kernel target support
>    vhost-crypto    vhost-user-crypto backend support
>    vhost-kernel    vhost kernel backend support
>    vhost-user      vhost-user backend support
> -  vhost-user-blk-server    vhost-user-blk server support
>    vhost-vdpa      vhost-vdpa kernel backend support
> -  bpf             BPF kernel support
> -  spice           spice
> -  spice-protocol  spice-protocol
> -  rbd             rados block device (rbd)
> -  libiscsi        iscsi support
> -  libnfs          nfs support
> -  smartcard       smartcard support (libcacard)
> -  u2f             U2F support (u2f-emu)
> -  libusb          libusb (for usb passthrough)
>    live-block-migration   Block migration in the main migration stream
> -  usb-redir       usb network redirection support
> -  lzo             support of lzo compression library
> -  snappy          support of snappy compression library
> -  bzip2           support of bzip2 compression library
> -                  (for reading bzip2-compressed dmg images)
> -  lzfse           support of lzfse compression library
> -                  (for reading lzfse-compressed dmg images)
> -  zstd            support for zstd compression library
> -                  (for migration compression and qcow2 cluster
> compression)
> -  seccomp         seccomp support
>    coroutine-pool  coroutine freelist (better performance)
> -  glusterfs       GlusterFS backend
>    tpm             TPM support
>    libssh          ssh block device support
>    numa            libnuma support
>    libxml2         for Parallels image format
> -  tcmalloc        tcmalloc support
> -  jemalloc        jemalloc support
>    avx2            AVX2 optimization support
>    avx512f         AVX512F optimization support
>    replication     replication support
>    opengl          opengl support
> -  virglrenderer   virgl rendering support
>    xfsctl          xfsctl support
>    qom-cast-debug  cast debugging support
>    tools           build qemu-io, qemu-nbd and qemu-img tools
> @@ -1939,15 +1483,8 @@ cat << EOF
>    qed             qed image format support
>    parallels       parallels image format support
>    crypto-afalg    Linux AF_ALG crypto backend driver
> -  capstone        capstone disassembler support
>    debug-mutex     mutex debugging support
> -  libpmem         libpmem support
> -  xkbcommon       xkbcommon support
>    rng-none        dummy RNG, avoid using /dev/(u)random and getrandom()
> -  libdaxctl       libdaxctl support
> -  fuse            FUSE block device export
> -  fuse-lseek      SEEK_HOLE/SEEK_DATA support for FUSE exports
> -  multiprocess    Out of process device emulation support
>    gio             libgio support
>    slirp-smbd      use smbd (at path --smbd=*) in slirp networking
>
> @@ -3171,16 +2708,6 @@ EOF
>    fi
>  fi
>
> -malloc=system
> -if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
> -    echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
> -    exit 1
> -elif test "$tcmalloc" = "yes" ; then
> -    malloc=tcmalloc
> -elif test "$jemalloc" = "yes" ; then
> -    malloc=jemalloc
> -fi
> -
>  # check for usbfs
>  have_usbfs=no
>  if test "$linux_user" = "yes"; then
> @@ -4511,40 +4038,23 @@ if test "$skip_meson" = no; then
>          --sysconfdir "$sysconfdir" \
>          --localedir "$localedir" \
>          --localstatedir "$local_statedir" \
> +        -Daudio_drv_list=$audio_drv_list \
> +        -Ddefault_devices=$default_devices \
>          -Ddocdir="$docdir" \
>          -Dqemu_firmwarepath="$firmwarepath" \
>          -Dqemu_suffix="$qemu_suffix" \
> +        -Dsphinx_build="$sphinx_build" \
> +        -Dtrace_file="$trace_file" \
>          -Doptimization=$(if test "$debug" = yes; then echo 0; else echo
> 2; fi) \
>          -Ddebug=$(if test "$debug_info" = yes; then echo true; else echo
> false; fi) \
>          -Dwerror=$(if test "$werror" = yes; then echo true; else echo
> false; fi) \
>          -Dstrip=$(if test "$strip_opt" = yes; then echo true; else echo
> false; fi) \
>          -Db_pie=$(if test "$pie" = yes; then echo true; else echo false;
> fi) \
>          -Db_coverage=$(if test "$gcov" = yes; then echo true; else echo
> false; fi) \
> -        -Db_lto=$lto -Dcfi=$cfi -Dcfi_debug=$cfi_debug -Dfuzzing=$fuzzing
> \
> +        -Db_lto=$lto -Dcfi=$cfi -Dtcg=$tcg -Dxen=$xen \
> +        -Dcapstone=$capstone -Dfdt=$fdt -Dslirp=$slirp \
>          $(test -n "${LIB_FUZZING_ENGINE+xxx}" && echo
> "-Dfuzzing_engine=$LIB_FUZZING_ENGINE") \
> -        -Dmalloc=$malloc -Dmalloc_trim=$malloc_trim -Dsparse=$sparse \
> -        -Dkvm=$kvm -Dhax=$hax -Dwhpx=$whpx -Dhvf=$hvf -Dnvmm=$nvmm \
> -        -Dxen=$xen -Dxen_pci_passthrough=$xen_pci_passthrough -Dtcg=$tcg \
> -        -Dcocoa=$cocoa -Dgtk=$gtk -Dmpath=$mpath -Dsdl=$sdl
> -Dsdl_image=$sdl_image \
> -        -Dlibusb=$libusb -Dsmartcard=$smartcard -Dusb_redir=$usb_redir
> -Dvte=$vte \
> -        -Dvnc=$vnc -Dvnc_sasl=$vnc_sasl -Dvnc_jpeg=$vnc_jpeg
> -Dvnc_png=$vnc_png \
> -        -Dgettext=$gettext -Dxkbcommon=$xkbcommon -Du2f=$u2f
> -Dvirtiofsd=$virtiofsd \
> -        -Dcapstone=$capstone -Dslirp=$slirp -Dfdt=$fdt -Dbrlapi=$brlapi \
> -        -Dcurl=$curl -Dglusterfs=$glusterfs -Dbzip2=$bzip2
> -Dlibiscsi=$libiscsi \
> -        -Dlibnfs=$libnfs -Diconv=$iconv -Dcurses=$curses
> -Dlibudev=$libudev\
> -        -Drbd=$rbd -Dlzo=$lzo -Dsnappy=$snappy -Dlzfse=$lzfse
> -Dlibxml2=$libxml2 \
> -        -Dlibdaxctl=$libdaxctl -Dlibpmem=$libpmem
> -Dlinux_io_uring=$linux_io_uring \
> -        -Dgnutls=$gnutls -Dnettle=$nettle -Dgcrypt=$gcrypt
> -Dauth_pam=$auth_pam \
> -        -Dzstd=$zstd -Dseccomp=$seccomp -Dvirtfs=$virtfs -Dcap_ng=$cap_ng
> \
> -        -Dattr=$attr -Ddefault_devices=$default_devices
> -Dvirglrenderer=$virglrenderer \
> -        -Ddocs=$docs -Dsphinx_build=$sphinx_build -Dinstall_blobs=$blobs \
> -        -Dvhost_user_blk_server=$vhost_user_blk_server
> -Dmultiprocess=$multiprocess \
> -        -Dfuse=$fuse -Dfuse_lseek=$fuse_lseek
> -Dguest_agent_msi=$guest_agent_msi -Dbpf=$bpf\
>          $(if test "$default_feature" = no; then echo
> "-Dauto_features=disabled"; fi) \
> -        -Dalsa=$alsa -Dcoreaudio=$coreaudio -Ddsound=$dsound -Djack=$jack
> -Doss=$oss \
> -        -Dpa=$pa -Daudio_drv_list=$audio_drv_list
> -Dtcg_interpreter=$tcg_interpreter \
> -        -Dtrace_backends=$trace_backends -Dtrace_file=$trace_file
> -Dlinux_aio=$linux_aio \
> -        -Dnetmap=$netmap -Dvde=$vde \
>          "$@" $cross_arg "$PWD" "$source_path"
>    }
>    eval run_meson $meson_options
> diff --git a/docs/devel/build-system.rst b/docs/devel/build-system.rst
> index 0f636d620e..b79012b965 100644
> --- a/docs/devel/build-system.rst
> +++ b/docs/devel/build-system.rst
> @@ -42,73 +42,21 @@ perform a build:
>       ../configure
>       make
>
> -For now, checks on the compilation environment are found in configure
> -rather than meson.build, though this is expected to change.  The command
> -line is parsed in the configure script and, whenever needed, converted
> -into the appropriate options to Meson.
> -
> -New checks should be added to Meson, which usually comprises the
> -following tasks:
> -
> - - Add a Meson build option to meson_options.txt.
> -
> - - Add support to the command line arg parser to handle any new
> -   ``--enable-XXX``/``--disable-XXX`` flags required by the feature.
> -
> - - Add information to the help output message to report on the new
> -   feature flag.
> -
> - - Add code to perform the actual feature check.
> -
> - - Add code to include the feature status in ``config-host.h``
> -
> - - Add code to print out the feature status in the configure summary
> -   upon completion.
> -
> -
> -Taking the probe for SDL2_Image as an example, we have the following
> pieces
> -in configure::
> -
> -  # Initial variable state
> -  sdl_image=auto
> -
> -  ..snip..
> -
> -  # Configure flag processing
> -  --disable-sdl-image) sdl_image=disabled
> -  ;;
> -  --enable-sdl-image) sdl_image=enabled
> -  ;;
> -
> -  ..snip..
> -
> -  # Help output feature message
> -  sdl-image         SDL Image support for icons
> -
> -  ..snip..
> -
> -  # Meson invocation
> -  -Dsdl_image=$sdl_image
> -
> -In meson_options.txt::
> -
> -  option('sdl', type : 'feature', value : 'auto',
> -         description: 'SDL Image support for icons')
> -
> -In meson.build::
> -
> -  # Detect dependency
> -  sdl_image = dependency('SDL2_image', required: get_option('sdl_image'),
> -                         method: 'pkg-config',
> -                         kwargs: static_kwargs)
> -
> -  # Create config-host.h (if applicable)
> -  config_host_data.set('CONFIG_SDL_IMAGE', sdl_image.found())
> -
> -  # Summary
> -  summary_info += {'SDL image support': sdl_image.found()}
> +The configure script automatically recognizes
> +command line options for which a same-named Meson option exists;
> +dashes in the command line are replaced with underscores.
>
> +Many checks on the compilation environment are still found in configure
> +rather than `meson.build`, but new checks should be added directly to
> +`meson.build`.
>
> +Patches are also welcome to move existing checks from the configure
> +phase to `meson.build`.  When doing so, ensure that `meson.build` does
> +not use anymore the keys that you have removed from `config-host.mak`.
> +Typically these will be replaced in `meson.build` by boolean variables,
> +``get_option('optname')`` invocations, or `dep.found()` expressions.
> +In general, the remaining checks have little or no interdependencies,
> +so they can be moved one by one.
>
>  Helper functions
>  ----------------
> @@ -335,6 +283,61 @@ new target, or enabling new devices or hardware for a
> particular
>  system/userspace emulation target
>
>
> +Adding checks
> +-------------
> +
> +New checks should be added to Meson.  Compiler checks can be as simple as
> +the following::
> +
> +  config_host_data.set('HAVE_BTRFS_H', cc.has_header('linux/btrfs.h'))
> +
> +A more complex task such as adding a new dependency usually
> +comprises the following tasks:
> +
> + - Add a Meson build option to meson_options.txt.
> +
> + - Add code to perform the actual feature check.
> +
> + - Add code to include the feature status in `config-host.h`
> +
> + - Add code to print out the feature status in the configure summary
> +   upon completion.
> +
> +Taking the probe for SDL2_Image as an example, we have the following
> +in ``meson_options.txt``::
> +
> +  option('sdl_image', type : 'feature', value : 'auto',
> +         description: 'SDL Image support for icons')
> +
> +Unless the option was given a non-``auto`` value (on the configure
> +command line), the detection code must be performed only if the
> +dependency will be used::
> +
> +  sdl_image = not_found
> +  if not get_option('sdl_image').auto() or have_system
> +    sdl_image = dependency('SDL2_image', required:
> get_option('sdl_image'),
> +                           method: 'pkg-config',
> +                           static: enable_static)
> +  endif
> +
> +This avoids warnings on static builds of user-mode emulators, for example.
> +Most of the libraries used by system-mode emulators are not available for
> +static linking.
> +
> +The other supporting code is generally simple::
> +
> +  # Create config-host.h (if applicable)
> +  config_host_data.set('CONFIG_SDL_IMAGE', sdl_image.found())
> +
> +  # Summary
> +  summary_info += {'SDL image support': sdl_image.found()}
> +
> +For the configure script to parse the new option, the
> +``scripts/meson-buildoptions.sh`` file must be up-to-date; ``make
> +For the configure script to parse the new option, the
> ``meson-buildoptions.json``
> +update-buildoptions`` (or just `make`) will take care of updating it.
> +
> +
>  Support scripts
>  ---------------
>
> diff --git a/meson_options.txt b/meson_options.txt
> index 5a140af7f7..4ab4570125 100644
> --- a/meson_options.txt
> +++ b/meson_options.txt
> @@ -1,3 +1,7 @@
> +# These options do not correspond to a --enable/--disable-* option
> +# on the configure script command line.  If you add more, list them in
> +# scripts/meson-buildoptions.py's SKIP_OPTIONS constant too.
> +
>  option('qemu_suffix', type : 'string', value: 'qemu',
>         description: 'Suffix for QEMU data/modules/config directories (can
> be empty)')
>  option('docdir', type : 'string', value : 'doc',
> @@ -16,6 +20,10 @@ option('fuzzing_engine', type : 'string', value : '',
>  option('trace_file', type: 'string', value: 'trace',
>         description: 'Trace file prefix for simple backend')
>
> +# Everything else can be set via --enable/--disable-* option
> +# on the configure script command line.  After adding an option
> +# here make sure to run "make update-buildoptions".
> +
>  option('docs', type : 'feature', value : 'auto',
>         description: 'Documentations build support')
>  option('fuzzing', type : 'boolean', value: false,
> diff --git a/scripts/meson-buildoptions.py b/scripts/meson-buildoptions.py
> index 8948c296b7..9132e86efb 100755
> --- a/scripts/meson-buildoptions.py
> +++ b/scripts/meson-buildoptions.py
> @@ -25,10 +25,71 @@
>  import shlex
>  import sys
>
> +SKIP_OPTIONS = {
> +    "audio_drv_list",
> +    "default_devices",
> +    "docdir",
> +    "fuzzing_engine",
> +    "qemu_firmwarepath",
> +    "qemu_suffix",
> +    "sphinx_build",
> +    "trace_file",
> +}
> +
> +LINE_WIDTH = 76
> +
> +# Convert the default value of an option to the string used in
> +# the help message
> +def value_to_help(value):
> +    if isinstance(value, list):
> +        return ",".join(value)
> +    if isinstance(value, bool):
> +        return "enabled" if value else "disabled"
> +    return str(value)
> +
> +
> +def wrap(left, text, indent):
> +    length = LINE_WIDTH - indent
> +    if len(left) >= indent:
> +        yield left
> +        yield from wrap("", text, indent)
> +    else:
> +        spaces = " " * indent
> +        left = (left + spaces)[0:indent]
> +        yield from textwrap.wrap(
> +            text, width=LINE_WIDTH, initial_indent=left,
> subsequent_indent=spaces
> +        )
> +
> +
>  def sh_print(line=""):
>      print('  printf "%s\\n"', shlex.quote(line))
>
>
> +def help_line(left, opt, indent, long):
> +    right = f"{opt['description']}"
> +    if long:
> +        value = value_to_help(opt["value"])
> +        if value != "auto":
> +            right += f" [{value}]"
> +    if "choices" in opt and long:
> +        choices = "/".join(sorted(opt["choices"]))
> +        right += f" (choices: {choices})"
> +    for x in wrap("  " + left, right, indent):
> +        sh_print(x)
> +
> +
> +# Return whether the option (a dictionary) can be used with
> +# arguments.  Booleans can never be used with arguments;
> +# combos allow an argument only if they accept other values
> +# than "auto", "enabled", and "disabled".
> +def allow_arg(opt):
> +    if opt["type"] == "boolean":
> +        return False
> +    if opt["type"] != "combo":
> +        return True
> +    return not (set(opt["choices"]) <= {"auto", "disabled", "enabled"})
> +
> +
>  def load_options(json):
>      json = [
>          x
> @@ -42,17 +103,48 @@ def load_options(json):
>
>  def print_help(options):
>      print("meson_options_help() {")
> +    for opt in options:
> +        key = opt["name"].replace("_", "-")
> +        # The first section includes options that have an arguments,
> +        # and booleans (i.e., only one of enable/disable makes sense)
> +        if opt["type"] == "boolean":
> +            left = f"--disable-{key}" if opt["value"] else
> f"--enable-{key}"
> +            help_line(left, opt, 27, False)
> +        elif allow_arg(opt):
> +            if opt["type"] == "combo" and "enabled" in opt["choices"]:
> +                left = f"--enable-{key}[=CHOICE]"
> +            else:
> +                left = f"--enable-{key}=CHOICE"
> +            help_line(left, opt, 27, True)
> +
>      sh_print()
>      sh_print("Optional features, enabled with --enable-FEATURE and")
>      sh_print("disabled with --disable-FEATURE, default is enabled if
> available")
>      sh_print("(unless built with --without-default-features):")
>      sh_print()
> +    for opt in options:
> +        key = opt["name"].replace("_", "-")
> +        if opt["type"] != "boolean" and not allow_arg(opt):
> +            help_line(key, opt, 18, False)
>      print("}")
>
>
>  def print_parse(options):
>      print("_meson_option_parse() {")
>      print("  case $1 in")
> +    for opt in options:
> +        key = opt["name"].replace("_", "-")
> +        name = opt["name"]
> +        if opt["type"] == "boolean":
> +            print(f'    --enable-{key}) printf "%s" -D{name}=true ;;')
> +            print(f'    --disable-{key}) printf "%s" -D{name}=false ;;')
> +        else:
> +            if opt["type"] == "combo" and "enabled" in opt["choices"]:
> +                print(f'    --enable-{key}) printf "%s" -D{name}=enabled
> ;;')
> +            if opt["type"] == "combo" and "disabled" in opt["choices"]:
> +                print(f'    --disable-{key}) printf "%s"
> -D{name}=disabled ;;')
> +            if allow_arg(opt):
> +                print(f'    --enable-{key}=*) quote_sh "-D{name}=$2" ;;')
>      print("    *) return 1 ;;")
>      print("  esac")
>      print("}")
> diff --git a/scripts/meson-buildoptions.sh b/scripts/meson-buildoptions.sh
> index 3be3058a6c..b81e99644f 100644
> --- a/scripts/meson-buildoptions.sh
> +++ b/scripts/meson-buildoptions.sh
> @@ -1,12 +1,268 @@
>  meson_options_help() {
> +  printf "%s\n" '  --enable-capstone[=CHOICE]'
> +  printf "%s\n" '                           Whether and how to find the
> capstone library'
> +  printf "%s\n" '                           (choices:
> auto/disabled/enabled/internal/system)'
> +  printf "%s\n" '  --enable-cfi             Control-Flow Integrity (CFI)'
> +  printf "%s\n" '  --enable-cfi-debug       Verbose errors in case of CFI
> violation'
> +  printf "%s\n" '  --enable-fdt[=CHOICE]    Whether and how to find the
> libfdt library'
> +  printf "%s\n" '                           (choices:
> auto/disabled/enabled/internal/system)'
> +  printf "%s\n" '  --enable-fuzzing         build fuzzing targets'
> +  printf "%s\n" '  --disable-install-blobs  install provided firmware
> blobs'
> +  printf "%s\n" '  --enable-malloc=CHOICE   choose memory allocator to
> use [system] (choices:'
> +  printf "%s\n" '                           jemalloc/system/tcmalloc)'
> +  printf "%s\n" '  --enable-slirp[=CHOICE]  Whether and how to find the
> slirp library'
> +  printf "%s\n" '                           (choices:
> auto/disabled/enabled/internal/system)'
> +  printf "%s\n" '  --enable-tcg-interpreter TCG with bytecode interpreter
> (experimental and'
> +  printf "%s\n" '                           slow)'
> +  printf "%s\n" '  --enable-trace-backends=CHOICE'
> +  printf "%s\n" '                           Set available tracing
> backends [log]'
>    printf "%s\n" ''
>    printf "%s\n" 'Optional features, enabled with --enable-FEATURE and'
>    printf "%s\n" 'disabled with --disable-FEATURE, default is enabled if
> available'
>    printf "%s\n" '(unless built with --without-default-features):'
>    printf "%s\n" ''
> +  printf "%s\n" '  alsa            ALSA sound support'
> +  printf "%s\n" '  attr            attr/xattr support'
> +  printf "%s\n" '  auth-pam        PAM access control'
> +  printf "%s\n" '  bpf             eBPF support'
> +  printf "%s\n" '  brlapi          brlapi character device driver'
> +  printf "%s\n" '  bzip2           bzip2 support for DMG images'
> +  printf "%s\n" '  cap-ng          cap_ng support'
> +  printf "%s\n" '  cocoa           Cocoa user interface (macOS only)'
> +  printf "%s\n" '  coreaudio       CoreAudio sound support'
> +  printf "%s\n" '  curl            CURL block device driver'
> +  printf "%s\n" '  curses          curses UI'
> +  printf "%s\n" '  docs            Documentations build support'
> +  printf "%s\n" '  dsound          DirectSound sound support'
> +  printf "%s\n" '  fuse            FUSE block device export'
> +  printf "%s\n" '  fuse-lseek      SEEK_HOLE/SEEK_DATA support for FUSE
> exports'
> +  printf "%s\n" '  gcrypt          libgcrypt cryptography support'
> +  printf "%s\n" '  gettext         Localization of the GTK+ user
> interface'
> +  printf "%s\n" '  glusterfs       Glusterfs block device driver'
> +  printf "%s\n" '  gnutls          GNUTLS cryptography support'
> +  printf "%s\n" '  gtk             GTK+ user interface'
> +  printf "%s\n" '  guest-agent-msi Build MSI package for the QEMU Guest
> Agent'
> +  printf "%s\n" '  hax             HAX acceleration support'
> +  printf "%s\n" '  hvf             HVF acceleration support'
> +  printf "%s\n" '  iconv           Font glyph conversion support'
> +  printf "%s\n" '  jack            JACK sound support'
> +  printf "%s\n" '  kvm             KVM acceleration support'
> +  printf "%s\n" '  libdaxctl       libdaxctl support'
> +  printf "%s\n" '  libiscsi        libiscsi userspace initiator'
> +  printf "%s\n" '  libnfs          libnfs block device driver'
> +  printf "%s\n" '  libpmem         libpmem support'
> +  printf "%s\n" '  libudev         Use libudev to enumerate host devices'
> +  printf "%s\n" '  libusb          libusb support for USB passthrough'
> +  printf "%s\n" '  libxml2         libxml2 support for Parallels image
> format'
> +  printf "%s\n" '  linux-aio       Linux AIO support'
> +  printf "%s\n" '  linux-io-uring  Linux io_uring support'
> +  printf "%s\n" '  lzfse           lzfse support for DMG images'
> +  printf "%s\n" '  lzo             lzo compression support'
> +  printf "%s\n" '  malloc-trim     enable libc malloc_trim() for memory
> optimization'
> +  printf "%s\n" '  mpath           Multipath persistent reservation
> passthrough'
> +  printf "%s\n" '  multiprocess    Out of process device emulation
> support'
> +  printf "%s\n" '  netmap          netmap network backend support'
> +  printf "%s\n" '  nettle          nettle cryptography support'
> +  printf "%s\n" '  nvmm            NVMM acceleration support'
> +  printf "%s\n" '  oss             OSS sound support'
> +  printf "%s\n" '  pa              PulseAudio sound support'
> +  printf "%s\n" '  rbd             Ceph block device driver'
> +  printf "%s\n" '  sdl             SDL user interface'
> +  printf "%s\n" '  sdl-image       SDL Image support for icons'
> +  printf "%s\n" '  seccomp         seccomp support'
> +  printf "%s\n" '  smartcard       CA smartcard emulation support'
> +  printf "%s\n" '  snappy          snappy compression support'
> +  printf "%s\n" '  sparse          sparse checker'
> +  printf "%s\n" '  spice           Spice server support'
> +  printf "%s\n" '  spice-protocol  Spice protocol support'
> +  printf "%s\n" '  tcg             TCG support'
> +  printf "%s\n" '  u2f             U2F emulation support'
> +  printf "%s\n" '  usb-redir       libusbredir support'
> +  printf "%s\n" '  vde             vde network backend support'
> +  printf "%s\n" '  vhost-user-blk-server'
> +  printf "%s\n" '                  build vhost-user-blk server'
> +  printf "%s\n" '  virglrenderer   virgl rendering support'
> +  printf "%s\n" '  virtfs          virtio-9p support'
> +  printf "%s\n" '  virtiofsd       build virtiofs daemon (virtiofsd)'
> +  printf "%s\n" '  vnc             VNC server'
> +  printf "%s\n" '  vnc-jpeg        JPEG lossy compression for VNC server'
> +  printf "%s\n" '  vnc-png         PNG compression for VNC server'
> +  printf "%s\n" '  vnc-sasl        SASL authentication for VNC server'
> +  printf "%s\n" '  vte             vte support for the gtk UI'
> +  printf "%s\n" '  whpx            WHPX acceleration support'
> +  printf "%s\n" '  xen             Xen backend support'
> +  printf "%s\n" '  xen-pci-passthrough'
> +  printf "%s\n" '                  Xen PCI passthrough support'
> +  printf "%s\n" '  xkbcommon       xkbcommon support'
> +  printf "%s\n" '  zstd            zstd compression support'
>  }
>  _meson_option_parse() {
>    case $1 in
> +    --enable-alsa) printf "%s" -Dalsa=enabled ;;
> +    --disable-alsa) printf "%s" -Dalsa=disabled ;;
> +    --enable-attr) printf "%s" -Dattr=enabled ;;
> +    --disable-attr) printf "%s" -Dattr=disabled ;;
> +    --enable-auth-pam) printf "%s" -Dauth_pam=enabled ;;
> +    --disable-auth-pam) printf "%s" -Dauth_pam=disabled ;;
> +    --enable-bpf) printf "%s" -Dbpf=enabled ;;
> +    --disable-bpf) printf "%s" -Dbpf=disabled ;;
> +    --enable-brlapi) printf "%s" -Dbrlapi=enabled ;;
> +    --disable-brlapi) printf "%s" -Dbrlapi=disabled ;;
> +    --enable-bzip2) printf "%s" -Dbzip2=enabled ;;
> +    --disable-bzip2) printf "%s" -Dbzip2=disabled ;;
> +    --enable-cap-ng) printf "%s" -Dcap_ng=enabled ;;
> +    --disable-cap-ng) printf "%s" -Dcap_ng=disabled ;;
> +    --enable-capstone) printf "%s" -Dcapstone=enabled ;;
> +    --disable-capstone) printf "%s" -Dcapstone=disabled ;;
> +    --enable-capstone=*) quote_sh "-Dcapstone=$2" ;;
> +    --enable-cfi) printf "%s" -Dcfi=true ;;
> +    --disable-cfi) printf "%s" -Dcfi=false ;;
> +    --enable-cfi-debug) printf "%s" -Dcfi_debug=true ;;
> +    --disable-cfi-debug) printf "%s" -Dcfi_debug=false ;;
> +    --enable-cocoa) printf "%s" -Dcocoa=enabled ;;
> +    --disable-cocoa) printf "%s" -Dcocoa=disabled ;;
> +    --enable-coreaudio) printf "%s" -Dcoreaudio=enabled ;;
> +    --disable-coreaudio) printf "%s" -Dcoreaudio=disabled ;;
> +    --enable-curl) printf "%s" -Dcurl=enabled ;;
> +    --disable-curl) printf "%s" -Dcurl=disabled ;;
> +    --enable-curses) printf "%s" -Dcurses=enabled ;;
> +    --disable-curses) printf "%s" -Dcurses=disabled ;;
> +    --enable-docs) printf "%s" -Ddocs=enabled ;;
> +    --disable-docs) printf "%s" -Ddocs=disabled ;;
> +    --enable-dsound) printf "%s" -Ddsound=enabled ;;
> +    --disable-dsound) printf "%s" -Ddsound=disabled ;;
> +    --enable-fdt) printf "%s" -Dfdt=enabled ;;
> +    --disable-fdt) printf "%s" -Dfdt=disabled ;;
> +    --enable-fdt=*) quote_sh "-Dfdt=$2" ;;
> +    --enable-fuse) printf "%s" -Dfuse=enabled ;;
> +    --disable-fuse) printf "%s" -Dfuse=disabled ;;
> +    --enable-fuse-lseek) printf "%s" -Dfuse_lseek=enabled ;;
> +    --disable-fuse-lseek) printf "%s" -Dfuse_lseek=disabled ;;
> +    --enable-fuzzing) printf "%s" -Dfuzzing=true ;;
> +    --disable-fuzzing) printf "%s" -Dfuzzing=false ;;
> +    --enable-gcrypt) printf "%s" -Dgcrypt=enabled ;;
> +    --disable-gcrypt) printf "%s" -Dgcrypt=disabled ;;
> +    --enable-gettext) printf "%s" -Dgettext=enabled ;;
> +    --disable-gettext) printf "%s" -Dgettext=disabled ;;
> +    --enable-glusterfs) printf "%s" -Dglusterfs=enabled ;;
> +    --disable-glusterfs) printf "%s" -Dglusterfs=disabled ;;
> +    --enable-gnutls) printf "%s" -Dgnutls=enabled ;;
> +    --disable-gnutls) printf "%s" -Dgnutls=disabled ;;
> +    --enable-gtk) printf "%s" -Dgtk=enabled ;;
> +    --disable-gtk) printf "%s" -Dgtk=disabled ;;
> +    --enable-guest-agent-msi) printf "%s" -Dguest_agent_msi=enabled ;;
> +    --disable-guest-agent-msi) printf "%s" -Dguest_agent_msi=disabled ;;
> +    --enable-hax) printf "%s" -Dhax=enabled ;;
> +    --disable-hax) printf "%s" -Dhax=disabled ;;
> +    --enable-hvf) printf "%s" -Dhvf=enabled ;;
> +    --disable-hvf) printf "%s" -Dhvf=disabled ;;
> +    --enable-iconv) printf "%s" -Diconv=enabled ;;
> +    --disable-iconv) printf "%s" -Diconv=disabled ;;
> +    --enable-install-blobs) printf "%s" -Dinstall_blobs=true ;;
> +    --disable-install-blobs) printf "%s" -Dinstall_blobs=false ;;
> +    --enable-jack) printf "%s" -Djack=enabled ;;
> +    --disable-jack) printf "%s" -Djack=disabled ;;
> +    --enable-kvm) printf "%s" -Dkvm=enabled ;;
> +    --disable-kvm) printf "%s" -Dkvm=disabled ;;
> +    --enable-libdaxctl) printf "%s" -Dlibdaxctl=enabled ;;
> +    --disable-libdaxctl) printf "%s" -Dlibdaxctl=disabled ;;
> +    --enable-libiscsi) printf "%s" -Dlibiscsi=enabled ;;
> +    --disable-libiscsi) printf "%s" -Dlibiscsi=disabled ;;
> +    --enable-libnfs) printf "%s" -Dlibnfs=enabled ;;
> +    --disable-libnfs) printf "%s" -Dlibnfs=disabled ;;
> +    --enable-libpmem) printf "%s" -Dlibpmem=enabled ;;
> +    --disable-libpmem) printf "%s" -Dlibpmem=disabled ;;
> +    --enable-libudev) printf "%s" -Dlibudev=enabled ;;
> +    --disable-libudev) printf "%s" -Dlibudev=disabled ;;
> +    --enable-libusb) printf "%s" -Dlibusb=enabled ;;
> +    --disable-libusb) printf "%s" -Dlibusb=disabled ;;
> +    --enable-libxml2) printf "%s" -Dlibxml2=enabled ;;
> +    --disable-libxml2) printf "%s" -Dlibxml2=disabled ;;
> +    --enable-linux-aio) printf "%s" -Dlinux_aio=enabled ;;
> +    --disable-linux-aio) printf "%s" -Dlinux_aio=disabled ;;
> +    --enable-linux-io-uring) printf "%s" -Dlinux_io_uring=enabled ;;
> +    --disable-linux-io-uring) printf "%s" -Dlinux_io_uring=disabled ;;
> +    --enable-lzfse) printf "%s" -Dlzfse=enabled ;;
> +    --disable-lzfse) printf "%s" -Dlzfse=disabled ;;
> +    --enable-lzo) printf "%s" -Dlzo=enabled ;;
> +    --disable-lzo) printf "%s" -Dlzo=disabled ;;
> +    --enable-malloc=*) quote_sh "-Dmalloc=$2" ;;
> +    --enable-malloc-trim) printf "%s" -Dmalloc_trim=enabled ;;
> +    --disable-malloc-trim) printf "%s" -Dmalloc_trim=disabled ;;
> +    --enable-mpath) printf "%s" -Dmpath=enabled ;;
> +    --disable-mpath) printf "%s" -Dmpath=disabled ;;
> +    --enable-multiprocess) printf "%s" -Dmultiprocess=enabled ;;
> +    --disable-multiprocess) printf "%s" -Dmultiprocess=disabled ;;
> +    --enable-netmap) printf "%s" -Dnetmap=enabled ;;
> +    --disable-netmap) printf "%s" -Dnetmap=disabled ;;
> +    --enable-nettle) printf "%s" -Dnettle=enabled ;;
> +    --disable-nettle) printf "%s" -Dnettle=disabled ;;
> +    --enable-nvmm) printf "%s" -Dnvmm=enabled ;;
> +    --disable-nvmm) printf "%s" -Dnvmm=disabled ;;
> +    --enable-oss) printf "%s" -Doss=enabled ;;
> +    --disable-oss) printf "%s" -Doss=disabled ;;
> +    --enable-pa) printf "%s" -Dpa=enabled ;;
> +    --disable-pa) printf "%s" -Dpa=disabled ;;
> +    --enable-rbd) printf "%s" -Drbd=enabled ;;
> +    --disable-rbd) printf "%s" -Drbd=disabled ;;
> +    --enable-sdl) printf "%s" -Dsdl=enabled ;;
> +    --disable-sdl) printf "%s" -Dsdl=disabled ;;
> +    --enable-sdl-image) printf "%s" -Dsdl_image=enabled ;;
> +    --disable-sdl-image) printf "%s" -Dsdl_image=disabled ;;
> +    --enable-seccomp) printf "%s" -Dseccomp=enabled ;;
> +    --disable-seccomp) printf "%s" -Dseccomp=disabled ;;
> +    --enable-slirp) printf "%s" -Dslirp=enabled ;;
> +    --disable-slirp) printf "%s" -Dslirp=disabled ;;
> +    --enable-slirp=*) quote_sh "-Dslirp=$2" ;;
> +    --enable-smartcard) printf "%s" -Dsmartcard=enabled ;;
> +    --disable-smartcard) printf "%s" -Dsmartcard=disabled ;;
> +    --enable-snappy) printf "%s" -Dsnappy=enabled ;;
> +    --disable-snappy) printf "%s" -Dsnappy=disabled ;;
> +    --enable-sparse) printf "%s" -Dsparse=enabled ;;
> +    --disable-sparse) printf "%s" -Dsparse=disabled ;;
> +    --enable-spice) printf "%s" -Dspice=enabled ;;
> +    --disable-spice) printf "%s" -Dspice=disabled ;;
> +    --enable-spice-protocol) printf "%s" -Dspice_protocol=enabled ;;
> +    --disable-spice-protocol) printf "%s" -Dspice_protocol=disabled ;;
> +    --enable-tcg) printf "%s" -Dtcg=enabled ;;
> +    --disable-tcg) printf "%s" -Dtcg=disabled ;;
> +    --enable-tcg-interpreter) printf "%s" -Dtcg_interpreter=true ;;
> +    --disable-tcg-interpreter) printf "%s" -Dtcg_interpreter=false ;;
> +    --enable-trace-backends=*) quote_sh "-Dtrace_backends=$2" ;;
> +    --enable-u2f) printf "%s" -Du2f=enabled ;;
> +    --disable-u2f) printf "%s" -Du2f=disabled ;;
> +    --enable-usb-redir) printf "%s" -Dusb_redir=enabled ;;
> +    --disable-usb-redir) printf "%s" -Dusb_redir=disabled ;;
> +    --enable-vde) printf "%s" -Dvde=enabled ;;
> +    --disable-vde) printf "%s" -Dvde=disabled ;;
> +    --enable-vhost-user-blk-server) printf "%s"
> -Dvhost_user_blk_server=enabled ;;
> +    --disable-vhost-user-blk-server) printf "%s"
> -Dvhost_user_blk_server=disabled ;;
> +    --enable-virglrenderer) printf "%s" -Dvirglrenderer=enabled ;;
> +    --disable-virglrenderer) printf "%s" -Dvirglrenderer=disabled ;;
> +    --enable-virtfs) printf "%s" -Dvirtfs=enabled ;;
> +    --disable-virtfs) printf "%s" -Dvirtfs=disabled ;;
> +    --enable-virtiofsd) printf "%s" -Dvirtiofsd=enabled ;;
> +    --disable-virtiofsd) printf "%s" -Dvirtiofsd=disabled ;;
> +    --enable-vnc) printf "%s" -Dvnc=enabled ;;
> +    --disable-vnc) printf "%s" -Dvnc=disabled ;;
> +    --enable-vnc-jpeg) printf "%s" -Dvnc_jpeg=enabled ;;
> +    --disable-vnc-jpeg) printf "%s" -Dvnc_jpeg=disabled ;;
> +    --enable-vnc-png) printf "%s" -Dvnc_png=enabled ;;
> +    --disable-vnc-png) printf "%s" -Dvnc_png=disabled ;;
> +    --enable-vnc-sasl) printf "%s" -Dvnc_sasl=enabled ;;
> +    --disable-vnc-sasl) printf "%s" -Dvnc_sasl=disabled ;;
> +    --enable-vte) printf "%s" -Dvte=enabled ;;
> +    --disable-vte) printf "%s" -Dvte=disabled ;;
> +    --enable-whpx) printf "%s" -Dwhpx=enabled ;;
> +    --disable-whpx) printf "%s" -Dwhpx=disabled ;;
> +    --enable-xen) printf "%s" -Dxen=enabled ;;
> +    --disable-xen) printf "%s" -Dxen=disabled ;;
> +    --enable-xen-pci-passthrough) printf "%s"
> -Dxen_pci_passthrough=enabled ;;
> +    --disable-xen-pci-passthrough) printf "%s"
> -Dxen_pci_passthrough=disabled ;;
> +    --enable-xkbcommon) printf "%s" -Dxkbcommon=enabled ;;
> +    --disable-xkbcommon) printf "%s" -Dxkbcommon=disabled ;;
> +    --enable-zstd) printf "%s" -Dzstd=enabled ;;
> +    --disable-zstd) printf "%s" -Dzstd=disabled ;;
>      *) return 1 ;;
>    esac
>  }
> --
> 2.31.1
>
>
>

-- 
Marc-André Lureau

[-- Attachment #2: Type: text/html, Size: 73551 bytes --]

  reply	other threads:[~2021-10-07 20:47 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-10-07 13:06 [PATCH 00/24] configure->meson queue for 6.2 Paolo Bonzini
2021-10-07 13:06 ` [PATCH 01/24] configure: remove --oss-lib Paolo Bonzini
2021-10-07 17:32   ` Thomas Huth
2021-10-07 20:42   ` Marc-André Lureau
2021-10-08  9:19     ` Paolo Bonzini
2021-10-07 13:06 ` [PATCH 02/24] audio: remove CONFIG_AUDIO_WIN_INT Paolo Bonzini
2021-10-07 20:42   ` Marc-André Lureau
2021-10-07 13:06 ` [PATCH 03/24] configure, meson: move audio driver detection to Meson Paolo Bonzini
2021-10-07 20:42   ` Marc-André Lureau
2021-10-07 13:06 ` [PATCH 04/24] meson: define symbols for all available audio drivers Paolo Bonzini
2021-10-07 13:06 ` [PATCH 05/24] configure: add command line options for " Paolo Bonzini
2021-10-07 20:42   ` Marc-André Lureau
2021-10-07 13:08 ` [PATCH 06/24] kconfig: split CONFIG_SPARSE_MEM from fuzzing Paolo Bonzini
2021-10-07 13:48   ` Philippe Mathieu-Daudé
2021-10-07 20:42   ` Marc-André Lureau
2021-10-08  3:08   ` Alexander Bulekov
2021-10-07 13:08 ` [PATCH 07/24] configure, meson: move fuzzing configuration to Meson Paolo Bonzini
2021-10-08  3:10   ` Alexander Bulekov
2021-10-07 13:08 ` [PATCH 08/24] trace: simple: pass trace_file unmodified to config-host.h Paolo Bonzini
2021-10-07 20:42   ` Marc-André Lureau
2021-10-07 13:08 ` [PATCH 09/24] trace: move configuration from configure to Meson Paolo Bonzini
2021-10-07 20:41   ` Marc-André Lureau
2021-10-07 13:08 ` [PATCH 10/24] configure, meson: move CONFIG_HOST_DSOSUF " Paolo Bonzini
2021-10-07 13:44   ` Philippe Mathieu-Daudé
2021-10-07 20:41   ` Marc-André Lureau
2021-10-07 13:08 ` [PATCH 11/24] configure, meson: get HOST_WORDS_BIGENDIAN via the machine object Paolo Bonzini
2021-10-07 13:45   ` Philippe Mathieu-Daudé
2021-10-07 20:41   ` Marc-André Lureau
2021-10-07 13:08 ` [PATCH 12/24] configure, meson: remove CONFIG_GCOV from config-host.mak Paolo Bonzini
2021-10-07 20:41   ` Marc-André Lureau
2021-10-07 13:08 ` [PATCH 13/24] configure, meson: move remaining HAVE_* compiler tests to Meson Paolo Bonzini
2021-10-07 20:41   ` Marc-André Lureau
2021-10-07 13:08 ` [PATCH 14/24] configure, meson: move pthread_setname_np checks " Paolo Bonzini
2021-10-07 20:41   ` Marc-André Lureau
2021-10-07 13:08 ` [PATCH 15/24] configure, meson: move libaio check to meson.build Paolo Bonzini
2021-10-07 19:24   ` Richard Henderson
2021-10-08  8:30     ` Paolo Bonzini
2021-10-08  8:47       ` Marc-André Lureau
2021-10-08  9:15         ` Paolo Bonzini
2021-10-07 13:08 ` [PATCH 16/24] configure, meson: move vde detection to meson Paolo Bonzini
2021-10-07 20:41   ` Marc-André Lureau
2021-10-07 13:08 ` [PATCH 17/24] configure, meson: move netmap " Paolo Bonzini
2021-10-07 17:55   ` Thomas Huth
2021-10-07 13:08 ` [PATCH 18/24] configure, meson: move Spice configure handling " Paolo Bonzini
2021-10-07 13:08 ` [PATCH 19/24] configure: remove obsolete Solaris ar check Paolo Bonzini
2021-10-07 18:19   ` Thomas Huth
2021-10-07 20:41   ` Marc-André Lureau
2021-10-07 13:08 ` [PATCH 20/24] configure, meson: move more compiler checks to Meson Paolo Bonzini
2021-10-07 20:41   ` Marc-André Lureau
2021-10-07 13:08 ` [PATCH 21/24] configure: remove deprecated --{enable, disable}-git-update Paolo Bonzini
2021-10-07 20:41   ` Marc-André Lureau
2021-10-07 13:08 ` [PATCH 22/24] configure: accept "internal" for --enable-capstone/slirp/fdt Paolo Bonzini
2021-10-07 20:41   ` Marc-André Lureau
2021-10-07 13:08 ` [PATCH 23/24] configure: prepare for auto-generated option parsing Paolo Bonzini
2021-10-07 16:53   ` Thomas Huth
2021-10-08  8:42     ` Paolo Bonzini
2021-10-07 13:08 ` [PATCH 24/24] configure: automatically parse command line for meson -D options Paolo Bonzini
2021-10-07 20:41   ` Marc-André Lureau [this message]
2021-10-08  8:43     ` Paolo Bonzini
2021-10-08  8:46       ` Marc-André Lureau

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAJ+F1C+YriVhkYRtiHe=US3MmhEyLkVPnfwuAJqYvSOCR-uGEg@mail.gmail.com' \
    --to=marcandre.lureau@gmail.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.