Hi

On Thu, Oct 7, 2021 at 5:28 PM Paolo Bonzini <pbonz...@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 <pbonz...@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

Reply via email to