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