qapi: Document event VSERPORT_CHANGE is rate-limited
[qemu.git] / configure
1 #!/bin/sh
2 #
3 # qemu configure script (c) 2003 Fabrice Bellard
4 #
5
6 # Unset some variables known to interfere with behavior of common tools,
7 # just as autoconf does.
8 CLICOLOR_FORCE= GREP_OPTIONS=
9 unset CLICOLOR_FORCE GREP_OPTIONS
10
11 # Don't allow CCACHE, if present, to use cached results of compile tests!
12 export CCACHE_RECACHE=yes
13
14 # make source path absolute
15 source_path=$(cd "$(dirname -- "$0")"; pwd)
16
17 if test "$PWD" = "$source_path"
18 then
19     echo "Using './build' as the directory for build output"
20
21     MARKER=build/auto-created-by-configure
22
23     if test -e build
24     then
25         if test -f $MARKER
26         then
27            rm -rf build
28         else
29             echo "ERROR: ./build dir already exists and was not previously created by configure"
30             exit 1
31         fi
32     fi
33
34     mkdir build
35     touch $MARKER
36
37     cat > GNUmakefile <<'EOF'
38 # This file is auto-generated by configure to support in-source tree
39 # 'make' command invocation
40
41 ifeq ($(MAKECMDGOALS),)
42 recurse: all
43 endif
44
45 .NOTPARALLEL: %
46 %: force
47         @echo 'changing dir to build for $(MAKE) "$(MAKECMDGOALS)"...'
48         @$(MAKE) -C build -f Makefile $(MAKECMDGOALS)
49         @if test "$(MAKECMDGOALS)" = "distclean" && \
50             test -e build/auto-created-by-configure ; \
51         then \
52             rm -rf build GNUmakefile ; \
53         fi
54 force: ;
55 .PHONY: force
56 GNUmakefile: ;
57
58 EOF
59     cd build
60     exec $source_path/configure "$@"
61 fi
62
63 # Temporary directory used for files created while
64 # configure runs. Since it is in the build directory
65 # we can safely blow away any previous version of it
66 # (and we need not jump through hoops to try to delete
67 # it when configure exits.)
68 TMPDIR1="config-temp"
69 rm -rf "${TMPDIR1}"
70 mkdir -p "${TMPDIR1}"
71 if [ $? -ne 0 ]; then
72     echo "ERROR: failed to create temporary directory"
73     exit 1
74 fi
75
76 TMPB="qemu-conf"
77 TMPC="${TMPDIR1}/${TMPB}.c"
78 TMPO="${TMPDIR1}/${TMPB}.o"
79 TMPCXX="${TMPDIR1}/${TMPB}.cxx"
80 TMPE="${TMPDIR1}/${TMPB}.exe"
81 TMPTXT="${TMPDIR1}/${TMPB}.txt"
82
83 rm -f config.log
84
85 # Print a helpful header at the top of config.log
86 echo "# QEMU configure log $(date)" >> config.log
87 printf "# Configured with:" >> config.log
88 printf " '%s'" "$0" "$@" >> config.log
89 echo >> config.log
90 echo "#" >> config.log
91
92 print_error() {
93     (echo
94     echo "ERROR: $1"
95     while test -n "$2"; do
96         echo "       $2"
97         shift
98     done
99     echo) >&2
100 }
101
102 error_exit() {
103     print_error "$@"
104     exit 1
105 }
106
107 do_compiler() {
108     # Run the compiler, capturing its output to the log. First argument
109     # is compiler binary to execute.
110     local compiler="$1"
111     shift
112     if test -n "$BASH_VERSION"; then eval '
113         echo >>config.log "
114 funcs: ${FUNCNAME[*]}
115 lines: ${BASH_LINENO[*]}"
116     '; fi
117     echo $compiler "$@" >> config.log
118     $compiler "$@" >> config.log 2>&1 || return $?
119     # Test passed. If this is an --enable-werror build, rerun
120     # the test with -Werror and bail out if it fails. This
121     # makes warning-generating-errors in configure test code
122     # obvious to developers.
123     if test "$werror" != "yes"; then
124         return 0
125     fi
126     # Don't bother rerunning the compile if we were already using -Werror
127     case "$*" in
128         *-Werror*)
129            return 0
130         ;;
131     esac
132     echo $compiler -Werror "$@" >> config.log
133     $compiler -Werror "$@" >> config.log 2>&1 && return $?
134     error_exit "configure test passed without -Werror but failed with -Werror." \
135         "This is probably a bug in the configure script. The failing command" \
136         "will be at the bottom of config.log." \
137         "You can run configure with --disable-werror to bypass this check."
138 }
139
140 do_cc() {
141     do_compiler "$cc" "$@"
142 }
143
144 do_cxx() {
145     do_compiler "$cxx" "$@"
146 }
147
148 # Append $2 to the variable named $1, with space separation
149 add_to() {
150     eval $1=\${$1:+\"\$$1 \"}\$2
151 }
152
153 update_cxxflags() {
154     # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
155     # options which some versions of GCC's C++ compiler complain about
156     # because they only make sense for C programs.
157     QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
158     CXXFLAGS=$(echo "$CFLAGS" | sed s/-std=gnu99/-std=gnu++11/)
159     for arg in $QEMU_CFLAGS; do
160         case $arg in
161             -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
162             -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
163                 ;;
164             *)
165                 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
166                 ;;
167         esac
168     done
169 }
170
171 compile_object() {
172   local_cflags="$1"
173   do_cc $CFLAGS $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
174 }
175
176 compile_prog() {
177   local_cflags="$1"
178   local_ldflags="$2"
179   do_cc $CFLAGS $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $QEMU_LDFLAGS $local_ldflags
180 }
181
182 # symbolically link $1 to $2.  Portable version of "ln -sf".
183 symlink() {
184   rm -rf "$2"
185   mkdir -p "$(dirname "$2")"
186   ln -s "$1" "$2"
187 }
188
189 # check whether a command is available to this shell (may be either an
190 # executable or a builtin)
191 has() {
192     type "$1" >/dev/null 2>&1
193 }
194
195 # search for an executable in PATH
196 path_of() {
197     local_command="$1"
198     local_ifs="$IFS"
199     local_dir=""
200
201     # pathname has a dir component?
202     if [ "${local_command#*/}" != "$local_command" ]; then
203         if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
204             echo "$local_command"
205             return 0
206         fi
207     fi
208     if [ -z "$local_command" ]; then
209         return 1
210     fi
211
212     IFS=:
213     for local_dir in $PATH; do
214         if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
215             echo "$local_dir/$local_command"
216             IFS="${local_ifs:-$(printf ' \t\n')}"
217             return 0
218         fi
219     done
220     # not found
221     IFS="${local_ifs:-$(printf ' \t\n')}"
222     return 1
223 }
224
225 version_ge () {
226     local_ver1=`echo $1 | tr . ' '`
227     local_ver2=`echo $2 | tr . ' '`
228     while true; do
229         set x $local_ver1
230         local_first=${2-0}
231         # 'shift 2' if $2 is set, or 'shift' if $2 is not set
232         shift ${2:+2}
233         local_ver1=$*
234         set x $local_ver2
235         # the second argument finished, the first must be greater or equal
236         test $# = 1 && return 0
237         test $local_first -lt $2 && return 1
238         test $local_first -gt $2 && return 0
239         shift ${2:+2}
240         local_ver2=$*
241     done
242 }
243
244 have_backend () {
245     echo "$trace_backends" | grep "$1" >/dev/null
246 }
247
248 glob() {
249     eval test -z '"${1#'"$2"'}"'
250 }
251
252 supported_hax_target() {
253     test "$hax" = "yes" || return 1
254     glob "$1" "*-softmmu" || return 1
255     case "${1%-softmmu}" in
256         i386|x86_64)
257             return 0
258         ;;
259     esac
260     return 1
261 }
262
263 supported_kvm_target() {
264     test "$kvm" = "yes" || return 1
265     glob "$1" "*-softmmu" || return 1
266     case "${1%-softmmu}:$cpu" in
267         arm:arm | aarch64:aarch64 | \
268         i386:i386 | i386:x86_64 | i386:x32 | \
269         x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
270         mips:mips | mipsel:mips | mips64:mips | mips64el:mips | \
271         ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | ppc64:ppc64le | \
272         s390x:s390x)
273             return 0
274         ;;
275     esac
276     return 1
277 }
278
279 supported_xen_target() {
280     test "$xen" = "yes" || return 1
281     glob "$1" "*-softmmu" || return 1
282     # Only i386 and x86_64 provide the xenpv machine.
283     case "${1%-softmmu}" in
284         i386|x86_64)
285             return 0
286         ;;
287     esac
288     return 1
289 }
290
291 supported_hvf_target() {
292     test "$hvf" = "yes" || return 1
293     glob "$1" "*-softmmu" || return 1
294     case "${1%-softmmu}" in
295         x86_64)
296             return 0
297         ;;
298     esac
299     return 1
300 }
301
302 supported_whpx_target() {
303     test "$whpx" = "yes" || return 1
304     glob "$1" "*-softmmu" || return 1
305     case "${1%-softmmu}" in
306         i386|x86_64)
307             return 0
308         ;;
309     esac
310     return 1
311 }
312
313 supported_target() {
314     case "$1" in
315         *-softmmu)
316             ;;
317         *-linux-user)
318             if test "$linux" != "yes"; then
319                 print_error "Target '$target' is only available on a Linux host"
320                 return 1
321             fi
322             ;;
323         *-bsd-user)
324             if test "$bsd" != "yes"; then
325                 print_error "Target '$target' is only available on a BSD host"
326                 return 1
327             fi
328             ;;
329         *)
330             print_error "Invalid target name '$target'"
331             return 1
332             ;;
333     esac
334     test "$tcg" = "yes" && return 0
335     supported_kvm_target "$1" && return 0
336     supported_xen_target "$1" && return 0
337     supported_hax_target "$1" && return 0
338     supported_hvf_target "$1" && return 0
339     supported_whpx_target "$1" && return 0
340     print_error "TCG disabled, but hardware accelerator not available for '$target'"
341     return 1
342 }
343
344
345 ld_has() {
346     $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
347 }
348
349 if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
350 then
351   error_exit "main directory cannot contain spaces nor colons"
352 fi
353
354 # default parameters
355 cpu=""
356 iasl="iasl"
357 interp_prefix="/usr/gnemul/qemu-%M"
358 static="no"
359 cross_prefix=""
360 audio_drv_list=""
361 block_drv_rw_whitelist=""
362 block_drv_ro_whitelist=""
363 host_cc="cc"
364 libs_tools=""
365 audio_win_int=""
366 libs_qga=""
367 debug_info="yes"
368 stack_protector=""
369 safe_stack=""
370 use_containers="yes"
371 gdb_bin=$(command -v "gdb-multiarch" || command -v "gdb")
372
373 if test -e "$source_path/.git"
374 then
375     git_update=yes
376     git_submodules="ui/keycodemapdb"
377     git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
378     git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
379 else
380     git_update=no
381     git_submodules=""
382
383     if ! test -f "$source_path/ui/keycodemapdb/README"
384     then
385         echo
386         echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
387         echo
388         echo "This is not a GIT checkout but module content appears to"
389         echo "be missing. Do not use 'git archive' or GitHub download links"
390         echo "to acquire QEMU source archives. Non-GIT builds are only"
391         echo "supported with source archives linked from:"
392         echo
393         echo "  https://www.qemu.org/download/#source"
394         echo
395         echo "Developers working with GIT can use scripts/archive-source.sh"
396         echo "if they need to create valid source archives."
397         echo
398         exit 1
399     fi
400 fi
401 git="git"
402
403 # Don't accept a target_list environment variable.
404 unset target_list
405 unset target_list_exclude
406
407 # Default value for a variable defining feature "foo".
408 #  * foo="no"  feature will only be used if --enable-foo arg is given
409 #  * foo=""    feature will be searched for, and if found, will be used
410 #              unless --disable-foo is given
411 #  * foo="yes" this value will only be set by --enable-foo flag.
412 #              feature will searched for,
413 #              if not found, configure exits with error
414 #
415 # Always add --enable-foo and --disable-foo command line args.
416 # Distributions want to ensure that several features are compiled in, and it
417 # is impossible without a --enable-foo that exits if a feature is not found.
418
419 brlapi=""
420 curl=""
421 curses=""
422 docs=""
423 fdt=""
424 netmap="no"
425 sdl="auto"
426 sdl_image="auto"
427 virtfs=""
428 mpath=""
429 vnc="enabled"
430 sparse="no"
431 vde=""
432 vnc_sasl="auto"
433 vnc_jpeg="auto"
434 vnc_png="auto"
435 xkbcommon="auto"
436 xen=""
437 xen_ctrl_version=""
438 xen_pci_passthrough=""
439 linux_aio=""
440 linux_io_uring=""
441 cap_ng=""
442 attr=""
443 libattr=""
444 xfs=""
445 tcg="yes"
446 membarrier=""
447 vhost_net=""
448 vhost_crypto=""
449 vhost_scsi=""
450 vhost_vsock=""
451 vhost_user=""
452 vhost_user_fs=""
453 kvm="no"
454 hax="no"
455 hvf="no"
456 whpx="no"
457 rdma=""
458 pvrdma=""
459 gprof="no"
460 debug_tcg="no"
461 debug="no"
462 sanitizers="no"
463 tsan="no"
464 fortify_source=""
465 strip_opt="yes"
466 tcg_interpreter="no"
467 bigendian="no"
468 mingw32="no"
469 gcov="no"
470 EXESUF=""
471 HOST_DSOSUF=".so"
472 LDFLAGS_SHARED="-shared"
473 modules="no"
474 module_upgrades="no"
475 prefix="/usr/local"
476 qemu_suffix="qemu"
477 slirp=""
478 oss_lib=""
479 bsd="no"
480 linux="no"
481 solaris="no"
482 profiler="no"
483 cocoa="no"
484 softmmu="yes"
485 linux_user="no"
486 bsd_user="no"
487 blobs="yes"
488 edk2_blobs="no"
489 pkgversion=""
490 pie=""
491 qom_cast_debug="yes"
492 trace_backends="log"
493 trace_file="trace"
494 spice=""
495 rbd=""
496 smartcard=""
497 u2f="auto"
498 libusb=""
499 usb_redir=""
500 opengl=""
501 opengl_dmabuf="no"
502 cpuid_h="no"
503 avx2_opt=""
504 capstone=""
505 lzo=""
506 snappy=""
507 bzip2=""
508 lzfse=""
509 zstd=""
510 guest_agent=""
511 guest_agent_with_vss="no"
512 guest_agent_ntddscsi="no"
513 guest_agent_msi=""
514 vss_win32_sdk=""
515 win_sdk="no"
516 want_tools=""
517 libiscsi=""
518 libnfs=""
519 coroutine=""
520 coroutine_pool=""
521 debug_stack_usage="no"
522 crypto_afalg="no"
523 seccomp=""
524 glusterfs=""
525 glusterfs_xlator_opt="no"
526 glusterfs_discard="no"
527 glusterfs_fallocate="no"
528 glusterfs_zerofill="no"
529 glusterfs_ftruncate_has_stat="no"
530 glusterfs_iocb_has_stat="no"
531 gtk=""
532 gtk_gl="no"
533 tls_priority="NORMAL"
534 gnutls=""
535 nettle=""
536 nettle_xts="no"
537 gcrypt=""
538 gcrypt_hmac="no"
539 gcrypt_xts="no"
540 qemu_private_xts="yes"
541 auth_pam=""
542 vte=""
543 virglrenderer=""
544 tpm=""
545 libssh=""
546 live_block_migration="yes"
547 numa=""
548 tcmalloc="no"
549 jemalloc="no"
550 replication="yes"
551 bochs="yes"
552 cloop="yes"
553 dmg="yes"
554 qcow1="yes"
555 vdi="yes"
556 vvfat="yes"
557 qed="yes"
558 parallels="yes"
559 sheepdog="yes"
560 libxml2=""
561 debug_mutex="no"
562 libpmem=""
563 default_devices="yes"
564 plugins="no"
565 fuzzing="no"
566 rng_none="no"
567 secret_keyring=""
568 libdaxctl=""
569 meson=""
570 ninja=""
571 skip_meson=no
572 gettext=""
573
574 bogus_os="no"
575 malloc_trim=""
576
577 # parse CC options first
578 for opt do
579   optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
580   case "$opt" in
581   --cross-prefix=*) cross_prefix="$optarg"
582   ;;
583   --cc=*) CC="$optarg"
584   ;;
585   --cxx=*) CXX="$optarg"
586   ;;
587   --cpu=*) cpu="$optarg"
588   ;;
589   --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
590                     QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
591   ;;
592   --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
593   ;;
594   --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
595                      EXTRA_LDFLAGS="$optarg"
596   ;;
597   --enable-debug-info) debug_info="yes"
598   ;;
599   --disable-debug-info) debug_info="no"
600   ;;
601   --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
602   ;;
603   --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
604                       eval "cross_cc_cflags_${cc_arch}=\$optarg"
605                       cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
606   ;;
607   --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
608                 cc_archs="$cc_archs $cc_arch"
609                 eval "cross_cc_${cc_arch}=\$optarg"
610                 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
611   ;;
612   esac
613 done
614 # OS specific
615 # Using uname is really, really broken.  Once we have the right set of checks
616 # we can eliminate its usage altogether.
617
618 # Preferred compiler:
619 #  ${CC} (if set)
620 #  ${cross_prefix}gcc (if cross-prefix specified)
621 #  system compiler
622 if test -z "${CC}${cross_prefix}"; then
623   cc="$host_cc"
624 else
625   cc="${CC-${cross_prefix}gcc}"
626 fi
627
628 if test -z "${CXX}${cross_prefix}"; then
629   cxx="c++"
630 else
631   cxx="${CXX-${cross_prefix}g++}"
632 fi
633
634 ar="${AR-${cross_prefix}ar}"
635 as="${AS-${cross_prefix}as}"
636 ccas="${CCAS-$cc}"
637 cpp="${CPP-$cc -E}"
638 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
639 ld="${LD-${cross_prefix}ld}"
640 ranlib="${RANLIB-${cross_prefix}ranlib}"
641 nm="${NM-${cross_prefix}nm}"
642 strip="${STRIP-${cross_prefix}strip}"
643 windres="${WINDRES-${cross_prefix}windres}"
644 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
645 query_pkg_config() {
646     "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
647 }
648 pkg_config=query_pkg_config
649 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
650
651 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
652 ARFLAGS="${ARFLAGS-rv}"
653
654 # default flags for all hosts
655 # We use -fwrapv to tell the compiler that we require a C dialect where
656 # left shift of signed integers is well defined and has the expected
657 # 2s-complement style results. (Both clang and gcc agree that it
658 # provides these semantics.)
659 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
660 QEMU_CFLAGS="-Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
661 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
662 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
663 QEMU_INCLUDES="-iquote . -iquote ${source_path} -iquote ${source_path}/accel/tcg -iquote ${source_path}/include"
664 QEMU_INCLUDES="$QEMU_INCLUDES -iquote ${source_path}/disas/libvixl"
665 CFLAGS="-std=gnu99 -Wall"
666
667
668 # running configure in the source tree?
669 # we know that's the case if configure is there.
670 if test -f "./configure"; then
671     pwd_is_source_path="y"
672 else
673     pwd_is_source_path="n"
674 fi
675
676 check_define() {
677 cat > $TMPC <<EOF
678 #if !defined($1)
679 #error $1 not defined
680 #endif
681 int main(void) { return 0; }
682 EOF
683   compile_object
684 }
685
686 check_include() {
687 cat > $TMPC <<EOF
688 #include <$1>
689 int main(void) { return 0; }
690 EOF
691   compile_object
692 }
693
694 write_c_skeleton() {
695     cat > $TMPC <<EOF
696 int main(void) { return 0; }
697 EOF
698 }
699
700 write_c_fuzzer_skeleton() {
701     cat > $TMPC <<EOF
702 #include <stdint.h>
703 #include <sys/types.h>
704 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
705 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
706 EOF
707 }
708
709 if check_define __linux__ ; then
710   targetos="Linux"
711 elif check_define _WIN32 ; then
712   targetos='MINGW32'
713 elif check_define __OpenBSD__ ; then
714   targetos='OpenBSD'
715 elif check_define __sun__ ; then
716   targetos='SunOS'
717 elif check_define __HAIKU__ ; then
718   targetos='Haiku'
719 elif check_define __FreeBSD__ ; then
720   targetos='FreeBSD'
721 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
722   targetos='GNU/kFreeBSD'
723 elif check_define __DragonFly__ ; then
724   targetos='DragonFly'
725 elif check_define __NetBSD__; then
726   targetos='NetBSD'
727 elif check_define __APPLE__; then
728   targetos='Darwin'
729 else
730   # This is a fatal error, but don't report it yet, because we
731   # might be going to just print the --help text, or it might
732   # be the result of a missing compiler.
733   targetos='bogus'
734   bogus_os='yes'
735 fi
736
737 # Some host OSes need non-standard checks for which CPU to use.
738 # Note that these checks are broken for cross-compilation: if you're
739 # cross-compiling to one of these OSes then you'll need to specify
740 # the correct CPU with the --cpu option.
741 case $targetos in
742 Darwin)
743   # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
744   # run 64-bit userspace code.
745   # If the user didn't specify a CPU explicitly and the kernel says this is
746   # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
747   if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
748     cpu="x86_64"
749   fi
750   ;;
751 SunOS)
752   # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
753   if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
754     cpu="x86_64"
755   fi
756 esac
757
758 if test ! -z "$cpu" ; then
759   # command line argument
760   :
761 elif check_define __i386__ ; then
762   cpu="i386"
763 elif check_define __x86_64__ ; then
764   if check_define __ILP32__ ; then
765     cpu="x32"
766   else
767     cpu="x86_64"
768   fi
769 elif check_define __sparc__ ; then
770   if check_define __arch64__ ; then
771     cpu="sparc64"
772   else
773     cpu="sparc"
774   fi
775 elif check_define _ARCH_PPC ; then
776   if check_define _ARCH_PPC64 ; then
777     if check_define _LITTLE_ENDIAN ; then
778       cpu="ppc64le"
779     else
780       cpu="ppc64"
781     fi
782   else
783     cpu="ppc"
784   fi
785 elif check_define __mips__ ; then
786   cpu="mips"
787 elif check_define __s390__ ; then
788   if check_define __s390x__ ; then
789     cpu="s390x"
790   else
791     cpu="s390"
792   fi
793 elif check_define __riscv ; then
794   if check_define _LP64 ; then
795     cpu="riscv64"
796   else
797     cpu="riscv32"
798   fi
799 elif check_define __arm__ ; then
800   cpu="arm"
801 elif check_define __aarch64__ ; then
802   cpu="aarch64"
803 else
804   cpu=$(uname -m)
805 fi
806
807 ARCH=
808 # Normalise host CPU name and set ARCH.
809 # Note that this case should only have supported host CPUs, not guests.
810 case "$cpu" in
811   ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
812   ;;
813   ppc64le)
814     ARCH="ppc64"
815   ;;
816   i386|i486|i586|i686|i86pc|BePC)
817     cpu="i386"
818   ;;
819   x86_64|amd64)
820     cpu="x86_64"
821   ;;
822   armv*b|armv*l|arm)
823     cpu="arm"
824   ;;
825   aarch64)
826     cpu="aarch64"
827   ;;
828   mips*)
829     cpu="mips"
830   ;;
831   sparc|sun4[cdmuv])
832     cpu="sparc"
833   ;;
834   *)
835     # This will result in either an error or falling back to TCI later
836     ARCH=unknown
837   ;;
838 esac
839 if test -z "$ARCH"; then
840   ARCH="$cpu"
841 fi
842
843 # OS specific
844
845 # host *BSD for user mode
846 HOST_VARIANT_DIR=""
847
848 case $targetos in
849 MINGW32*)
850   mingw32="yes"
851   hax="yes"
852   vhost_user="no"
853   audio_possible_drivers="dsound sdl"
854   if check_include dsound.h; then
855     audio_drv_list="dsound"
856   else
857     audio_drv_list=""
858   fi
859   supported_os="yes"
860   pie="no"
861 ;;
862 GNU/kFreeBSD)
863   bsd="yes"
864   audio_drv_list="oss try-sdl"
865   audio_possible_drivers="oss sdl pa"
866 ;;
867 FreeBSD)
868   bsd="yes"
869   make="${MAKE-gmake}"
870   audio_drv_list="oss try-sdl"
871   audio_possible_drivers="oss sdl pa"
872   # needed for kinfo_getvmmap(3) in libutil.h
873   LIBS="-lutil $LIBS"
874   netmap=""  # enable netmap autodetect
875   HOST_VARIANT_DIR="freebsd"
876 ;;
877 DragonFly)
878   bsd="yes"
879   make="${MAKE-gmake}"
880   audio_drv_list="oss try-sdl"
881   audio_possible_drivers="oss sdl pa"
882   HOST_VARIANT_DIR="dragonfly"
883 ;;
884 NetBSD)
885   bsd="yes"
886   hax="yes"
887   make="${MAKE-gmake}"
888   audio_drv_list="oss try-sdl"
889   audio_possible_drivers="oss sdl"
890   oss_lib="-lossaudio"
891   HOST_VARIANT_DIR="netbsd"
892 ;;
893 OpenBSD)
894   bsd="yes"
895   make="${MAKE-gmake}"
896   audio_drv_list="try-sdl"
897   audio_possible_drivers="sdl"
898   HOST_VARIANT_DIR="openbsd"
899 ;;
900 Darwin)
901   bsd="yes"
902   darwin="yes"
903   hax="yes"
904   hvf="yes"
905   LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
906   if [ "$cpu" = "x86_64" ] ; then
907     QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
908     QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
909   fi
910   cocoa="yes"
911   audio_drv_list="coreaudio try-sdl"
912   audio_possible_drivers="coreaudio sdl"
913   QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
914   # Disable attempts to use ObjectiveC features in os/object.h since they
915   # won't work when we're compiling with gcc as a C compiler.
916   QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
917   HOST_VARIANT_DIR="darwin"
918 ;;
919 SunOS)
920   solaris="yes"
921   make="${MAKE-gmake}"
922   install="${INSTALL-ginstall}"
923   smbd="${SMBD-/usr/sfw/sbin/smbd}"
924   if test -f /usr/include/sys/soundcard.h ; then
925     audio_drv_list="oss try-sdl"
926   fi
927   audio_possible_drivers="oss sdl"
928 # needed for CMSG_ macros in sys/socket.h
929   QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
930 # needed for TIOCWIN* defines in termios.h
931   QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
932   solarisnetlibs="-lsocket -lnsl -lresolv"
933   LIBS="$solarisnetlibs $LIBS"
934 ;;
935 Haiku)
936   haiku="yes"
937   QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS -DBSD_SOURCE $QEMU_CFLAGS"
938   LIBS="-lposix_error_mapper -lnetwork -lbsd $LIBS"
939 ;;
940 Linux)
941   audio_drv_list="try-pa oss"
942   audio_possible_drivers="oss alsa sdl pa"
943   linux="yes"
944   linux_user="yes"
945   kvm="yes"
946   QEMU_INCLUDES="-isystem ${source_path}/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
947   libudev="yes"
948 ;;
949 esac
950
951 if [ "$bsd" = "yes" ] ; then
952   if [ "$darwin" != "yes" ] ; then
953     bsd_user="yes"
954   fi
955 fi
956
957 : ${make=${MAKE-make}}
958 : ${install=${INSTALL-install}}
959 # We prefer python 3.x. A bare 'python' is traditionally
960 # python 2.x, but some distros have it as python 3.x, so
961 # we check that too
962 python=
963 explicit_python=no
964 for binary in "${PYTHON-python3}" python
965 do
966     if has "$binary"
967     then
968         python=$(command -v "$binary")
969         break
970     fi
971 done
972
973 sphinx_build=
974 for binary in sphinx-build-3 sphinx-build
975 do
976     if has "$binary"
977     then
978         sphinx_build=$(command -v "$binary")
979         break
980     fi
981 done
982
983 # Check for ancillary tools used in testing
984 genisoimage=
985 for binary in genisoimage mkisofs
986 do
987     if has $binary
988     then
989         genisoimage=$(command -v "$binary")
990         break
991     fi
992 done
993
994 : ${smbd=${SMBD-/usr/sbin/smbd}}
995
996 # Default objcc to clang if available, otherwise use CC
997 if has clang; then
998   objcc=clang
999 else
1000   objcc="$cc"
1001 fi
1002
1003 if test "$mingw32" = "yes" ; then
1004   EXESUF=".exe"
1005   HOST_DSOSUF=".dll"
1006   # MinGW needs -mthreads for TLS and macro _MT.
1007   CFLAGS="-mthreads $CFLAGS"
1008   LIBS="-lwinmm -lws2_32 $LIBS"
1009   write_c_skeleton;
1010   if compile_prog "" "-liberty" ; then
1011     LIBS="-liberty $LIBS"
1012   fi
1013   prefix="c:/Program Files/QEMU"
1014   qemu_suffix=""
1015   libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
1016 fi
1017
1018 werror=""
1019
1020 for opt do
1021   optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
1022   case "$opt" in
1023   --help|-h) show_help=yes
1024   ;;
1025   --version|-V) exec cat $source_path/VERSION
1026   ;;
1027   --prefix=*) prefix="$optarg"
1028   ;;
1029   --interp-prefix=*) interp_prefix="$optarg"
1030   ;;
1031   --cross-prefix=*)
1032   ;;
1033   --cc=*)
1034   ;;
1035   --host-cc=*) host_cc="$optarg"
1036   ;;
1037   --cxx=*)
1038   ;;
1039   --iasl=*) iasl="$optarg"
1040   ;;
1041   --objcc=*) objcc="$optarg"
1042   ;;
1043   --make=*) make="$optarg"
1044   ;;
1045   --install=*) install="$optarg"
1046   ;;
1047   --python=*) python="$optarg" ; explicit_python=yes
1048   ;;
1049   --sphinx-build=*) sphinx_build="$optarg"
1050   ;;
1051   --skip-meson) skip_meson=yes
1052   ;;
1053   --meson=*) meson="$optarg"
1054   ;;
1055   --ninja=*) ninja="$optarg"
1056   ;;
1057   --smbd=*) smbd="$optarg"
1058   ;;
1059   --extra-cflags=*)
1060   ;;
1061   --extra-cxxflags=*)
1062   ;;
1063   --extra-ldflags=*)
1064   ;;
1065   --enable-debug-info)
1066   ;;
1067   --disable-debug-info)
1068   ;;
1069   --cross-cc-*)
1070   ;;
1071   --enable-modules)
1072       modules="yes"
1073   ;;
1074   --disable-modules)
1075       modules="no"
1076   ;;
1077   --disable-module-upgrades) module_upgrades="no"
1078   ;;
1079   --enable-module-upgrades) module_upgrades="yes"
1080   ;;
1081   --cpu=*)
1082   ;;
1083   --target-list=*) target_list="$optarg"
1084                    if test "$target_list_exclude"; then
1085                        error_exit "Can't mix --target-list with --target-list-exclude"
1086                    fi
1087   ;;
1088   --target-list-exclude=*) target_list_exclude="$optarg"
1089                    if test "$target_list"; then
1090                        error_exit "Can't mix --target-list-exclude with --target-list"
1091                    fi
1092   ;;
1093   --enable-trace-backends=*) trace_backends="$optarg"
1094   ;;
1095   # XXX: backwards compatibility
1096   --enable-trace-backend=*) trace_backends="$optarg"
1097   ;;
1098   --with-trace-file=*) trace_file="$optarg"
1099   ;;
1100   --with-default-devices) default_devices="yes"
1101   ;;
1102   --without-default-devices) default_devices="no"
1103   ;;
1104   --enable-gprof) gprof="yes"
1105   ;;
1106   --enable-gcov) gcov="yes"
1107   ;;
1108   --static)
1109     static="yes"
1110     QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
1111   ;;
1112   --mandir=*) mandir="$optarg"
1113   ;;
1114   --bindir=*) bindir="$optarg"
1115   ;;
1116   --libdir=*) libdir="$optarg"
1117   ;;
1118   --libexecdir=*) libexecdir="$optarg"
1119   ;;
1120   --includedir=*) includedir="$optarg"
1121   ;;
1122   --datadir=*) datadir="$optarg"
1123   ;;
1124   --with-suffix=*) qemu_suffix="$optarg"
1125   ;;
1126   --docdir=*) qemu_docdir="$optarg"
1127   ;;
1128   --sysconfdir=*) sysconfdir="$optarg"
1129   ;;
1130   --localstatedir=*) local_statedir="$optarg"
1131   ;;
1132   --firmwarepath=*) firmwarepath="$optarg"
1133   ;;
1134   --host=*|--build=*|\
1135   --disable-dependency-tracking|\
1136   --sbindir=*|--sharedstatedir=*|\
1137   --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1138   --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1139     # These switches are silently ignored, for compatibility with
1140     # autoconf-generated configure scripts. This allows QEMU's
1141     # configure to be used by RPM and similar macros that set
1142     # lots of directory switches by default.
1143   ;;
1144   --disable-sdl) sdl="disabled"
1145   ;;
1146   --enable-sdl) sdl="enabled"
1147   ;;
1148   --disable-sdl-image) sdl_image="disabled"
1149   ;;
1150   --enable-sdl-image) sdl_image="enabled"
1151   ;;
1152   --disable-qom-cast-debug) qom_cast_debug="no"
1153   ;;
1154   --enable-qom-cast-debug) qom_cast_debug="yes"
1155   ;;
1156   --disable-virtfs) virtfs="no"
1157   ;;
1158   --enable-virtfs) virtfs="yes"
1159   ;;
1160   --disable-mpath) mpath="no"
1161   ;;
1162   --enable-mpath) mpath="yes"
1163   ;;
1164   --disable-vnc) vnc="disabled"
1165   ;;
1166   --enable-vnc) vnc="enabled"
1167   ;;
1168   --disable-gettext) gettext="false"
1169   ;;
1170   --enable-gettext) gettext="true"
1171   ;;
1172   --oss-lib=*) oss_lib="$optarg"
1173   ;;
1174   --audio-drv-list=*) audio_drv_list="$optarg"
1175   ;;
1176   --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1177   ;;
1178   --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1179   ;;
1180   --enable-debug-tcg) debug_tcg="yes"
1181   ;;
1182   --disable-debug-tcg) debug_tcg="no"
1183   ;;
1184   --enable-debug)
1185       # Enable debugging options that aren't excessively noisy
1186       debug_tcg="yes"
1187       debug_mutex="yes"
1188       debug="yes"
1189       strip_opt="no"
1190       fortify_source="no"
1191   ;;
1192   --enable-sanitizers) sanitizers="yes"
1193   ;;
1194   --disable-sanitizers) sanitizers="no"
1195   ;;
1196   --enable-tsan) tsan="yes"
1197   ;;
1198   --disable-tsan) tsan="no"
1199   ;;
1200   --enable-sparse) sparse="yes"
1201   ;;
1202   --disable-sparse) sparse="no"
1203   ;;
1204   --disable-strip) strip_opt="no"
1205   ;;
1206   --disable-vnc-sasl) vnc_sasl="disabled"
1207   ;;
1208   --enable-vnc-sasl) vnc_sasl="enabled"
1209   ;;
1210   --disable-vnc-jpeg) vnc_jpeg="disabled"
1211   ;;
1212   --enable-vnc-jpeg) vnc_jpeg="enabled"
1213   ;;
1214   --disable-vnc-png) vnc_png="disabled"
1215   ;;
1216   --enable-vnc-png) vnc_png="enabled"
1217   ;;
1218   --disable-slirp) slirp="no"
1219   ;;
1220   --enable-slirp=git) slirp="git"
1221   ;;
1222   --enable-slirp=system) slirp="system"
1223   ;;
1224   --disable-vde) vde="no"
1225   ;;
1226   --enable-vde) vde="yes"
1227   ;;
1228   --disable-netmap) netmap="no"
1229   ;;
1230   --enable-netmap) netmap="yes"
1231   ;;
1232   --disable-xen) xen="no"
1233   ;;
1234   --enable-xen) xen="yes"
1235   ;;
1236   --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1237   ;;
1238   --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1239   ;;
1240   --disable-brlapi) brlapi="no"
1241   ;;
1242   --enable-brlapi) brlapi="yes"
1243   ;;
1244   --disable-kvm) kvm="no"
1245   ;;
1246   --enable-kvm) kvm="yes"
1247   ;;
1248   --disable-hax) hax="no"
1249   ;;
1250   --enable-hax) hax="yes"
1251   ;;
1252   --disable-hvf) hvf="no"
1253   ;;
1254   --enable-hvf) hvf="yes"
1255   ;;
1256   --disable-whpx) whpx="no"
1257   ;;
1258   --enable-whpx) whpx="yes"
1259   ;;
1260   --disable-tcg-interpreter) tcg_interpreter="no"
1261   ;;
1262   --enable-tcg-interpreter) tcg_interpreter="yes"
1263   ;;
1264   --disable-cap-ng)  cap_ng="no"
1265   ;;
1266   --enable-cap-ng) cap_ng="yes"
1267   ;;
1268   --disable-tcg) tcg="no"
1269   ;;
1270   --enable-tcg) tcg="yes"
1271   ;;
1272   --disable-malloc-trim) malloc_trim="no"
1273   ;;
1274   --enable-malloc-trim) malloc_trim="yes"
1275   ;;
1276   --disable-spice) spice="no"
1277   ;;
1278   --enable-spice) spice="yes"
1279   ;;
1280   --disable-libiscsi) libiscsi="no"
1281   ;;
1282   --enable-libiscsi) libiscsi="yes"
1283   ;;
1284   --disable-libnfs) libnfs="no"
1285   ;;
1286   --enable-libnfs) libnfs="yes"
1287   ;;
1288   --enable-profiler) profiler="yes"
1289   ;;
1290   --disable-cocoa) cocoa="no"
1291   ;;
1292   --enable-cocoa)
1293       cocoa="yes" ;
1294       audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1295   ;;
1296   --disable-system) softmmu="no"
1297   ;;
1298   --enable-system) softmmu="yes"
1299   ;;
1300   --disable-user)
1301       linux_user="no" ;
1302       bsd_user="no" ;
1303   ;;
1304   --enable-user) ;;
1305   --disable-linux-user) linux_user="no"
1306   ;;
1307   --enable-linux-user) linux_user="yes"
1308   ;;
1309   --disable-bsd-user) bsd_user="no"
1310   ;;
1311   --enable-bsd-user) bsd_user="yes"
1312   ;;
1313   --enable-pie) pie="yes"
1314   ;;
1315   --disable-pie) pie="no"
1316   ;;
1317   --enable-werror) werror="yes"
1318   ;;
1319   --disable-werror) werror="no"
1320   ;;
1321   --enable-stack-protector) stack_protector="yes"
1322   ;;
1323   --disable-stack-protector) stack_protector="no"
1324   ;;
1325   --enable-safe-stack) safe_stack="yes"
1326   ;;
1327   --disable-safe-stack) safe_stack="no"
1328   ;;
1329   --disable-curses) curses="no"
1330   ;;
1331   --enable-curses) curses="yes"
1332   ;;
1333   --disable-iconv) iconv="no"
1334   ;;
1335   --enable-iconv) iconv="yes"
1336   ;;
1337   --disable-curl) curl="no"
1338   ;;
1339   --enable-curl) curl="yes"
1340   ;;
1341   --disable-fdt) fdt="no"
1342   ;;
1343   --enable-fdt) fdt="yes"
1344   ;;
1345   --disable-linux-aio) linux_aio="no"
1346   ;;
1347   --enable-linux-aio) linux_aio="yes"
1348   ;;
1349   --disable-linux-io-uring) linux_io_uring="no"
1350   ;;
1351   --enable-linux-io-uring) linux_io_uring="yes"
1352   ;;
1353   --disable-attr) attr="no"
1354   ;;
1355   --enable-attr) attr="yes"
1356   ;;
1357   --disable-membarrier) membarrier="no"
1358   ;;
1359   --enable-membarrier) membarrier="yes"
1360   ;;
1361   --disable-blobs) blobs="no"
1362   ;;
1363   --with-pkgversion=*) pkgversion="$optarg"
1364   ;;
1365   --with-coroutine=*) coroutine="$optarg"
1366   ;;
1367   --disable-coroutine-pool) coroutine_pool="no"
1368   ;;
1369   --enable-coroutine-pool) coroutine_pool="yes"
1370   ;;
1371   --enable-debug-stack-usage) debug_stack_usage="yes"
1372   ;;
1373   --enable-crypto-afalg) crypto_afalg="yes"
1374   ;;
1375   --disable-crypto-afalg) crypto_afalg="no"
1376   ;;
1377   --disable-docs) docs="no"
1378   ;;
1379   --enable-docs) docs="yes"
1380   ;;
1381   --disable-vhost-net) vhost_net="no"
1382   ;;
1383   --enable-vhost-net) vhost_net="yes"
1384   ;;
1385   --disable-vhost-crypto) vhost_crypto="no"
1386   ;;
1387   --enable-vhost-crypto) vhost_crypto="yes"
1388   ;;
1389   --disable-vhost-scsi) vhost_scsi="no"
1390   ;;
1391   --enable-vhost-scsi) vhost_scsi="yes"
1392   ;;
1393   --disable-vhost-vsock) vhost_vsock="no"
1394   ;;
1395   --enable-vhost-vsock) vhost_vsock="yes"
1396   ;;
1397   --disable-vhost-user-fs) vhost_user_fs="no"
1398   ;;
1399   --enable-vhost-user-fs) vhost_user_fs="yes"
1400   ;;
1401   --disable-opengl) opengl="no"
1402   ;;
1403   --enable-opengl) opengl="yes"
1404   ;;
1405   --disable-rbd) rbd="no"
1406   ;;
1407   --enable-rbd) rbd="yes"
1408   ;;
1409   --disable-xfsctl) xfs="no"
1410   ;;
1411   --enable-xfsctl) xfs="yes"
1412   ;;
1413   --disable-smartcard) smartcard="no"
1414   ;;
1415   --enable-smartcard) smartcard="yes"
1416   ;;
1417   --disable-u2f) u2f="disabled"
1418   ;;
1419   --enable-u2f) u2f="enabled"
1420   ;;
1421   --disable-libusb) libusb="no"
1422   ;;
1423   --enable-libusb) libusb="yes"
1424   ;;
1425   --disable-usb-redir) usb_redir="no"
1426   ;;
1427   --enable-usb-redir) usb_redir="yes"
1428   ;;
1429   --disable-zlib-test)
1430   ;;
1431   --disable-lzo) lzo="no"
1432   ;;
1433   --enable-lzo) lzo="yes"
1434   ;;
1435   --disable-snappy) snappy="no"
1436   ;;
1437   --enable-snappy) snappy="yes"
1438   ;;
1439   --disable-bzip2) bzip2="no"
1440   ;;
1441   --enable-bzip2) bzip2="yes"
1442   ;;
1443   --enable-lzfse) lzfse="yes"
1444   ;;
1445   --disable-lzfse) lzfse="no"
1446   ;;
1447   --disable-zstd) zstd="no"
1448   ;;
1449   --enable-zstd) zstd="yes"
1450   ;;
1451   --enable-guest-agent) guest_agent="yes"
1452   ;;
1453   --disable-guest-agent) guest_agent="no"
1454   ;;
1455   --enable-guest-agent-msi) guest_agent_msi="yes"
1456   ;;
1457   --disable-guest-agent-msi) guest_agent_msi="no"
1458   ;;
1459   --with-vss-sdk) vss_win32_sdk=""
1460   ;;
1461   --with-vss-sdk=*) vss_win32_sdk="$optarg"
1462   ;;
1463   --without-vss-sdk) vss_win32_sdk="no"
1464   ;;
1465   --with-win-sdk) win_sdk=""
1466   ;;
1467   --with-win-sdk=*) win_sdk="$optarg"
1468   ;;
1469   --without-win-sdk) win_sdk="no"
1470   ;;
1471   --enable-tools) want_tools="yes"
1472   ;;
1473   --disable-tools) want_tools="no"
1474   ;;
1475   --enable-seccomp) seccomp="yes"
1476   ;;
1477   --disable-seccomp) seccomp="no"
1478   ;;
1479   --disable-glusterfs) glusterfs="no"
1480   ;;
1481   --disable-avx2) avx2_opt="no"
1482   ;;
1483   --enable-avx2) avx2_opt="yes"
1484   ;;
1485   --disable-avx512f) avx512f_opt="no"
1486   ;;
1487   --enable-avx512f) avx512f_opt="yes"
1488   ;;
1489
1490   --enable-glusterfs) glusterfs="yes"
1491   ;;
1492   --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1493       echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1494   ;;
1495   --enable-vhdx|--disable-vhdx)
1496       echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1497   ;;
1498   --enable-uuid|--disable-uuid)
1499       echo "$0: $opt is obsolete, UUID support is always built" >&2
1500   ;;
1501   --disable-gtk) gtk="no"
1502   ;;
1503   --enable-gtk) gtk="yes"
1504   ;;
1505   --tls-priority=*) tls_priority="$optarg"
1506   ;;
1507   --disable-gnutls) gnutls="no"
1508   ;;
1509   --enable-gnutls) gnutls="yes"
1510   ;;
1511   --disable-nettle) nettle="no"
1512   ;;
1513   --enable-nettle) nettle="yes"
1514   ;;
1515   --disable-gcrypt) gcrypt="no"
1516   ;;
1517   --enable-gcrypt) gcrypt="yes"
1518   ;;
1519   --disable-auth-pam) auth_pam="no"
1520   ;;
1521   --enable-auth-pam) auth_pam="yes"
1522   ;;
1523   --enable-rdma) rdma="yes"
1524   ;;
1525   --disable-rdma) rdma="no"
1526   ;;
1527   --enable-pvrdma) pvrdma="yes"
1528   ;;
1529   --disable-pvrdma) pvrdma="no"
1530   ;;
1531   --disable-vte) vte="no"
1532   ;;
1533   --enable-vte) vte="yes"
1534   ;;
1535   --disable-virglrenderer) virglrenderer="no"
1536   ;;
1537   --enable-virglrenderer) virglrenderer="yes"
1538   ;;
1539   --disable-tpm) tpm="no"
1540   ;;
1541   --enable-tpm) tpm="yes"
1542   ;;
1543   --disable-libssh) libssh="no"
1544   ;;
1545   --enable-libssh) libssh="yes"
1546   ;;
1547   --disable-live-block-migration) live_block_migration="no"
1548   ;;
1549   --enable-live-block-migration) live_block_migration="yes"
1550   ;;
1551   --disable-numa) numa="no"
1552   ;;
1553   --enable-numa) numa="yes"
1554   ;;
1555   --disable-libxml2) libxml2="no"
1556   ;;
1557   --enable-libxml2) libxml2="yes"
1558   ;;
1559   --disable-tcmalloc) tcmalloc="no"
1560   ;;
1561   --enable-tcmalloc) tcmalloc="yes"
1562   ;;
1563   --disable-jemalloc) jemalloc="no"
1564   ;;
1565   --enable-jemalloc) jemalloc="yes"
1566   ;;
1567   --disable-replication) replication="no"
1568   ;;
1569   --enable-replication) replication="yes"
1570   ;;
1571   --disable-bochs) bochs="no"
1572   ;;
1573   --enable-bochs) bochs="yes"
1574   ;;
1575   --disable-cloop) cloop="no"
1576   ;;
1577   --enable-cloop) cloop="yes"
1578   ;;
1579   --disable-dmg) dmg="no"
1580   ;;
1581   --enable-dmg) dmg="yes"
1582   ;;
1583   --disable-qcow1) qcow1="no"
1584   ;;
1585   --enable-qcow1) qcow1="yes"
1586   ;;
1587   --disable-vdi) vdi="no"
1588   ;;
1589   --enable-vdi) vdi="yes"
1590   ;;
1591   --disable-vvfat) vvfat="no"
1592   ;;
1593   --enable-vvfat) vvfat="yes"
1594   ;;
1595   --disable-qed) qed="no"
1596   ;;
1597   --enable-qed) qed="yes"
1598   ;;
1599   --disable-parallels) parallels="no"
1600   ;;
1601   --enable-parallels) parallels="yes"
1602   ;;
1603   --disable-sheepdog) sheepdog="no"
1604   ;;
1605   --enable-sheepdog) sheepdog="yes"
1606   ;;
1607   --disable-vhost-user) vhost_user="no"
1608   ;;
1609   --enable-vhost-user) vhost_user="yes"
1610   ;;
1611   --disable-vhost-vdpa) vhost_vdpa="no"
1612   ;;
1613   --enable-vhost-vdpa) vhost_vdpa="yes"
1614   ;;
1615   --disable-vhost-kernel) vhost_kernel="no"
1616   ;;
1617   --enable-vhost-kernel) vhost_kernel="yes"
1618   ;;
1619   --disable-capstone) capstone="no"
1620   ;;
1621   --enable-capstone) capstone="yes"
1622   ;;
1623   --enable-capstone=git) capstone="git"
1624   ;;
1625   --enable-capstone=system) capstone="system"
1626   ;;
1627   --with-git=*) git="$optarg"
1628   ;;
1629   --enable-git-update) git_update=yes
1630   ;;
1631   --disable-git-update) git_update=no
1632   ;;
1633   --enable-debug-mutex) debug_mutex=yes
1634   ;;
1635   --disable-debug-mutex) debug_mutex=no
1636   ;;
1637   --enable-libpmem) libpmem=yes
1638   ;;
1639   --disable-libpmem) libpmem=no
1640   ;;
1641   --enable-xkbcommon) xkbcommon="enabled"
1642   ;;
1643   --disable-xkbcommon) xkbcommon="disabled"
1644   ;;
1645   --enable-plugins) plugins="yes"
1646   ;;
1647   --disable-plugins) plugins="no"
1648   ;;
1649   --enable-containers) use_containers="yes"
1650   ;;
1651   --disable-containers) use_containers="no"
1652   ;;
1653   --enable-fuzzing) fuzzing=yes
1654   ;;
1655   --disable-fuzzing) fuzzing=no
1656   ;;
1657   --gdb=*) gdb_bin="$optarg"
1658   ;;
1659   --enable-rng-none) rng_none=yes
1660   ;;
1661   --disable-rng-none) rng_none=no
1662   ;;
1663   --enable-keyring) secret_keyring="yes"
1664   ;;
1665   --disable-keyring) secret_keyring="no"
1666   ;;
1667   --enable-libdaxctl) libdaxctl=yes
1668   ;;
1669   --disable-libdaxctl) libdaxctl=no
1670   ;;
1671   *)
1672       echo "ERROR: unknown option $opt"
1673       echo "Try '$0 --help' for more information"
1674       exit 1
1675   ;;
1676   esac
1677 done
1678
1679 firmwarepath="${firmwarepath:-$prefix/share/qemu-firmware}"
1680 libdir="${libdir:-$prefix/lib}"
1681 libexecdir="${libexecdir:-$prefix/libexec}"
1682 includedir="${includedir:-$prefix/include}"
1683
1684 if test "$mingw32" = "yes" ; then
1685     mandir="$prefix"
1686     datadir="$prefix"
1687     docdir="$prefix"
1688     bindir="$prefix"
1689     sysconfdir="$prefix"
1690     local_statedir=
1691 else
1692     mandir="${mandir:-$prefix/share/man}"
1693     datadir="${datadir:-$prefix/share}"
1694     docdir="${docdir:-$prefix/share/doc}"
1695     bindir="${bindir:-$prefix/bin}"
1696     sysconfdir="${sysconfdir:-$prefix/etc}"
1697     local_statedir="${local_statedir:-$prefix/var}"
1698 fi
1699
1700 case "$cpu" in
1701     ppc)
1702            CPU_CFLAGS="-m32"
1703            QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1704            ;;
1705     ppc64)
1706            CPU_CFLAGS="-m64"
1707            QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1708            ;;
1709     sparc)
1710            CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1711            QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
1712            ;;
1713     sparc64)
1714            CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1715            QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1716            ;;
1717     s390)
1718            CPU_CFLAGS="-m31"
1719            QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
1720            ;;
1721     s390x)
1722            CPU_CFLAGS="-m64"
1723            QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1724            ;;
1725     i386)
1726            CPU_CFLAGS="-m32"
1727            QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1728            ;;
1729     x86_64)
1730            # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1731            # If we truly care, we should simply detect this case at
1732            # runtime and generate the fallback to serial emulation.
1733            CPU_CFLAGS="-m64 -mcx16"
1734            QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1735            ;;
1736     x32)
1737            CPU_CFLAGS="-mx32"
1738            QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
1739            ;;
1740     # No special flags required for other host CPUs
1741 esac
1742
1743 eval "cross_cc_${cpu}=\$host_cc"
1744 cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
1745 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1746
1747 # For user-mode emulation the host arch has to be one we explicitly
1748 # support, even if we're using TCI.
1749 if [ "$ARCH" = "unknown" ]; then
1750   bsd_user="no"
1751   linux_user="no"
1752 fi
1753
1754 if [ "$bsd_user" = "no" -a "$linux_user" = "no" -a "$softmmu" = "no" ] ; then
1755   tcg="no"
1756 fi
1757
1758 default_target_list=""
1759
1760 mak_wilds=""
1761
1762 if [ "$softmmu" = "yes" ]; then
1763     mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1764 fi
1765 if [ "$linux_user" = "yes" ]; then
1766     mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1767 fi
1768 if [ "$bsd_user" = "yes" ]; then
1769     mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1770 fi
1771
1772 if test -z "$target_list_exclude"; then
1773     for config in $mak_wilds; do
1774         default_target_list="${default_target_list} $(basename "$config" .mak)"
1775     done
1776 else
1777     exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1778     for config in $mak_wilds; do
1779         target="$(basename "$config" .mak)"
1780         exclude="no"
1781         for excl in $exclude_list; do
1782             if test "$excl" = "$target"; then
1783                 exclude="yes"
1784                 break;
1785             fi
1786         done
1787         if test "$exclude" = "no"; then
1788             default_target_list="${default_target_list} $target"
1789         fi
1790     done
1791 fi
1792
1793 # Enumerate public trace backends for --help output
1794 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1795
1796 if test x"$show_help" = x"yes" ; then
1797 cat << EOF
1798
1799 Usage: configure [options]
1800 Options: [defaults in brackets after descriptions]
1801
1802 Standard options:
1803   --help                   print this message
1804   --prefix=PREFIX          install in PREFIX [$prefix]
1805   --interp-prefix=PREFIX   where to find shared libraries, etc.
1806                            use %M for cpu name [$interp_prefix]
1807   --target-list=LIST       set target list (default: build everything)
1808 $(echo Available targets: $default_target_list | \
1809   fold -s -w 53 | sed -e 's/^/                           /')
1810   --target-list-exclude=LIST exclude a set of targets from the default target-list
1811
1812 Advanced options (experts only):
1813   --cross-prefix=PREFIX    use PREFIX for compile tools [$cross_prefix]
1814   --cc=CC                  use C compiler CC [$cc]
1815   --iasl=IASL              use ACPI compiler IASL [$iasl]
1816   --host-cc=CC             use C compiler CC [$host_cc] for code run at
1817                            build time
1818   --cxx=CXX                use C++ compiler CXX [$cxx]
1819   --objcc=OBJCC            use Objective-C compiler OBJCC [$objcc]
1820   --extra-cflags=CFLAGS    append extra C compiler flags QEMU_CFLAGS
1821   --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1822   --extra-ldflags=LDFLAGS  append extra linker flags LDFLAGS
1823   --cross-cc-ARCH=CC       use compiler when building ARCH guest test cases
1824   --cross-cc-flags-ARCH=   use compiler flags when building ARCH guest tests
1825   --make=MAKE              use specified make [$make]
1826   --install=INSTALL        use specified install [$install]
1827   --python=PYTHON          use specified python [$python]
1828   --sphinx-build=SPHINX    use specified sphinx-build [$sphinx_build]
1829   --meson=MESON            use specified meson [$meson]
1830   --ninja=NINJA            use specified ninja [$ninja]
1831   --smbd=SMBD              use specified smbd [$smbd]
1832   --with-git=GIT           use specified git [$git]
1833   --static                 enable static build [$static]
1834   --mandir=PATH            install man pages in PATH
1835   --datadir=PATH           install firmware in PATH/$qemu_suffix
1836   --docdir=PATH            install documentation in PATH/$qemu_suffix
1837   --bindir=PATH            install binaries in PATH
1838   --libdir=PATH            install libraries in PATH
1839   --libexecdir=PATH        install helper binaries in PATH
1840   --sysconfdir=PATH        install config in PATH/$qemu_suffix
1841   --localstatedir=PATH     install local state in PATH (set at runtime on win32)
1842   --firmwarepath=PATH      search PATH for firmware files
1843   --efi-aarch64=PATH       PATH of efi file to use for aarch64 VMs.
1844   --with-suffix=SUFFIX     suffix for QEMU data inside datadir/libdir/sysconfdir/docdir [$qemu_suffix]
1845   --with-pkgversion=VERS   use specified string as sub-version of the package
1846   --enable-debug           enable common debug build options
1847   --enable-sanitizers      enable default sanitizers
1848   --enable-tsan            enable thread sanitizer
1849   --disable-strip          disable stripping binaries
1850   --disable-werror         disable compilation abort on warning
1851   --disable-stack-protector disable compiler-provided stack protection
1852   --audio-drv-list=LIST    set audio drivers list:
1853                            Available drivers: $audio_possible_drivers
1854   --block-drv-whitelist=L  Same as --block-drv-rw-whitelist=L
1855   --block-drv-rw-whitelist=L
1856                            set block driver read-write whitelist
1857                            (affects only QEMU, not qemu-img)
1858   --block-drv-ro-whitelist=L
1859                            set block driver read-only whitelist
1860                            (affects only QEMU, not qemu-img)
1861   --enable-trace-backends=B Set trace backend
1862                            Available backends: $trace_backend_list
1863   --with-trace-file=NAME   Full PATH,NAME of file to store traces
1864                            Default:trace-<pid>
1865   --disable-slirp          disable SLIRP userspace network connectivity
1866   --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1867   --enable-malloc-trim     enable libc malloc_trim() for memory optimization
1868   --oss-lib                path to OSS library
1869   --cpu=CPU                Build for host CPU [$cpu]
1870   --with-coroutine=BACKEND coroutine backend. Supported options:
1871                            ucontext, sigaltstack, windows
1872   --enable-gcov            enable test coverage analysis with gcov
1873   --disable-blobs          disable installing provided firmware blobs
1874   --with-vss-sdk=SDK-path  enable Windows VSS support in QEMU Guest Agent
1875   --with-win-sdk=SDK-path  path to Windows Platform SDK (to build VSS .tlb)
1876   --tls-priority           default TLS protocol/cipher priority string
1877   --enable-gprof           QEMU profiling with gprof
1878   --enable-profiler        profiler support
1879   --enable-debug-stack-usage
1880                            track the maximum stack usage of stacks created by qemu_alloc_stack
1881   --enable-plugins
1882                            enable plugins via shared library loading
1883   --disable-containers     don't use containers for cross-building
1884   --gdb=GDB-path           gdb to use for gdbstub tests [$gdb_bin]
1885
1886 Optional features, enabled with --enable-FEATURE and
1887 disabled with --disable-FEATURE, default is enabled if available:
1888
1889   system          all system emulation targets
1890   user            supported user emulation targets
1891   linux-user      all linux usermode emulation targets
1892   bsd-user        all BSD usermode emulation targets
1893   docs            build documentation
1894   guest-agent     build the QEMU Guest Agent
1895   guest-agent-msi build guest agent Windows MSI installation package
1896   pie             Position Independent Executables
1897   modules         modules support (non-Windows)
1898   module-upgrades try to load modules from alternate paths for upgrades
1899   debug-tcg       TCG debugging (default is disabled)
1900   debug-info      debugging information
1901   sparse          sparse checker
1902   safe-stack      SafeStack Stack Smash Protection. Depends on
1903                   clang/llvm >= 3.7 and requires coroutine backend ucontext.
1904
1905   gnutls          GNUTLS cryptography support
1906   nettle          nettle cryptography support
1907   gcrypt          libgcrypt cryptography support
1908   auth-pam        PAM access control
1909   sdl             SDL UI
1910   sdl-image       SDL Image support for icons
1911   gtk             gtk UI
1912   vte             vte support for the gtk UI
1913   curses          curses UI
1914   iconv           font glyph conversion support
1915   vnc             VNC UI support
1916   vnc-sasl        SASL encryption for VNC server
1917   vnc-jpeg        JPEG lossy compression for VNC server
1918   vnc-png         PNG compression for VNC server
1919   cocoa           Cocoa UI (Mac OS X only)
1920   virtfs          VirtFS
1921   mpath           Multipath persistent reservation passthrough
1922   xen             xen backend driver support
1923   xen-pci-passthrough    PCI passthrough support for Xen
1924   brlapi          BrlAPI (Braile)
1925   curl            curl connectivity
1926   membarrier      membarrier system call (for Linux 4.14+ or Windows)
1927   fdt             fdt device tree
1928   kvm             KVM acceleration support
1929   hax             HAX acceleration support
1930   hvf             Hypervisor.framework acceleration support
1931   whpx            Windows Hypervisor Platform acceleration support
1932   rdma            Enable RDMA-based migration
1933   pvrdma          Enable PVRDMA support
1934   vde             support for vde network
1935   netmap          support for netmap network
1936   linux-aio       Linux AIO support
1937   linux-io-uring  Linux io_uring support
1938   cap-ng          libcap-ng support
1939   attr            attr and xattr support
1940   vhost-net       vhost-net kernel acceleration support
1941   vhost-vsock     virtio sockets device support
1942   vhost-scsi      vhost-scsi kernel target support
1943   vhost-crypto    vhost-user-crypto backend support
1944   vhost-kernel    vhost kernel backend support
1945   vhost-user      vhost-user backend support
1946   vhost-vdpa      vhost-vdpa kernel backend support
1947   spice           spice
1948   rbd             rados block device (rbd)
1949   libiscsi        iscsi support
1950   libnfs          nfs support
1951   smartcard       smartcard support (libcacard)
1952   u2f             U2F support (u2f-emu)
1953   libusb          libusb (for usb passthrough)
1954   live-block-migration   Block migration in the main migration stream
1955   usb-redir       usb network redirection support
1956   lzo             support of lzo compression library
1957   snappy          support of snappy compression library
1958   bzip2           support of bzip2 compression library
1959                   (for reading bzip2-compressed dmg images)
1960   lzfse           support of lzfse compression library
1961                   (for reading lzfse-compressed dmg images)
1962   zstd            support for zstd compression library
1963                   (for migration compression and qcow2 cluster compression)
1964   seccomp         seccomp support
1965   coroutine-pool  coroutine freelist (better performance)
1966   glusterfs       GlusterFS backend
1967   tpm             TPM support
1968   libssh          ssh block device support
1969   numa            libnuma support
1970   libxml2         for Parallels image format
1971   tcmalloc        tcmalloc support
1972   jemalloc        jemalloc support
1973   avx2            AVX2 optimization support
1974   avx512f         AVX512F optimization support
1975   replication     replication support
1976   opengl          opengl support
1977   virglrenderer   virgl rendering support
1978   xfsctl          xfsctl support
1979   qom-cast-debug  cast debugging support
1980   tools           build qemu-io, qemu-nbd and qemu-img tools
1981   bochs           bochs image format support
1982   cloop           cloop image format support
1983   dmg             dmg image format support
1984   qcow1           qcow v1 image format support
1985   vdi             vdi image format support
1986   vvfat           vvfat image format support
1987   qed             qed image format support
1988   parallels       parallels image format support
1989   sheepdog        sheepdog block driver support
1990   crypto-afalg    Linux AF_ALG crypto backend driver
1991   capstone        capstone disassembler support
1992   debug-mutex     mutex debugging support
1993   libpmem         libpmem support
1994   xkbcommon       xkbcommon support
1995   rng-none        dummy RNG, avoid using /dev/(u)random and getrandom()
1996   libdaxctl       libdaxctl support
1997
1998 NOTE: The object files are built at the place where configure is launched
1999 EOF
2000 exit 0
2001 fi
2002
2003 # Remove old dependency files to make sure that they get properly regenerated
2004 rm -f */config-devices.mak.d
2005
2006 if test -z "$python"
2007 then
2008     error_exit "Python not found. Use --python=/path/to/python"
2009 fi
2010
2011 # Note that if the Python conditional here evaluates True we will exit
2012 # with status 1 which is a shell 'false' value.
2013 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then
2014   error_exit "Cannot use '$python', Python >= 3.5 is required." \
2015       "Use --python=/path/to/python to specify a supported Python."
2016 fi
2017
2018 # Preserve python version since some functionality is dependent on it
2019 python_version=$($python -c 'import sys; print("%d.%d.%d" % (sys.version_info[0], sys.version_info[1], sys.version_info[2]))' 2>/dev/null)
2020
2021 # Suppress writing compiled files
2022 python="$python -B"
2023
2024 if test -z "$meson"; then
2025     if test "$explicit_python" = no && has meson && version_ge "$(meson --version)" 0.55.1; then
2026         meson=meson
2027     elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
2028         meson=git
2029     elif test -e "${source_path}/meson/meson.py" ; then
2030         meson=internal
2031     else
2032         if test "$explicit_python" = yes; then
2033             error_exit "--python requires using QEMU's embedded Meson distribution, but it was not found."
2034         else
2035             error_exit "Meson not found.  Use --meson=/path/to/meson"
2036         fi
2037     fi
2038 else
2039     # Meson uses its own Python interpreter to invoke other Python scripts,
2040     # but the user wants to use the one they specified with --python.
2041     #
2042     # We do not want to override the distro Python interpreter (and sometimes
2043     # cannot: for example in Homebrew /usr/bin/meson is a bash script), so
2044     # just require --meson=git|internal together with --python.
2045     if test "$explicit_python" = yes; then
2046         case "$meson" in
2047             git | internal) ;;
2048             *) error_exit "--python requires using QEMU's embedded Meson distribution." ;;
2049         esac
2050     fi
2051 fi
2052
2053 if test "$meson" = git; then
2054     git_submodules="${git_submodules} meson"
2055 fi
2056 if test "$git_update" = yes; then
2057     (cd "${source_path}" && GIT="$git" "./scripts/git-submodule.sh" update "$git_submodules")
2058 fi
2059
2060 case "$meson" in
2061     git | internal)
2062         if ! $python -c 'import pkg_resources' > /dev/null 2>&1; then
2063             error_exit "Python setuptools not found"
2064         fi
2065         meson="$python ${source_path}/meson/meson.py"
2066         ;;
2067     *) meson=$(command -v meson) ;;
2068 esac
2069
2070 # Probe for ninja (used for compdb)
2071
2072 if test -z "$ninja"; then
2073     for c in ninja ninja-build samu; do
2074         if has $c; then
2075             ninja=$(command -v "$c")
2076             break
2077         fi
2078     done
2079 fi
2080
2081 # Check that the C compiler works. Doing this here before testing
2082 # the host CPU ensures that we had a valid CC to autodetect the
2083 # $cpu var (and we should bail right here if that's not the case).
2084 # It also allows the help message to be printed without a CC.
2085 write_c_skeleton;
2086 if compile_object ; then
2087   : C compiler works ok
2088 else
2089     error_exit "\"$cc\" either does not exist or does not work"
2090 fi
2091 if ! compile_prog ; then
2092     error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
2093 fi
2094
2095 # Now we have handled --enable-tcg-interpreter and know we're not just
2096 # printing the help message, bail out if the host CPU isn't supported.
2097 if test "$ARCH" = "unknown"; then
2098     if test "$tcg_interpreter" = "yes" ; then
2099         echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
2100     else
2101         error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
2102     fi
2103 fi
2104
2105 # Consult white-list to determine whether to enable werror
2106 # by default.  Only enable by default for git builds
2107 if test -z "$werror" ; then
2108     if test -e "$source_path/.git" && \
2109         { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
2110         werror="yes"
2111     else
2112         werror="no"
2113     fi
2114 fi
2115
2116 if test "$bogus_os" = "yes"; then
2117     # Now that we know that we're not printing the help and that
2118     # the compiler works (so the results of the check_defines we used
2119     # to identify the OS are reliable), if we didn't recognize the
2120     # host OS we should stop now.
2121     error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
2122 fi
2123
2124 # Check whether the compiler matches our minimum requirements:
2125 cat > $TMPC << EOF
2126 #if defined(__clang_major__) && defined(__clang_minor__)
2127 # ifdef __apple_build_version__
2128 #  if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
2129 #   error You need at least XCode Clang v5.1 to compile QEMU
2130 #  endif
2131 # else
2132 #  if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
2133 #   error You need at least Clang v3.4 to compile QEMU
2134 #  endif
2135 # endif
2136 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
2137 # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
2138 #  error You need at least GCC v4.8 to compile QEMU
2139 # endif
2140 #else
2141 # error You either need GCC or Clang to compiler QEMU
2142 #endif
2143 int main (void) { return 0; }
2144 EOF
2145 if ! compile_prog "" "" ; then
2146     error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
2147 fi
2148
2149 # Accumulate -Wfoo and -Wno-bar separately.
2150 # We will list all of the enable flags first, and the disable flags second.
2151 # Note that we do not add -Werror, because that would enable it for all
2152 # configure tests. If a configure test failed due to -Werror this would
2153 # just silently disable some features, so it's too error prone.
2154
2155 warn_flags=
2156 add_to warn_flags -Wold-style-declaration
2157 add_to warn_flags -Wold-style-definition
2158 add_to warn_flags -Wtype-limits
2159 add_to warn_flags -Wformat-security
2160 add_to warn_flags -Wformat-y2k
2161 add_to warn_flags -Winit-self
2162 add_to warn_flags -Wignored-qualifiers
2163 add_to warn_flags -Wempty-body
2164 add_to warn_flags -Wnested-externs
2165 add_to warn_flags -Wendif-labels
2166 add_to warn_flags -Wexpansion-to-defined
2167
2168 nowarn_flags=
2169 add_to nowarn_flags -Wno-initializer-overrides
2170 add_to nowarn_flags -Wno-missing-include-dirs
2171 add_to nowarn_flags -Wno-shift-negative-value
2172 add_to nowarn_flags -Wno-string-plus-int
2173 add_to nowarn_flags -Wno-typedef-redefinition
2174 add_to nowarn_flags -Wno-tautological-type-limit-compare
2175 add_to nowarn_flags -Wno-psabi
2176
2177 gcc_flags="$warn_flags $nowarn_flags"
2178
2179 cc_has_warning_flag() {
2180     write_c_skeleton;
2181
2182     # Use the positive sense of the flag when testing for -Wno-wombat
2183     # support (gcc will happily accept the -Wno- form of unknown
2184     # warning options).
2185     optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
2186     compile_prog "-Werror $optflag" ""
2187 }
2188
2189 for flag in $gcc_flags; do
2190     if cc_has_warning_flag $flag ; then
2191         QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2192     fi
2193 done
2194
2195 if test "$stack_protector" != "no"; then
2196   cat > $TMPC << EOF
2197 int main(int argc, char *argv[])
2198 {
2199     char arr[64], *p = arr, *c = argv[0];
2200     while (*c) {
2201         *p++ = *c++;
2202     }
2203     return 0;
2204 }
2205 EOF
2206   gcc_flags="-fstack-protector-strong -fstack-protector-all"
2207   sp_on=0
2208   for flag in $gcc_flags; do
2209     # We need to check both a compile and a link, since some compiler
2210     # setups fail only on a .c->.o compile and some only at link time
2211     if compile_object "-Werror $flag" &&
2212        compile_prog "-Werror $flag" ""; then
2213       QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2214       QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
2215       sp_on=1
2216       break
2217     fi
2218   done
2219   if test "$stack_protector" = yes; then
2220     if test $sp_on = 0; then
2221       error_exit "Stack protector not supported"
2222     fi
2223   fi
2224 fi
2225
2226 # Disable -Wmissing-braces on older compilers that warn even for
2227 # the "universal" C zero initializer {0}.
2228 cat > $TMPC << EOF
2229 struct {
2230   int a[2];
2231 } x = {0};
2232 EOF
2233 if compile_object "-Werror" "" ; then
2234   :
2235 else
2236   QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2237 fi
2238
2239 # Our module code doesn't support Windows
2240 if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2241   error_exit "Modules are not available for Windows"
2242 fi
2243
2244 # module_upgrades is only reasonable if modules are enabled
2245 if test "$modules" = "no" && test "$module_upgrades" = "yes" ; then
2246   error_exit "Can't enable module-upgrades as Modules are not enabled"
2247 fi
2248
2249 # Static linking is not possible with modules or PIE
2250 if test "$static" = "yes" ; then
2251   if test "$modules" = "yes" ; then
2252     error_exit "static and modules are mutually incompatible"
2253   fi
2254 fi
2255
2256 # Unconditional check for compiler __thread support
2257   cat > $TMPC << EOF
2258 static __thread int tls_var;
2259 int main(void) { return tls_var; }
2260 EOF
2261
2262 if ! compile_prog "-Werror" "" ; then
2263     error_exit "Your compiler does not support the __thread specifier for " \
2264         "Thread-Local Storage (TLS). Please upgrade to a version that does."
2265 fi
2266
2267 cat > $TMPC << EOF
2268
2269 #ifdef __linux__
2270 #  define THREAD __thread
2271 #else
2272 #  define THREAD
2273 #endif
2274 static THREAD int tls_var;
2275 int main(void) { return tls_var; }
2276 EOF
2277
2278 # Check we support --no-pie first; we will need this for building ROMs.
2279 if compile_prog "-Werror -fno-pie" "-no-pie"; then
2280   CFLAGS_NOPIE="-fno-pie"
2281   LDFLAGS_NOPIE="-no-pie"
2282 fi
2283
2284 if test "$static" = "yes"; then
2285   if test "$pie" != "no" && compile_prog "-Werror -fPIE -DPIE" "-static-pie"; then
2286     CFLAGS="-fPIE -DPIE $CFLAGS"
2287     QEMU_LDFLAGS="-static-pie $QEMU_LDFLAGS"
2288     pie="yes"
2289   elif test "$pie" = "yes"; then
2290     error_exit "-static-pie not available due to missing toolchain support"
2291   else
2292     QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
2293     pie="no"
2294   fi
2295 elif test "$pie" = "no"; then
2296   CFLAGS="$CFLAGS_NOPIE $CFLAGS"
2297   LDFLAGS="$LDFLAGS_NOPIE $LDFLAGS"
2298 elif compile_prog "-Werror -fPIE -DPIE" "-pie"; then
2299   CFLAGS="-fPIE -DPIE $CFLAGS"
2300   LDFLAGS="-pie $LDFLAGS"
2301   pie="yes"
2302 elif test "$pie" = "yes"; then
2303   error_exit "PIE not available due to missing toolchain support"
2304 else
2305   echo "Disabling PIE due to missing toolchain support"
2306   pie="no"
2307 fi
2308
2309 # Detect support for PT_GNU_RELRO + DT_BIND_NOW.
2310 # The combination is known as "full relro", because .got.plt is read-only too.
2311 if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2312   QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2313 fi
2314
2315 ##########################################
2316 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2317 # use i686 as default anyway, but for those that don't, an explicit
2318 # specification is necessary
2319
2320 if test "$cpu" = "i386"; then
2321   cat > $TMPC << EOF
2322 static int sfaa(int *ptr)
2323 {
2324   return __sync_fetch_and_and(ptr, 0);
2325 }
2326
2327 int main(void)
2328 {
2329   int val = 42;
2330   val = __sync_val_compare_and_swap(&val, 0, 1);
2331   sfaa(&val);
2332   return val;
2333 }
2334 EOF
2335   if ! compile_prog "" "" ; then
2336     QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2337   fi
2338 fi
2339
2340 #########################################
2341 # Solaris specific configure tool chain decisions
2342
2343 if test "$solaris" = "yes" ; then
2344   if has $install; then
2345     :
2346   else
2347     error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2348         "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2349         "to get ginstall which is used by default (which lives in /opt/csw/bin)"
2350   fi
2351   if test "$(path_of $install)" = "/usr/sbin/install" ; then
2352     error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2353         "try ginstall from the GNU fileutils available from www.blastwave.org" \
2354         "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
2355   fi
2356   if has ar; then
2357     :
2358   else
2359     if test -f /usr/ccs/bin/ar ; then
2360       error_exit "No path includes ar" \
2361           "Add /usr/ccs/bin to your path and rerun configure"
2362     fi
2363     error_exit "No path includes ar"
2364   fi
2365 fi
2366
2367 if test -z "${target_list+xxx}" ; then
2368     for target in $default_target_list; do
2369         supported_target $target 2>/dev/null && \
2370             target_list="$target_list $target"
2371     done
2372     target_list="${target_list# }"
2373 else
2374     target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2375     for target in $target_list; do
2376         # Check that we recognised the target name; this allows a more
2377         # friendly error message than if we let it fall through.
2378         case " $default_target_list " in
2379             *" $target "*)
2380                 ;;
2381             *)
2382                 error_exit "Unknown target name '$target'"
2383                 ;;
2384         esac
2385         supported_target $target || exit 1
2386     done
2387 fi
2388
2389 # see if system emulation was really requested
2390 case " $target_list " in
2391   *"-softmmu "*) softmmu=yes
2392   ;;
2393   *) softmmu=no
2394   ;;
2395 esac
2396
2397 for target in $target_list; do
2398   case "$target" in
2399     arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
2400       edk2_blobs="yes"
2401       ;;
2402   esac
2403 done
2404 # The EDK2 binaries are compressed with bzip2
2405 if test "$edk2_blobs" = "yes" && ! has bzip2; then
2406   error_exit "The bzip2 program is required for building QEMU"
2407 fi
2408
2409 feature_not_found() {
2410   feature=$1
2411   remedy=$2
2412
2413   error_exit "User requested feature $feature" \
2414       "configure was not able to find it." \
2415       "$remedy"
2416 }
2417
2418 # ---
2419 # big/little endian test
2420 cat > $TMPC << EOF
2421 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2422 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2423 extern int foo(short *, short *);
2424 int main(int argc, char *argv[]) {
2425     return foo(big_endian, little_endian);
2426 }
2427 EOF
2428
2429 if compile_object ; then
2430     if strings -a $TMPO | grep -q BiGeNdIaN ; then
2431         bigendian="yes"
2432     elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
2433         bigendian="no"
2434     else
2435         echo big/little test failed
2436     fi
2437 else
2438     echo big/little test failed
2439 fi
2440
2441 ##########################################
2442 # system tools
2443 if test -z "$want_tools"; then
2444     if test "$softmmu" = "no"; then
2445         want_tools=no
2446     else
2447         want_tools=yes
2448     fi
2449 fi
2450
2451 ##########################################
2452 # cocoa implies not SDL or GTK
2453 # (the cocoa UI code currently assumes it is always the active UI
2454 # and doesn't interact well with other UI frontend code)
2455 if test "$cocoa" = "yes"; then
2456     if test "$sdl" = "yes"; then
2457         error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2458     fi
2459     if test "$gtk" = "yes"; then
2460         error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2461     fi
2462     gtk=no
2463     sdl=disabled
2464 fi
2465
2466 # Some versions of Mac OS X incorrectly define SIZE_MAX
2467 cat > $TMPC << EOF
2468 #include <stdint.h>
2469 #include <stdio.h>
2470 int main(int argc, char *argv[]) {
2471     return printf("%zu", SIZE_MAX);
2472 }
2473 EOF
2474 have_broken_size_max=no
2475 if ! compile_object -Werror ; then
2476     have_broken_size_max=yes
2477 fi
2478
2479 ##########################################
2480 # L2TPV3 probe
2481
2482 cat > $TMPC <<EOF
2483 #include <sys/socket.h>
2484 #include <linux/ip.h>
2485 int main(void) { return sizeof(struct mmsghdr); }
2486 EOF
2487 if compile_prog "" "" ; then
2488   l2tpv3=yes
2489 else
2490   l2tpv3=no
2491 fi
2492
2493 if check_include "pty.h" ; then
2494   pty_h=yes
2495 else
2496   pty_h=no
2497 fi
2498
2499 cat > $TMPC <<EOF
2500 #include <sys/mman.h>
2501 int main(int argc, char *argv[]) {
2502     return mlockall(MCL_FUTURE);
2503 }
2504 EOF
2505 if compile_prog "" "" ; then
2506   have_mlockall=yes
2507 else
2508   have_mlockall=no
2509 fi
2510
2511 #########################################
2512 # vhost interdependencies and host support
2513
2514 # vhost backends
2515 test "$vhost_user" = "" && vhost_user=yes
2516 if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2517   error_exit "vhost-user isn't available on win32"
2518 fi
2519 test "$vhost_vdpa" = "" && vhost_vdpa=$linux
2520 if test "$vhost_vdpa" = "yes" && test "$linux" != "yes"; then
2521   error_exit "vhost-vdpa is only available on Linux"
2522 fi
2523 test "$vhost_kernel" = "" && vhost_kernel=$linux
2524 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2525   error_exit "vhost-kernel is only available on Linux"
2526 fi
2527
2528 # vhost-kernel devices
2529 test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2530 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2531   error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2532 fi
2533 test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2534 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2535   error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2536 fi
2537
2538 # vhost-user backends
2539 test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2540 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2541   error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2542 fi
2543 test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2544 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2545   error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2546 fi
2547 test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2548 if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2549   error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2550 fi
2551 #vhost-vdpa backends
2552 test "$vhost_net_vdpa" = "" && vhost_net_vdpa=$vhost_vdpa
2553 if test "$vhost_net_vdpa" = "yes" && test "$vhost_vdpa" = "no"; then
2554   error_exit "--enable-vhost-net-vdpa requires --enable-vhost-vdpa"
2555 fi
2556
2557 # OR the vhost-kernel and vhost-user values for simplicity
2558 if test "$vhost_net" = ""; then
2559   test "$vhost_net_user" = "yes" && vhost_net=yes
2560   test "$vhost_kernel" = "yes" && vhost_net=yes
2561 fi
2562
2563 ##########################################
2564 # MinGW / Mingw-w64 localtime_r/gmtime_r check
2565
2566 if test "$mingw32" = "yes"; then
2567     # Some versions of MinGW / Mingw-w64 lack localtime_r
2568     # and gmtime_r entirely.
2569     #
2570     # Some versions of Mingw-w64 define a macro for
2571     # localtime_r/gmtime_r.
2572     #
2573     # Some versions of Mingw-w64 will define functions
2574     # for localtime_r/gmtime_r, but only if you have
2575     # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2576     # though, unistd.h and pthread.h both define
2577     # that for you.
2578     #
2579     # So this #undef localtime_r and #include <unistd.h>
2580     # are not in fact redundant.
2581 cat > $TMPC << EOF
2582 #include <unistd.h>
2583 #include <time.h>
2584 #undef localtime_r
2585 int main(void) { localtime_r(NULL, NULL); return 0; }
2586 EOF
2587     if compile_prog "" "" ; then
2588         localtime_r="yes"
2589     else
2590         localtime_r="no"
2591     fi
2592 fi
2593
2594 ##########################################
2595 # pkg-config probe
2596
2597 if ! has "$pkg_config_exe"; then
2598   error_exit "pkg-config binary '$pkg_config_exe' not found"
2599 fi
2600
2601 ##########################################
2602 # NPTL probe
2603
2604 if test "$linux_user" = "yes"; then
2605   cat > $TMPC <<EOF
2606 #include <sched.h>
2607 #include <linux/futex.h>
2608 int main(void) {
2609 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2610 #error bork
2611 #endif
2612   return 0;
2613 }
2614 EOF
2615   if ! compile_object ; then
2616     feature_not_found "nptl" "Install glibc and linux kernel headers."
2617   fi
2618 fi
2619
2620 ##########################################
2621 # lzo check
2622
2623 if test "$lzo" != "no" ; then
2624     cat > $TMPC << EOF
2625 #include <lzo/lzo1x.h>
2626 int main(void) { lzo_version(); return 0; }
2627 EOF
2628     if compile_prog "" "-llzo2" ; then
2629         lzo_libs="-llzo2"
2630         lzo="yes"
2631     else
2632         if test "$lzo" = "yes"; then
2633             feature_not_found "liblzo2" "Install liblzo2 devel"
2634         fi
2635         lzo="no"
2636     fi
2637 fi
2638
2639 ##########################################
2640 # snappy check
2641
2642 if test "$snappy" != "no" ; then
2643     cat > $TMPC << EOF
2644 #include <snappy-c.h>
2645 int main(void) { snappy_max_compressed_length(4096); return 0; }
2646 EOF
2647     if compile_prog "" "-lsnappy" ; then
2648         snappy_libs='-lsnappy'
2649         snappy="yes"
2650     else
2651         if test "$snappy" = "yes"; then
2652             feature_not_found "libsnappy" "Install libsnappy devel"
2653         fi
2654         snappy="no"
2655     fi
2656 fi
2657
2658 ##########################################
2659 # bzip2 check
2660
2661 if test "$bzip2" != "no" ; then
2662     cat > $TMPC << EOF
2663 #include <bzlib.h>
2664 int main(void) { BZ2_bzlibVersion(); return 0; }
2665 EOF
2666     if compile_prog "" "-lbz2" ; then
2667         bzip2="yes"
2668     else
2669         if test "$bzip2" = "yes"; then
2670             feature_not_found "libbzip2" "Install libbzip2 devel"
2671         fi
2672         bzip2="no"
2673     fi
2674 fi
2675
2676 ##########################################
2677 # lzfse check
2678
2679 if test "$lzfse" != "no" ; then
2680     cat > $TMPC << EOF
2681 #include <lzfse.h>
2682 int main(void) { lzfse_decode_scratch_size(); return 0; }
2683 EOF
2684     if compile_prog "" "-llzfse" ; then
2685         lzfse="yes"
2686     else
2687         if test "$lzfse" = "yes"; then
2688             feature_not_found "lzfse" "Install lzfse devel"
2689         fi
2690         lzfse="no"
2691     fi
2692 fi
2693
2694 ##########################################
2695 # zstd check
2696
2697 if test "$zstd" != "no" ; then
2698     libzstd_minver="1.4.0"
2699     if $pkg_config --atleast-version=$libzstd_minver libzstd ; then
2700         zstd_cflags="$($pkg_config --cflags libzstd)"
2701         zstd_libs="$($pkg_config --libs libzstd)"
2702         zstd="yes"
2703     else
2704         if test "$zstd" = "yes" ; then
2705             feature_not_found "libzstd" "Install libzstd devel"
2706         fi
2707         zstd="no"
2708     fi
2709 fi
2710
2711 ##########################################
2712 # libseccomp check
2713
2714 if test "$seccomp" != "no" ; then
2715     libseccomp_minver="2.3.0"
2716     if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2717         seccomp_cflags="$($pkg_config --cflags libseccomp)"
2718         seccomp_libs="$($pkg_config --libs libseccomp)"
2719         seccomp="yes"
2720     else
2721         if test "$seccomp" = "yes" ; then
2722             feature_not_found "libseccomp" \
2723                  "Install libseccomp devel >= $libseccomp_minver"
2724         fi
2725         seccomp="no"
2726     fi
2727 fi
2728 ##########################################
2729 # xen probe
2730
2731 if test "$xen" != "no" ; then
2732   # Check whether Xen library path is specified via --extra-ldflags to avoid
2733   # overriding this setting with pkg-config output. If not, try pkg-config
2734   # to obtain all needed flags.
2735
2736   if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2737      $pkg_config --exists xencontrol ; then
2738     xen_ctrl_version="$(printf '%d%02d%02d' \
2739       $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2740     xen=yes
2741     xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2742     xen_pc="$xen_pc xenevtchn xendevicemodel"
2743     if $pkg_config --exists xentoolcore; then
2744       xen_pc="$xen_pc xentoolcore"
2745     fi
2746     QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2747     xen_cflags="$($pkg_config --cflags $xen_pc)"
2748     xen_libs="$($pkg_config --libs $xen_pc)"
2749   else
2750
2751     xen_libs="-lxenstore -lxenctrl -lxenguest"
2752     xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2753
2754     # First we test whether Xen headers and libraries are available.
2755     # If no, we are done and there is no Xen support.
2756     # If yes, more tests are run to detect the Xen version.
2757
2758     # Xen (any)
2759     cat > $TMPC <<EOF
2760 #include <xenctrl.h>
2761 int main(void) {
2762   return 0;
2763 }
2764 EOF
2765     if ! compile_prog "" "$xen_libs" ; then
2766       # Xen not found
2767       if test "$xen" = "yes" ; then
2768         feature_not_found "xen" "Install xen devel"
2769       fi
2770       xen=no
2771
2772     # Xen unstable
2773     elif
2774         cat > $TMPC <<EOF &&
2775 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2776 #define __XEN_TOOLS__
2777 #include <xendevicemodel.h>
2778 #include <xenforeignmemory.h>
2779 int main(void) {
2780   xendevicemodel_handle *xd;
2781   xenforeignmemory_handle *xfmem;
2782
2783   xd = xendevicemodel_open(0, 0);
2784   xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2785
2786   xfmem = xenforeignmemory_open(0, 0);
2787   xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2788
2789   return 0;
2790 }
2791 EOF
2792         compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2793       then
2794       xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2795       xen_ctrl_version=41100
2796       xen=yes
2797     elif
2798         cat > $TMPC <<EOF &&
2799 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2800 #include <xenforeignmemory.h>
2801 #include <xentoolcore.h>
2802 int main(void) {
2803   xenforeignmemory_handle *xfmem;
2804
2805   xfmem = xenforeignmemory_open(0, 0);
2806   xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2807   xentoolcore_restrict_all(0);
2808
2809   return 0;
2810 }
2811 EOF
2812         compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2813       then
2814       xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2815       xen_ctrl_version=41000
2816       xen=yes
2817     elif
2818         cat > $TMPC <<EOF &&
2819 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2820 #define __XEN_TOOLS__
2821 #include <xendevicemodel.h>
2822 int main(void) {
2823   xendevicemodel_handle *xd;
2824
2825   xd = xendevicemodel_open(0, 0);
2826   xendevicemodel_close(xd);
2827
2828   return 0;
2829 }
2830 EOF
2831         compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2832       then
2833       xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2834       xen_ctrl_version=40900
2835       xen=yes
2836     elif
2837         cat > $TMPC <<EOF &&
2838 /*
2839  * If we have stable libs the we don't want the libxc compat
2840  * layers, regardless of what CFLAGS we may have been given.
2841  *
2842  * Also, check if xengnttab_grant_copy_segment_t is defined and
2843  * grant copy operation is implemented.
2844  */
2845 #undef XC_WANT_COMPAT_EVTCHN_API
2846 #undef XC_WANT_COMPAT_GNTTAB_API
2847 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2848 #include <xenctrl.h>
2849 #include <xenstore.h>
2850 #include <xenevtchn.h>
2851 #include <xengnttab.h>
2852 #include <xenforeignmemory.h>
2853 #include <stdint.h>
2854 #include <xen/hvm/hvm_info_table.h>
2855 #if !defined(HVM_MAX_VCPUS)
2856 # error HVM_MAX_VCPUS not defined
2857 #endif
2858 int main(void) {
2859   xc_interface *xc = NULL;
2860   xenforeignmemory_handle *xfmem;
2861   xenevtchn_handle *xe;
2862   xengnttab_handle *xg;
2863   xengnttab_grant_copy_segment_t* seg = NULL;
2864
2865   xs_daemon_open();
2866
2867   xc = xc_interface_open(0, 0, 0);
2868   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2869   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2870   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2871   xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2872
2873   xfmem = xenforeignmemory_open(0, 0);
2874   xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2875
2876   xe = xenevtchn_open(0, 0);
2877   xenevtchn_fd(xe);
2878
2879   xg = xengnttab_open(0, 0);
2880   xengnttab_grant_copy(xg, 0, seg);
2881
2882   return 0;
2883 }
2884 EOF
2885         compile_prog "" "$xen_libs $xen_stable_libs"
2886       then
2887       xen_ctrl_version=40800
2888       xen=yes
2889     elif
2890         cat > $TMPC <<EOF &&
2891 /*
2892  * If we have stable libs the we don't want the libxc compat
2893  * layers, regardless of what CFLAGS we may have been given.
2894  */
2895 #undef XC_WANT_COMPAT_EVTCHN_API
2896 #undef XC_WANT_COMPAT_GNTTAB_API
2897 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2898 #include <xenctrl.h>
2899 #include <xenstore.h>
2900 #include <xenevtchn.h>
2901 #include <xengnttab.h>
2902 #include <xenforeignmemory.h>
2903 #include <stdint.h>
2904 #include <xen/hvm/hvm_info_table.h>
2905 #if !defined(HVM_MAX_VCPUS)
2906 # error HVM_MAX_VCPUS not defined
2907 #endif
2908 int main(void) {
2909   xc_interface *xc = NULL;
2910   xenforeignmemory_handle *xfmem;
2911   xenevtchn_handle *xe;
2912   xengnttab_handle *xg;
2913
2914   xs_daemon_open();
2915
2916   xc = xc_interface_open(0, 0, 0);
2917   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2918   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2919   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2920   xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2921
2922   xfmem = xenforeignmemory_open(0, 0);
2923   xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2924
2925   xe = xenevtchn_open(0, 0);
2926   xenevtchn_fd(xe);
2927
2928   xg = xengnttab_open(0, 0);
2929   xengnttab_map_grant_ref(xg, 0, 0, 0);
2930
2931   return 0;
2932 }
2933 EOF
2934         compile_prog "" "$xen_libs $xen_stable_libs"
2935       then
2936       xen_ctrl_version=40701
2937       xen=yes
2938
2939     # Xen 4.6
2940     elif
2941         cat > $TMPC <<EOF &&
2942 #include <xenctrl.h>
2943 #include <xenstore.h>
2944 #include <stdint.h>
2945 #include <xen/hvm/hvm_info_table.h>
2946 #if !defined(HVM_MAX_VCPUS)
2947 # error HVM_MAX_VCPUS not defined
2948 #endif
2949 int main(void) {
2950   xc_interface *xc;
2951   xs_daemon_open();
2952   xc = xc_interface_open(0, 0, 0);
2953   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2954   xc_gnttab_open(NULL, 0);
2955   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2956   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2957   xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2958   xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2959   return 0;
2960 }
2961 EOF
2962         compile_prog "" "$xen_libs"
2963       then
2964       xen_ctrl_version=40600
2965       xen=yes
2966
2967     # Xen 4.5
2968     elif
2969         cat > $TMPC <<EOF &&
2970 #include <xenctrl.h>
2971 #include <xenstore.h>
2972 #include <stdint.h>
2973 #include <xen/hvm/hvm_info_table.h>
2974 #if !defined(HVM_MAX_VCPUS)
2975 # error HVM_MAX_VCPUS not defined
2976 #endif
2977 int main(void) {
2978   xc_interface *xc;
2979   xs_daemon_open();
2980   xc = xc_interface_open(0, 0, 0);
2981   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2982   xc_gnttab_open(NULL, 0);
2983   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2984   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2985   xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2986   return 0;
2987 }
2988 EOF
2989         compile_prog "" "$xen_libs"
2990       then
2991       xen_ctrl_version=40500
2992       xen=yes
2993
2994     elif
2995         cat > $TMPC <<EOF &&
2996 #include <xenctrl.h>
2997 #include <xenstore.h>
2998 #include <stdint.h>
2999 #include <xen/hvm/hvm_info_table.h>
3000 #if !defined(HVM_MAX_VCPUS)
3001 # error HVM_MAX_VCPUS not defined
3002 #endif
3003 int main(void) {
3004   xc_interface *xc;
3005   xs_daemon_open();
3006   xc = xc_interface_open(0, 0, 0);
3007   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
3008   xc_gnttab_open(NULL, 0);
3009   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
3010   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
3011   return 0;
3012 }
3013 EOF
3014         compile_prog "" "$xen_libs"
3015       then
3016       xen_ctrl_version=40200
3017       xen=yes
3018
3019     else
3020       if test "$xen" = "yes" ; then
3021         feature_not_found "xen (unsupported version)" \
3022                           "Install a supported xen (xen 4.2 or newer)"
3023       fi
3024       xen=no
3025     fi
3026
3027     if test "$xen" = yes; then
3028       if test $xen_ctrl_version -ge 40701  ; then
3029         xen_libs="$xen_libs $xen_stable_libs "
3030       fi
3031     fi
3032   fi
3033 fi
3034
3035 if test "$xen_pci_passthrough" != "no"; then
3036   if test "$xen" = "yes" && test "$linux" = "yes"; then
3037     xen_pci_passthrough=yes
3038   else
3039     if test "$xen_pci_passthrough" = "yes"; then
3040       error_exit "User requested feature Xen PCI Passthrough" \
3041           " but this feature requires /sys from Linux"
3042     fi
3043     xen_pci_passthrough=no
3044   fi
3045 fi
3046
3047 ##########################################
3048 # Windows Hypervisor Platform accelerator (WHPX) check
3049 if test "$whpx" != "no" ; then
3050     if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
3051         whpx="yes"
3052     else
3053         if test "$whpx" = "yes"; then
3054             feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
3055         fi
3056         whpx="no"
3057     fi
3058 fi
3059
3060 ##########################################
3061 # gettext probe
3062 if test "$gettext" != "false" ; then
3063   if has xgettext; then
3064     gettext=true
3065   else
3066     if test "$gettext" = "true" ; then
3067       feature_not_found "gettext" "Install xgettext binary"
3068     fi
3069     gettext=false
3070   fi
3071 fi
3072
3073 ##########################################
3074 # Sparse probe
3075 if test "$sparse" != "no" ; then
3076   if has sparse; then
3077     sparse=yes
3078   else
3079     if test "$sparse" = "yes" ; then
3080       feature_not_found "sparse" "Install sparse binary"
3081     fi
3082     sparse=no
3083   fi
3084 fi
3085
3086 ##########################################
3087 # X11 probe
3088 if $pkg_config --exists "x11"; then
3089     have_x11=yes
3090     x11_cflags=$($pkg_config --cflags x11)
3091     x11_libs=$($pkg_config --libs x11)
3092 fi
3093
3094 ##########################################
3095 # GTK probe
3096
3097 if test "$gtk" != "no"; then
3098     gtkpackage="gtk+-3.0"
3099     gtkx11package="gtk+-x11-3.0"
3100     gtkversion="3.22.0"
3101     if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
3102         gtk_cflags=$($pkg_config --cflags $gtkpackage)
3103         gtk_libs=$($pkg_config --libs $gtkpackage)
3104         gtk_version=$($pkg_config --modversion $gtkpackage)
3105         if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
3106             need_x11=yes
3107             gtk_cflags="$gtk_cflags $x11_cflags"
3108             gtk_libs="$gtk_libs $x11_libs"
3109         fi
3110         gtk="yes"
3111     elif test "$gtk" = "yes"; then
3112         feature_not_found "gtk" "Install gtk3-devel"
3113     else
3114         gtk="no"
3115     fi
3116 fi
3117
3118
3119 ##########################################
3120 # GNUTLS probe
3121
3122 if test "$gnutls" != "no"; then
3123     pass="no"
3124     if $pkg_config --exists "gnutls >= 3.1.18"; then
3125         gnutls_cflags=$($pkg_config --cflags gnutls)
3126         gnutls_libs=$($pkg_config --libs gnutls)
3127         # Packaging for the static libraries is not always correct.
3128         # At least ubuntu 18.04 ships only shared libraries.
3129         write_c_skeleton
3130         if compile_prog "" "$gnutls_libs" ; then
3131             LIBS="$gnutls_libs $LIBS"
3132             QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
3133             pass="yes"
3134         fi
3135     fi
3136     if test "$pass" = "no" && test "$gnutls" = "yes"; then
3137         feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
3138     else
3139         gnutls="$pass"
3140     fi
3141 fi
3142
3143
3144 # If user didn't give a --disable/enable-gcrypt flag,
3145 # then mark as disabled if user requested nettle
3146 # explicitly
3147 if test -z "$gcrypt"
3148 then
3149     if test "$nettle" = "yes"
3150     then
3151         gcrypt="no"
3152     fi
3153 fi
3154
3155 # If user didn't give a --disable/enable-nettle flag,
3156 # then mark as disabled if user requested gcrypt
3157 # explicitly
3158 if test -z "$nettle"
3159 then
3160     if test "$gcrypt" = "yes"
3161     then
3162         nettle="no"
3163     fi
3164 fi
3165
3166 has_libgcrypt() {
3167     if ! has "libgcrypt-config"
3168     then
3169         return 1
3170     fi
3171
3172     if test -n "$cross_prefix"
3173     then
3174         host=$(libgcrypt-config --host)
3175         if test "$host-" != $cross_prefix
3176         then
3177             return 1
3178         fi
3179     fi
3180
3181     maj=`libgcrypt-config --version | awk -F . '{print $1}'`
3182     min=`libgcrypt-config --version | awk -F . '{print $2}'`
3183
3184     if test $maj != 1 || test $min -lt 5
3185     then
3186        return 1
3187     fi
3188
3189     return 0
3190 }
3191
3192
3193 if test "$nettle" != "no"; then
3194     pass="no"
3195     if $pkg_config --exists "nettle >= 2.7.1"; then
3196         nettle_cflags=$($pkg_config --cflags nettle)
3197         nettle_libs=$($pkg_config --libs nettle)
3198         nettle_version=$($pkg_config --modversion nettle)
3199         # Link test to make sure the given libraries work (e.g for static).
3200         write_c_skeleton
3201         if compile_prog "" "$nettle_libs" ; then
3202             LIBS="$nettle_libs $LIBS"
3203             QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
3204             if test -z "$gcrypt"; then
3205                gcrypt="no"
3206             fi
3207             pass="yes"
3208         fi
3209     fi
3210     if test "$pass" = "yes"
3211     then
3212         cat > $TMPC << EOF
3213 #include <nettle/xts.h>
3214 int main(void) {
3215   return 0;
3216 }
3217 EOF
3218         if compile_prog "$nettle_cflags" "$nettle_libs" ; then
3219             nettle_xts=yes
3220             qemu_private_xts=no
3221         fi
3222     fi
3223     if test "$pass" = "no" && test "$nettle" = "yes"; then
3224         feature_not_found "nettle" "Install nettle devel >= 2.7.1"
3225     else
3226         nettle="$pass"
3227     fi
3228 fi
3229
3230 if test "$gcrypt" != "no"; then
3231     pass="no"
3232     if has_libgcrypt; then
3233         gcrypt_cflags=$(libgcrypt-config --cflags)
3234         gcrypt_libs=$(libgcrypt-config --libs)
3235         # Debian has removed -lgpg-error from libgcrypt-config
3236         # as it "spreads unnecessary dependencies" which in
3237         # turn breaks static builds...
3238         if test "$static" = "yes"
3239         then
3240             gcrypt_libs="$gcrypt_libs -lgpg-error"
3241         fi
3242
3243         # Link test to make sure the given libraries work (e.g for static).
3244         write_c_skeleton
3245         if compile_prog "" "$gcrypt_libs" ; then
3246             LIBS="$gcrypt_libs $LIBS"
3247             QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
3248             pass="yes"
3249         fi
3250     fi
3251     if test "$pass" = "yes"; then
3252         gcrypt="yes"
3253         cat > $TMPC << EOF
3254 #include <gcrypt.h>
3255 int main(void) {
3256   gcry_mac_hd_t handle;
3257   gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3258                 GCRY_MAC_FLAG_SECURE, NULL);
3259   return 0;
3260 }
3261 EOF
3262         if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3263             gcrypt_hmac=yes
3264         fi
3265         cat > $TMPC << EOF
3266 #include <gcrypt.h>
3267 int main(void) {
3268   gcry_cipher_hd_t handle;
3269   gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3270   return 0;
3271 }
3272 EOF
3273         if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3274             gcrypt_xts=yes
3275             qemu_private_xts=no
3276         fi
3277     elif test "$gcrypt" = "yes"; then
3278         feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
3279     else
3280         gcrypt="no"
3281     fi
3282 fi
3283
3284
3285 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3286 then
3287     error_exit "Only one of gcrypt & nettle can be enabled"
3288 fi
3289
3290 ##########################################
3291 # libtasn1 - only for the TLS creds/session test suite
3292
3293 tasn1=yes
3294 tasn1_cflags=""
3295 tasn1_libs=""
3296 if $pkg_config --exists "libtasn1"; then
3297     tasn1_cflags=$($pkg_config --cflags libtasn1)
3298     tasn1_libs=$($pkg_config --libs libtasn1)
3299 else
3300     tasn1=no
3301 fi
3302
3303
3304 ##########################################
3305 # PAM probe
3306
3307 if test "$auth_pam" != "no"; then
3308     cat > $TMPC <<EOF
3309 #include <security/pam_appl.h>
3310 #include <stdio.h>
3311 int main(void) {
3312    const char *service_name = "qemu";
3313    const char *user = "frank";
3314    const struct pam_conv pam_conv = { 0 };
3315    pam_handle_t *pamh = NULL;
3316    pam_start(service_name, user, &pam_conv, &pamh);
3317    return 0;
3318 }
3319 EOF
3320     if compile_prog "" "-lpam" ; then
3321         auth_pam=yes
3322     else
3323         if test "$auth_pam" = "yes"; then
3324             feature_not_found "PAM" "Install PAM development package"
3325         else
3326             auth_pam=no
3327         fi
3328     fi
3329 fi
3330
3331 ##########################################
3332 # getifaddrs (for tests/test-io-channel-socket )
3333
3334 have_ifaddrs_h=yes
3335 if ! check_include "ifaddrs.h" ; then
3336   have_ifaddrs_h=no
3337 fi
3338
3339 #########################################
3340 # libdrm check
3341 have_drm_h=no
3342 if check_include "libdrm/drm.h" ; then
3343     have_drm_h=yes
3344 fi
3345
3346 #########################################
3347 # sys/signal.h check
3348 have_sys_signal_h=no
3349 if check_include "sys/signal.h" ; then
3350   have_sys_signal_h=yes
3351 fi
3352
3353 ##########################################
3354 # VTE probe
3355
3356 if test "$vte" != "no"; then
3357     vteminversion="0.32.0"
3358     if $pkg_config --exists "vte-2.91"; then
3359       vtepackage="vte-2.91"
3360     else
3361       vtepackage="vte-2.90"
3362     fi
3363     if $pkg_config --exists "$vtepackage >= $vteminversion"; then
3364         vte_cflags=$($pkg_config --cflags $vtepackage)
3365         vte_libs=$($pkg_config --libs $vtepackage)
3366         vteversion=$($pkg_config --modversion $vtepackage)
3367         vte="yes"
3368     elif test "$vte" = "yes"; then
3369         feature_not_found "vte" "Install libvte-2.90/2.91 devel"
3370     else
3371         vte="no"
3372     fi
3373 fi
3374
3375 ##########################################
3376 # RDMA needs OpenFabrics libraries
3377 if test "$rdma" != "no" ; then
3378   cat > $TMPC <<EOF
3379 #include <rdma/rdma_cma.h>
3380 int main(void) { return 0; }
3381 EOF
3382   rdma_libs="-lrdmacm -libverbs -libumad"
3383   if compile_prog "" "$rdma_libs" ; then
3384     rdma="yes"
3385   else
3386     if test "$rdma" = "yes" ; then
3387         error_exit \
3388             " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3389             " Your options:" \
3390             "  (1) Fast: Install infiniband packages (devel) from your distro." \
3391             "  (2) Cleanest: Install libraries from www.openfabrics.org" \
3392             "  (3) Also: Install softiwarp if you don't have RDMA hardware"
3393     fi
3394     rdma="no"
3395   fi
3396 fi
3397
3398 ##########################################
3399 # PVRDMA detection
3400
3401 cat > $TMPC <<EOF &&
3402 #include <sys/mman.h>
3403
3404 int
3405 main(void)
3406 {
3407     char buf = 0;
3408     void *addr = &buf;
3409     addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3410
3411     return 0;
3412 }
3413 EOF
3414
3415 if test "$rdma" = "yes" ; then
3416     case "$pvrdma" in
3417     "")
3418         if compile_prog "" ""; then
3419             pvrdma="yes"
3420         else
3421             pvrdma="no"
3422         fi
3423         ;;
3424     "yes")
3425         if ! compile_prog "" ""; then
3426             error_exit "PVRDMA is not supported since mremap is not implemented"
3427         fi
3428         pvrdma="yes"
3429         ;;
3430     "no")
3431         pvrdma="no"
3432         ;;
3433     esac
3434 else
3435     if test "$pvrdma" = "yes" ; then
3436         error_exit "PVRDMA requires rdma suppport"
3437     fi
3438     pvrdma="no"
3439 fi
3440
3441 # Let's see if enhanced reg_mr is supported
3442 if test "$pvrdma" = "yes" ; then
3443
3444 cat > $TMPC <<EOF &&
3445 #include <infiniband/verbs.h>
3446
3447 int
3448 main(void)
3449 {
3450     struct ibv_mr *mr;
3451     struct ibv_pd *pd = NULL;
3452     size_t length = 10;
3453     uint64_t iova = 0;
3454     int access = 0;
3455     void *addr = NULL;
3456
3457     mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3458
3459     ibv_dereg_mr(mr);
3460
3461     return 0;
3462 }
3463 EOF
3464     if ! compile_prog "" "-libverbs"; then
3465         QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3466     fi
3467 fi
3468
3469 ##########################################
3470 # xfsctl() probe, used for file-posix.c
3471 if test "$xfs" != "no" ; then
3472   cat > $TMPC << EOF
3473 #include <stddef.h>  /* NULL */
3474 #include <xfs/xfs.h>
3475 int main(void)
3476 {
3477     xfsctl(NULL, 0, 0, NULL);
3478     return 0;
3479 }
3480 EOF
3481   if compile_prog "" "" ; then
3482     xfs="yes"
3483   else
3484     if test "$xfs" = "yes" ; then
3485       feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
3486     fi
3487     xfs=no
3488   fi
3489 fi
3490
3491 ##########################################
3492 # vde libraries probe
3493 if test "$vde" != "no" ; then
3494   vde_libs="-lvdeplug"
3495   cat > $TMPC << EOF
3496 #include <libvdeplug.h>
3497 int main(void)
3498 {
3499     struct vde_open_args a = {0, 0, 0};
3500     char s[] = "";
3501     vde_open(s, s, &a);
3502     return 0;
3503 }
3504 EOF
3505   if compile_prog "" "$vde_libs" ; then
3506     vde=yes
3507   else
3508     if test "$vde" = "yes" ; then
3509       feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3510     fi
3511     vde=no
3512   fi
3513 fi
3514
3515 ##########################################
3516 # netmap support probe
3517 # Apart from looking for netmap headers, we make sure that the host API version
3518 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3519 # a minor/major version number. Minor new features will be marked with values up
3520 # to 15, and if something happens that requires a change to the backend we will
3521 # move above 15, submit the backend fixes and modify this two bounds.
3522 if test "$netmap" != "no" ; then
3523   cat > $TMPC << EOF
3524 #include <inttypes.h>
3525 #include <net/if.h>
3526 #include <net/netmap.h>
3527 #include <net/netmap_user.h>
3528 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3529 #error
3530 #endif
3531 int main(void) { return 0; }
3532 EOF
3533   if compile_prog "" "" ; then
3534     netmap=yes
3535   else
3536     if test "$netmap" = "yes" ; then
3537       feature_not_found "netmap"
3538     fi
3539     netmap=no
3540   fi
3541 fi
3542
3543 ##########################################
3544 # libcap-ng library probe
3545 if test "$cap_ng" != "no" ; then
3546   cap_libs="-lcap-ng"
3547   cat > $TMPC << EOF
3548 #include <cap-ng.h>
3549 int main(void)
3550 {
3551     capng_capability_to_name(CAPNG_EFFECTIVE);
3552     return 0;
3553 }
3554 EOF
3555   if compile_prog "" "$cap_libs" ; then
3556     cap_ng=yes
3557   else
3558     if test "$cap_ng" = "yes" ; then
3559       feature_not_found "cap_ng" "Install libcap-ng devel"
3560     fi
3561     cap_ng=no
3562   fi
3563 fi
3564
3565 ##########################################
3566 # Sound support libraries probe
3567
3568 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3569 for drv in $audio_drv_list; do
3570     case $drv in
3571     alsa | try-alsa)
3572     if $pkg_config alsa --exists; then
3573         alsa_libs=$($pkg_config alsa --libs)
3574         alsa_cflags=$($pkg_config alsa --cflags)
3575         alsa=yes
3576         if test "$drv" = "try-alsa"; then
3577             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3578         fi
3579     else
3580         if test "$drv" = "try-alsa"; then
3581             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3582         else
3583             error_exit "$drv check failed" \
3584                 "Make sure to have the $drv libs and headers installed."
3585         fi
3586     fi
3587     ;;
3588
3589     pa | try-pa)
3590     if $pkg_config libpulse --exists; then
3591         libpulse=yes
3592         pulse_libs=$($pkg_config libpulse --libs)
3593         pulse_cflags=$($pkg_config libpulse --cflags)
3594         if test "$drv" = "try-pa"; then
3595             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3596         fi
3597     else
3598         if test "$drv" = "try-pa"; then
3599             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3600         else
3601             error_exit "$drv check failed" \
3602                 "Make sure to have the $drv libs and headers installed."
3603         fi
3604     fi
3605     ;;
3606
3607     sdl)
3608     if test "$sdl" = "no"; then
3609         error_exit "sdl not found or disabled, can not use sdl audio driver"
3610     fi
3611     ;;
3612
3613     try-sdl)
3614     if test "$sdl" = "no"; then
3615         audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3616     else
3617         audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3618     fi
3619     ;;
3620
3621     coreaudio)
3622       coreaudio_libs="-framework CoreAudio"
3623     ;;
3624
3625     dsound)
3626       dsound_libs="-lole32 -ldxguid"
3627       audio_win_int="yes"
3628     ;;
3629
3630     oss)
3631       oss_libs="$oss_lib"
3632     ;;
3633
3634     jack | try-jack)
3635     if $pkg_config jack --exists; then
3636         libjack=yes
3637         jack_libs=$($pkg_config jack --libs)
3638         if test "$drv" = "try-jack"; then
3639             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack/jack/')
3640         fi
3641     else
3642         if test "$drv" = "try-jack"; then
3643             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-jack//')
3644         else
3645             error_exit "$drv check failed" \
3646                 "Make sure to have the $drv libs and headers installed."
3647         fi
3648     fi
3649     ;;
3650
3651     *)
3652     echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3653         error_exit "Unknown driver '$drv' selected" \
3654             "Possible drivers are: $audio_possible_drivers"
3655     }
3656     ;;
3657     esac
3658 done
3659
3660 ##########################################
3661 # BrlAPI probe
3662
3663 if test "$brlapi" != "no" ; then
3664   brlapi_libs="-lbrlapi"
3665   cat > $TMPC << EOF
3666 #include <brlapi.h>
3667 #include <stddef.h>
3668 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3669 EOF
3670   if compile_prog "" "$brlapi_libs" ; then
3671     brlapi=yes
3672   else
3673     if test "$brlapi" = "yes" ; then
3674       feature_not_found "brlapi" "Install brlapi devel"
3675     fi
3676     brlapi=no
3677   fi
3678 fi
3679
3680 ##########################################
3681 # iconv probe
3682 if test "$iconv" != "no" ; then
3683   cat > $TMPC << EOF
3684 #include <iconv.h>
3685 int main(void) {
3686   iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3687   return conv != (iconv_t) -1;
3688 }
3689 EOF
3690   iconv_prefix_list="/usr/local:/usr"
3691   iconv_lib_list=":-liconv"
3692   IFS=:
3693   for iconv_prefix in $iconv_prefix_list; do
3694     IFS=:
3695     iconv_cflags="-I$iconv_prefix/include"
3696     iconv_ldflags="-L$iconv_prefix/lib"
3697     for iconv_link in $iconv_lib_list; do
3698       unset IFS
3699       iconv_lib="$iconv_ldflags $iconv_link"
3700       echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3701       if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3702         iconv_found=yes
3703         break
3704       fi
3705     done
3706     if test "$iconv_found" = yes ; then
3707       break
3708     fi
3709   done
3710   if test "$iconv_found" = "yes" ; then
3711     iconv=yes
3712   else
3713     if test "$iconv" = "yes" ; then
3714       feature_not_found "iconv" "Install iconv devel"
3715     fi
3716     iconv=no
3717   fi
3718 fi
3719
3720 ##########################################
3721 # curses probe
3722 if test "$iconv" = "no" ; then
3723   # curses will need iconv
3724   curses=no
3725 fi
3726 if test "$curses" != "no" ; then
3727   if test "$mingw32" = "yes" ; then
3728     curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3729     curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3730   else
3731     curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3732     curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3733   fi
3734   curses_found=no
3735   cat > $TMPC << EOF
3736 #include <locale.h>
3737 #include <curses.h>
3738 #include <wchar.h>
3739 #include <langinfo.h>
3740 int main(void) {
3741   const char *codeset;
3742   wchar_t wch = L'w';
3743   setlocale(LC_ALL, "");
3744   resize_term(0, 0);
3745   addwstr(L"wide chars\n");
3746   addnwstr(&wch, 1);
3747   add_wch(WACS_DEGREE);
3748   codeset = nl_langinfo(CODESET);
3749   return codeset != 0;
3750 }
3751 EOF
3752   IFS=:
3753   for curses_inc in $curses_inc_list; do
3754     # Make sure we get the wide character prototypes
3755     curses_inc="-DNCURSES_WIDECHAR $curses_inc"
3756     IFS=:
3757     for curses_lib in $curses_lib_list; do
3758       unset IFS
3759       if compile_prog "$curses_inc" "$curses_lib" ; then
3760         curses_found=yes
3761         break
3762       fi
3763     done
3764     if test "$curses_found" = yes ; then
3765       break
3766     fi
3767   done
3768   unset IFS
3769   if test "$curses_found" = "yes" ; then
3770     curses=yes
3771   else
3772     if test "$curses" = "yes" ; then
3773       feature_not_found "curses" "Install ncurses devel"
3774     fi
3775     curses=no
3776   fi
3777 fi
3778
3779 ##########################################
3780 # curl probe
3781 if test "$curl" != "no" ; then
3782   if $pkg_config libcurl --exists; then
3783     curlconfig="$pkg_config libcurl"
3784   else
3785     curlconfig=curl-config
3786   fi
3787   cat > $TMPC << EOF
3788 #include <curl/curl.h>
3789 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3790 EOF
3791   curl_cflags=$($curlconfig --cflags 2>/dev/null)
3792   curl_libs=$($curlconfig --libs 2>/dev/null)
3793   if compile_prog "$curl_cflags" "$curl_libs" ; then
3794     curl=yes
3795   else
3796     if test "$curl" = "yes" ; then
3797       feature_not_found "curl" "Install libcurl devel"
3798     fi
3799     curl=no
3800   fi
3801 fi # test "$curl"
3802
3803 ##########################################
3804 # glib support probe
3805
3806 glib_req_ver=2.48
3807 glib_modules=gthread-2.0
3808 if test "$modules" = yes; then
3809     glib_modules="$glib_modules gmodule-export-2.0"
3810 fi
3811 if test "$plugins" = yes; then
3812     glib_modules="$glib_modules gmodule-2.0"
3813 fi
3814
3815 # This workaround is required due to a bug in pkg-config file for glib as it
3816 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3817
3818 if test "$static" = yes && test "$mingw32" = yes; then
3819     QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3820 fi
3821
3822 for i in $glib_modules; do
3823     if $pkg_config --atleast-version=$glib_req_ver $i; then
3824         glib_cflags=$($pkg_config --cflags $i)
3825         glib_libs=$($pkg_config --libs $i)
3826         QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3827         LIBS="$glib_libs $LIBS"
3828     else
3829         error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3830     fi
3831 done
3832
3833 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3834     gio=yes
3835     gio_cflags=$($pkg_config --cflags gio-2.0)
3836     gio_libs=$($pkg_config --libs gio-2.0)
3837     gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
3838     if [ ! -x "$gdbus_codegen" ]; then
3839         gdbus_codegen=
3840     fi
3841 else
3842     gio=no
3843 fi
3844
3845 if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3846     gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3847     gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3848 fi
3849
3850 # Sanity check that the current size_t matches the
3851 # size that glib thinks it should be. This catches
3852 # problems on multi-arch where people try to build
3853 # 32-bit QEMU while pointing at 64-bit glib headers
3854 cat > $TMPC <<EOF
3855 #include <glib.h>
3856 #include <unistd.h>
3857
3858 #define QEMU_BUILD_BUG_ON(x) \
3859   typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3860
3861 int main(void) {
3862    QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3863    return 0;
3864 }
3865 EOF
3866
3867 if ! compile_prog "$CFLAGS" "$LIBS" ; then
3868     error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3869                "You probably need to set PKG_CONFIG_LIBDIR"\
3870                "to point to the right pkg-config files for your"\
3871                "build target"
3872 fi
3873
3874 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3875 cat > $TMPC << EOF
3876 #include <glib.h>
3877 int main(void) { return 0; }
3878 EOF
3879 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3880     if cc_has_warning_flag "-Wno-unknown-attributes"; then
3881         glib_cflags="-Wno-unknown-attributes $glib_cflags"
3882         QEMU_CFLAGS="-Wno-unknown-attributes $CFLAGS"
3883     fi
3884 fi
3885
3886 # Silence clang warnings triggered by glib < 2.57.2
3887 cat > $TMPC << EOF
3888 #include <glib.h>
3889 typedef struct Foo {
3890     int i;
3891 } Foo;
3892 static void foo_free(Foo *f)
3893 {
3894     g_free(f);
3895 }
3896 G_DEFINE_AUTOPTR_CLEANUP_FUNC(Foo, foo_free);
3897 int main(void) { return 0; }
3898 EOF
3899 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3900     if cc_has_warning_flag "-Wno-unused-function"; then
3901         glib_cflags="$glib_cflags -Wno-unused-function"
3902         CFLAGS="$CFLAGS -Wno-unused-function"
3903     fi
3904 fi
3905
3906 ##########################################
3907 # SHA command probe for modules
3908 if test "$modules" = yes; then
3909     shacmd_probe="sha1sum sha1 shasum"
3910     for c in $shacmd_probe; do
3911         if has $c; then
3912             shacmd="$c"
3913             break
3914         fi
3915     done
3916     if test "$shacmd" = ""; then
3917         error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3918     fi
3919 fi
3920
3921 ##########################################
3922 # libmpathpersist probe
3923
3924 if test "$mpath" != "no" ; then
3925   # probe for the new API
3926   cat > $TMPC <<EOF
3927 #include <libudev.h>
3928 #include <mpath_persist.h>
3929 unsigned mpath_mx_alloc_len = 1024;
3930 int logsink;
3931 static struct config *multipath_conf;
3932 extern struct udev *udev;
3933 extern struct config *get_multipath_config(void);
3934 extern void put_multipath_config(struct config *conf);
3935 struct udev *udev;
3936 struct config *get_multipath_config(void) { return multipath_conf; }
3937 void put_multipath_config(struct config *conf) { }
3938
3939 int main(void) {
3940     udev = udev_new();
3941     multipath_conf = mpath_lib_init();
3942     return 0;
3943 }
3944 EOF
3945   if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3946     mpathpersist=yes
3947     mpathpersist_new_api=yes
3948   else
3949     # probe for the old API
3950     cat > $TMPC <<EOF
3951 #include <libudev.h>
3952 #include <mpath_persist.h>
3953 unsigned mpath_mx_alloc_len = 1024;
3954 int logsink;
3955 int main(void) {
3956     struct udev *udev = udev_new();
3957     mpath_lib_init(udev);
3958     return 0;
3959 }
3960 EOF
3961     if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3962       mpathpersist=yes
3963       mpathpersist_new_api=no
3964     else
3965       mpathpersist=no
3966     fi
3967   fi
3968 else
3969   mpathpersist=no
3970 fi
3971
3972 ##########################################
3973 # pthread probe
3974 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3975
3976 pthread=no
3977 cat > $TMPC << EOF
3978 #include <pthread.h>
3979 static void *f(void *p) { return NULL; }
3980 int main(void) {
3981   pthread_t thread;
3982   pthread_create(&thread, 0, f, 0);
3983   return 0;
3984 }
3985 EOF
3986 if compile_prog "" "" ; then
3987   pthread=yes
3988 else
3989   for pthread_lib in $PTHREADLIBS_LIST; do
3990     if compile_prog "" "$pthread_lib" ; then
3991       pthread=yes
3992       found=no
3993       for lib_entry in $LIBS; do
3994         if test "$lib_entry" = "$pthread_lib"; then
3995           found=yes
3996           break
3997         fi
3998       done
3999       if test "$found" = "no"; then
4000         LIBS="$pthread_lib $LIBS"
4001       fi
4002       PTHREAD_LIB="$pthread_lib"
4003       break
4004     fi
4005   done
4006 fi
4007
4008 if test "$mingw32" != yes && test "$pthread" = no; then
4009   error_exit "pthread check failed" \
4010       "Make sure to have the pthread libs and headers installed."
4011 fi
4012
4013 # check for pthread_setname_np with thread id
4014 pthread_setname_np_w_tid=no
4015 cat > $TMPC << EOF
4016 #include <pthread.h>
4017
4018 static void *f(void *p) { return NULL; }
4019 int main(void)
4020 {
4021     pthread_t thread;
4022     pthread_create(&thread, 0, f, 0);
4023     pthread_setname_np(thread, "QEMU");
4024     return 0;
4025 }
4026 EOF
4027 if compile_prog "" "$pthread_lib" ; then
4028   pthread_setname_np_w_tid=yes
4029 fi
4030
4031 # check for pthread_setname_np without thread id
4032 pthread_setname_np_wo_tid=no
4033 cat > $TMPC << EOF
4034 #include <pthread.h>
4035
4036 static void *f(void *p) { pthread_setname_np("QEMU"); return NULL; }
4037 int main(void)
4038 {
4039     pthread_t thread;
4040     pthread_create(&thread, 0, f, 0);
4041     return 0;
4042 }
4043 EOF
4044 if compile_prog "" "$pthread_lib" ; then
4045   pthread_setname_np_wo_tid=yes
4046 fi
4047
4048 ##########################################
4049 # rbd probe
4050 if test "$rbd" != "no" ; then
4051   cat > $TMPC <<EOF
4052 #include <stdio.h>
4053 #include <rbd/librbd.h>
4054 int main(void) {
4055     rados_t cluster;
4056     rados_create(&cluster, NULL);
4057     return 0;
4058 }
4059 EOF
4060   rbd_libs="-lrbd -lrados"
4061   if compile_prog "" "$rbd_libs" ; then
4062     rbd=yes
4063   else
4064     if test "$rbd" = "yes" ; then
4065       feature_not_found "rados block device" "Install librbd/ceph devel"
4066     fi
4067     rbd=no
4068   fi
4069 fi
4070
4071 ##########################################
4072 # libssh probe
4073 if test "$libssh" != "no" ; then
4074   if $pkg_config --exists libssh; then
4075     libssh_cflags=$($pkg_config libssh --cflags)
4076     libssh_libs=$($pkg_config libssh --libs)
4077     libssh=yes
4078   else
4079     if test "$libssh" = "yes" ; then
4080       error_exit "libssh required for --enable-libssh"
4081     fi
4082     libssh=no
4083   fi
4084 fi
4085
4086 ##########################################
4087 # Check for libssh 0.8
4088 # This is done like this instead of using the LIBSSH_VERSION_* and
4089 # SSH_VERSION_* macros because some distributions in the past shipped
4090 # snapshots of the future 0.8 from Git, and those snapshots did not
4091 # have updated version numbers (still referring to 0.7.0).
4092
4093 if test "$libssh" = "yes"; then
4094   cat > $TMPC <<EOF
4095 #include <libssh/libssh.h>
4096 int main(void) { return ssh_get_server_publickey(NULL, NULL); }
4097 EOF
4098   if compile_prog "$libssh_cflags" "$libssh_libs"; then
4099     libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
4100   fi
4101 fi
4102
4103 ##########################################
4104 # linux-aio probe
4105
4106 if test "$linux_aio" != "no" ; then
4107   cat > $TMPC <<EOF
4108 #include <libaio.h>
4109 #include <sys/eventfd.h>
4110 #include <stddef.h>
4111 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
4112 EOF
4113   if compile_prog "" "-laio" ; then
4114     linux_aio=yes
4115   else
4116     if test "$linux_aio" = "yes" ; then
4117       feature_not_found "linux AIO" "Install libaio devel"
4118     fi
4119     linux_aio=no
4120   fi
4121 fi
4122 ##########################################
4123 # linux-io-uring probe
4124
4125 if test "$linux_io_uring" != "no" ; then
4126   if $pkg_config liburing; then
4127     linux_io_uring_cflags=$($pkg_config --cflags liburing)
4128     linux_io_uring_libs=$($pkg_config --libs liburing)
4129     linux_io_uring=yes
4130
4131     # io_uring is used in libqemuutil.a where per-file -libs variables are not
4132     # seen by programs linking the archive.  It's not ideal, but just add the
4133     # library dependency globally.
4134     LIBS="$linux_io_uring_libs $LIBS"
4135   else
4136     if test "$linux_io_uring" = "yes" ; then
4137       feature_not_found "linux io_uring" "Install liburing devel"
4138     fi
4139     linux_io_uring=no
4140   fi
4141 fi
4142
4143 ##########################################
4144 # TPM emulation is only on POSIX
4145
4146 if test "$tpm" = ""; then
4147   if test "$mingw32" = "yes"; then
4148     tpm=no
4149   else
4150     tpm=yes
4151   fi
4152 elif test "$tpm" = "yes"; then
4153   if test "$mingw32" = "yes" ; then
4154     error_exit "TPM emulation only available on POSIX systems"
4155   fi
4156 fi
4157
4158 ##########################################
4159 # attr probe
4160
4161 libattr_libs=
4162 if test "$attr" != "no" ; then
4163   cat > $TMPC <<EOF
4164 #include <stdio.h>
4165 #include <sys/types.h>
4166 #ifdef CONFIG_LIBATTR
4167 #include <attr/xattr.h>
4168 #else
4169 #include <sys/xattr.h>
4170 #endif
4171 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4172 EOF
4173   if compile_prog "" "" ; then
4174     attr=yes
4175   # Older distros have <attr/xattr.h>, and need -lattr:
4176   elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
4177     attr=yes
4178     libattr_libs="-lattr"
4179     LIBS="$libattr_libs $LIBS"
4180     libattr=yes
4181   else
4182     if test "$attr" = "yes" ; then
4183       feature_not_found "ATTR" "Install libc6 or libattr devel"
4184     fi
4185     attr=no
4186   fi
4187 fi
4188
4189 ##########################################
4190 # iovec probe
4191 cat > $TMPC <<EOF
4192 #include <sys/types.h>
4193 #include <sys/uio.h>
4194 #include <unistd.h>
4195 int main(void) { return sizeof(struct iovec); }
4196 EOF
4197 iovec=no
4198 if compile_prog "" "" ; then
4199   iovec=yes
4200 fi
4201
4202 ##########################################
4203 # preadv probe
4204 cat > $TMPC <<EOF
4205 #include <sys/types.h>
4206 #include <sys/uio.h>
4207 #include <unistd.h>
4208 int main(void) { return preadv(0, 0, 0, 0); }
4209 EOF
4210 preadv=no
4211 if compile_prog "" "" ; then
4212   preadv=yes
4213 fi
4214
4215 ##########################################
4216 # fdt probe
4217 # fdt support is mandatory for at least some target architectures,
4218 # so insist on it if we're building those system emulators.
4219 fdt_required=no
4220 for target in $target_list; do
4221   case $target in
4222     aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu|rx-softmmu)
4223       fdt_required=yes
4224     ;;