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