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