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