]> Git Repo - qemu.git/blob - configure
edk2 build scripts: honor external BaseTools flags with uefi-test-tools
[qemu.git] / configure
1 #!/bin/sh
2 #
3 # qemu configure script (c) 2003 Fabrice Bellard
4 #
5
6 # Unset some variables known to interfere with behavior of common tools,
7 # just as autoconf does.
8 CLICOLOR_FORCE= GREP_OPTIONS=
9 unset CLICOLOR_FORCE GREP_OPTIONS
10
11 # Don't allow CCACHE, if present, to use cached results of compile tests!
12 export CCACHE_RECACHE=yes
13
14 # Temporary directory used for files created while
15 # configure runs. Since it is in the build directory
16 # we can safely blow away any previous version of it
17 # (and we need not jump through hoops to try to delete
18 # it when configure exits.)
19 TMPDIR1="config-temp"
20 rm -rf "${TMPDIR1}"
21 mkdir -p "${TMPDIR1}"
22 if [ $? -ne 0 ]; then
23     echo "ERROR: failed to create temporary directory"
24     exit 1
25 fi
26
27 TMPB="qemu-conf"
28 TMPC="${TMPDIR1}/${TMPB}.c"
29 TMPO="${TMPDIR1}/${TMPB}.o"
30 TMPCXX="${TMPDIR1}/${TMPB}.cxx"
31 TMPE="${TMPDIR1}/${TMPB}.exe"
32 TMPMO="${TMPDIR1}/${TMPB}.mo"
33
34 rm -f config.log
35
36 # Print a helpful header at the top of config.log
37 echo "# QEMU configure log $(date)" >> config.log
38 printf "# Configured with:" >> config.log
39 printf " '%s'" "$0" "$@" >> config.log
40 echo >> config.log
41 echo "#" >> config.log
42
43 print_error() {
44     (echo
45     echo "ERROR: $1"
46     while test -n "$2"; do
47         echo "       $2"
48         shift
49     done
50     echo) >&2
51 }
52
53 error_exit() {
54     print_error "$@"
55     exit 1
56 }
57
58 do_compiler() {
59     # Run the compiler, capturing its output to the log. First argument
60     # is compiler binary to execute.
61     local compiler="$1"
62     shift
63     if test -n "$BASH_VERSION"; then eval '
64         echo >>config.log "
65 funcs: ${FUNCNAME[*]}
66 lines: ${BASH_LINENO[*]}"
67     '; fi
68     echo $compiler "$@" >> config.log
69     $compiler "$@" >> config.log 2>&1 || return $?
70     # Test passed. If this is an --enable-werror build, rerun
71     # the test with -Werror and bail out if it fails. This
72     # makes warning-generating-errors in configure test code
73     # obvious to developers.
74     if test "$werror" != "yes"; then
75         return 0
76     fi
77     # Don't bother rerunning the compile if we were already using -Werror
78     case "$*" in
79         *-Werror*)
80            return 0
81         ;;
82     esac
83     echo $compiler -Werror "$@" >> config.log
84     $compiler -Werror "$@" >> config.log 2>&1 && return $?
85     error_exit "configure test passed without -Werror but failed with -Werror." \
86         "This is probably a bug in the configure script. The failing command" \
87         "will be at the bottom of config.log." \
88         "You can run configure with --disable-werror to bypass this check."
89 }
90
91 do_cc() {
92     do_compiler "$cc" "$@"
93 }
94
95 do_cxx() {
96     do_compiler "$cxx" "$@"
97 }
98
99 update_cxxflags() {
100     # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
101     # options which some versions of GCC's C++ compiler complain about
102     # because they only make sense for C programs.
103     QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS"
104
105     for arg in $QEMU_CFLAGS; do
106         case $arg in
107             -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
108             -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
109                 ;;
110             -std=gnu99)
111                 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }"-std=gnu++98"
112                 ;;
113             *)
114                 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
115                 ;;
116         esac
117     done
118 }
119
120 compile_object() {
121   local_cflags="$1"
122   do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
123 }
124
125 compile_prog() {
126   local_cflags="$1"
127   local_ldflags="$2"
128   do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
129 }
130
131 # symbolically link $1 to $2.  Portable version of "ln -sf".
132 symlink() {
133   rm -rf "$2"
134   mkdir -p "$(dirname "$2")"
135   ln -s "$1" "$2"
136 }
137
138 # check whether a command is available to this shell (may be either an
139 # executable or a builtin)
140 has() {
141     type "$1" >/dev/null 2>&1
142 }
143
144 # search for an executable in PATH
145 path_of() {
146     local_command="$1"
147     local_ifs="$IFS"
148     local_dir=""
149
150     # pathname has a dir component?
151     if [ "${local_command#*/}" != "$local_command" ]; then
152         if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
153             echo "$local_command"
154             return 0
155         fi
156     fi
157     if [ -z "$local_command" ]; then
158         return 1
159     fi
160
161     IFS=:
162     for local_dir in $PATH; do
163         if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
164             echo "$local_dir/$local_command"
165             IFS="${local_ifs:-$(printf ' \t\n')}"
166             return 0
167         fi
168     done
169     # not found
170     IFS="${local_ifs:-$(printf ' \t\n')}"
171     return 1
172 }
173
174 have_backend () {
175     echo "$trace_backends" | grep "$1" >/dev/null
176 }
177
178 glob() {
179     eval test -z '"${1#'"$2"'}"'
180 }
181
182 supported_hax_target() {
183     test "$hax" = "yes" || return 1
184     glob "$1" "*-softmmu" || return 1
185     case "${1%-softmmu}" in
186         i386|x86_64)
187             return 0
188         ;;
189     esac
190     return 1
191 }
192
193 supported_kvm_target() {
194     test "$kvm" = "yes" || return 1
195     glob "$1" "*-softmmu" || return 1
196     case "${1%-softmmu}:$cpu" in
197         arm:arm | aarch64:aarch64 | \
198         i386:i386 | i386:x86_64 | i386:x32 | \
199         x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
200         mips:mips | mipsel:mips | \
201         ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | ppc64:ppc64le | \
202         s390x:s390x)
203             return 0
204         ;;
205     esac
206     return 1
207 }
208
209 supported_xen_target() {
210     test "$xen" = "yes" || return 1
211     glob "$1" "*-softmmu" || return 1
212     # Only i386 and x86_64 provide the xenpv machine.
213     case "${1%-softmmu}" in
214         i386|x86_64)
215             return 0
216         ;;
217     esac
218     return 1
219 }
220
221 supported_hvf_target() {
222     test "$hvf" = "yes" || return 1
223     glob "$1" "*-softmmu" || return 1
224     case "${1%-softmmu}" in
225         x86_64)
226             return 0
227         ;;
228     esac
229     return 1
230 }
231
232 supported_whpx_target() {
233     test "$whpx" = "yes" || return 1
234     glob "$1" "*-softmmu" || return 1
235     case "${1%-softmmu}" in
236         i386|x86_64)
237             return 0
238         ;;
239     esac
240     return 1
241 }
242
243 supported_target() {
244     case "$1" in
245         *-softmmu)
246             ;;
247         *-linux-user)
248             if test "$linux" != "yes"; then
249                 print_error "Target '$target' is only available on a Linux host"
250                 return 1
251             fi
252             ;;
253         *-bsd-user)
254             if test "$bsd" != "yes"; then
255                 print_error "Target '$target' is only available on a BSD host"
256                 return 1
257             fi
258             ;;
259         *)
260             print_error "Invalid target name '$target'"
261             return 1
262             ;;
263     esac
264     test "$tcg" = "yes" && return 0
265     supported_kvm_target "$1" && return 0
266     supported_xen_target "$1" && return 0
267     supported_hax_target "$1" && return 0
268     supported_hvf_target "$1" && return 0
269     supported_whpx_target "$1" && return 0
270     print_error "TCG disabled, but hardware accelerator not available for '$target'"
271     return 1
272 }
273
274
275 ld_has() {
276     $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
277 }
278
279 # make source path absolute
280 source_path=$(cd "$(dirname -- "$0")"; pwd)
281
282 if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
283 then
284   error_exit "main directory cannot contain spaces nor colons"
285 fi
286
287 # default parameters
288 cpu=""
289 iasl="iasl"
290 interp_prefix="/usr/gnemul/qemu-%M"
291 static="no"
292 cross_prefix=""
293 audio_drv_list=""
294 block_drv_rw_whitelist=""
295 block_drv_ro_whitelist=""
296 host_cc="cc"
297 libs_cpu=""
298 libs_softmmu=""
299 libs_tools=""
300 audio_win_int=""
301 libs_qga=""
302 debug_info="yes"
303 stack_protector=""
304
305 if test -e "$source_path/.git"
306 then
307     git_update=yes
308     git_submodules="ui/keycodemapdb"
309     git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
310     git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
311 else
312     git_update=no
313     git_submodules=""
314
315     if ! test -f "$source_path/ui/keycodemapdb/README"
316     then
317         echo
318         echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
319         echo
320         echo "This is not a GIT checkout but module content appears to"
321         echo "be missing. Do not use 'git archive' or GitHub download links"
322         echo "to acquire QEMU source archives. Non-GIT builds are only"
323         echo "supported with source archives linked from:"
324         echo
325         echo "  https://www.qemu.org/download/#source"
326         echo
327         echo "Developers working with GIT can use scripts/archive-source.sh"
328         echo "if they need to create valid source archives."
329         echo
330         exit 1
331     fi
332 fi
333 git="git"
334
335 # Don't accept a target_list environment variable.
336 unset target_list
337 unset target_list_exclude
338
339 # Default value for a variable defining feature "foo".
340 #  * foo="no"  feature will only be used if --enable-foo arg is given
341 #  * foo=""    feature will be searched for, and if found, will be used
342 #              unless --disable-foo is given
343 #  * foo="yes" this value will only be set by --enable-foo flag.
344 #              feature will searched for,
345 #              if not found, configure exits with error
346 #
347 # Always add --enable-foo and --disable-foo command line args.
348 # Distributions want to ensure that several features are compiled in, and it
349 # is impossible without a --enable-foo that exits if a feature is not found.
350
351 bluez=""
352 brlapi=""
353 curl=""
354 curses=""
355 docs=""
356 fdt=""
357 netmap="no"
358 sdl=""
359 sdl_image=""
360 virtfs=""
361 mpath=""
362 vnc="yes"
363 sparse="no"
364 vde=""
365 vnc_sasl=""
366 vnc_jpeg=""
367 vnc_png=""
368 xkbcommon=""
369 xen=""
370 xen_ctrl_version=""
371 xen_pci_passthrough=""
372 linux_aio=""
373 cap_ng=""
374 attr=""
375 libattr=""
376 xfs=""
377 tcg="yes"
378 membarrier=""
379 vhost_net=""
380 vhost_crypto=""
381 vhost_scsi=""
382 vhost_vsock=""
383 vhost_user=""
384 kvm="no"
385 hax="no"
386 hvf="no"
387 whpx="no"
388 rdma=""
389 pvrdma=""
390 gprof="no"
391 debug_tcg="no"
392 debug="no"
393 sanitizers="no"
394 fortify_source=""
395 strip_opt="yes"
396 tcg_interpreter="no"
397 bigendian="no"
398 mingw32="no"
399 gcov="no"
400 gcov_tool="gcov"
401 EXESUF=""
402 DSOSUF=".so"
403 LDFLAGS_SHARED="-shared"
404 modules="no"
405 prefix="/usr/local"
406 mandir="\${prefix}/share/man"
407 datadir="\${prefix}/share"
408 firmwarepath="\${prefix}/share/qemu-firmware"
409 qemu_docdir="\${prefix}/share/doc/qemu"
410 bindir="\${prefix}/bin"
411 libdir="\${prefix}/lib"
412 libexecdir="\${prefix}/libexec"
413 includedir="\${prefix}/include"
414 sysconfdir="\${prefix}/etc"
415 local_statedir="\${prefix}/var"
416 confsuffix="/qemu"
417 slirp=""
418 oss_lib=""
419 bsd="no"
420 linux="no"
421 solaris="no"
422 profiler="no"
423 cocoa="no"
424 softmmu="yes"
425 linux_user="no"
426 bsd_user="no"
427 blobs="yes"
428 pkgversion=""
429 pie=""
430 qom_cast_debug="yes"
431 trace_backends="log"
432 trace_file="trace"
433 spice=""
434 rbd=""
435 smartcard=""
436 libusb=""
437 usb_redir=""
438 opengl=""
439 opengl_dmabuf="no"
440 cpuid_h="no"
441 avx2_opt=""
442 zlib="yes"
443 capstone=""
444 lzo=""
445 snappy=""
446 bzip2=""
447 lzfse=""
448 guest_agent=""
449 guest_agent_with_vss="no"
450 guest_agent_ntddscsi="no"
451 guest_agent_msi=""
452 vss_win32_sdk=""
453 win_sdk="no"
454 want_tools="yes"
455 libiscsi=""
456 libnfs=""
457 coroutine=""
458 coroutine_pool=""
459 debug_stack_usage="no"
460 crypto_afalg="no"
461 seccomp=""
462 glusterfs=""
463 glusterfs_xlator_opt="no"
464 glusterfs_discard="no"
465 glusterfs_fallocate="no"
466 glusterfs_zerofill="no"
467 glusterfs_ftruncate_has_stat="no"
468 glusterfs_iocb_has_stat="no"
469 gtk=""
470 gtk_gl="no"
471 tls_priority="NORMAL"
472 gnutls=""
473 nettle=""
474 gcrypt=""
475 gcrypt_hmac="no"
476 auth_pam=""
477 vte=""
478 virglrenderer=""
479 tpm=""
480 libssh=""
481 live_block_migration="yes"
482 numa=""
483 tcmalloc="no"
484 jemalloc="no"
485 replication="yes"
486 vxhs=""
487 bochs="yes"
488 cloop="yes"
489 dmg="yes"
490 qcow1="yes"
491 vdi="yes"
492 vvfat="yes"
493 qed="yes"
494 parallels="yes"
495 sheepdog="yes"
496 libxml2=""
497 debug_mutex="no"
498 libpmem=""
499 default_devices="yes"
500
501 supported_cpu="no"
502 supported_os="no"
503 bogus_os="no"
504 malloc_trim=""
505
506 # parse CC options first
507 for opt do
508   optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
509   case "$opt" in
510   --cross-prefix=*) cross_prefix="$optarg"
511   ;;
512   --cc=*) CC="$optarg"
513   ;;
514   --cxx=*) CXX="$optarg"
515   ;;
516   --cpu=*) cpu="$optarg"
517   ;;
518   --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
519   ;;
520   --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
521   ;;
522   --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
523                      EXTRA_LDFLAGS="$optarg"
524   ;;
525   --enable-debug-info) debug_info="yes"
526   ;;
527   --disable-debug-info) debug_info="no"
528   ;;
529   --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
530   ;;
531   --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
532                       eval "cross_cc_cflags_${cc_arch}=\$optarg"
533                       cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
534   ;;
535   --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
536                 cc_archs="$cc_archs $cc_arch"
537                 eval "cross_cc_${cc_arch}=\$optarg"
538                 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
539   ;;
540   esac
541 done
542 # OS specific
543 # Using uname is really, really broken.  Once we have the right set of checks
544 # we can eliminate its usage altogether.
545
546 # Preferred compiler:
547 #  ${CC} (if set)
548 #  ${cross_prefix}gcc (if cross-prefix specified)
549 #  system compiler
550 if test -z "${CC}${cross_prefix}"; then
551   cc="$host_cc"
552 else
553   cc="${CC-${cross_prefix}gcc}"
554 fi
555
556 if test -z "${CXX}${cross_prefix}"; then
557   cxx="c++"
558 else
559   cxx="${CXX-${cross_prefix}g++}"
560 fi
561
562 ar="${AR-${cross_prefix}ar}"
563 as="${AS-${cross_prefix}as}"
564 ccas="${CCAS-$cc}"
565 cpp="${CPP-$cc -E}"
566 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
567 ld="${LD-${cross_prefix}ld}"
568 ranlib="${RANLIB-${cross_prefix}ranlib}"
569 nm="${NM-${cross_prefix}nm}"
570 strip="${STRIP-${cross_prefix}strip}"
571 windres="${WINDRES-${cross_prefix}windres}"
572 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
573 query_pkg_config() {
574     "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
575 }
576 pkg_config=query_pkg_config
577 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
578
579 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
580 ARFLAGS="${ARFLAGS-rv}"
581
582 # default flags for all hosts
583 # We use -fwrapv to tell the compiler that we require a C dialect where
584 # left shift of signed integers is well defined and has the expected
585 # 2s-complement style results. (Both clang and gcc agree that it
586 # provides these semantics.)
587 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
588 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
589 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
590 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
591 QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
592 if test "$debug_info" = "yes"; then
593     CFLAGS="-g $CFLAGS"
594     LDFLAGS="-g $LDFLAGS"
595 fi
596
597 # running configure in the source tree?
598 # we know that's the case if configure is there.
599 if test -f "./configure"; then
600     pwd_is_source_path="y"
601 else
602     pwd_is_source_path="n"
603 fi
604
605 check_define() {
606 cat > $TMPC <<EOF
607 #if !defined($1)
608 #error $1 not defined
609 #endif
610 int main(void) { return 0; }
611 EOF
612   compile_object
613 }
614
615 check_include() {
616 cat > $TMPC <<EOF
617 #include <$1>
618 int main(void) { return 0; }
619 EOF
620   compile_object
621 }
622
623 write_c_skeleton() {
624     cat > $TMPC <<EOF
625 int main(void) { return 0; }
626 EOF
627 }
628
629 if check_define __linux__ ; then
630   targetos="Linux"
631 elif check_define _WIN32 ; then
632   targetos='MINGW32'
633 elif check_define __OpenBSD__ ; then
634   targetos='OpenBSD'
635 elif check_define __sun__ ; then
636   targetos='SunOS'
637 elif check_define __HAIKU__ ; then
638   targetos='Haiku'
639 elif check_define __FreeBSD__ ; then
640   targetos='FreeBSD'
641 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
642   targetos='GNU/kFreeBSD'
643 elif check_define __DragonFly__ ; then
644   targetos='DragonFly'
645 elif check_define __NetBSD__; then
646   targetos='NetBSD'
647 elif check_define __APPLE__; then
648   targetos='Darwin'
649 else
650   # This is a fatal error, but don't report it yet, because we
651   # might be going to just print the --help text, or it might
652   # be the result of a missing compiler.
653   targetos='bogus'
654   bogus_os='yes'
655 fi
656
657 # Some host OSes need non-standard checks for which CPU to use.
658 # Note that these checks are broken for cross-compilation: if you're
659 # cross-compiling to one of these OSes then you'll need to specify
660 # the correct CPU with the --cpu option.
661 case $targetos in
662 Darwin)
663   # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
664   # run 64-bit userspace code.
665   # If the user didn't specify a CPU explicitly and the kernel says this is
666   # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
667   if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
668     cpu="x86_64"
669   fi
670   ;;
671 SunOS)
672   # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
673   if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
674     cpu="x86_64"
675   fi
676 esac
677
678 if test ! -z "$cpu" ; then
679   # command line argument
680   :
681 elif check_define __i386__ ; then
682   cpu="i386"
683 elif check_define __x86_64__ ; then
684   if check_define __ILP32__ ; then
685     cpu="x32"
686   else
687     cpu="x86_64"
688   fi
689 elif check_define __sparc__ ; then
690   if check_define __arch64__ ; then
691     cpu="sparc64"
692   else
693     cpu="sparc"
694   fi
695 elif check_define _ARCH_PPC ; then
696   if check_define _ARCH_PPC64 ; then
697     if check_define _LITTLE_ENDIAN ; then
698       cpu="ppc64le"
699     else
700       cpu="ppc64"
701     fi
702   else
703     cpu="ppc"
704   fi
705 elif check_define __mips__ ; then
706   cpu="mips"
707 elif check_define __s390__ ; then
708   if check_define __s390x__ ; then
709     cpu="s390x"
710   else
711     cpu="s390"
712   fi
713 elif check_define __riscv ; then
714   if check_define _LP64 ; then
715     cpu="riscv64"
716   else
717     cpu="riscv32"
718   fi
719 elif check_define __arm__ ; then
720   cpu="arm"
721 elif check_define __aarch64__ ; then
722   cpu="aarch64"
723 else
724   cpu=$(uname -m)
725 fi
726
727 ARCH=
728 # Normalise host CPU name and set ARCH.
729 # Note that this case should only have supported host CPUs, not guests.
730 case "$cpu" in
731   ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
732     supported_cpu="yes"
733   ;;
734   ppc64le)
735     ARCH="ppc64"
736     supported_cpu="yes"
737   ;;
738   i386|i486|i586|i686|i86pc|BePC)
739     cpu="i386"
740     supported_cpu="yes"
741   ;;
742   x86_64|amd64)
743     cpu="x86_64"
744     supported_cpu="yes"
745   ;;
746   armv*b|armv*l|arm)
747     cpu="arm"
748     supported_cpu="yes"
749   ;;
750   aarch64)
751     cpu="aarch64"
752     supported_cpu="yes"
753   ;;
754   mips*)
755     cpu="mips"
756     supported_cpu="yes"
757   ;;
758   sparc|sun4[cdmuv])
759     cpu="sparc"
760     supported_cpu="yes"
761   ;;
762   *)
763     # This will result in either an error or falling back to TCI later
764     ARCH=unknown
765   ;;
766 esac
767 if test -z "$ARCH"; then
768   ARCH="$cpu"
769 fi
770
771 # OS specific
772
773 # host *BSD for user mode
774 HOST_VARIANT_DIR=""
775
776 case $targetos in
777 MINGW32*)
778   mingw32="yes"
779   hax="yes"
780   vhost_user="no"
781   audio_possible_drivers="dsound sdl"
782   if check_include dsound.h; then
783     audio_drv_list="dsound"
784   else
785     audio_drv_list=""
786   fi
787   supported_os="yes"
788 ;;
789 GNU/kFreeBSD)
790   bsd="yes"
791   audio_drv_list="oss try-sdl"
792   audio_possible_drivers="oss sdl pa"
793 ;;
794 FreeBSD)
795   bsd="yes"
796   make="${MAKE-gmake}"
797   audio_drv_list="oss try-sdl"
798   audio_possible_drivers="oss sdl pa"
799   # needed for kinfo_getvmmap(3) in libutil.h
800   LIBS="-lutil $LIBS"
801   # needed for kinfo_getproc
802   libs_qga="-lutil $libs_qga"
803   netmap=""  # enable netmap autodetect
804   HOST_VARIANT_DIR="freebsd"
805   supported_os="yes"
806 ;;
807 DragonFly)
808   bsd="yes"
809   make="${MAKE-gmake}"
810   audio_drv_list="oss try-sdl"
811   audio_possible_drivers="oss sdl pa"
812   HOST_VARIANT_DIR="dragonfly"
813 ;;
814 NetBSD)
815   bsd="yes"
816   hax="yes"
817   make="${MAKE-gmake}"
818   audio_drv_list="oss try-sdl"
819   audio_possible_drivers="oss sdl"
820   oss_lib="-lossaudio"
821   HOST_VARIANT_DIR="netbsd"
822   supported_os="yes"
823 ;;
824 OpenBSD)
825   bsd="yes"
826   make="${MAKE-gmake}"
827   audio_drv_list="try-sdl"
828   audio_possible_drivers="sdl"
829   HOST_VARIANT_DIR="openbsd"
830   supported_os="yes"
831 ;;
832 Darwin)
833   bsd="yes"
834   darwin="yes"
835   hax="yes"
836   hvf="yes"
837   LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
838   if [ "$cpu" = "x86_64" ] ; then
839     QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
840     LDFLAGS="-arch x86_64 $LDFLAGS"
841   fi
842   cocoa="yes"
843   audio_drv_list="coreaudio try-sdl"
844   audio_possible_drivers="coreaudio sdl"
845   LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
846   libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
847   # Disable attempts to use ObjectiveC features in os/object.h since they
848   # won't work when we're compiling with gcc as a C compiler.
849   QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
850   HOST_VARIANT_DIR="darwin"
851   supported_os="yes"
852 ;;
853 SunOS)
854   solaris="yes"
855   make="${MAKE-gmake}"
856   install="${INSTALL-ginstall}"
857   smbd="${SMBD-/usr/sfw/sbin/smbd}"
858   if test -f /usr/include/sys/soundcard.h ; then
859     audio_drv_list="oss try-sdl"
860   fi
861   audio_possible_drivers="oss sdl"
862 # needed for CMSG_ macros in sys/socket.h
863   QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
864 # needed for TIOCWIN* defines in termios.h
865   QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
866   QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
867   solarisnetlibs="-lsocket -lnsl -lresolv"
868   LIBS="$solarisnetlibs $LIBS"
869   libs_qga="$solarisnetlibs $libs_qga"
870 ;;
871 Haiku)
872   haiku="yes"
873   QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
874   LIBS="-lposix_error_mapper -lnetwork $LIBS"
875 ;;
876 Linux)
877   audio_drv_list="try-pa oss"
878   audio_possible_drivers="oss alsa sdl pa"
879   linux="yes"
880   linux_user="yes"
881   kvm="yes"
882   QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
883   supported_os="yes"
884   libudev="yes"
885 ;;
886 esac
887
888 if [ "$bsd" = "yes" ] ; then
889   if [ "$darwin" != "yes" ] ; then
890     bsd_user="yes"
891   fi
892 fi
893
894 : ${make=${MAKE-make}}
895 : ${install=${INSTALL-install}}
896 # We prefer python 3.x. A bare 'python' is traditionally
897 # python 2.x, but some distros have it as python 3.x, so
898 # we check that before python2
899 python=
900 for binary in "${PYTHON-python3}" python python2
901 do
902     if has "$binary"
903     then
904         python="$binary"
905         break
906     fi
907 done
908 : ${smbd=${SMBD-/usr/sbin/smbd}}
909
910 # Default objcc to clang if available, otherwise use CC
911 if has clang; then
912   objcc=clang
913 else
914   objcc="$cc"
915 fi
916
917 if test "$mingw32" = "yes" ; then
918   EXESUF=".exe"
919   DSOSUF=".dll"
920   # MinGW needs -mthreads for TLS and macro _MT.
921   QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
922   LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
923   write_c_skeleton;
924   if compile_prog "" "-liberty" ; then
925     LIBS="-liberty $LIBS"
926   fi
927   prefix="c:/Program Files/QEMU"
928   mandir="\${prefix}"
929   datadir="\${prefix}"
930   qemu_docdir="\${prefix}"
931   bindir="\${prefix}"
932   sysconfdir="\${prefix}"
933   local_statedir=
934   confsuffix=""
935   libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
936 fi
937
938 werror=""
939
940 for opt do
941   optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
942   case "$opt" in
943   --help|-h) show_help=yes
944   ;;
945   --version|-V) exec cat $source_path/VERSION
946   ;;
947   --prefix=*) prefix="$optarg"
948   ;;
949   --interp-prefix=*) interp_prefix="$optarg"
950   ;;
951   --cross-prefix=*)
952   ;;
953   --cc=*)
954   ;;
955   --host-cc=*) host_cc="$optarg"
956   ;;
957   --cxx=*)
958   ;;
959   --iasl=*) iasl="$optarg"
960   ;;
961   --objcc=*) objcc="$optarg"
962   ;;
963   --make=*) make="$optarg"
964   ;;
965   --install=*) install="$optarg"
966   ;;
967   --python=*) python="$optarg"
968   ;;
969   --gcov=*) gcov_tool="$optarg"
970   ;;
971   --smbd=*) smbd="$optarg"
972   ;;
973   --extra-cflags=*)
974   ;;
975   --extra-cxxflags=*)
976   ;;
977   --extra-ldflags=*)
978   ;;
979   --enable-debug-info)
980   ;;
981   --disable-debug-info)
982   ;;
983   --cross-cc-*)
984   ;;
985   --enable-modules)
986       modules="yes"
987   ;;
988   --disable-modules)
989       modules="no"
990   ;;
991   --cpu=*)
992   ;;
993   --target-list=*) target_list="$optarg"
994                    if test "$target_list_exclude"; then
995                        error_exit "Can't mix --target-list with --target-list-exclude"
996                    fi
997   ;;
998   --target-list-exclude=*) target_list_exclude="$optarg"
999                    if test "$target_list"; then
1000                        error_exit "Can't mix --target-list-exclude with --target-list"
1001                    fi
1002   ;;
1003   --enable-trace-backends=*) trace_backends="$optarg"
1004   ;;
1005   # XXX: backwards compatibility
1006   --enable-trace-backend=*) trace_backends="$optarg"
1007   ;;
1008   --with-trace-file=*) trace_file="$optarg"
1009   ;;
1010   --with-default-devices) default_devices="yes"
1011   ;;
1012   --without-default-devices) default_devices="no"
1013   ;;
1014   --enable-gprof) gprof="yes"
1015   ;;
1016   --enable-gcov) gcov="yes"
1017   ;;
1018   --static)
1019     static="yes"
1020     LDFLAGS="-static $LDFLAGS"
1021     QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
1022   ;;
1023   --mandir=*) mandir="$optarg"
1024   ;;
1025   --bindir=*) bindir="$optarg"
1026   ;;
1027   --libdir=*) libdir="$optarg"
1028   ;;
1029   --libexecdir=*) libexecdir="$optarg"
1030   ;;
1031   --includedir=*) includedir="$optarg"
1032   ;;
1033   --datadir=*) datadir="$optarg"
1034   ;;
1035   --with-confsuffix=*) confsuffix="$optarg"
1036   ;;
1037   --docdir=*) qemu_docdir="$optarg"
1038   ;;
1039   --sysconfdir=*) sysconfdir="$optarg"
1040   ;;
1041   --localstatedir=*) local_statedir="$optarg"
1042   ;;
1043   --firmwarepath=*) firmwarepath="$optarg"
1044   ;;
1045   --host=*|--build=*|\
1046   --disable-dependency-tracking|\
1047   --sbindir=*|--sharedstatedir=*|\
1048   --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1049   --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1050     # These switches are silently ignored, for compatibility with
1051     # autoconf-generated configure scripts. This allows QEMU's
1052     # configure to be used by RPM and similar macros that set
1053     # lots of directory switches by default.
1054   ;;
1055   --disable-sdl) sdl="no"
1056   ;;
1057   --enable-sdl) sdl="yes"
1058   ;;
1059   --disable-sdl-image) sdl_image="no"
1060   ;;
1061   --enable-sdl-image) sdl_image="yes"
1062   ;;
1063   --disable-qom-cast-debug) qom_cast_debug="no"
1064   ;;
1065   --enable-qom-cast-debug) qom_cast_debug="yes"
1066   ;;
1067   --disable-virtfs) virtfs="no"
1068   ;;
1069   --enable-virtfs) virtfs="yes"
1070   ;;
1071   --disable-mpath) mpath="no"
1072   ;;
1073   --enable-mpath) mpath="yes"
1074   ;;
1075   --disable-vnc) vnc="no"
1076   ;;
1077   --enable-vnc) vnc="yes"
1078   ;;
1079   --oss-lib=*) oss_lib="$optarg"
1080   ;;
1081   --audio-drv-list=*) audio_drv_list="$optarg"
1082   ;;
1083   --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1084   ;;
1085   --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1086   ;;
1087   --enable-debug-tcg) debug_tcg="yes"
1088   ;;
1089   --disable-debug-tcg) debug_tcg="no"
1090   ;;
1091   --enable-debug)
1092       # Enable debugging options that aren't excessively noisy
1093       debug_tcg="yes"
1094       debug_mutex="yes"
1095       debug="yes"
1096       strip_opt="no"
1097       fortify_source="no"
1098   ;;
1099   --enable-sanitizers) sanitizers="yes"
1100   ;;
1101   --disable-sanitizers) sanitizers="no"
1102   ;;
1103   --enable-sparse) sparse="yes"
1104   ;;
1105   --disable-sparse) sparse="no"
1106   ;;
1107   --disable-strip) strip_opt="no"
1108   ;;
1109   --disable-vnc-sasl) vnc_sasl="no"
1110   ;;
1111   --enable-vnc-sasl) vnc_sasl="yes"
1112   ;;
1113   --disable-vnc-jpeg) vnc_jpeg="no"
1114   ;;
1115   --enable-vnc-jpeg) vnc_jpeg="yes"
1116   ;;
1117   --disable-vnc-png) vnc_png="no"
1118   ;;
1119   --enable-vnc-png) vnc_png="yes"
1120   ;;
1121   --disable-slirp) slirp="no"
1122   ;;
1123   --enable-slirp=git) slirp="git"
1124   ;;
1125   --enable-slirp=system) slirp="system"
1126   ;;
1127   --disable-vde) vde="no"
1128   ;;
1129   --enable-vde) vde="yes"
1130   ;;
1131   --disable-netmap) netmap="no"
1132   ;;
1133   --enable-netmap) netmap="yes"
1134   ;;
1135   --disable-xen) xen="no"
1136   ;;
1137   --enable-xen) xen="yes"
1138   ;;
1139   --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1140   ;;
1141   --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1142   ;;
1143   --disable-brlapi) brlapi="no"
1144   ;;
1145   --enable-brlapi) brlapi="yes"
1146   ;;
1147   --disable-bluez) bluez="no"
1148   ;;
1149   --enable-bluez) bluez="yes"
1150   ;;
1151   --disable-kvm) kvm="no"
1152   ;;
1153   --enable-kvm) kvm="yes"
1154   ;;
1155   --disable-hax) hax="no"
1156   ;;
1157   --enable-hax) hax="yes"
1158   ;;
1159   --disable-hvf) hvf="no"
1160   ;;
1161   --enable-hvf) hvf="yes"
1162   ;;
1163   --disable-whpx) whpx="no"
1164   ;;
1165   --enable-whpx) whpx="yes"
1166   ;;
1167   --disable-tcg-interpreter) tcg_interpreter="no"
1168   ;;
1169   --enable-tcg-interpreter) tcg_interpreter="yes"
1170   ;;
1171   --disable-cap-ng)  cap_ng="no"
1172   ;;
1173   --enable-cap-ng) cap_ng="yes"
1174   ;;
1175   --disable-tcg) tcg="no"
1176   ;;
1177   --enable-tcg) tcg="yes"
1178   ;;
1179   --disable-malloc-trim) malloc_trim="no"
1180   ;;
1181   --enable-malloc-trim) malloc_trim="yes"
1182   ;;
1183   --disable-spice) spice="no"
1184   ;;
1185   --enable-spice) spice="yes"
1186   ;;
1187   --disable-libiscsi) libiscsi="no"
1188   ;;
1189   --enable-libiscsi) libiscsi="yes"
1190   ;;
1191   --disable-libnfs) libnfs="no"
1192   ;;
1193   --enable-libnfs) libnfs="yes"
1194   ;;
1195   --enable-profiler) profiler="yes"
1196   ;;
1197   --disable-cocoa) cocoa="no"
1198   ;;
1199   --enable-cocoa)
1200       cocoa="yes" ;
1201       audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1202   ;;
1203   --disable-system) softmmu="no"
1204   ;;
1205   --enable-system) softmmu="yes"
1206   ;;
1207   --disable-user)
1208       linux_user="no" ;
1209       bsd_user="no" ;
1210   ;;
1211   --enable-user) ;;
1212   --disable-linux-user) linux_user="no"
1213   ;;
1214   --enable-linux-user) linux_user="yes"
1215   ;;
1216   --disable-bsd-user) bsd_user="no"
1217   ;;
1218   --enable-bsd-user) bsd_user="yes"
1219   ;;
1220   --enable-pie) pie="yes"
1221   ;;
1222   --disable-pie) pie="no"
1223   ;;
1224   --enable-werror) werror="yes"
1225   ;;
1226   --disable-werror) werror="no"
1227   ;;
1228   --enable-stack-protector) stack_protector="yes"
1229   ;;
1230   --disable-stack-protector) stack_protector="no"
1231   ;;
1232   --disable-curses) curses="no"
1233   ;;
1234   --enable-curses) curses="yes"
1235   ;;
1236   --disable-iconv) iconv="no"
1237   ;;
1238   --enable-iconv) iconv="yes"
1239   ;;
1240   --disable-curl) curl="no"
1241   ;;
1242   --enable-curl) curl="yes"
1243   ;;
1244   --disable-fdt) fdt="no"
1245   ;;
1246   --enable-fdt) fdt="yes"
1247   ;;
1248   --disable-linux-aio) linux_aio="no"
1249   ;;
1250   --enable-linux-aio) linux_aio="yes"
1251   ;;
1252   --disable-attr) attr="no"
1253   ;;
1254   --enable-attr) attr="yes"
1255   ;;
1256   --disable-membarrier) membarrier="no"
1257   ;;
1258   --enable-membarrier) membarrier="yes"
1259   ;;
1260   --disable-blobs) blobs="no"
1261   ;;
1262   --with-pkgversion=*) pkgversion="$optarg"
1263   ;;
1264   --with-coroutine=*) coroutine="$optarg"
1265   ;;
1266   --disable-coroutine-pool) coroutine_pool="no"
1267   ;;
1268   --enable-coroutine-pool) coroutine_pool="yes"
1269   ;;
1270   --enable-debug-stack-usage) debug_stack_usage="yes"
1271   ;;
1272   --enable-crypto-afalg) crypto_afalg="yes"
1273   ;;
1274   --disable-crypto-afalg) crypto_afalg="no"
1275   ;;
1276   --disable-docs) docs="no"
1277   ;;
1278   --enable-docs) docs="yes"
1279   ;;
1280   --disable-vhost-net) vhost_net="no"
1281   ;;
1282   --enable-vhost-net) vhost_net="yes"
1283   ;;
1284   --disable-vhost-crypto) vhost_crypto="no"
1285   ;;
1286   --enable-vhost-crypto) vhost_crypto="yes"
1287   ;;
1288   --disable-vhost-scsi) vhost_scsi="no"
1289   ;;
1290   --enable-vhost-scsi) vhost_scsi="yes"
1291   ;;
1292   --disable-vhost-vsock) vhost_vsock="no"
1293   ;;
1294   --enable-vhost-vsock) vhost_vsock="yes"
1295   ;;
1296   --disable-opengl) opengl="no"
1297   ;;
1298   --enable-opengl) opengl="yes"
1299   ;;
1300   --disable-rbd) rbd="no"
1301   ;;
1302   --enable-rbd) rbd="yes"
1303   ;;
1304   --disable-xfsctl) xfs="no"
1305   ;;
1306   --enable-xfsctl) xfs="yes"
1307   ;;
1308   --disable-smartcard) smartcard="no"
1309   ;;
1310   --enable-smartcard) smartcard="yes"
1311   ;;
1312   --disable-libusb) libusb="no"
1313   ;;
1314   --enable-libusb) libusb="yes"
1315   ;;
1316   --disable-usb-redir) usb_redir="no"
1317   ;;
1318   --enable-usb-redir) usb_redir="yes"
1319   ;;
1320   --disable-zlib-test) zlib="no"
1321   ;;
1322   --disable-lzo) lzo="no"
1323   ;;
1324   --enable-lzo) lzo="yes"
1325   ;;
1326   --disable-snappy) snappy="no"
1327   ;;
1328   --enable-snappy) snappy="yes"
1329   ;;
1330   --disable-bzip2) bzip2="no"
1331   ;;
1332   --enable-bzip2) bzip2="yes"
1333   ;;
1334   --enable-lzfse) lzfse="yes"
1335   ;;
1336   --disable-lzfse) lzfse="no"
1337   ;;
1338   --enable-guest-agent) guest_agent="yes"
1339   ;;
1340   --disable-guest-agent) guest_agent="no"
1341   ;;
1342   --enable-guest-agent-msi) guest_agent_msi="yes"
1343   ;;
1344   --disable-guest-agent-msi) guest_agent_msi="no"
1345   ;;
1346   --with-vss-sdk) vss_win32_sdk=""
1347   ;;
1348   --with-vss-sdk=*) vss_win32_sdk="$optarg"
1349   ;;
1350   --without-vss-sdk) vss_win32_sdk="no"
1351   ;;
1352   --with-win-sdk) win_sdk=""
1353   ;;
1354   --with-win-sdk=*) win_sdk="$optarg"
1355   ;;
1356   --without-win-sdk) win_sdk="no"
1357   ;;
1358   --enable-tools) want_tools="yes"
1359   ;;
1360   --disable-tools) want_tools="no"
1361   ;;
1362   --enable-seccomp) seccomp="yes"
1363   ;;
1364   --disable-seccomp) seccomp="no"
1365   ;;
1366   --disable-glusterfs) glusterfs="no"
1367   ;;
1368   --disable-avx2) avx2_opt="no"
1369   ;;
1370   --enable-avx2) avx2_opt="yes"
1371   ;;
1372   --enable-glusterfs) glusterfs="yes"
1373   ;;
1374   --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1375       echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1376   ;;
1377   --enable-vhdx|--disable-vhdx)
1378       echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1379   ;;
1380   --enable-uuid|--disable-uuid)
1381       echo "$0: $opt is obsolete, UUID support is always built" >&2
1382   ;;
1383   --disable-gtk) gtk="no"
1384   ;;
1385   --enable-gtk) gtk="yes"
1386   ;;
1387   --tls-priority=*) tls_priority="$optarg"
1388   ;;
1389   --disable-gnutls) gnutls="no"
1390   ;;
1391   --enable-gnutls) gnutls="yes"
1392   ;;
1393   --disable-nettle) nettle="no"
1394   ;;
1395   --enable-nettle) nettle="yes"
1396   ;;
1397   --disable-gcrypt) gcrypt="no"
1398   ;;
1399   --enable-gcrypt) gcrypt="yes"
1400   ;;
1401   --disable-auth-pam) auth_pam="no"
1402   ;;
1403   --enable-auth-pam) auth_pam="yes"
1404   ;;
1405   --enable-rdma) rdma="yes"
1406   ;;
1407   --disable-rdma) rdma="no"
1408   ;;
1409   --enable-pvrdma) pvrdma="yes"
1410   ;;
1411   --disable-pvrdma) pvrdma="no"
1412   ;;
1413   --disable-vte) vte="no"
1414   ;;
1415   --enable-vte) vte="yes"
1416   ;;
1417   --disable-virglrenderer) virglrenderer="no"
1418   ;;
1419   --enable-virglrenderer) virglrenderer="yes"
1420   ;;
1421   --disable-tpm) tpm="no"
1422   ;;
1423   --enable-tpm) tpm="yes"
1424   ;;
1425   --disable-libssh) libssh="no"
1426   ;;
1427   --enable-libssh) libssh="yes"
1428   ;;
1429   --disable-live-block-migration) live_block_migration="no"
1430   ;;
1431   --enable-live-block-migration) live_block_migration="yes"
1432   ;;
1433   --disable-numa) numa="no"
1434   ;;
1435   --enable-numa) numa="yes"
1436   ;;
1437   --disable-libxml2) libxml2="no"
1438   ;;
1439   --enable-libxml2) libxml2="yes"
1440   ;;
1441   --disable-tcmalloc) tcmalloc="no"
1442   ;;
1443   --enable-tcmalloc) tcmalloc="yes"
1444   ;;
1445   --disable-jemalloc) jemalloc="no"
1446   ;;
1447   --enable-jemalloc) jemalloc="yes"
1448   ;;
1449   --disable-replication) replication="no"
1450   ;;
1451   --enable-replication) replication="yes"
1452   ;;
1453   --disable-vxhs) vxhs="no"
1454   ;;
1455   --enable-vxhs) vxhs="yes"
1456   ;;
1457   --disable-bochs) bochs="no"
1458   ;;
1459   --enable-bochs) bochs="yes"
1460   ;;
1461   --disable-cloop) cloop="no"
1462   ;;
1463   --enable-cloop) cloop="yes"
1464   ;;
1465   --disable-dmg) dmg="no"
1466   ;;
1467   --enable-dmg) dmg="yes"
1468   ;;
1469   --disable-qcow1) qcow1="no"
1470   ;;
1471   --enable-qcow1) qcow1="yes"
1472   ;;
1473   --disable-vdi) vdi="no"
1474   ;;
1475   --enable-vdi) vdi="yes"
1476   ;;
1477   --disable-vvfat) vvfat="no"
1478   ;;
1479   --enable-vvfat) vvfat="yes"
1480   ;;
1481   --disable-qed) qed="no"
1482   ;;
1483   --enable-qed) qed="yes"
1484   ;;
1485   --disable-parallels) parallels="no"
1486   ;;
1487   --enable-parallels) parallels="yes"
1488   ;;
1489   --disable-sheepdog) sheepdog="no"
1490   ;;
1491   --enable-sheepdog) sheepdog="yes"
1492   ;;
1493   --disable-vhost-user) vhost_user="no"
1494   ;;
1495   --enable-vhost-user) vhost_user="yes"
1496   ;;
1497   --disable-vhost-kernel) vhost_kernel="no"
1498   ;;
1499   --enable-vhost-kernel) vhost_kernel="yes"
1500   ;;
1501   --disable-capstone) capstone="no"
1502   ;;
1503   --enable-capstone) capstone="yes"
1504   ;;
1505   --enable-capstone=git) capstone="git"
1506   ;;
1507   --enable-capstone=system) capstone="system"
1508   ;;
1509   --with-git=*) git="$optarg"
1510   ;;
1511   --enable-git-update) git_update=yes
1512   ;;
1513   --disable-git-update) git_update=no
1514   ;;
1515   --enable-debug-mutex) debug_mutex=yes
1516   ;;
1517   --disable-debug-mutex) debug_mutex=no
1518   ;;
1519   --enable-libpmem) libpmem=yes
1520   ;;
1521   --disable-libpmem) libpmem=no
1522   ;;
1523   --enable-xkbcommon) xkbcommon=yes
1524   ;;
1525   --disable-xkbcommon) xkbcommon=no
1526   ;;
1527   *)
1528       echo "ERROR: unknown option $opt"
1529       echo "Try '$0 --help' for more information"
1530       exit 1
1531   ;;
1532   esac
1533 done
1534
1535 case "$cpu" in
1536     ppc)
1537            CPU_CFLAGS="-m32"
1538            LDFLAGS="-m32 $LDFLAGS"
1539            ;;
1540     ppc64)
1541            CPU_CFLAGS="-m64"
1542            LDFLAGS="-m64 $LDFLAGS"
1543            ;;
1544     sparc)
1545            CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1546            LDFLAGS="-m32 -mv8plus $LDFLAGS"
1547            ;;
1548     sparc64)
1549            CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1550            LDFLAGS="-m64 $LDFLAGS"
1551            ;;
1552     s390)
1553            CPU_CFLAGS="-m31"
1554            LDFLAGS="-m31 $LDFLAGS"
1555            ;;
1556     s390x)
1557            CPU_CFLAGS="-m64"
1558            LDFLAGS="-m64 $LDFLAGS"
1559            ;;
1560     i386)
1561            CPU_CFLAGS="-m32"
1562            LDFLAGS="-m32 $LDFLAGS"
1563            ;;
1564     x86_64)
1565            # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1566            # If we truly care, we should simply detect this case at
1567            # runtime and generate the fallback to serial emulation.
1568            CPU_CFLAGS="-m64 -mcx16"
1569            LDFLAGS="-m64 $LDFLAGS"
1570            ;;
1571     x32)
1572            CPU_CFLAGS="-mx32"
1573            LDFLAGS="-mx32 $LDFLAGS"
1574            ;;
1575     # No special flags required for other host CPUs
1576 esac
1577
1578 eval "cross_cc_${cpu}=\$host_cc"
1579 cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
1580 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1581
1582 # For user-mode emulation the host arch has to be one we explicitly
1583 # support, even if we're using TCI.
1584 if [ "$ARCH" = "unknown" ]; then
1585   bsd_user="no"
1586   linux_user="no"
1587 fi
1588
1589 default_target_list=""
1590
1591 mak_wilds=""
1592
1593 if [ "$softmmu" = "yes" ]; then
1594     mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1595 fi
1596 if [ "$linux_user" = "yes" ]; then
1597     mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1598 fi
1599 if [ "$bsd_user" = "yes" ]; then
1600     mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1601 fi
1602
1603 if test -z "$target_list_exclude"; then
1604     for config in $mak_wilds; do
1605         default_target_list="${default_target_list} $(basename "$config" .mak)"
1606     done
1607 else
1608     exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1609     for config in $mak_wilds; do
1610         target="$(basename "$config" .mak)"
1611         exclude="no"
1612         for excl in $exclude_list; do
1613             if test "$excl" = "$target"; then
1614                 exclude="yes"
1615                 break;
1616             fi
1617         done
1618         if test "$exclude" = "no"; then
1619             default_target_list="${default_target_list} $target"
1620         fi
1621     done
1622 fi
1623
1624 # Enumerate public trace backends for --help output
1625 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1626
1627 if test x"$show_help" = x"yes" ; then
1628 cat << EOF
1629
1630 Usage: configure [options]
1631 Options: [defaults in brackets after descriptions]
1632
1633 Standard options:
1634   --help                   print this message
1635   --prefix=PREFIX          install in PREFIX [$prefix]
1636   --interp-prefix=PREFIX   where to find shared libraries, etc.
1637                            use %M for cpu name [$interp_prefix]
1638   --target-list=LIST       set target list (default: build everything)
1639 $(echo Available targets: $default_target_list | \
1640   fold -s -w 53 | sed -e 's/^/                           /')
1641   --target-list-exclude=LIST exclude a set of targets from the default target-list
1642
1643 Advanced options (experts only):
1644   --cross-prefix=PREFIX    use PREFIX for compile tools [$cross_prefix]
1645   --cc=CC                  use C compiler CC [$cc]
1646   --iasl=IASL              use ACPI compiler IASL [$iasl]
1647   --host-cc=CC             use C compiler CC [$host_cc] for code run at
1648                            build time
1649   --cxx=CXX                use C++ compiler CXX [$cxx]
1650   --objcc=OBJCC            use Objective-C compiler OBJCC [$objcc]
1651   --extra-cflags=CFLAGS    append extra C compiler flags QEMU_CFLAGS
1652   --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1653   --extra-ldflags=LDFLAGS  append extra linker flags LDFLAGS
1654   --cross-cc-ARCH=CC       use compiler when building ARCH guest test cases
1655   --cross-cc-flags-ARCH=   use compiler flags when building ARCH guest tests
1656   --make=MAKE              use specified make [$make]
1657   --install=INSTALL        use specified install [$install]
1658   --python=PYTHON          use specified python [$python]
1659   --smbd=SMBD              use specified smbd [$smbd]
1660   --with-git=GIT           use specified git [$git]
1661   --static                 enable static build [$static]
1662   --mandir=PATH            install man pages in PATH
1663   --datadir=PATH           install firmware in PATH$confsuffix
1664   --docdir=PATH            install documentation in PATH$confsuffix
1665   --bindir=PATH            install binaries in PATH
1666   --libdir=PATH            install libraries in PATH
1667   --libexecdir=PATH        install helper binaries in PATH
1668   --sysconfdir=PATH        install config in PATH$confsuffix
1669   --localstatedir=PATH     install local state in PATH (set at runtime on win32)
1670   --firmwarepath=PATH      search PATH for firmware files
1671   --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1672   --with-pkgversion=VERS   use specified string as sub-version of the package
1673   --enable-debug           enable common debug build options
1674   --enable-sanitizers      enable default sanitizers
1675   --disable-strip          disable stripping binaries
1676   --disable-werror         disable compilation abort on warning
1677   --disable-stack-protector disable compiler-provided stack protection
1678   --audio-drv-list=LIST    set audio drivers list:
1679                            Available drivers: $audio_possible_drivers
1680   --block-drv-whitelist=L  Same as --block-drv-rw-whitelist=L
1681   --block-drv-rw-whitelist=L
1682                            set block driver read-write whitelist
1683                            (affects only QEMU, not qemu-img)
1684   --block-drv-ro-whitelist=L
1685                            set block driver read-only whitelist
1686                            (affects only QEMU, not qemu-img)
1687   --enable-trace-backends=B Set trace backend
1688                            Available backends: $trace_backend_list
1689   --with-trace-file=NAME   Full PATH,NAME of file to store traces
1690                            Default:trace-<pid>
1691   --disable-slirp          disable SLIRP userspace network connectivity
1692   --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1693   --enable-malloc-trim     enable libc malloc_trim() for memory optimization
1694   --oss-lib                path to OSS library
1695   --cpu=CPU                Build for host CPU [$cpu]
1696   --with-coroutine=BACKEND coroutine backend. Supported options:
1697                            ucontext, sigaltstack, windows
1698   --enable-gcov            enable test coverage analysis with gcov
1699   --gcov=GCOV              use specified gcov [$gcov_tool]
1700   --disable-blobs          disable installing provided firmware blobs
1701   --with-vss-sdk=SDK-path  enable Windows VSS support in QEMU Guest Agent
1702   --with-win-sdk=SDK-path  path to Windows Platform SDK (to build VSS .tlb)
1703   --tls-priority           default TLS protocol/cipher priority string
1704   --enable-gprof           QEMU profiling with gprof
1705   --enable-profiler        profiler support
1706   --enable-debug-stack-usage
1707                            track the maximum stack usage of stacks created by qemu_alloc_stack
1708
1709 Optional features, enabled with --enable-FEATURE and
1710 disabled with --disable-FEATURE, default is enabled if available:
1711
1712   system          all system emulation targets
1713   user            supported user emulation targets
1714   linux-user      all linux usermode emulation targets
1715   bsd-user        all BSD usermode emulation targets
1716   docs            build documentation
1717   guest-agent     build the QEMU Guest Agent
1718   guest-agent-msi build guest agent Windows MSI installation package
1719   pie             Position Independent Executables
1720   modules         modules support (non-Windows)
1721   debug-tcg       TCG debugging (default is disabled)
1722   debug-info      debugging information
1723   sparse          sparse checker
1724
1725   gnutls          GNUTLS cryptography support
1726   nettle          nettle cryptography support
1727   gcrypt          libgcrypt cryptography support
1728   auth-pam        PAM access control
1729   sdl             SDL UI
1730   sdl-image       SDL Image support for icons
1731   gtk             gtk UI
1732   vte             vte support for the gtk UI
1733   curses          curses UI
1734   iconv           font glyph conversion support
1735   vnc             VNC UI support
1736   vnc-sasl        SASL encryption for VNC server
1737   vnc-jpeg        JPEG lossy compression for VNC server
1738   vnc-png         PNG compression for VNC server
1739   cocoa           Cocoa UI (Mac OS X only)
1740   virtfs          VirtFS
1741   mpath           Multipath persistent reservation passthrough
1742   xen             xen backend driver support
1743   xen-pci-passthrough    PCI passthrough support for Xen
1744   brlapi          BrlAPI (Braile)
1745   curl            curl connectivity
1746   membarrier      membarrier system call (for Linux 4.14+ or Windows)
1747   fdt             fdt device tree
1748   bluez           bluez stack connectivity
1749   kvm             KVM acceleration support
1750   hax             HAX acceleration support
1751   hvf             Hypervisor.framework acceleration support
1752   whpx            Windows Hypervisor Platform acceleration support
1753   rdma            Enable RDMA-based migration
1754   pvrdma          Enable PVRDMA support
1755   vde             support for vde network
1756   netmap          support for netmap network
1757   linux-aio       Linux AIO support
1758   cap-ng          libcap-ng support
1759   attr            attr and xattr support
1760   vhost-net       vhost-net kernel acceleration support
1761   vhost-vsock     virtio sockets device support
1762   vhost-scsi      vhost-scsi kernel target support
1763   vhost-crypto    vhost-user-crypto backend support
1764   vhost-kernel    vhost kernel backend support
1765   vhost-user      vhost-user backend support
1766   spice           spice
1767   rbd             rados block device (rbd)
1768   libiscsi        iscsi support
1769   libnfs          nfs support
1770   smartcard       smartcard support (libcacard)
1771   libusb          libusb (for usb passthrough)
1772   live-block-migration   Block migration in the main migration stream
1773   usb-redir       usb network redirection support
1774   lzo             support of lzo compression library
1775   snappy          support of snappy compression library
1776   bzip2           support of bzip2 compression library
1777                   (for reading bzip2-compressed dmg images)
1778   lzfse           support of lzfse compression library
1779                   (for reading lzfse-compressed dmg images)
1780   seccomp         seccomp support
1781   coroutine-pool  coroutine freelist (better performance)
1782   glusterfs       GlusterFS backend
1783   tpm             TPM support
1784   libssh          ssh block device support
1785   numa            libnuma support
1786   libxml2         for Parallels image format
1787   tcmalloc        tcmalloc support
1788   jemalloc        jemalloc support
1789   avx2            AVX2 optimization support
1790   replication     replication support
1791   opengl          opengl support
1792   virglrenderer   virgl rendering support
1793   xfsctl          xfsctl support
1794   qom-cast-debug  cast debugging support
1795   tools           build qemu-io, qemu-nbd and qemu-img tools
1796   vxhs            Veritas HyperScale vDisk backend support
1797   bochs           bochs image format support
1798   cloop           cloop image format support
1799   dmg             dmg image format support
1800   qcow1           qcow v1 image format support
1801   vdi             vdi image format support
1802   vvfat           vvfat image format support
1803   qed             qed image format support
1804   parallels       parallels image format support
1805   sheepdog        sheepdog block driver support
1806   crypto-afalg    Linux AF_ALG crypto backend driver
1807   capstone        capstone disassembler support
1808   debug-mutex     mutex debugging support
1809   libpmem         libpmem support
1810   xkbcommon       xkbcommon support
1811
1812 NOTE: The object files are built at the place where configure is launched
1813 EOF
1814 exit 0
1815 fi
1816
1817 # Remove old dependency files to make sure that they get properly regenerated
1818 rm -f */config-devices.mak.d
1819
1820 if test -z "$python"
1821 then
1822     error_exit "Python not found. Use --python=/path/to/python"
1823 fi
1824
1825 # Note that if the Python conditional here evaluates True we will exit
1826 # with status 1 which is a shell 'false' value.
1827 if ! $python -c 'import sys; sys.exit(sys.version_info < (2,7))'; then
1828   error_exit "Cannot use '$python', Python 2 >= 2.7 or Python 3 is required." \
1829       "Use --python=/path/to/python to specify a supported Python."
1830 fi
1831
1832 # Preserve python version since some functionality is dependent on it
1833 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)
1834
1835 # Suppress writing compiled files
1836 python="$python -B"
1837
1838 # Check that the C compiler works. Doing this here before testing
1839 # the host CPU ensures that we had a valid CC to autodetect the
1840 # $cpu var (and we should bail right here if that's not the case).
1841 # It also allows the help message to be printed without a CC.
1842 write_c_skeleton;
1843 if compile_object ; then
1844   : C compiler works ok
1845 else
1846     error_exit "\"$cc\" either does not exist or does not work"
1847 fi
1848 if ! compile_prog ; then
1849     error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1850 fi
1851
1852 # Now we have handled --enable-tcg-interpreter and know we're not just
1853 # printing the help message, bail out if the host CPU isn't supported.
1854 if test "$ARCH" = "unknown"; then
1855     if test "$tcg_interpreter" = "yes" ; then
1856         echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1857     else
1858         error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1859     fi
1860 fi
1861
1862 # Consult white-list to determine whether to enable werror
1863 # by default.  Only enable by default for git builds
1864 if test -z "$werror" ; then
1865     if test -e "$source_path/.git" && \
1866         { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
1867         werror="yes"
1868     else
1869         werror="no"
1870     fi
1871 fi
1872
1873 if test "$bogus_os" = "yes"; then
1874     # Now that we know that we're not printing the help and that
1875     # the compiler works (so the results of the check_defines we used
1876     # to identify the OS are reliable), if we didn't recognize the
1877     # host OS we should stop now.
1878     error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1879 fi
1880
1881 # Check whether the compiler matches our minimum requirements:
1882 cat > $TMPC << EOF
1883 #if defined(__clang_major__) && defined(__clang_minor__)
1884 # ifdef __apple_build_version__
1885 #  if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1886 #   error You need at least XCode Clang v5.1 to compile QEMU
1887 #  endif
1888 # else
1889 #  if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1890 #   error You need at least Clang v3.4 to compile QEMU
1891 #  endif
1892 # endif
1893 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1894 # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1895 #  error You need at least GCC v4.8 to compile QEMU
1896 # endif
1897 #else
1898 # error You either need GCC or Clang to compiler QEMU
1899 #endif
1900 int main (void) { return 0; }
1901 EOF
1902 if ! compile_prog "" "" ; then
1903     error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1904 fi
1905
1906 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1907 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1908 gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1909 gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
1910 gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
1911 gcc_flags="-Wno-string-plus-int -Wno-typedef-redefinition $gcc_flags"
1912 # Note that we do not add -Werror to gcc_flags here, because that would
1913 # enable it for all configure tests. If a configure test failed due
1914 # to -Werror this would just silently disable some features,
1915 # so it's too error prone.
1916
1917 cc_has_warning_flag() {
1918     write_c_skeleton;
1919
1920     # Use the positive sense of the flag when testing for -Wno-wombat
1921     # support (gcc will happily accept the -Wno- form of unknown
1922     # warning options).
1923     optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1924     compile_prog "-Werror $optflag" ""
1925 }
1926
1927 for flag in $gcc_flags; do
1928     if cc_has_warning_flag $flag ; then
1929         QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1930     fi
1931 done
1932
1933 if test "$stack_protector" != "no"; then
1934   cat > $TMPC << EOF
1935 int main(int argc, char *argv[])
1936 {
1937     char arr[64], *p = arr, *c = argv[0];
1938     while (*c) {
1939         *p++ = *c++;
1940     }
1941     return 0;
1942 }
1943 EOF
1944   gcc_flags="-fstack-protector-strong -fstack-protector-all"
1945   sp_on=0
1946   for flag in $gcc_flags; do
1947     # We need to check both a compile and a link, since some compiler
1948     # setups fail only on a .c->.o compile and some only at link time
1949     if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1950        compile_prog "-Werror $flag" ""; then
1951       QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1952       sp_on=1
1953       break
1954     fi
1955   done
1956   if test "$stack_protector" = yes; then
1957     if test $sp_on = 0; then
1958       error_exit "Stack protector not supported"
1959     fi
1960   fi
1961 fi
1962
1963 # Disable -Wmissing-braces on older compilers that warn even for
1964 # the "universal" C zero initializer {0}.
1965 cat > $TMPC << EOF
1966 struct {
1967   int a[2];
1968 } x = {0};
1969 EOF
1970 if compile_object "-Werror" "" ; then
1971   :
1972 else
1973   QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
1974 fi
1975
1976 # Our module code doesn't support Windows
1977 if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
1978   error_exit "Modules are not available for Windows"
1979 fi
1980
1981 # Static linking is not possible with modules or PIE
1982 if test "$static" = "yes" ; then
1983   if test "$modules" = "yes" ; then
1984     error_exit "static and modules are mutually incompatible"
1985   fi
1986   if test "$pie" = "yes" ; then
1987     error_exit "static and pie are mutually incompatible"
1988   else
1989     pie="no"
1990   fi
1991 fi
1992
1993 # Unconditional check for compiler __thread support
1994   cat > $TMPC << EOF
1995 static __thread int tls_var;
1996 int main(void) { return tls_var; }
1997 EOF
1998
1999 if ! compile_prog "-Werror" "" ; then
2000     error_exit "Your compiler does not support the __thread specifier for " \
2001         "Thread-Local Storage (TLS). Please upgrade to a version that does."
2002 fi
2003
2004 if test "$pie" = ""; then
2005   case "$cpu-$targetos" in
2006     i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
2007       ;;
2008     *)
2009       pie="no"
2010       ;;
2011   esac
2012 fi
2013
2014 if test "$pie" != "no" ; then
2015   cat > $TMPC << EOF
2016
2017 #ifdef __linux__
2018 #  define THREAD __thread
2019 #else
2020 #  define THREAD
2021 #endif
2022
2023 static THREAD int tls_var;
2024
2025 int main(void) { return tls_var; }
2026
2027 EOF
2028   # check we support --no-pie first...
2029   if compile_prog "-Werror -fno-pie" "-no-pie"; then
2030     CFLAGS_NOPIE="-fno-pie"
2031     LDFLAGS_NOPIE="-nopie"
2032   fi
2033
2034   if compile_prog "-fPIE -DPIE" "-pie"; then
2035     QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
2036     LDFLAGS="-pie $LDFLAGS"
2037     pie="yes"
2038     if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2039       LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
2040     fi
2041   else
2042     if test "$pie" = "yes"; then
2043       error_exit "PIE not available due to missing toolchain support"
2044     else
2045       echo "Disabling PIE due to missing toolchain support"
2046       pie="no"
2047     fi
2048   fi
2049 fi
2050
2051 ##########################################
2052 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2053 # use i686 as default anyway, but for those that don't, an explicit
2054 # specification is necessary
2055
2056 if test "$cpu" = "i386"; then
2057   cat > $TMPC << EOF
2058 static int sfaa(int *ptr)
2059 {
2060   return __sync_fetch_and_and(ptr, 0);
2061 }
2062
2063 int main(void)
2064 {
2065   int val = 42;
2066   val = __sync_val_compare_and_swap(&val, 0, 1);
2067   sfaa(&val);
2068   return val;
2069 }
2070 EOF
2071   if ! compile_prog "" "" ; then
2072     QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2073   fi
2074 fi
2075
2076 #########################################
2077 # Solaris specific configure tool chain decisions
2078
2079 if test "$solaris" = "yes" ; then
2080   if has $install; then
2081     :
2082   else
2083     error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2084         "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2085         "to get ginstall which is used by default (which lives in /opt/csw/bin)"
2086   fi
2087   if test "$(path_of $install)" = "/usr/sbin/install" ; then
2088     error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2089         "try ginstall from the GNU fileutils available from www.blastwave.org" \
2090         "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
2091   fi
2092   if has ar; then
2093     :
2094   else
2095     if test -f /usr/ccs/bin/ar ; then
2096       error_exit "No path includes ar" \
2097           "Add /usr/ccs/bin to your path and rerun configure"
2098     fi
2099     error_exit "No path includes ar"
2100   fi
2101 fi
2102
2103 if test -z "${target_list+xxx}" ; then
2104     for target in $default_target_list; do
2105         supported_target $target 2>/dev/null && \
2106             target_list="$target_list $target"
2107     done
2108     target_list="${target_list# }"
2109 else
2110     target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2111     for target in $target_list; do
2112         # Check that we recognised the target name; this allows a more
2113         # friendly error message than if we let it fall through.
2114         case " $default_target_list " in
2115             *" $target "*)
2116                 ;;
2117             *)
2118                 error_exit "Unknown target name '$target'"
2119                 ;;
2120         esac
2121         supported_target $target || exit 1
2122     done
2123 fi
2124
2125 # see if system emulation was really requested
2126 case " $target_list " in
2127   *"-softmmu "*) softmmu=yes
2128   ;;
2129   *) softmmu=no
2130   ;;
2131 esac
2132
2133 feature_not_found() {
2134   feature=$1
2135   remedy=$2
2136
2137   error_exit "User requested feature $feature" \
2138       "configure was not able to find it." \
2139       "$remedy"
2140 }
2141
2142 # ---
2143 # big/little endian test
2144 cat > $TMPC << EOF
2145 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2146 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2147 extern int foo(short *, short *);
2148 int main(int argc, char *argv[]) {
2149     return foo(big_endian, little_endian);
2150 }
2151 EOF
2152
2153 if compile_object ; then
2154     if strings -a $TMPO | grep -q BiGeNdIaN ; then
2155         bigendian="yes"
2156     elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
2157         bigendian="no"
2158     else
2159         echo big/little test failed
2160     fi
2161 else
2162     echo big/little test failed
2163 fi
2164
2165 ##########################################
2166 # cocoa implies not SDL or GTK
2167 # (the cocoa UI code currently assumes it is always the active UI
2168 # and doesn't interact well with other UI frontend code)
2169 if test "$cocoa" = "yes"; then
2170     if test "$sdl" = "yes"; then
2171         error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2172     fi
2173     if test "$gtk" = "yes"; then
2174         error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2175     fi
2176     gtk=no
2177     sdl=no
2178 fi
2179
2180 # Some versions of Mac OS X incorrectly define SIZE_MAX
2181 cat > $TMPC << EOF
2182 #include <stdint.h>
2183 #include <stdio.h>
2184 int main(int argc, char *argv[]) {
2185     return printf("%zu", SIZE_MAX);
2186 }
2187 EOF
2188 have_broken_size_max=no
2189 if ! compile_object -Werror ; then
2190     have_broken_size_max=yes
2191 fi
2192
2193 ##########################################
2194 # L2TPV3 probe
2195
2196 cat > $TMPC <<EOF
2197 #include <sys/socket.h>
2198 #include <linux/ip.h>
2199 int main(void) { return sizeof(struct mmsghdr); }
2200 EOF
2201 if compile_prog "" "" ; then
2202   l2tpv3=yes
2203 else
2204   l2tpv3=no
2205 fi
2206
2207 #########################################
2208 # vhost interdependencies and host support
2209
2210 # vhost backends
2211 test "$vhost_user" = "" && vhost_user=yes
2212 if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2213   error_exit "vhost-user isn't available on win32"
2214 fi
2215 test "$vhost_kernel" = "" && vhost_kernel=$linux
2216 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2217   error_exit "vhost-kernel is only available on Linux"
2218 fi
2219
2220 # vhost-kernel devices
2221 test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2222 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2223   error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2224 fi
2225 test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2226 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2227   error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2228 fi
2229
2230 # vhost-user backends
2231 test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2232 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2233   error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2234 fi
2235 test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2236 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2237   error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2238 fi
2239
2240 # OR the vhost-kernel and vhost-user values for simplicity
2241 if test "$vhost_net" = ""; then
2242   test "$vhost_net_user" = "yes" && vhost_net=yes
2243   test "$vhost_kernel" = "yes" && vhost_net=yes
2244 fi
2245
2246 ##########################################
2247 # MinGW / Mingw-w64 localtime_r/gmtime_r check
2248
2249 if test "$mingw32" = "yes"; then
2250     # Some versions of MinGW / Mingw-w64 lack localtime_r
2251     # and gmtime_r entirely.
2252     #
2253     # Some versions of Mingw-w64 define a macro for
2254     # localtime_r/gmtime_r.
2255     #
2256     # Some versions of Mingw-w64 will define functions
2257     # for localtime_r/gmtime_r, but only if you have
2258     # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2259     # though, unistd.h and pthread.h both define
2260     # that for you.
2261     #
2262     # So this #undef localtime_r and #include <unistd.h>
2263     # are not in fact redundant.
2264 cat > $TMPC << EOF
2265 #include <unistd.h>
2266 #include <time.h>
2267 #undef localtime_r
2268 int main(void) { localtime_r(NULL, NULL); return 0; }
2269 EOF
2270     if compile_prog "" "" ; then
2271         localtime_r="yes"
2272     else
2273         localtime_r="no"
2274     fi
2275 fi
2276
2277 ##########################################
2278 # pkg-config probe
2279
2280 if ! has "$pkg_config_exe"; then
2281   error_exit "pkg-config binary '$pkg_config_exe' not found"
2282 fi
2283
2284 ##########################################
2285 # NPTL probe
2286
2287 if test "$linux_user" = "yes"; then
2288   cat > $TMPC <<EOF
2289 #include <sched.h>
2290 #include <linux/futex.h>
2291 int main(void) {
2292 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2293 #error bork
2294 #endif
2295   return 0;
2296 }
2297 EOF
2298   if ! compile_object ; then
2299     feature_not_found "nptl" "Install glibc and linux kernel headers."
2300   fi
2301 fi
2302
2303 ##########################################
2304 # lzo check
2305
2306 if test "$lzo" != "no" ; then
2307     cat > $TMPC << EOF
2308 #include <lzo/lzo1x.h>
2309 int main(void) { lzo_version(); return 0; }
2310 EOF
2311     if compile_prog "" "-llzo2" ; then
2312         libs_softmmu="$libs_softmmu -llzo2"
2313         lzo="yes"
2314     else
2315         if test "$lzo" = "yes"; then
2316             feature_not_found "liblzo2" "Install liblzo2 devel"
2317         fi
2318         lzo="no"
2319     fi
2320 fi
2321
2322 ##########################################
2323 # snappy check
2324
2325 if test "$snappy" != "no" ; then
2326     cat > $TMPC << EOF
2327 #include <snappy-c.h>
2328 int main(void) { snappy_max_compressed_length(4096); return 0; }
2329 EOF
2330     if compile_prog "" "-lsnappy" ; then
2331         libs_softmmu="$libs_softmmu -lsnappy"
2332         snappy="yes"
2333     else
2334         if test "$snappy" = "yes"; then
2335             feature_not_found "libsnappy" "Install libsnappy devel"
2336         fi
2337         snappy="no"
2338     fi
2339 fi
2340
2341 ##########################################
2342 # bzip2 check
2343
2344 if test "$bzip2" != "no" ; then
2345     cat > $TMPC << EOF
2346 #include <bzlib.h>
2347 int main(void) { BZ2_bzlibVersion(); return 0; }
2348 EOF
2349     if compile_prog "" "-lbz2" ; then
2350         bzip2="yes"
2351     else
2352         if test "$bzip2" = "yes"; then
2353             feature_not_found "libbzip2" "Install libbzip2 devel"
2354         fi
2355         bzip2="no"
2356     fi
2357 fi
2358
2359 ##########################################
2360 # lzfse check
2361
2362 if test "$lzfse" != "no" ; then
2363     cat > $TMPC << EOF
2364 #include <lzfse.h>
2365 int main(void) { lzfse_decode_scratch_size(); return 0; }
2366 EOF
2367     if compile_prog "" "-llzfse" ; then
2368         lzfse="yes"
2369     else
2370         if test "$lzfse" = "yes"; then
2371             feature_not_found "lzfse" "Install lzfse devel"
2372         fi
2373         lzfse="no"
2374     fi
2375 fi
2376
2377 ##########################################
2378 # libseccomp check
2379
2380 if test "$seccomp" != "no" ; then
2381     libseccomp_minver="2.3.0"
2382     if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2383         seccomp_cflags="$($pkg_config --cflags libseccomp)"
2384         seccomp_libs="$($pkg_config --libs libseccomp)"
2385         seccomp="yes"
2386     else
2387         if test "$seccomp" = "yes" ; then
2388             feature_not_found "libseccomp" \
2389                  "Install libseccomp devel >= $libseccomp_minver"
2390         fi
2391         seccomp="no"
2392     fi
2393 fi
2394 ##########################################
2395 # xen probe
2396
2397 if test "$xen" != "no" ; then
2398   # Check whether Xen library path is specified via --extra-ldflags to avoid
2399   # overriding this setting with pkg-config output. If not, try pkg-config
2400   # to obtain all needed flags.
2401
2402   if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2403      $pkg_config --exists xencontrol ; then
2404     xen_ctrl_version="$(printf '%d%02d%02d' \
2405       $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2406     xen=yes
2407     xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2408     xen_pc="$xen_pc xenevtchn xendevicemodel"
2409     if $pkg_config --exists xentoolcore; then
2410       xen_pc="$xen_pc xentoolcore"
2411     fi
2412     QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2413     libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2414   else
2415
2416     xen_libs="-lxenstore -lxenctrl -lxenguest"
2417     xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2418
2419     # First we test whether Xen headers and libraries are available.
2420     # If no, we are done and there is no Xen support.
2421     # If yes, more tests are run to detect the Xen version.
2422
2423     # Xen (any)
2424     cat > $TMPC <<EOF
2425 #include <xenctrl.h>
2426 int main(void) {
2427   return 0;
2428 }
2429 EOF
2430     if ! compile_prog "" "$xen_libs" ; then
2431       # Xen not found
2432       if test "$xen" = "yes" ; then
2433         feature_not_found "xen" "Install xen devel"
2434       fi
2435       xen=no
2436
2437     # Xen unstable
2438     elif
2439         cat > $TMPC <<EOF &&
2440 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2441 #define __XEN_TOOLS__
2442 #include <xendevicemodel.h>
2443 #include <xenforeignmemory.h>
2444 int main(void) {
2445   xendevicemodel_handle *xd;
2446   xenforeignmemory_handle *xfmem;
2447
2448   xd = xendevicemodel_open(0, 0);
2449   xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2450
2451   xfmem = xenforeignmemory_open(0, 0);
2452   xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2453
2454   return 0;
2455 }
2456 EOF
2457         compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2458       then
2459       xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2460       xen_ctrl_version=41100
2461       xen=yes
2462     elif
2463         cat > $TMPC <<EOF &&
2464 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2465 #include <xenforeignmemory.h>
2466 #include <xentoolcore.h>
2467 int main(void) {
2468   xenforeignmemory_handle *xfmem;
2469
2470   xfmem = xenforeignmemory_open(0, 0);
2471   xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2472   xentoolcore_restrict_all(0);
2473
2474   return 0;
2475 }
2476 EOF
2477         compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2478       then
2479       xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2480       xen_ctrl_version=41000
2481       xen=yes
2482     elif
2483         cat > $TMPC <<EOF &&
2484 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2485 #define __XEN_TOOLS__
2486 #include <xendevicemodel.h>
2487 int main(void) {
2488   xendevicemodel_handle *xd;
2489
2490   xd = xendevicemodel_open(0, 0);
2491   xendevicemodel_close(xd);
2492
2493   return 0;
2494 }
2495 EOF
2496         compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2497       then
2498       xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2499       xen_ctrl_version=40900
2500       xen=yes
2501     elif
2502         cat > $TMPC <<EOF &&
2503 /*
2504  * If we have stable libs the we don't want the libxc compat
2505  * layers, regardless of what CFLAGS we may have been given.
2506  *
2507  * Also, check if xengnttab_grant_copy_segment_t is defined and
2508  * grant copy operation is implemented.
2509  */
2510 #undef XC_WANT_COMPAT_EVTCHN_API
2511 #undef XC_WANT_COMPAT_GNTTAB_API
2512 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2513 #include <xenctrl.h>
2514 #include <xenstore.h>
2515 #include <xenevtchn.h>
2516 #include <xengnttab.h>
2517 #include <xenforeignmemory.h>
2518 #include <stdint.h>
2519 #include <xen/hvm/hvm_info_table.h>
2520 #if !defined(HVM_MAX_VCPUS)
2521 # error HVM_MAX_VCPUS not defined
2522 #endif
2523 int main(void) {
2524   xc_interface *xc = NULL;
2525   xenforeignmemory_handle *xfmem;
2526   xenevtchn_handle *xe;
2527   xengnttab_handle *xg;
2528   xengnttab_grant_copy_segment_t* seg = NULL;
2529
2530   xs_daemon_open();
2531
2532   xc = xc_interface_open(0, 0, 0);
2533   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2534   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2535   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2536   xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2537
2538   xfmem = xenforeignmemory_open(0, 0);
2539   xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2540
2541   xe = xenevtchn_open(0, 0);
2542   xenevtchn_fd(xe);
2543
2544   xg = xengnttab_open(0, 0);
2545   xengnttab_grant_copy(xg, 0, seg);
2546
2547   return 0;
2548 }
2549 EOF
2550         compile_prog "" "$xen_libs $xen_stable_libs"
2551       then
2552       xen_ctrl_version=40800
2553       xen=yes
2554     elif
2555         cat > $TMPC <<EOF &&
2556 /*
2557  * If we have stable libs the we don't want the libxc compat
2558  * layers, regardless of what CFLAGS we may have been given.
2559  */
2560 #undef XC_WANT_COMPAT_EVTCHN_API
2561 #undef XC_WANT_COMPAT_GNTTAB_API
2562 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2563 #include <xenctrl.h>
2564 #include <xenstore.h>
2565 #include <xenevtchn.h>
2566 #include <xengnttab.h>
2567 #include <xenforeignmemory.h>
2568 #include <stdint.h>
2569 #include <xen/hvm/hvm_info_table.h>
2570 #if !defined(HVM_MAX_VCPUS)
2571 # error HVM_MAX_VCPUS not defined
2572 #endif
2573 int main(void) {
2574   xc_interface *xc = NULL;
2575   xenforeignmemory_handle *xfmem;
2576   xenevtchn_handle *xe;
2577   xengnttab_handle *xg;
2578
2579   xs_daemon_open();
2580
2581   xc = xc_interface_open(0, 0, 0);
2582   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2583   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2584   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2585   xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2586
2587   xfmem = xenforeignmemory_open(0, 0);
2588   xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2589
2590   xe = xenevtchn_open(0, 0);
2591   xenevtchn_fd(xe);
2592
2593   xg = xengnttab_open(0, 0);
2594   xengnttab_map_grant_ref(xg, 0, 0, 0);
2595
2596   return 0;
2597 }
2598 EOF
2599         compile_prog "" "$xen_libs $xen_stable_libs"
2600       then
2601       xen_ctrl_version=40701
2602       xen=yes
2603
2604     # Xen 4.6
2605     elif
2606         cat > $TMPC <<EOF &&
2607 #include <xenctrl.h>
2608 #include <xenstore.h>
2609 #include <stdint.h>
2610 #include <xen/hvm/hvm_info_table.h>
2611 #if !defined(HVM_MAX_VCPUS)
2612 # error HVM_MAX_VCPUS not defined
2613 #endif
2614 int main(void) {
2615   xc_interface *xc;
2616   xs_daemon_open();
2617   xc = xc_interface_open(0, 0, 0);
2618   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2619   xc_gnttab_open(NULL, 0);
2620   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2621   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2622   xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2623   xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2624   return 0;
2625 }
2626 EOF
2627         compile_prog "" "$xen_libs"
2628       then
2629       xen_ctrl_version=40600
2630       xen=yes
2631
2632     # Xen 4.5
2633     elif
2634         cat > $TMPC <<EOF &&
2635 #include <xenctrl.h>
2636 #include <xenstore.h>
2637 #include <stdint.h>
2638 #include <xen/hvm/hvm_info_table.h>
2639 #if !defined(HVM_MAX_VCPUS)
2640 # error HVM_MAX_VCPUS not defined
2641 #endif
2642 int main(void) {
2643   xc_interface *xc;
2644   xs_daemon_open();
2645   xc = xc_interface_open(0, 0, 0);
2646   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2647   xc_gnttab_open(NULL, 0);
2648   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2649   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2650   xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2651   return 0;
2652 }
2653 EOF
2654         compile_prog "" "$xen_libs"
2655       then
2656       xen_ctrl_version=40500
2657       xen=yes
2658
2659     elif
2660         cat > $TMPC <<EOF &&
2661 #include <xenctrl.h>
2662 #include <xenstore.h>
2663 #include <stdint.h>
2664 #include <xen/hvm/hvm_info_table.h>
2665 #if !defined(HVM_MAX_VCPUS)
2666 # error HVM_MAX_VCPUS not defined
2667 #endif
2668 int main(void) {
2669   xc_interface *xc;
2670   xs_daemon_open();
2671   xc = xc_interface_open(0, 0, 0);
2672   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2673   xc_gnttab_open(NULL, 0);
2674   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2675   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2676   return 0;
2677 }
2678 EOF
2679         compile_prog "" "$xen_libs"
2680       then
2681       xen_ctrl_version=40200
2682       xen=yes
2683
2684     else
2685       if test "$xen" = "yes" ; then
2686         feature_not_found "xen (unsupported version)" \
2687                           "Install a supported xen (xen 4.2 or newer)"
2688       fi
2689       xen=no
2690     fi
2691
2692     if test "$xen" = yes; then
2693       if test $xen_ctrl_version -ge 40701  ; then
2694         libs_softmmu="$xen_stable_libs $libs_softmmu"
2695       fi
2696       libs_softmmu="$xen_libs $libs_softmmu"
2697     fi
2698   fi
2699 fi
2700
2701 if test "$xen_pci_passthrough" != "no"; then
2702   if test "$xen" = "yes" && test "$linux" = "yes"; then
2703     xen_pci_passthrough=yes
2704   else
2705     if test "$xen_pci_passthrough" = "yes"; then
2706       error_exit "User requested feature Xen PCI Passthrough" \
2707           " but this feature requires /sys from Linux"
2708     fi
2709     xen_pci_passthrough=no
2710   fi
2711 fi
2712
2713 ##########################################
2714 # Windows Hypervisor Platform accelerator (WHPX) check
2715 if test "$whpx" != "no" ; then
2716     if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
2717         whpx="yes"
2718     else
2719         if test "$whpx" = "yes"; then
2720             feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
2721         fi
2722         whpx="no"
2723     fi
2724 fi
2725
2726 ##########################################
2727 # Sparse probe
2728 if test "$sparse" != "no" ; then
2729   if has cgcc; then
2730     sparse=yes
2731   else
2732     if test "$sparse" = "yes" ; then
2733       feature_not_found "sparse" "Install sparse binary"
2734     fi
2735     sparse=no
2736   fi
2737 fi
2738
2739 ##########################################
2740 # X11 probe
2741 if $pkg_config --exists "x11"; then
2742     have_x11=yes
2743     x11_cflags=$($pkg_config --cflags x11)
2744     x11_libs=$($pkg_config --libs x11)
2745 fi
2746
2747 ##########################################
2748 # GTK probe
2749
2750 if test "$gtk" != "no"; then
2751     gtkpackage="gtk+-3.0"
2752     gtkx11package="gtk+-x11-3.0"
2753     gtkversion="3.14.0"
2754     if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2755         gtk_cflags=$($pkg_config --cflags $gtkpackage)
2756         gtk_libs=$($pkg_config --libs $gtkpackage)
2757         gtk_version=$($pkg_config --modversion $gtkpackage)
2758         if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2759             need_x11=yes
2760             gtk_cflags="$gtk_cflags $x11_cflags"
2761             gtk_libs="$gtk_libs $x11_libs"
2762         fi
2763         gtk="yes"
2764     elif test "$gtk" = "yes"; then
2765         feature_not_found "gtk" "Install gtk3-devel"
2766     else
2767         gtk="no"
2768     fi
2769 fi
2770
2771
2772 ##########################################
2773 # GNUTLS probe
2774
2775 if test "$gnutls" != "no"; then
2776     pass="no"
2777     if $pkg_config --exists "gnutls >= 3.1.18"; then
2778         gnutls_cflags=$($pkg_config --cflags gnutls)
2779         gnutls_libs=$($pkg_config --libs gnutls)
2780         # Packaging for the static libraries is not always correct.
2781         # At least ubuntu 18.04 ships only shared libraries.
2782         write_c_skeleton
2783         if compile_prog "" "$gnutls_libs" ; then
2784             LIBS="$gnutls_libs $LIBS"
2785             QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2786             pass="yes"
2787         fi
2788     fi
2789     if test "$pass" = "no" && test "$gnutls" = "yes"; then
2790         feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
2791     else
2792         gnutls="$pass"
2793     fi
2794 fi
2795
2796
2797 # If user didn't give a --disable/enable-gcrypt flag,
2798 # then mark as disabled if user requested nettle
2799 # explicitly
2800 if test -z "$gcrypt"
2801 then
2802     if test "$nettle" = "yes"
2803     then
2804         gcrypt="no"
2805     fi
2806 fi
2807
2808 # If user didn't give a --disable/enable-nettle flag,
2809 # then mark as disabled if user requested gcrypt
2810 # explicitly
2811 if test -z "$nettle"
2812 then
2813     if test "$gcrypt" = "yes"
2814     then
2815         nettle="no"
2816     fi
2817 fi
2818
2819 has_libgcrypt() {
2820     if ! has "libgcrypt-config"
2821     then
2822         return 1
2823     fi
2824
2825     if test -n "$cross_prefix"
2826     then
2827         host=$(libgcrypt-config --host)
2828         if test "$host-" != $cross_prefix
2829         then
2830             return 1
2831         fi
2832     fi
2833
2834     maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2835     min=`libgcrypt-config --version | awk -F . '{print $2}'`
2836
2837     if test $maj != 1 || test $min -lt 5
2838     then
2839        return 1
2840     fi
2841
2842     return 0
2843 }
2844
2845
2846 if test "$nettle" != "no"; then
2847     pass="no"
2848     if $pkg_config --exists "nettle >= 2.7.1"; then
2849         nettle_cflags=$($pkg_config --cflags nettle)
2850         nettle_libs=$($pkg_config --libs nettle)
2851         nettle_version=$($pkg_config --modversion nettle)
2852         # Link test to make sure the given libraries work (e.g for static).
2853         write_c_skeleton
2854         if compile_prog "" "$nettle_libs" ; then
2855             LIBS="$nettle_libs $LIBS"
2856             QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2857             if test -z "$gcrypt"; then
2858                gcrypt="no"
2859             fi
2860             pass="yes"
2861         fi
2862     fi
2863     if test "$pass" = "no" && test "$nettle" = "yes"; then
2864         feature_not_found "nettle" "Install nettle devel >= 2.7.1"
2865     else
2866         nettle="$pass"
2867     fi
2868 fi
2869
2870 if test "$gcrypt" != "no"; then
2871     pass="no"
2872     if has_libgcrypt; then
2873         gcrypt_cflags=$(libgcrypt-config --cflags)
2874         gcrypt_libs=$(libgcrypt-config --libs)
2875         # Debian has removed -lgpg-error from libgcrypt-config
2876         # as it "spreads unnecessary dependencies" which in
2877         # turn breaks static builds...
2878         if test "$static" = "yes"
2879         then
2880             gcrypt_libs="$gcrypt_libs -lgpg-error"
2881         fi
2882
2883         # Link test to make sure the given libraries work (e.g for static).
2884         write_c_skeleton
2885         if compile_prog "" "$gcrypt_libs" ; then
2886             LIBS="$gcrypt_libs $LIBS"
2887             QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2888             pass="yes"
2889         fi
2890     fi
2891     if test "$pass" = "yes"; then
2892         gcrypt="yes"
2893         cat > $TMPC << EOF
2894 #include <gcrypt.h>
2895 int main(void) {
2896   gcry_mac_hd_t handle;
2897   gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2898                 GCRY_MAC_FLAG_SECURE, NULL);
2899   return 0;
2900 }
2901 EOF
2902         if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2903             gcrypt_hmac=yes
2904         fi
2905     elif test "$gcrypt" = "yes"; then
2906         feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
2907     else
2908         gcrypt="no"
2909     fi
2910 fi
2911
2912
2913 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2914 then
2915     error_exit "Only one of gcrypt & nettle can be enabled"
2916 fi
2917
2918 ##########################################
2919 # libtasn1 - only for the TLS creds/session test suite
2920
2921 tasn1=yes
2922 tasn1_cflags=""
2923 tasn1_libs=""
2924 if $pkg_config --exists "libtasn1"; then
2925     tasn1_cflags=$($pkg_config --cflags libtasn1)
2926     tasn1_libs=$($pkg_config --libs libtasn1)
2927 else
2928     tasn1=no
2929 fi
2930
2931
2932 ##########################################
2933 # PAM probe
2934
2935 if test "$auth_pam" != "no"; then
2936     cat > $TMPC <<EOF
2937 #include <security/pam_appl.h>
2938 #include <stdio.h>
2939 int main(void) {
2940    const char *service_name = "qemu";
2941    const char *user = "frank";
2942    const struct pam_conv pam_conv = { 0 };
2943    pam_handle_t *pamh = NULL;
2944    pam_start(service_name, user, &pam_conv, &pamh);
2945    return 0;
2946 }
2947 EOF
2948     if compile_prog "" "-lpam" ; then
2949         auth_pam=yes
2950     else
2951         if test "$auth_pam" = "yes"; then
2952             feature_not_found "PAM" "Install PAM development package"
2953         else
2954             auth_pam=no
2955         fi
2956     fi
2957 fi
2958
2959 ##########################################
2960 # getifaddrs (for tests/test-io-channel-socket )
2961
2962 have_ifaddrs_h=yes
2963 if ! check_include "ifaddrs.h" ; then
2964   have_ifaddrs_h=no
2965 fi
2966
2967 ##########################################
2968 # VTE probe
2969
2970 if test "$vte" != "no"; then
2971     vteminversion="0.32.0"
2972     if $pkg_config --exists "vte-2.91"; then
2973       vtepackage="vte-2.91"
2974     else
2975       vtepackage="vte-2.90"
2976     fi
2977     if $pkg_config --exists "$vtepackage >= $vteminversion"; then
2978         vte_cflags=$($pkg_config --cflags $vtepackage)
2979         vte_libs=$($pkg_config --libs $vtepackage)
2980         vteversion=$($pkg_config --modversion $vtepackage)
2981         vte="yes"
2982     elif test "$vte" = "yes"; then
2983         feature_not_found "vte" "Install libvte-2.90/2.91 devel"
2984     else
2985         vte="no"
2986     fi
2987 fi
2988
2989 ##########################################
2990 # SDL probe
2991
2992 # Look for sdl configuration program (pkg-config or sdl2-config).  Try
2993 # sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
2994
2995 sdl_probe ()
2996 {
2997   if $pkg_config sdl2 --exists; then
2998     sdlconfig="$pkg_config sdl2"
2999     sdlversion=$($sdlconfig --modversion 2>/dev/null)
3000   elif has "$sdl2_config"; then
3001     sdlconfig="$sdl2_config"
3002     sdlversion=$($sdlconfig --version)
3003   else
3004     if test "$sdl" = "yes" ; then
3005       feature_not_found "sdl" "Install SDL2-devel"
3006     fi
3007     sdl=no
3008     # no need to do the rest
3009     return
3010   fi
3011   if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then
3012     echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3013   fi
3014
3015   cat > $TMPC << EOF
3016 #include <SDL.h>
3017 #undef main /* We don't want SDL to override our main() */
3018 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3019 EOF
3020   sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
3021   sdl_cflags="$sdl_cflags -Wno-undef"  # workaround 2.0.8 bug
3022   if test "$static" = "yes" ; then
3023     if $pkg_config sdl2 --exists; then
3024       sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
3025     else
3026       sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3027     fi
3028   else
3029     sdl_libs=$($sdlconfig --libs 2>/dev/null)
3030   fi
3031   if compile_prog "$sdl_cflags" "$sdl_libs" ; then
3032     sdl=yes
3033
3034     # static link with sdl ? (note: sdl.pc's --static --libs is broken)
3035     if test "$sdl" = "yes" && test "$static" = "yes" ; then
3036       if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
3037          sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3038          sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
3039       fi
3040       if compile_prog "$sdl_cflags" "$sdl_libs" ; then
3041         :
3042       else
3043         sdl=no
3044       fi
3045     fi # static link
3046   else # sdl not found
3047     if test "$sdl" = "yes" ; then
3048       feature_not_found "sdl" "Install SDL2 devel"
3049     fi
3050     sdl=no
3051   fi # sdl compile test
3052 }
3053
3054 sdl_image_probe ()
3055 {
3056     if test "$sdl_image" != "no" ; then
3057         if $pkg_config SDL2_image --exists; then
3058             if test "$static" = "yes"; then
3059                 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3060             else
3061                 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3062             fi
3063             sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3064             sdl_image=yes
3065
3066             sdl_cflags="$sdl_cflags $sdl_image_cflags"
3067             sdl_libs="$sdl_libs $sdl_image_libs"
3068         else
3069             if test "$sdl_image" = "yes" ; then
3070                 feature_not_found "sdl_image" "Install SDL Image devel"
3071             else
3072                 sdl_image=no
3073             fi
3074         fi
3075     fi
3076 }
3077
3078 if test "$sdl" != "no" ; then
3079   sdl_probe
3080 fi
3081
3082 if test "$sdl" = "yes" ; then
3083   sdl_image_probe
3084 else
3085   if test "$sdl_image" = "yes"; then
3086     echo "warning: SDL Image requested, but SDL is not available, disabling"
3087   fi
3088   sdl_image=no
3089 fi
3090
3091 if test "$sdl" = "yes" ; then
3092   cat > $TMPC <<EOF
3093 #include <SDL.h>
3094 #if defined(SDL_VIDEO_DRIVER_X11)
3095 #include <X11/XKBlib.h>
3096 #else
3097 #error No x11 support
3098 #endif
3099 int main(void) { return 0; }
3100 EOF
3101   if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
3102     need_x11=yes
3103     sdl_cflags="$sdl_cflags $x11_cflags"
3104     sdl_libs="$sdl_libs $x11_libs"
3105   fi
3106 fi
3107
3108 ##########################################
3109 # RDMA needs OpenFabrics libraries
3110 if test "$rdma" != "no" ; then
3111   cat > $TMPC <<EOF
3112 #include <rdma/rdma_cma.h>
3113 int main(void) { return 0; }
3114 EOF
3115   rdma_libs="-lrdmacm -libverbs -libumad"
3116   if compile_prog "" "$rdma_libs" ; then
3117     rdma="yes"
3118     libs_softmmu="$libs_softmmu $rdma_libs"
3119   else
3120     if test "$rdma" = "yes" ; then
3121         error_exit \
3122             " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3123             " Your options:" \
3124             "  (1) Fast: Install infiniband packages (devel) from your distro." \
3125             "  (2) Cleanest: Install libraries from www.openfabrics.org" \
3126             "  (3) Also: Install softiwarp if you don't have RDMA hardware"
3127     fi
3128     rdma="no"
3129   fi
3130 fi
3131
3132 ##########################################
3133 # PVRDMA detection
3134
3135 cat > $TMPC <<EOF &&
3136 #include <sys/mman.h>
3137
3138 int
3139 main(void)
3140 {
3141     char buf = 0;
3142     void *addr = &buf;
3143     addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3144
3145     return 0;
3146 }
3147 EOF
3148
3149 if test "$rdma" = "yes" ; then
3150     case "$pvrdma" in
3151     "")
3152         if compile_prog "" ""; then
3153             pvrdma="yes"
3154         else
3155             pvrdma="no"
3156         fi
3157         ;;
3158     "yes")
3159         if ! compile_prog "" ""; then
3160             error_exit "PVRDMA is not supported since mremap is not implemented"
3161         fi
3162         pvrdma="yes"
3163         ;;
3164     "no")
3165         pvrdma="no"
3166         ;;
3167     esac
3168 else
3169     if test "$pvrdma" = "yes" ; then
3170         error_exit "PVRDMA requires rdma suppport"
3171     fi
3172     pvrdma="no"
3173 fi
3174
3175 ##########################################
3176 # VNC SASL detection
3177 if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
3178   cat > $TMPC <<EOF
3179 #include <sasl/sasl.h>
3180 #include <stdio.h>
3181 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3182 EOF
3183   # Assuming Cyrus-SASL installed in /usr prefix
3184   vnc_sasl_cflags=""
3185   vnc_sasl_libs="-lsasl2"
3186   if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3187     vnc_sasl=yes
3188     libs_softmmu="$vnc_sasl_libs $libs_softmmu"
3189     QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
3190   else
3191     if test "$vnc_sasl" = "yes" ; then
3192       feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
3193     fi
3194     vnc_sasl=no
3195   fi
3196 fi
3197
3198 ##########################################
3199 # VNC JPEG detection
3200 if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
3201 cat > $TMPC <<EOF
3202 #include <stdio.h>
3203 #include <jpeglib.h>
3204 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3205 EOF
3206     vnc_jpeg_cflags=""
3207     vnc_jpeg_libs="-ljpeg"
3208   if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3209     vnc_jpeg=yes
3210     libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
3211     QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
3212   else
3213     if test "$vnc_jpeg" = "yes" ; then
3214       feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
3215     fi
3216     vnc_jpeg=no
3217   fi
3218 fi
3219
3220 ##########################################
3221 # VNC PNG detection
3222 if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
3223 cat > $TMPC <<EOF
3224 //#include <stdio.h>
3225 #include <png.h>
3226 #include <stddef.h>
3227 int main(void) {
3228     png_structp png_ptr;
3229     png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
3230     return png_ptr != 0;
3231 }
3232 EOF
3233   if $pkg_config libpng --exists; then
3234     vnc_png_cflags=$($pkg_config libpng --cflags)
3235     vnc_png_libs=$($pkg_config libpng --libs)
3236   else
3237     vnc_png_cflags=""
3238     vnc_png_libs="-lpng"
3239   fi
3240   if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3241     vnc_png=yes
3242     libs_softmmu="$vnc_png_libs $libs_softmmu"
3243     QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
3244   else
3245     if test "$vnc_png" = "yes" ; then
3246       feature_not_found "vnc-png" "Install libpng devel"
3247     fi
3248     vnc_png=no
3249   fi
3250 fi
3251
3252 ##########################################
3253 # xkbcommon probe
3254 if test "$xkbcommon" != "no" ; then
3255   if $pkg_config xkbcommon --exists; then
3256     xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3257     xkbcommon_libs=$($pkg_config xkbcommon --libs)
3258     xkbcommon=yes
3259   else
3260     if test "$xkbcommon" = "yes" ; then
3261       feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3262     fi
3263     xkbcommon=no
3264   fi
3265 fi
3266
3267
3268 ##########################################
3269 # xfsctl() probe, used for file-posix.c
3270 if test "$xfs" != "no" ; then
3271   cat > $TMPC << EOF
3272 #include <stddef.h>  /* NULL */
3273 #include <xfs/xfs.h>
3274 int main(void)
3275 {
3276     xfsctl(NULL, 0, 0, NULL);
3277     return 0;
3278 }
3279 EOF
3280   if compile_prog "" "" ; then
3281     xfs="yes"
3282   else
3283     if test "$xfs" = "yes" ; then
3284       feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
3285     fi
3286     xfs=no
3287   fi
3288 fi
3289
3290 ##########################################
3291 # vde libraries probe
3292 if test "$vde" != "no" ; then
3293   vde_libs="-lvdeplug"
3294   cat > $TMPC << EOF
3295 #include <libvdeplug.h>
3296 int main(void)
3297 {
3298     struct vde_open_args a = {0, 0, 0};
3299     char s[] = "";
3300     vde_open(s, s, &a);
3301     return 0;
3302 }
3303 EOF
3304   if compile_prog "" "$vde_libs" ; then
3305     vde=yes
3306   else
3307     if test "$vde" = "yes" ; then
3308       feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3309     fi
3310     vde=no
3311   fi
3312 fi
3313
3314 ##########################################
3315 # netmap support probe
3316 # Apart from looking for netmap headers, we make sure that the host API version
3317 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3318 # a minor/major version number. Minor new features will be marked with values up
3319 # to 15, and if something happens that requires a change to the backend we will
3320 # move above 15, submit the backend fixes and modify this two bounds.
3321 if test "$netmap" != "no" ; then
3322   cat > $TMPC << EOF
3323 #include <inttypes.h>
3324 #include <net/if.h>
3325 #include <net/netmap.h>
3326 #include <net/netmap_user.h>
3327 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3328 #error
3329 #endif
3330 int main(void) { return 0; }
3331 EOF
3332   if compile_prog "" "" ; then
3333     netmap=yes
3334   else
3335     if test "$netmap" = "yes" ; then
3336       feature_not_found "netmap"
3337     fi
3338     netmap=no
3339   fi
3340 fi
3341
3342 ##########################################
3343 # libcap-ng library probe
3344 if test "$cap_ng" != "no" ; then
3345   cap_libs="-lcap-ng"
3346   cat > $TMPC << EOF
3347 #include <cap-ng.h>
3348 int main(void)
3349 {
3350     capng_capability_to_name(CAPNG_EFFECTIVE);
3351     return 0;
3352 }
3353 EOF
3354   if compile_prog "" "$cap_libs" ; then
3355     cap_ng=yes
3356     libs_tools="$cap_libs $libs_tools"
3357   else
3358     if test "$cap_ng" = "yes" ; then
3359       feature_not_found "cap_ng" "Install libcap-ng devel"
3360     fi
3361     cap_ng=no
3362   fi
3363 fi
3364
3365 ##########################################
3366 # Sound support libraries probe
3367
3368 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3369 for drv in $audio_drv_list; do
3370     case $drv in
3371     alsa | try-alsa)
3372     if $pkg_config alsa --exists; then
3373         alsa_libs=$($pkg_config alsa --libs)
3374         if test "$drv" = "try-alsa"; then
3375             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3376         fi
3377     else
3378         if test "$drv" = "try-alsa"; then
3379             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3380         else
3381             error_exit "$drv check failed" \
3382                 "Make sure to have the $drv libs and headers installed."
3383         fi
3384     fi
3385     ;;
3386
3387     pa | try-pa)
3388     if $pkg_config libpulse --exists; then
3389         pulse_libs=$($pkg_config libpulse --libs)
3390         if test "$drv" = "try-pa"; then
3391             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3392         fi
3393     else
3394         if test "$drv" = "try-pa"; then
3395             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3396         else
3397             error_exit "$drv check failed" \
3398                 "Make sure to have the $drv libs and headers installed."
3399         fi
3400     fi
3401     ;;
3402
3403     sdl)
3404     if test "$sdl" = "no"; then
3405         error_exit "sdl not found or disabled, can not use sdl audio driver"
3406     fi
3407     ;;
3408
3409     try-sdl)
3410     if test "$sdl" = "no"; then
3411         audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3412     else
3413         audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3414     fi
3415     ;;
3416
3417     coreaudio)
3418       coreaudio_libs="-framework CoreAudio"
3419     ;;
3420
3421     dsound)
3422       dsound_libs="-lole32 -ldxguid"
3423       audio_win_int="yes"
3424     ;;
3425
3426     oss)
3427       oss_libs="$oss_lib"
3428     ;;
3429
3430     *)
3431     echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3432         error_exit "Unknown driver '$drv' selected" \
3433             "Possible drivers are: $audio_possible_drivers"
3434     }
3435     ;;
3436     esac
3437 done
3438
3439 ##########################################
3440 # BrlAPI probe
3441
3442 if test "$brlapi" != "no" ; then
3443   brlapi_libs="-lbrlapi"
3444   cat > $TMPC << EOF
3445 #include <brlapi.h>
3446 #include <stddef.h>
3447 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3448 EOF
3449   if compile_prog "" "$brlapi_libs" ; then
3450     brlapi=yes
3451   else
3452     if test "$brlapi" = "yes" ; then
3453       feature_not_found "brlapi" "Install brlapi devel"
3454     fi
3455     brlapi=no
3456   fi
3457 fi
3458
3459 ##########################################
3460 # iconv probe
3461 if test "$iconv" != "no" ; then
3462   cat > $TMPC << EOF
3463 #include <iconv.h>
3464 int main(void) {
3465   iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3466   return conv != (iconv_t) -1;
3467 }
3468 EOF
3469   iconv_prefix_list="/usr/local:/usr"
3470   iconv_lib_list=":-liconv"
3471   IFS=:
3472   for iconv_prefix in $iconv_prefix_list; do
3473     IFS=:
3474     iconv_cflags="-I$iconv_prefix/include"
3475     iconv_ldflags="-L$iconv_prefix/lib"
3476     for iconv_link in $iconv_lib_list; do
3477       unset IFS
3478       iconv_lib="$iconv_ldflags $iconv_link"
3479       echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3480       if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3481         iconv_found=yes
3482         break
3483       fi
3484     done
3485     if test "$iconv_found" = yes ; then
3486       break
3487     fi
3488   done
3489   if test "$iconv_found" = "yes" ; then
3490     iconv=yes
3491   else
3492     if test "$iconv" = "yes" ; then
3493       feature_not_found "iconv" "Install iconv devel"
3494     fi
3495     iconv=no
3496   fi
3497 fi
3498
3499 ##########################################
3500 # curses probe
3501 if test "$iconv" = "no" ; then
3502   # curses will need iconv
3503   curses=no
3504 fi
3505 if test "$curses" != "no" ; then
3506   if test "$mingw32" = "yes" ; then
3507     curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3508     curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3509   else
3510     curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3511     curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3512   fi
3513   curses_found=no
3514   cat > $TMPC << EOF
3515 #include <locale.h>
3516 #include <curses.h>
3517 #include <wchar.h>
3518 #include <langinfo.h>
3519 int main(void) {
3520   const char *codeset;
3521   wchar_t wch = L'w';
3522   setlocale(LC_ALL, "");
3523   resize_term(0, 0);
3524   addwstr(L"wide chars\n");
3525   addnwstr(&wch, 1);
3526   add_wch(WACS_DEGREE);
3527   codeset = nl_langinfo(CODESET);
3528   return codeset != 0;
3529 }
3530 EOF
3531   IFS=:
3532   for curses_inc in $curses_inc_list; do
3533     # Make sure we get the wide character prototypes
3534     curses_inc="-DNCURSES_WIDECHAR $curses_inc"
3535     IFS=:
3536     for curses_lib in $curses_lib_list; do
3537       unset IFS
3538       if compile_prog "$curses_inc" "$curses_lib" ; then
3539         curses_found=yes
3540         break
3541       fi
3542     done
3543     if test "$curses_found" = yes ; then
3544       break
3545     fi
3546   done
3547   unset IFS
3548   if test "$curses_found" = "yes" ; then
3549     curses=yes
3550   else
3551     if test "$curses" = "yes" ; then
3552       feature_not_found "curses" "Install ncurses devel"
3553     fi
3554     curses=no
3555   fi
3556 fi
3557
3558 ##########################################
3559 # curl probe
3560 if test "$curl" != "no" ; then
3561   if $pkg_config libcurl --exists; then
3562     curlconfig="$pkg_config libcurl"
3563   else
3564     curlconfig=curl-config
3565   fi
3566   cat > $TMPC << EOF
3567 #include <curl/curl.h>
3568 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3569 EOF
3570   curl_cflags=$($curlconfig --cflags 2>/dev/null)
3571   curl_libs=$($curlconfig --libs 2>/dev/null)
3572   if compile_prog "$curl_cflags" "$curl_libs" ; then
3573     curl=yes
3574   else
3575     if test "$curl" = "yes" ; then
3576       feature_not_found "curl" "Install libcurl devel"
3577     fi
3578     curl=no
3579   fi
3580 fi # test "$curl"
3581
3582 ##########################################
3583 # bluez support probe
3584 if test "$bluez" != "no" ; then
3585   cat > $TMPC << EOF
3586 #include <bluetooth/bluetooth.h>
3587 int main(void) { return bt_error(0); }
3588 EOF
3589   bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3590   bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
3591   if compile_prog "$bluez_cflags" "$bluez_libs" ; then
3592     bluez=yes
3593     libs_softmmu="$bluez_libs $libs_softmmu"
3594   else
3595     if test "$bluez" = "yes" ; then
3596       feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
3597     fi
3598     bluez="no"
3599   fi
3600 fi
3601
3602 ##########################################
3603 # glib support probe
3604
3605 glib_req_ver=2.48
3606 glib_modules=gthread-2.0
3607 if test "$modules" = yes; then
3608     glib_modules="$glib_modules gmodule-export-2.0"
3609 fi
3610
3611 # This workaround is required due to a bug in pkg-config file for glib as it
3612 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3613
3614 if test "$static" = yes && test "$mingw32" = yes; then
3615     QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3616 fi
3617
3618 for i in $glib_modules; do
3619     if $pkg_config --atleast-version=$glib_req_ver $i; then
3620         glib_cflags=$($pkg_config --cflags $i)
3621         glib_libs=$($pkg_config --libs $i)
3622         QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3623         LIBS="$glib_libs $LIBS"
3624         libs_qga="$glib_libs $libs_qga"
3625     else
3626         error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3627     fi
3628 done
3629
3630 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3631     gio=yes
3632     gio_cflags=$($pkg_config --cflags gio-2.0)
3633     gio_libs=$($pkg_config --libs gio-2.0)
3634 else
3635     gio=no
3636 fi
3637
3638 # Sanity check that the current size_t matches the
3639 # size that glib thinks it should be. This catches
3640 # problems on multi-arch where people try to build
3641 # 32-bit QEMU while pointing at 64-bit glib headers
3642 cat > $TMPC <<EOF
3643 #include <glib.h>
3644 #include <unistd.h>
3645
3646 #define QEMU_BUILD_BUG_ON(x) \
3647   typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3648
3649 int main(void) {
3650    QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3651    return 0;
3652 }
3653 EOF
3654
3655 if ! compile_prog "$CFLAGS" "$LIBS" ; then
3656     error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3657                "You probably need to set PKG_CONFIG_LIBDIR"\
3658                "to point to the right pkg-config files for your"\
3659                "build target"
3660 fi
3661
3662 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3663 cat > $TMPC << EOF
3664 #include <glib.h>
3665 int main(void) { return 0; }
3666 EOF
3667 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3668     if cc_has_warning_flag "-Wno-unknown-attributes"; then
3669         glib_cflags="-Wno-unknown-attributes $glib_cflags"
3670         CFLAGS="-Wno-unknown-attributes $CFLAGS"
3671     fi
3672 fi
3673
3674 #########################################
3675 # zlib check
3676
3677 if test "$zlib" != "no" ; then
3678     if $pkg_config --exists zlib; then
3679         zlib_cflags=$($pkg_config --cflags zlib)
3680         zlib_libs=$($pkg_config --libs zlib)
3681         QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3682         LIBS="$zlib_libs $LIBS"
3683     else
3684         cat > $TMPC << EOF
3685 #include <zlib.h>
3686 int main(void) { zlibVersion(); return 0; }
3687 EOF
3688         if compile_prog "" "-lz" ; then
3689             LIBS="$LIBS -lz"
3690         else
3691             error_exit "zlib check failed" \
3692                 "Make sure to have the zlib libs and headers installed."
3693         fi
3694     fi
3695 fi
3696
3697 ##########################################
3698 # SHA command probe for modules
3699 if test "$modules" = yes; then
3700     shacmd_probe="sha1sum sha1 shasum"
3701     for c in $shacmd_probe; do
3702         if has $c; then
3703             shacmd="$c"
3704             break
3705         fi
3706     done
3707     if test "$shacmd" = ""; then
3708         error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3709     fi
3710 fi
3711
3712 ##########################################
3713 # pixman support probe
3714
3715 if test "$want_tools" = "no" && test "$softmmu" = "no"; then
3716   pixman_cflags=
3717   pixman_libs=
3718 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3719   pixman_cflags=$($pkg_config --cflags pixman-1)
3720   pixman_libs=$($pkg_config --libs pixman-1)
3721 else
3722   error_exit "pixman >= 0.21.8 not present." \
3723       "Please install the pixman devel package."
3724 fi
3725
3726 ##########################################
3727 # libmpathpersist probe
3728
3729 if test "$mpath" != "no" ; then
3730   # probe for the new API
3731   cat > $TMPC <<EOF
3732 #include <libudev.h>
3733 #include <mpath_persist.h>
3734 unsigned mpath_mx_alloc_len = 1024;
3735 int logsink;
3736 static struct config *multipath_conf;
3737 extern struct udev *udev;
3738 extern struct config *get_multipath_config(void);
3739 extern void put_multipath_config(struct config *conf);
3740 struct udev *udev;
3741 struct config *get_multipath_config(void) { return multipath_conf; }
3742 void put_multipath_config(struct config *conf) { }
3743
3744 int main(void) {
3745     udev = udev_new();
3746     multipath_conf = mpath_lib_init();
3747     return 0;
3748 }
3749 EOF
3750   if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3751     mpathpersist=yes
3752     mpathpersist_new_api=yes
3753   else
3754     # probe for the old API
3755     cat > $TMPC <<EOF
3756 #include <libudev.h>
3757 #include <mpath_persist.h>
3758 unsigned mpath_mx_alloc_len = 1024;
3759 int logsink;
3760 int main(void) {
3761     struct udev *udev = udev_new();
3762     mpath_lib_init(udev);
3763     return 0;
3764 }
3765 EOF
3766     if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3767       mpathpersist=yes
3768       mpathpersist_new_api=no
3769     else
3770       mpathpersist=no
3771     fi
3772   fi
3773 else
3774   mpathpersist=no
3775 fi
3776
3777 ##########################################
3778 # libcap probe
3779
3780 if test "$cap" != "no" ; then
3781   cat > $TMPC <<EOF
3782 #include <stdio.h>
3783 #include <sys/capability.h>
3784 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3785 EOF
3786   if compile_prog "" "-lcap" ; then
3787     cap=yes
3788   else
3789     cap=no
3790   fi
3791 fi
3792
3793 ##########################################
3794 # pthread probe
3795 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3796
3797 pthread=no
3798 cat > $TMPC << EOF
3799 #include <pthread.h>
3800 static void *f(void *p) { return NULL; }
3801 int main(void) {
3802   pthread_t thread;
3803   pthread_create(&thread, 0, f, 0);
3804   return 0;
3805 }
3806 EOF
3807 if compile_prog "" "" ; then
3808   pthread=yes
3809 else
3810   for pthread_lib in $PTHREADLIBS_LIST; do
3811     if compile_prog "" "$pthread_lib" ; then
3812       pthread=yes
3813       found=no
3814       for lib_entry in $LIBS; do
3815         if test "$lib_entry" = "$pthread_lib"; then
3816           found=yes
3817           break
3818         fi
3819       done
3820       if test "$found" = "no"; then
3821         LIBS="$pthread_lib $LIBS"
3822         libs_qga="$pthread_lib $libs_qga"
3823       fi
3824       PTHREAD_LIB="$pthread_lib"
3825       break
3826     fi
3827   done
3828 fi
3829
3830 if test "$mingw32" != yes && test "$pthread" = no; then
3831   error_exit "pthread check failed" \
3832       "Make sure to have the pthread libs and headers installed."
3833 fi
3834
3835 # check for pthread_setname_np with thread id
3836 pthread_setname_np_w_tid=no
3837 cat > $TMPC << EOF
3838 #include <pthread.h>
3839
3840 static void *f(void *p) { return NULL; }
3841 int main(void)
3842 {
3843     pthread_t thread;
3844     pthread_create(&thread, 0, f, 0);
3845     pthread_setname_np(thread, "QEMU");
3846     return 0;
3847 }
3848 EOF
3849 if compile_prog "" "$pthread_lib" ; then
3850   pthread_setname_np_w_tid=yes
3851 fi
3852
3853 # check for pthread_setname_np without thread id
3854 pthread_setname_np_wo_tid=no
3855 cat > $TMPC << EOF
3856 #include <pthread.h>
3857
3858 static void *f(void *p) { pthread_setname_np("QEMU"); }
3859 int main(void)
3860 {
3861     pthread_t thread;
3862     pthread_create(&thread, 0, f, 0);
3863     return 0;
3864 }
3865 EOF
3866 if compile_prog "" "$pthread_lib" ; then
3867   pthread_setname_np_wo_tid=yes
3868 fi
3869
3870 ##########################################
3871 # rbd probe
3872 if test "$rbd" != "no" ; then
3873   cat > $TMPC <<EOF
3874 #include <stdio.h>
3875 #include <rbd/librbd.h>
3876 int main(void) {
3877     rados_t cluster;
3878     rados_create(&cluster, NULL);
3879     return 0;
3880 }
3881 EOF
3882   rbd_libs="-lrbd -lrados"
3883   if compile_prog "" "$rbd_libs" ; then
3884     rbd=yes
3885   else
3886     if test "$rbd" = "yes" ; then
3887       feature_not_found "rados block device" "Install librbd/ceph devel"
3888     fi
3889     rbd=no
3890   fi
3891 fi
3892
3893 ##########################################
3894 # libssh probe
3895 if test "$libssh" != "no" ; then
3896   if $pkg_config --exists libssh; then
3897     libssh_cflags=$($pkg_config libssh --cflags)
3898     libssh_libs=$($pkg_config libssh --libs)
3899     libssh=yes
3900   else
3901     if test "$libssh" = "yes" ; then
3902       error_exit "libssh required for --enable-libssh"
3903     fi
3904     libssh=no
3905   fi
3906 fi
3907
3908 ##########################################
3909 # Check for libssh 0.8
3910 # This is done like this instead of using the LIBSSH_VERSION_* and
3911 # SSH_VERSION_* macros because some distributions in the past shipped
3912 # snapshots of the future 0.8 from Git, and those snapshots did not
3913 # have updated version numbers (still referring to 0.7.0).
3914
3915 if test "$libssh" = "yes"; then
3916   cat > $TMPC <<EOF
3917 #include <libssh/libssh.h>
3918 int main(void) { return ssh_get_server_publickey(NULL, NULL); }
3919 EOF
3920   if compile_prog "$libssh_cflags" "$libssh_libs"; then
3921     libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
3922   fi
3923 fi
3924
3925 ##########################################
3926 # linux-aio probe
3927
3928 if test "$linux_aio" != "no" ; then
3929   cat > $TMPC <<EOF
3930 #include <libaio.h>
3931 #include <sys/eventfd.h>
3932 #include <stddef.h>
3933 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3934 EOF
3935   if compile_prog "" "-laio" ; then
3936     linux_aio=yes
3937   else
3938     if test "$linux_aio" = "yes" ; then
3939       feature_not_found "linux AIO" "Install libaio devel"
3940     fi
3941     linux_aio=no
3942   fi
3943 fi
3944
3945 ##########################################
3946 # TPM emulation is only on POSIX
3947
3948 if test "$tpm" = ""; then
3949   if test "$mingw32" = "yes"; then
3950     tpm=no
3951   else
3952     tpm=yes
3953   fi
3954 elif test "$tpm" = "yes"; then
3955   if test "$mingw32" = "yes" ; then
3956     error_exit "TPM emulation only available on POSIX systems"
3957   fi
3958 fi
3959
3960 ##########################################
3961 # attr probe
3962
3963 if test "$attr" != "no" ; then
3964   cat > $TMPC <<EOF
3965 #include <stdio.h>
3966 #include <sys/types.h>
3967 #ifdef CONFIG_LIBATTR
3968 #include <attr/xattr.h>
3969 #else
3970 #include <sys/xattr.h>
3971 #endif
3972 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3973 EOF
3974   if compile_prog "" "" ; then
3975     attr=yes
3976   # Older distros have <attr/xattr.h>, and need -lattr:
3977   elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3978     attr=yes
3979     LIBS="-lattr $LIBS"
3980     libattr=yes
3981   else
3982     if test "$attr" = "yes" ; then
3983       feature_not_found "ATTR" "Install libc6 or libattr devel"
3984     fi
3985     attr=no
3986   fi
3987 fi
3988
3989 ##########################################
3990 # iovec probe
3991 cat > $TMPC <<EOF
3992 #include <sys/types.h>
3993 #include <sys/uio.h>
3994 #include <unistd.h>
3995 int main(void) { return sizeof(struct iovec); }
3996 EOF
3997 iovec=no
3998 if compile_prog "" "" ; then
3999   iovec=yes
4000 fi
4001
4002 ##########################################
4003 # preadv probe
4004 cat > $TMPC <<EOF
4005 #include <sys/types.h>
4006 #include <sys/uio.h>
4007 #include <unistd.h>
4008 int main(void) { return preadv(0, 0, 0, 0); }
4009 EOF
4010 preadv=no
4011 if compile_prog "" "" ; then
4012   preadv=yes
4013 fi
4014
4015 ##########################################
4016 # fdt probe
4017 # fdt support is mandatory for at least some target architectures,
4018 # so insist on it if we're building those system emulators.
4019 fdt_required=no
4020 for target in $target_list; do
4021   case $target in
4022     aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
4023       fdt_required=yes
4024     ;;
4025   esac
4026 done
4027
4028 if test "$fdt_required" = "yes"; then
4029   if test "$fdt" = "no"; then
4030     error_exit "fdt disabled but some requested targets require it." \
4031       "You can turn off fdt only if you also disable all the system emulation" \
4032       "targets which need it (by specifying a cut down --target-list)."
4033   fi
4034   fdt=yes
4035 fi
4036
4037 if test "$fdt" != "no" ; then
4038   fdt_libs="-lfdt"
4039   # explicitly check for libfdt_env.h as it is missing in some stable installs
4040   # and test for required functions to make sure we are on a version >= 1.4.2
4041   cat > $TMPC << EOF
4042 #include <libfdt.h>
4043 #include <libfdt_env.h>
4044 int main(void) { fdt_check_full(NULL, 0); return 0; }
4045 EOF
4046   if compile_prog "" "$fdt_libs" ; then
4047     # system DTC is good - use it
4048     fdt=system
4049   else
4050       # have GIT checkout, so activate dtc submodule
4051       if test -e "${source_path}/.git" ; then
4052           git_submodules="${git_submodules} dtc"
4053       fi
4054       if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
4055           fdt=git
4056           mkdir -p dtc
4057           if [ "$pwd_is_source_path" != "y" ] ; then
4058               symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4059               symlink "$source_path/dtc/scripts" "dtc/scripts"
4060           fi
4061           fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
4062           fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
4063           fdt_libs="$fdt_libs"
4064       elif test "$fdt" = "yes" ; then
4065           # Not a git build & no libfdt found, prompt for system install
4066           error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4067                      "Please install the DTC (libfdt) devel package"
4068       else
4069           # don't have and don't want
4070           fdt_libs=
4071           fdt=no
4072       fi
4073   fi
4074 fi
4075
4076 libs_softmmu="$libs_softmmu $fdt_libs"
4077
4078 ##########################################
4079 # opengl probe (for sdl2, gtk, milkymist-tmu2)
4080
4081 gbm="no"
4082 if $pkg_config gbm; then
4083     gbm_cflags="$($pkg_config --cflags gbm)"
4084     gbm_libs="$($pkg_config --libs gbm)"
4085     gbm="yes"
4086 fi
4087
4088 if test "$opengl" != "no" ; then
4089   opengl_pkgs="epoxy gbm"
4090   if $pkg_config $opengl_pkgs; then
4091     opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4092     opengl_libs="$($pkg_config --libs $opengl_pkgs)"
4093     opengl=yes
4094     if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4095         gtk_gl="yes"
4096     fi
4097     QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
4098   else
4099     if test "$opengl" = "yes" ; then
4100       feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
4101     fi
4102     opengl_cflags=""
4103     opengl_libs=""
4104     opengl=no
4105   fi
4106 fi
4107
4108 if test "$opengl" = "yes"; then
4109   cat > $TMPC << EOF
4110 #include <epoxy/egl.h>
4111 #ifndef EGL_MESA_image_dma_buf_export
4112 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4113 #endif
4114 int main(void) { return 0; }
4115 EOF
4116   if compile_prog "" "" ; then
4117     opengl_dmabuf=yes
4118   fi
4119 fi
4120
4121 if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
4122   for target in $target_list; do
4123     case $target in
4124       lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4125         need_x11=yes
4126       ;;
4127     esac
4128   done
4129 fi
4130
4131 ##########################################
4132 # libxml2 probe
4133 if test "$libxml2" != "no" ; then
4134     if $pkg_config --exists libxml-2.0; then
4135         libxml2="yes"
4136         libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4137         libxml2_libs=$($pkg_config --libs libxml-2.0)
4138     else
4139         if test "$libxml2" = "yes"; then
4140             feature_not_found "libxml2" "Install libxml2 devel"
4141         fi
4142         libxml2="no"
4143     fi
4144 fi
4145
4146 ##########################################
4147 # glusterfs probe
4148 if test "$glusterfs" != "no" ; then
4149   if $pkg_config --atleast-version=3 glusterfs-api; then
4150     glusterfs="yes"
4151     glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4152     glusterfs_libs=$($pkg_config --libs glusterfs-api)
4153     if $pkg_config --atleast-version=4 glusterfs-api; then
4154       glusterfs_xlator_opt="yes"
4155     fi
4156     if $pkg_config --atleast-version=5 glusterfs-api; then
4157       glusterfs_discard="yes"
4158     fi
4159     if $pkg_config --atleast-version=6 glusterfs-api; then
4160       glusterfs_fallocate="yes"
4161       glusterfs_zerofill="yes"
4162     fi
4163     cat > $TMPC << EOF
4164 #include <glusterfs/api/glfs.h>
4165
4166 int
4167 main(void)
4168 {
4169         /* new glfs_ftruncate() passes two additional args */
4170         return glfs_ftruncate(NULL, 0, NULL, NULL);
4171 }
4172 EOF
4173     if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4174       glusterfs_ftruncate_has_stat="yes"
4175     fi
4176     cat > $TMPC << EOF
4177 #include <glusterfs/api/glfs.h>
4178
4179 /* new glfs_io_cbk() passes two additional glfs_stat structs */
4180 static void
4181 glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4182 {}
4183
4184 int
4185 main(void)
4186 {
4187         glfs_io_cbk iocb = &glusterfs_iocb;
4188         iocb(NULL, 0 , NULL, NULL, NULL);
4189         return 0;
4190 }
4191 EOF
4192     if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4193       glusterfs_iocb_has_stat="yes"
4194     fi
4195   else
4196     if test "$glusterfs" = "yes" ; then
4197       feature_not_found "GlusterFS backend support" \
4198           "Install glusterfs-api devel >= 3"
4199     fi
4200     glusterfs="no"
4201   fi
4202 fi
4203
4204 # Check for inotify functions when we are building linux-user
4205 # emulator.  This is done because older glibc versions don't
4206 # have syscall stubs for these implemented.  In that case we
4207 # don't provide them even if kernel supports them.
4208 #
4209 inotify=no
4210 cat > $TMPC << EOF
4211 #include <sys/inotify.h>
4212
4213 int
4214 main(void)
4215 {
4216         /* try to start inotify */
4217         return inotify_init();
4218 }
4219 EOF
4220 if compile_prog "" "" ; then
4221   inotify=yes
4222 fi
4223
4224 inotify1=no
4225 cat > $TMPC << EOF
4226 #include <sys/inotify.h>
4227
4228 int
4229 main(void)
4230 {
4231     /* try to start inotify */
4232     return inotify_init1(0);
4233 }
4234 EOF
4235 if compile_prog "" "" ; then
4236   inotify1=yes
4237 fi
4238
4239 # check if pipe2 is there
4240 pipe2=no
4241 cat > $TMPC << EOF
4242 #include <unistd.h>
4243 #include <fcntl.h>
4244
4245 int main(void)
4246 {
4247     int pipefd[2];
4248     return pipe2(pipefd, O_CLOEXEC);
4249 }
4250 EOF
4251 if compile_prog "" "" ; then
4252   pipe2=yes
4253 fi
4254
4255 # check if accept4 is there
4256 accept4=no
4257 cat > $TMPC << EOF
4258 #include <sys/socket.h>
4259 #include <stddef.h>
4260
4261 int main(void)
4262 {
4263     accept4(0, NULL, NULL, SOCK_CLOEXEC);
4264     return 0;
4265 }
4266 EOF
4267 if compile_prog "" "" ; then
4268   accept4=yes
4269 fi
4270
4271 # check if tee/splice is there. vmsplice was added same time.
4272 splice=no
4273 cat > $TMPC << EOF
4274 #include <unistd.h>
4275 #include <fcntl.h>
4276 #include <limits.h>
4277
4278 int main(void)
4279 {
4280     int len, fd = 0;
4281     len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4282     splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4283     return 0;
4284 }
4285 EOF
4286 if compile_prog "" "" ; then
4287   splice=yes
4288 fi
4289
4290 ##########################################
4291 # libnuma probe
4292
4293 if test "$numa" != "no" ; then
4294   cat > $TMPC << EOF
4295 #include <numa.h>
4296 int main(void) { return numa_available(); }
4297 EOF
4298
4299   if compile_prog "" "-lnuma" ; then
4300     numa=yes
4301     libs_softmmu="-lnuma $libs_softmmu"
4302   else
4303     if test "$numa" = "yes" ; then
4304       feature_not_found "numa" "install numactl devel"
4305     fi
4306     numa=no
4307   fi
4308 fi
4309
4310 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4311     echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4312     exit 1
4313 fi
4314
4315 # Even if malloc_trim() is available, these non-libc memory allocators
4316 # do not support it.
4317 if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4318     if test "$malloc_trim" = "yes" ; then
4319         echo "Disabling malloc_trim with non-libc memory allocator"
4320     fi
4321     malloc_trim="no"
4322 fi
4323
4324 #######################################
4325 # malloc_trim
4326
4327 if test "$malloc_trim" != "no" ; then
4328     cat > $TMPC << EOF
4329 #include <malloc.h>
4330 int main(void) { malloc_trim(0); return 0; }
4331 EOF
4332     if compile_prog "" "" ; then
4333         malloc_trim="yes"
4334     else
4335         malloc_trim="no"
4336     fi
4337 fi
4338
4339 ##########################################
4340 # tcmalloc probe
4341
4342 if test "$tcmalloc" = "yes" ; then
4343   cat > $TMPC << EOF
4344 #include <stdlib.h>
4345 int main(void) { malloc(1); return 0; }
4346 EOF
4347
4348   if compile_prog "" "-ltcmalloc" ; then
4349     LIBS="-ltcmalloc $LIBS"
4350   else
4351     feature_not_found "tcmalloc" "install gperftools devel"
4352   fi
4353 fi
4354
4355 ##########################################
4356 # jemalloc probe
4357
4358 if test "$jemalloc" = "yes" ; then
4359   cat > $TMPC << EOF
4360 #include <stdlib.h>
4361 int main(void) { malloc(1); return 0; }
4362 EOF
4363
4364   if compile_prog "" "-ljemalloc" ; then
4365     LIBS="-ljemalloc $LIBS"
4366   else
4367     feature_not_found "jemalloc" "install jemalloc devel"
4368   fi
4369 fi
4370
4371 ##########################################
4372 # signalfd probe
4373 signalfd="no"
4374 cat > $TMPC << EOF
4375 #include <unistd.h>
4376 #include <sys/syscall.h>
4377 #include <signal.h>
4378 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4379 EOF
4380
4381 if compile_prog "" "" ; then
4382   signalfd=yes
4383 fi
4384
4385 # check if optreset global is declared by <getopt.h>
4386 optreset="no"
4387 cat > $TMPC << EOF
4388 #include <getopt.h>
4389 int main(void) { return optreset; }
4390 EOF
4391
4392 if compile_prog "" "" ; then
4393   optreset=yes
4394 fi
4395
4396 # check if eventfd is supported
4397 eventfd=no
4398 cat > $TMPC << EOF
4399 #include <sys/eventfd.h>
4400
4401 int main(void)
4402 {
4403     return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4404 }
4405 EOF
4406 if compile_prog "" "" ; then
4407   eventfd=yes
4408 fi
4409
4410 # check if memfd is supported
4411 memfd=no
4412 cat > $TMPC << EOF
4413 #include <sys/mman.h>
4414
4415 int main(void)
4416 {
4417     return memfd_create("foo", MFD_ALLOW_SEALING);
4418 }
4419 EOF
4420 if compile_prog "" "" ; then
4421   memfd=yes
4422 fi
4423
4424 # check for usbfs
4425 have_usbfs=no
4426 if test "$linux_user" = "yes"; then
4427   cat > $TMPC << EOF
4428 #include <linux/usbdevice_fs.h>
4429
4430 #ifndef USBDEVFS_GET_CAPABILITIES
4431 #error "USBDEVFS_GET_CAPABILITIES undefined"
4432 #endif
4433
4434 #ifndef USBDEVFS_DISCONNECT_CLAIM
4435 #error "USBDEVFS_DISCONNECT_CLAIM undefined"
4436 #endif
4437
4438 int main(void)
4439 {
4440     return 0;
4441 }
4442 EOF
4443   if compile_prog "" ""; then
4444     have_usbfs=yes
4445   fi
4446 fi
4447
4448 # check for fallocate
4449 fallocate=no
4450 cat > $TMPC << EOF
4451 #include <fcntl.h>
4452
4453 int main(void)
4454 {
4455     fallocate(0, 0, 0, 0);
4456     return 0;
4457 }
4458 EOF
4459 if compile_prog "" "" ; then
4460   fallocate=yes
4461 fi
4462
4463 # check for fallocate hole punching
4464 fallocate_punch_hole=no
4465 cat > $TMPC << EOF
4466 #include <fcntl.h>
4467 #include <linux/falloc.h>
4468
4469 int main(void)
4470 {
4471     fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4472     return 0;
4473 }
4474 EOF
4475 if compile_prog "" "" ; then
4476   fallocate_punch_hole=yes
4477 fi
4478
4479 # check that fallocate supports range zeroing inside the file
4480 fallocate_zero_range=no
4481 cat > $TMPC << EOF
4482 #include <fcntl.h>
4483 #include <linux/falloc.h>
4484
4485 int main(void)
4486 {
4487     fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4488     return 0;
4489 }
4490 EOF
4491 if compile_prog "" "" ; then
4492   fallocate_zero_range=yes
4493 fi
4494
4495 # check for posix_fallocate
4496 posix_fallocate=no
4497 cat > $TMPC << EOF
4498 #include <fcntl.h>
4499
4500 int main(void)
4501 {
4502     posix_fallocate(0, 0, 0);
4503     return 0;
4504 }
4505 EOF
4506 if compile_prog "" "" ; then
4507     posix_fallocate=yes
4508 fi
4509
4510 # check for sync_file_range
4511 sync_file_range=no
4512 cat > $TMPC << EOF
4513 #include <fcntl.h>
4514
4515 int main(void)
4516 {
4517     sync_file_range(0, 0, 0, 0);
4518     return 0;
4519 }
4520 EOF
4521 if compile_prog "" "" ; then
4522   sync_file_range=yes
4523 fi
4524
4525 # check for linux/fiemap.h and FS_IOC_FIEMAP
4526 fiemap=no
4527 cat > $TMPC << EOF
4528 #include <sys/ioctl.h>
4529 #include <linux/fs.h>
4530 #include <linux/fiemap.h>
4531
4532 int main(void)
4533 {
4534     ioctl(0, FS_IOC_FIEMAP, 0);
4535     return 0;
4536 }
4537 EOF
4538 if compile_prog "" "" ; then
4539   fiemap=yes
4540 fi
4541
4542 # check for dup3
4543 dup3=no
4544 cat > $TMPC << EOF
4545 #include <unistd.h>
4546
4547 int main(void)
4548 {
4549     dup3(0, 0, 0);
4550     return 0;
4551 }
4552 EOF
4553 if compile_prog "" "" ; then
4554   dup3=yes
4555 fi
4556
4557 # check for ppoll support
4558 ppoll=no
4559 cat > $TMPC << EOF
4560 #include <poll.h>
4561
4562 int main(void)
4563 {
4564     struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4565     ppoll(&pfd, 1, 0, 0);
4566     return 0;
4567 }
4568 EOF
4569 if compile_prog "" "" ; then
4570   ppoll=yes
4571 fi
4572
4573 # check for prctl(PR_SET_TIMERSLACK , ... ) support
4574 prctl_pr_set_timerslack=no
4575 cat > $TMPC << EOF
4576 #include <sys/prctl.h>
4577
4578 int main(void)
4579 {
4580     prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4581     return 0;
4582 }
4583 EOF
4584 if compile_prog "" "" ; then
4585   prctl_pr_set_timerslack=yes
4586 fi
4587
4588 # check for epoll support
4589 epoll=no
4590 cat > $TMPC << EOF
4591 #include <sys/epoll.h>
4592
4593 int main(void)
4594 {
4595     epoll_create(0);
4596     return 0;
4597 }
4598 EOF
4599 if compile_prog "" "" ; then
4600   epoll=yes
4601 fi
4602
4603 # epoll_create1 is a later addition
4604 # so we must check separately for its presence
4605 epoll_create1=no
4606 cat > $TMPC << EOF
4607 #include <sys/epoll.h>
4608
4609 int main(void)
4610 {
4611     /* Note that we use epoll_create1 as a value, not as
4612      * a function being called. This is necessary so that on
4613      * old SPARC glibc versions where the function was present in
4614      * the library but not declared in the header file we will
4615      * fail the configure check. (Otherwise we will get a compiler
4616      * warning but not an error, and will proceed to fail the
4617      * qemu compile where we compile with -Werror.)
4618      */
4619     return (int)(uintptr_t)&epoll_create1;
4620 }
4621 EOF
4622 if compile_prog "" "" ; then
4623   epoll_create1=yes
4624 fi
4625
4626 # check for sendfile support
4627 sendfile=no
4628 cat > $TMPC << EOF
4629 #include <sys/sendfile.h>
4630
4631 int main(void)
4632 {
4633     return sendfile(0, 0, 0, 0);
4634 }
4635 EOF
4636 if compile_prog "" "" ; then
4637   sendfile=yes
4638 fi
4639
4640 # check for timerfd support (glibc 2.8 and newer)
4641 timerfd=no
4642 cat > $TMPC << EOF
4643 #include <sys/timerfd.h>
4644
4645 int main(void)
4646 {
4647     return(timerfd_create(CLOCK_REALTIME, 0));
4648 }
4649 EOF
4650 if compile_prog "" "" ; then
4651   timerfd=yes
4652 fi
4653
4654 # check for setns and unshare support
4655 setns=no
4656 cat > $TMPC << EOF
4657 #include <sched.h>
4658
4659 int main(void)
4660 {
4661     int ret;
4662     ret = setns(0, 0);
4663     ret = unshare(0);
4664     return ret;
4665 }
4666 EOF
4667 if compile_prog "" "" ; then
4668   setns=yes
4669 fi
4670
4671 # clock_adjtime probe
4672 clock_adjtime=no
4673 cat > $TMPC <<EOF
4674 #include <time.h>
4675
4676 int main(void)
4677 {
4678     return clock_adjtime(0, 0);
4679 }
4680 EOF
4681 clock_adjtime=no
4682 if compile_prog "" "" ; then
4683   clock_adjtime=yes
4684 fi
4685
4686 # syncfs probe
4687 syncfs=no
4688 cat > $TMPC <<EOF
4689 #include <unistd.h>
4690
4691 int main(void)
4692 {
4693     return syncfs(0);
4694 }
4695 EOF
4696 syncfs=no
4697 if compile_prog "" "" ; then
4698   syncfs=yes
4699 fi
4700
4701 # Check we have a new enough version of sphinx-build
4702 has_sphinx_build() {
4703     # This is a bit awkward but works: create a trivial document and
4704     # try to run it with our configuration file (which enforces a
4705     # version requirement). This will fail if either
4706     # sphinx-build doesn't exist at all or if it is too old.
4707     mkdir -p "$TMPDIR1/sphinx"
4708     touch "$TMPDIR1/sphinx/index.rst"
4709     sphinx-build -c "$source_path/docs" -b html "$TMPDIR1/sphinx" "$TMPDIR1/sphinx/out" >/dev/null 2>&1
4710 }
4711
4712 # Check if tools are available to build documentation.
4713 if test "$docs" != "no" ; then
4714   if has makeinfo && has pod2man && has_sphinx_build; then
4715     docs=yes
4716   else
4717     if test "$docs" = "yes" ; then
4718       feature_not_found "docs" "Install texinfo, Perl/perl-podlators and python-sphinx"
4719     fi
4720     docs=no
4721   fi
4722 fi
4723
4724 # Search for bswap_32 function
4725 byteswap_h=no
4726 cat > $TMPC << EOF
4727 #include <byteswap.h>
4728 int main(void) { return bswap_32(0); }
4729 EOF
4730 if compile_prog "" "" ; then
4731   byteswap_h=yes
4732 fi
4733
4734 # Search for bswap32 function
4735 bswap_h=no
4736 cat > $TMPC << EOF
4737 #include <sys/endian.h>
4738 #include <sys/types.h>
4739 #include <machine/bswap.h>
4740 int main(void) { return bswap32(0); }
4741 EOF
4742 if compile_prog "" "" ; then
4743   bswap_h=yes
4744 fi
4745
4746 ##########################################
4747 # Do we have libiscsi >= 1.9.0
4748 if test "$libiscsi" != "no" ; then
4749   if $pkg_config --atleast-version=1.9.0 libiscsi; then
4750     libiscsi="yes"
4751     libiscsi_cflags=$($pkg_config --cflags libiscsi)
4752     libiscsi_libs=$($pkg_config --libs libiscsi)
4753   else
4754     if test "$libiscsi" = "yes" ; then
4755       feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4756     fi
4757     libiscsi="no"
4758   fi
4759 fi
4760
4761 ##########################################
4762 # Do we need libm
4763 cat > $TMPC << EOF
4764 #include <math.h>
4765 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
4766 EOF
4767 if compile_prog "" "" ; then
4768   :
4769 elif compile_prog "" "-lm" ; then
4770   LIBS="-lm $LIBS"
4771   libs_qga="-lm $libs_qga"
4772 else
4773   error_exit "libm check failed"
4774 fi
4775
4776 ##########################################
4777 # Do we need librt
4778 # uClibc provides 2 versions of clock_gettime(), one with realtime
4779 # support and one without. This means that the clock_gettime() don't
4780 # need -lrt. We still need it for timer_create() so we check for this
4781 # function in addition.
4782 cat > $TMPC <<EOF
4783 #include <signal.h>
4784 #include <time.h>
4785 int main(void) {
4786   timer_create(CLOCK_REALTIME, NULL, NULL);
4787   return clock_gettime(CLOCK_REALTIME, NULL);
4788 }
4789 EOF
4790
4791 if compile_prog "" "" ; then
4792   :
4793 # we need pthread for static linking. use previous pthread test result
4794 elif compile_prog "" "$pthread_lib -lrt" ; then
4795   LIBS="$LIBS -lrt"
4796   libs_qga="$libs_qga -lrt"
4797 fi
4798
4799 # Check whether we need to link libutil for openpty()
4800 cat > $TMPC << EOF
4801 extern int openpty(int *am, int *as, char *name, void *termp, void *winp);
4802 int main(void) { return openpty(0, 0, 0, 0, 0); }
4803 EOF
4804
4805 if ! compile_prog "" "" ; then
4806   if compile_prog "" "-lutil" ; then
4807     libs_softmmu="-lutil $libs_softmmu"
4808     libs_tools="-lutil $libs_tools"
4809   fi
4810 fi
4811
4812 ##########################################
4813 # spice probe
4814 if test "$spice" != "no" ; then
4815   cat > $TMPC << EOF
4816 #include <spice.h>
4817 int main(void) { spice_server_new(); return 0; }
4818 EOF
4819   spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4820   spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4821   if $pkg_config --atleast-version=0.12.5 spice-server && \
4822      $pkg_config --atleast-version=0.12.3 spice-protocol && \
4823      compile_prog "$spice_cflags" "$spice_libs" ; then
4824     spice="yes"
4825     libs_softmmu="$libs_softmmu $spice_libs"
4826     QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4827     spice_protocol_version=$($pkg_config --modversion spice-protocol)
4828     spice_server_version=$($pkg_config --modversion spice-server)
4829   else
4830     if test "$spice" = "yes" ; then
4831       feature_not_found "spice" \
4832           "Install spice-server(>=0.12.5) and spice-protocol(>=0.12.3) devel"
4833     fi
4834     spice="no"
4835   fi
4836 fi
4837
4838 # check for smartcard support
4839 if test "$smartcard" != "no"; then
4840     if $pkg_config --atleast-version=2.5.1 libcacard; then
4841         libcacard_cflags=$($pkg_config --cflags libcacard)
4842         libcacard_libs=$($pkg_config --libs libcacard)
4843         smartcard="yes"
4844     else
4845         if test "$smartcard" = "yes"; then
4846             feature_not_found "smartcard" "Install libcacard devel"
4847         fi
4848         smartcard="no"
4849     fi
4850 fi
4851
4852 # check for libusb
4853 if test "$libusb" != "no" ; then
4854     if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4855         libusb="yes"
4856         libusb_cflags=$($pkg_config --cflags libusb-1.0)
4857         libusb_libs=$($pkg_config --libs libusb-1.0)
4858     else
4859         if test "$libusb" = "yes"; then
4860             feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4861         fi
4862         libusb="no"
4863     fi
4864 fi
4865
4866 # check for usbredirparser for usb network redirection support
4867 if test "$usb_redir" != "no" ; then
4868     if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4869         usb_redir="yes"
4870         usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4871         usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4872     else
4873         if test "$usb_redir" = "yes"; then
4874             feature_not_found "usb-redir" "Install usbredir devel"
4875         fi
4876         usb_redir="no"
4877     fi
4878 fi
4879
4880 ##########################################
4881 # check if we have VSS SDK headers for win
4882
4883 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4884         test "$vss_win32_sdk" != "no" ; then
4885   case "$vss_win32_sdk" in
4886     "")   vss_win32_include="-isystem $source_path" ;;
4887     *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4888           # handle path with spaces. So we symlink the headers into ".sdk/vss".
4889           vss_win32_include="-isystem $source_path/.sdk/vss"
4890           symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4891           ;;
4892     *)    vss_win32_include="-isystem $vss_win32_sdk"
4893   esac
4894   cat > $TMPC << EOF
4895 #define __MIDL_user_allocate_free_DEFINED__
4896 #include <inc/win2003/vss.h>
4897 int main(void) { return VSS_CTX_BACKUP; }
4898 EOF
4899   if compile_prog "$vss_win32_include" "" ; then
4900     guest_agent_with_vss="yes"
4901     QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4902     libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4903     qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4904   else
4905     if test "$vss_win32_sdk" != "" ; then
4906       echo "ERROR: Please download and install Microsoft VSS SDK:"
4907       echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4908       echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4909       echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
4910       echo "ERROR: The headers are extracted in the directory \`inc'."
4911       feature_not_found "VSS support"
4912     fi
4913     guest_agent_with_vss="no"
4914   fi
4915 fi
4916
4917 ##########################################
4918 # lookup Windows platform SDK (if not specified)
4919 # The SDK is needed only to build .tlb (type library) file of guest agent
4920 # VSS provider from the source. It is usually unnecessary because the
4921 # pre-compiled .tlb file is included.
4922
4923 if test "$mingw32" = "yes" && test "$guest_agent" != "no" && \
4924         test "$guest_agent_with_vss" = "yes" ; then
4925   if test -z "$win_sdk"; then
4926     programfiles="$PROGRAMFILES"
4927     test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4928     if test -n "$programfiles"; then
4929       win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4930     else
4931       feature_not_found "Windows SDK"
4932     fi
4933   elif test "$win_sdk" = "no"; then
4934     win_sdk=""
4935   fi
4936 fi
4937
4938 ##########################################
4939 # check if mingw environment provides a recent ntddscsi.h
4940 if test "$mingw32" = "yes" && test "$guest_agent" != "no"; then
4941   cat > $TMPC << EOF
4942 #include <windows.h>
4943 #include <ntddscsi.h>
4944 int main(void) {
4945 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4946 #error Missing required ioctl definitions
4947 #endif
4948   SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4949   return addr.Lun;
4950 }
4951 EOF
4952   if compile_prog "" "" ; then
4953     guest_agent_ntddscsi=yes
4954     libs_qga="-lsetupapi -lcfgmgr32 $libs_qga"
4955   fi
4956 fi
4957
4958 ##########################################
4959 # virgl renderer probe
4960
4961 if test "$virglrenderer" != "no" ; then
4962   cat > $TMPC << EOF
4963 #include <virglrenderer.h>
4964 int main(void) { virgl_renderer_poll(); return 0; }
4965 EOF
4966   virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4967   virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4968   virgl_version=$($pkg_config --modversion virglrenderer 2>/dev/null)
4969   if $pkg_config virglrenderer >/dev/null 2>&1 && \
4970      compile_prog "$virgl_cflags" "$virgl_libs" ; then
4971     virglrenderer="yes"
4972   else
4973     if test "$virglrenderer" = "yes" ; then
4974       feature_not_found "virglrenderer"
4975     fi
4976     virglrenderer="no"
4977   fi
4978 fi
4979
4980 ##########################################
4981 # capstone
4982
4983 case "$capstone" in
4984   "" | yes)
4985     if $pkg_config capstone; then
4986       capstone=system
4987     elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
4988       capstone=git
4989     elif test -e "${source_path}/capstone/Makefile" ; then
4990       capstone=internal
4991     elif test -z "$capstone" ; then
4992       capstone=no
4993     else
4994       feature_not_found "capstone" "Install capstone devel or git submodule"
4995     fi
4996     ;;
4997
4998   system)
4999     if ! $pkg_config capstone; then
5000       feature_not_found "capstone" "Install capstone devel"
5001     fi
5002     ;;
5003 esac
5004
5005 case "$capstone" in
5006   git | internal)
5007     if test "$capstone" = git; then
5008       git_submodules="${git_submodules} capstone"
5009     fi
5010     mkdir -p capstone
5011     QEMU_CFLAGS="$QEMU_CFLAGS -I\$(SRC_PATH)/capstone/include"
5012     if test "$mingw32" = "yes"; then
5013       LIBCAPSTONE=capstone.lib
5014     else
5015       LIBCAPSTONE=libcapstone.a
5016     fi
5017     libs_cpu="-L\$(BUILD_DIR)/capstone -lcapstone $libs_cpu"
5018     ;;
5019
5020   system)
5021     QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags capstone)"
5022     libs_cpu="$($pkg_config --libs capstone) $libs_cpu"
5023     ;;
5024
5025   no)
5026     ;;
5027   *)
5028     error_exit "Unknown state for capstone: $capstone"
5029     ;;
5030 esac
5031
5032 ##########################################
5033 # check if we have fdatasync
5034
5035 fdatasync=no
5036 cat > $TMPC << EOF
5037 #include <unistd.h>
5038 int main(void) {
5039 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
5040 return fdatasync(0);
5041 #else
5042 #error Not supported
5043 #endif
5044 }
5045 EOF
5046 if compile_prog "" "" ; then
5047     fdatasync=yes
5048 fi
5049
5050 ##########################################
5051 # check if we have madvise
5052
5053 madvise=no
5054 cat > $TMPC << EOF
5055 #include <sys/types.h>
5056 #include <sys/mman.h>
5057 #include <stddef.h>
5058 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
5059 EOF
5060 if compile_prog "" "" ; then
5061     madvise=yes
5062 fi
5063
5064 ##########################################
5065 # check if we have posix_madvise
5066
5067 posix_madvise=no
5068 cat > $TMPC << EOF
5069 #include <sys/mman.h>
5070 #include <stddef.h>
5071 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
5072 EOF
5073 if compile_prog "" "" ; then
5074     posix_madvise=yes
5075 fi
5076
5077 ##########################################
5078 # check if we have posix_memalign()
5079
5080 posix_memalign=no
5081 cat > $TMPC << EOF
5082 #include <stdlib.h>
5083 int main(void) {
5084     void *p;
5085     return posix_memalign(&p, 8, 8);
5086 }
5087 EOF
5088 if compile_prog "" "" ; then
5089     posix_memalign=yes
5090 fi
5091
5092 ##########################################
5093 # check if we have posix_syslog
5094
5095 posix_syslog=no
5096 cat > $TMPC << EOF
5097 #include <syslog.h>
5098 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
5099 EOF
5100 if compile_prog "" "" ; then
5101     posix_syslog=yes
5102 fi
5103
5104 ##########################################
5105 # check if we have sem_timedwait
5106
5107 sem_timedwait=no
5108 cat > $TMPC << EOF
5109 #include <semaphore.h>
5110 int main(void) { sem_t s; struct timespec t = {0}; return sem_timedwait(&s, &t); }
5111 EOF
5112 if compile_prog "" "" ; then
5113     sem_timedwait=yes
5114 fi
5115
5116 ##########################################
5117 # check if we have strchrnul
5118
5119 strchrnul=no
5120 cat > $TMPC << EOF
5121 #include <string.h>
5122 int main(void);
5123 // Use a haystack that the compiler shouldn't be able to constant fold
5124 char *haystack = (char*)&main;
5125 int main(void) { return strchrnul(haystack, 'x') != &haystack[6]; }
5126 EOF
5127 if compile_prog "" "" ; then
5128     strchrnul=yes
5129 fi
5130
5131 ##########################################
5132 # check if trace backend exists
5133
5134 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends  > /dev/null 2> /dev/null
5135 if test "$?" -ne 0 ; then
5136   error_exit "invalid trace backends" \
5137       "Please choose supported trace backends."
5138 fi
5139
5140 ##########################################
5141 # For 'ust' backend, test if ust headers are present
5142 if have_backend "ust"; then
5143   cat > $TMPC << EOF
5144 #include <lttng/tracepoint.h>
5145 int main(void) { return 0; }
5146 EOF
5147   if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
5148     if $pkg_config lttng-ust --exists; then
5149       lttng_ust_libs=$($pkg_config --libs lttng-ust)
5150     else
5151       lttng_ust_libs="-llttng-ust -ldl"
5152     fi
5153     if $pkg_config liburcu-bp --exists; then
5154       urcu_bp_libs=$($pkg_config --libs liburcu-bp)
5155     else
5156       urcu_bp_libs="-lurcu-bp"
5157     fi
5158
5159     LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
5160     libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
5161   else
5162     error_exit "Trace backend 'ust' missing lttng-ust header files"
5163   fi
5164 fi
5165
5166 ##########################################
5167 # For 'dtrace' backend, test if 'dtrace' command is present
5168 if have_backend "dtrace"; then
5169   if ! has 'dtrace' ; then
5170     error_exit "dtrace command is not found in PATH $PATH"
5171   fi
5172   trace_backend_stap="no"
5173   if has 'stap' ; then
5174     trace_backend_stap="yes"
5175   fi
5176 fi
5177
5178 ##########################################
5179 # check and set a backend for coroutine
5180
5181 # We prefer ucontext, but it's not always possible. The fallback
5182 # is sigcontext. On Windows the only valid backend is the Windows
5183 # specific one.
5184
5185 ucontext_works=no
5186 if test "$darwin" != "yes"; then
5187   cat > $TMPC << EOF
5188 #include <ucontext.h>
5189 #ifdef __stub_makecontext
5190 #error Ignoring glibc stub makecontext which will always fail
5191 #endif
5192 int main(void) { makecontext(0, 0, 0); return 0; }
5193 EOF
5194   if compile_prog "" "" ; then
5195     ucontext_works=yes
5196   fi
5197 fi
5198
5199 if test "$coroutine" = ""; then
5200   if test "$mingw32" = "yes"; then
5201     coroutine=win32
5202   elif test "$ucontext_works" = "yes"; then
5203     coroutine=ucontext
5204   else
5205     coroutine=sigaltstack
5206   fi
5207 else
5208   case $coroutine in
5209   windows)
5210     if test "$mingw32" != "yes"; then
5211       error_exit "'windows' coroutine backend only valid for Windows"
5212     fi
5213     # Unfortunately the user visible backend name doesn't match the
5214     # coroutine-*.c filename for this case, so we have to adjust it here.
5215     coroutine=win32
5216     ;;
5217   ucontext)
5218     if test "$ucontext_works" != "yes"; then
5219       feature_not_found "ucontext"
5220     fi
5221     ;;
5222   sigaltstack)
5223     if test "$mingw32" = "yes"; then
5224       error_exit "only the 'windows' coroutine backend is valid for Windows"
5225     fi
5226     ;;
5227   *)
5228     error_exit "unknown coroutine backend $coroutine"
5229     ;;
5230   esac
5231 fi
5232
5233 if test "$coroutine_pool" = ""; then
5234   coroutine_pool=yes
5235 fi
5236
5237 if test "$debug_stack_usage" = "yes"; then
5238   if test "$coroutine_pool" = "yes"; then
5239     echo "WARN: disabling coroutine pool for stack usage debugging"
5240     coroutine_pool=no
5241   fi
5242 fi
5243
5244
5245 ##########################################
5246 # check if we have open_by_handle_at
5247
5248 open_by_handle_at=no
5249 cat > $TMPC << EOF
5250 #include <fcntl.h>
5251 #if !defined(AT_EMPTY_PATH)
5252 # error missing definition
5253 #else
5254 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
5255 #endif
5256 EOF
5257 if compile_prog "" "" ; then
5258     open_by_handle_at=yes
5259 fi
5260
5261 ########################################
5262 # check if we have linux/magic.h
5263
5264 linux_magic_h=no
5265 cat > $TMPC << EOF
5266 #include <linux/magic.h>
5267 int main(void) {
5268   return 0;
5269 }
5270 EOF
5271 if compile_prog "" "" ; then
5272     linux_magic_h=yes
5273 fi
5274
5275 ########################################
5276 # check whether we can disable warning option with a pragma (this is needed
5277 # to silence warnings in the headers of some versions of external libraries).
5278 # This test has to be compiled with -Werror as otherwise an unknown pragma is
5279 # only a warning.
5280 #
5281 # If we can't selectively disable warning in the code, disable -Werror so that
5282 # the build doesn't fail anyway.
5283
5284 pragma_disable_unused_but_set=no
5285 cat > $TMPC << EOF
5286 #pragma GCC diagnostic push
5287 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
5288 #pragma GCC diagnostic pop
5289
5290 int main(void) {
5291     return 0;
5292 }
5293 EOF
5294 if compile_prog "-Werror" "" ; then
5295     pragma_diagnostic_available=yes
5296 else
5297     werror=no
5298 fi
5299
5300 ########################################
5301 # check if we have valgrind/valgrind.h
5302
5303 valgrind_h=no
5304 cat > $TMPC << EOF
5305 #include <valgrind/valgrind.h>
5306 int main(void) {
5307   return 0;
5308 }
5309 EOF
5310 if compile_prog "" "" ; then
5311     valgrind_h=yes
5312 fi
5313
5314 ########################################
5315 # check if environ is declared
5316
5317 has_environ=no
5318 cat > $TMPC << EOF
5319 #include <unistd.h>
5320 int main(void) {
5321     environ = 0;
5322     return 0;
5323 }
5324 EOF
5325 if compile_prog "" "" ; then
5326     has_environ=yes
5327 fi
5328
5329 ########################################
5330 # check if cpuid.h is usable.
5331
5332 cat > $TMPC << EOF
5333 #include <cpuid.h>
5334 int main(void) {
5335     unsigned a, b, c, d;
5336     int max = __get_cpuid_max(0, 0);
5337
5338     if (max >= 1) {
5339         __cpuid(1, a, b, c, d);
5340     }
5341
5342     if (max >= 7) {
5343         __cpuid_count(7, 0, a, b, c, d);
5344     }
5345
5346     return 0;
5347 }
5348 EOF
5349 if compile_prog "" "" ; then
5350     cpuid_h=yes
5351 fi
5352
5353 ##########################################
5354 # avx2 optimization requirement check
5355 #
5356 # There is no point enabling this if cpuid.h is not usable,
5357 # since we won't be able to select the new routines.
5358
5359 if test "$cpuid_h" = "yes" && test "$avx2_opt" != "no"; then
5360   cat > $TMPC << EOF
5361 #pragma GCC push_options
5362 #pragma GCC target("avx2")
5363 #include <cpuid.h>
5364 #include <immintrin.h>
5365 static int bar(void *a) {
5366     __m256i x = *(__m256i *)a;
5367     return _mm256_testz_si256(x, x);
5368 }
5369 int main(int argc, char *argv[]) { return bar(argv[0]); }
5370 EOF
5371   if compile_object "" ; then
5372     avx2_opt="yes"
5373   else
5374     avx2_opt="no"
5375   fi
5376 fi
5377
5378 ########################################
5379 # check if __[u]int128_t is usable.
5380
5381 int128=no
5382 cat > $TMPC << EOF
5383 __int128_t a;
5384 __uint128_t b;
5385 int main (void) {
5386   a = a + b;
5387   b = a * b;
5388   a = a * a;
5389   return 0;
5390 }
5391 EOF
5392 if compile_prog "" "" ; then
5393     int128=yes
5394 fi
5395
5396 #########################################
5397 # See if 128-bit atomic operations are supported.
5398
5399 atomic128=no
5400 if test "$int128" = "yes"; then
5401   cat > $TMPC << EOF
5402 int main(void)
5403 {
5404   unsigned __int128 x = 0, y = 0;
5405   y = __atomic_load_16(&x, 0);
5406   __atomic_store_16(&x, y, 0);
5407   __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
5408   return 0;
5409 }
5410 EOF
5411   if compile_prog "" "" ; then
5412     atomic128=yes
5413   fi
5414 fi
5415
5416 cmpxchg128=no
5417 if test "$int128" = yes && test "$atomic128" = no; then
5418   cat > $TMPC << EOF
5419 int main(void)
5420 {
5421   unsigned __int128 x = 0, y = 0;
5422   __sync_val_compare_and_swap_16(&x, y, x);
5423   return 0;
5424 }
5425 EOF
5426   if compile_prog "" "" ; then
5427     cmpxchg128=yes
5428   fi
5429 fi
5430
5431 #########################################
5432 # See if 64-bit atomic operations are supported.
5433 # Note that without __atomic builtins, we can only
5434 # assume atomic loads/stores max at pointer size.
5435
5436 cat > $TMPC << EOF
5437 #include <stdint.h>
5438 int main(void)
5439 {
5440   uint64_t x = 0, y = 0;
5441 #ifdef __ATOMIC_RELAXED
5442   y = __atomic_load_8(&x, 0);
5443   __atomic_store_8(&x, y, 0);
5444   __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
5445   __atomic_exchange_8(&x, y, 0);
5446   __atomic_fetch_add_8(&x, y, 0);
5447 #else
5448   typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
5449   __sync_lock_test_and_set(&x, y);
5450   __sync_val_compare_and_swap(&x, y, 0);
5451   __sync_fetch_and_add(&x, y);
5452 #endif
5453   return 0;
5454 }
5455 EOF
5456 if compile_prog "" "" ; then
5457   atomic64=yes
5458 fi
5459
5460 ########################################
5461 # See if 16-byte vector operations are supported.
5462 # Even without a vector unit the compiler may expand these.
5463 # There is a bug in old GCC for PPC that crashes here.
5464 # Unfortunately it's the system compiler for Centos 7.
5465
5466 cat > $TMPC << EOF
5467 typedef unsigned char U1 __attribute__((vector_size(16)));
5468 typedef unsigned short U2 __attribute__((vector_size(16)));
5469 typedef unsigned int U4 __attribute__((vector_size(16)));
5470 typedef unsigned long long U8 __attribute__((vector_size(16)));
5471 typedef signed char S1 __attribute__((vector_size(16)));
5472 typedef signed short S2 __attribute__((vector_size(16)));
5473 typedef signed int S4 __attribute__((vector_size(16)));
5474 typedef signed long long S8 __attribute__((vector_size(16)));
5475 static U1 a1, b1;
5476 static U2 a2, b2;
5477 static U4 a4, b4;
5478 static U8 a8, b8;
5479 static S1 c1;
5480 static S2 c2;
5481 static S4 c4;
5482 static S8 c8;
5483 static int i;
5484 void helper(void *d, void *a, int shift, int i);
5485 void helper(void *d, void *a, int shift, int i)
5486 {
5487   *(U1 *)(d + i) = *(U1 *)(a + i) << shift;
5488   *(U2 *)(d + i) = *(U2 *)(a + i) << shift;
5489   *(U4 *)(d + i) = *(U4 *)(a + i) << shift;
5490   *(U8 *)(d + i) = *(U8 *)(a + i) << shift;
5491 }
5492 int main(void)
5493 {
5494   a1 += b1; a2 += b2; a4 += b4; a8 += b8;
5495   a1 -= b1; a2 -= b2; a4 -= b4; a8 -= b8;
5496   a1 *= b1; a2 *= b2; a4 *= b4; a8 *= b8;
5497   a1 &= b1; a2 &= b2; a4 &= b4; a8 &= b8;
5498   a1 |= b1; a2 |= b2; a4 |= b4; a8 |= b8;
5499   a1 ^= b1; a2 ^= b2; a4 ^= b4; a8 ^= b8;
5500   a1 <<= i; a2 <<= i; a4 <<= i; a8 <<= i;
5501   a1 >>= i; a2 >>= i; a4 >>= i; a8 >>= i;
5502   c1 >>= i; c2 >>= i; c4 >>= i; c8 >>= i;
5503   return 0;
5504 }
5505 EOF
5506
5507 vector16=no
5508 if compile_prog "" "" ; then
5509   vector16=yes
5510 fi
5511
5512 ########################################
5513 # check if getauxval is available.
5514
5515 getauxval=no
5516 cat > $TMPC << EOF
5517 #include <sys/auxv.h>
5518 int main(void) {
5519   return getauxval(AT_HWCAP) == 0;
5520 }
5521 EOF
5522 if compile_prog "" "" ; then
5523     getauxval=yes
5524 fi
5525
5526 ########################################
5527 # check if ccache is interfering with
5528 # semantic analysis of macros
5529
5530 unset CCACHE_CPP2
5531 ccache_cpp2=no
5532 cat > $TMPC << EOF
5533 static const int Z = 1;
5534 #define fn() ({ Z; })
5535 #define TAUT(X) ((X) == Z)
5536 #define PAREN(X, Y) (X == Y)
5537 #define ID(X) (X)
5538 int main(int argc, char *argv[])
5539 {
5540     int x = 0, y = 0;
5541     x = ID(x);
5542     x = fn();
5543     fn();
5544     if (PAREN(x, y)) return 0;
5545     if (TAUT(Z)) return 0;
5546     return 0;
5547 }
5548 EOF
5549
5550 if ! compile_object "-Werror"; then
5551     ccache_cpp2=yes
5552 fi
5553
5554 #################################################
5555 # clang does not support glibc + FORTIFY_SOURCE.
5556
5557 if test "$fortify_source" != "no"; then
5558   if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
5559     fortify_source="no";
5560   elif test -n "$cxx" && has $cxx &&
5561        echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
5562     fortify_source="no";
5563   else
5564     fortify_source="yes"
5565   fi
5566 fi
5567
5568 ###############################################
5569 # Check if copy_file_range is provided by glibc
5570 have_copy_file_range=no
5571 cat > $TMPC << EOF
5572 #include <unistd.h>
5573 int main(void) {
5574   copy_file_range(0, NULL, 0, NULL, 0, 0);
5575   return 0;
5576 }
5577 EOF
5578 if compile_prog "" "" ; then
5579     have_copy_file_range=yes
5580 fi
5581
5582 ##########################################
5583 # check if struct fsxattr is available via linux/fs.h
5584
5585 have_fsxattr=no
5586 cat > $TMPC << EOF
5587 #include <linux/fs.h>
5588 struct fsxattr foo;
5589 int main(void) {
5590   return 0;
5591 }
5592 EOF
5593 if compile_prog "" "" ; then
5594     have_fsxattr=yes
5595 fi
5596
5597 ##########################################
5598 # check for usable membarrier system call
5599 if test "$membarrier" = "yes"; then
5600     have_membarrier=no
5601     if test "$mingw32" = "yes" ; then
5602         have_membarrier=yes
5603     elif test "$linux" = "yes" ; then
5604         cat > $TMPC << EOF
5605     #include <linux/membarrier.h>
5606     #include <sys/syscall.h>
5607     #include <unistd.h>
5608     #include <stdlib.h>
5609     int main(void) {
5610         syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5611         syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5612         exit(0);
5613     }
5614 EOF
5615         if compile_prog "" "" ; then
5616             have_membarrier=yes
5617         fi
5618     fi
5619     if test "$have_membarrier" = "no"; then
5620       feature_not_found "membarrier" "membarrier system call not available"
5621     fi
5622 else
5623     # Do not enable it by default even for Mingw32, because it doesn't
5624     # work on Wine.
5625     membarrier=no
5626 fi
5627
5628 ##########################################
5629 # check if rtnetlink.h exists and is useful
5630 have_rtnetlink=no
5631 cat > $TMPC << EOF
5632 #include <linux/rtnetlink.h>
5633 int main(void) {
5634   return IFLA_PROTO_DOWN;
5635 }
5636 EOF
5637 if compile_prog "" "" ; then
5638     have_rtnetlink=yes
5639 fi
5640
5641 ##########################################
5642 # check for usable AF_VSOCK environment
5643 have_af_vsock=no
5644 cat > $TMPC << EOF
5645 #include <errno.h>
5646 #include <sys/types.h>
5647 #include <sys/socket.h>
5648 #if !defined(AF_VSOCK)
5649 # error missing AF_VSOCK flag
5650 #endif
5651 #include <linux/vm_sockets.h>
5652 int main(void) {
5653     int sock, ret;
5654     struct sockaddr_vm svm;
5655     socklen_t len = sizeof(svm);
5656     sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5657     ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5658     if ((ret == -1) && (errno == ENOTCONN)) {
5659         return 0;
5660     }
5661     return -1;
5662 }
5663 EOF
5664 if compile_prog "" "" ; then
5665     have_af_vsock=yes
5666 fi
5667
5668 ##########################################
5669 # check for usable AF_ALG environment
5670 hava_afalg=no
5671 cat > $TMPC << EOF
5672 #include <errno.h>
5673 #include <sys/types.h>
5674 #include <sys/socket.h>
5675 #include <linux/if_alg.h>
5676 int main(void) {
5677     int sock;
5678     sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5679     return sock;
5680 }
5681 EOF
5682 if compile_prog "" "" ; then
5683     have_afalg=yes
5684 fi
5685 if test "$crypto_afalg" = "yes"
5686 then
5687     if test "$have_afalg" != "yes"
5688     then
5689         error_exit "AF_ALG requested but could not be detected"
5690     fi
5691 fi
5692
5693
5694 #################################################
5695 # Check to see if we have the Hypervisor framework
5696 if [ "$darwin" = "yes" ] ; then
5697   cat > $TMPC << EOF
5698 #include <Hypervisor/hv.h>
5699 int main() { return 0;}
5700 EOF
5701   if ! compile_object ""; then
5702     hvf='no'
5703   else
5704     hvf='yes'
5705     LDFLAGS="-framework Hypervisor $LDFLAGS"
5706   fi
5707 fi
5708
5709 #################################################
5710 # Sparc implicitly links with --relax, which is
5711 # incompatible with -r, so --no-relax should be
5712 # given. It does no harm to give it on other
5713 # platforms too.
5714
5715 # Note: the prototype is needed since QEMU_CFLAGS
5716 #       contains -Wmissing-prototypes
5717 cat > $TMPC << EOF
5718 extern int foo(void);
5719 int foo(void) { return 0; }
5720 EOF
5721 if ! compile_object ""; then
5722   error_exit "Failed to compile object file for LD_REL_FLAGS test"
5723 fi
5724 for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5725   if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5726     LD_REL_FLAGS=$i
5727     break
5728   fi
5729 done
5730 if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5731   feature_not_found "modules" "Cannot find how to build relocatable objects"
5732 fi
5733
5734 ##########################################
5735 # check for sysmacros.h
5736
5737 have_sysmacros=no
5738 cat > $TMPC << EOF
5739 #include <sys/sysmacros.h>
5740 int main(void) {
5741     return makedev(0, 0);
5742 }
5743 EOF
5744 if compile_prog "" "" ; then
5745     have_sysmacros=yes
5746 fi
5747
5748 ##########################################
5749 # Veritas HyperScale block driver VxHS
5750 # Check if libvxhs is installed
5751
5752 if test "$vxhs" != "no" ; then
5753   cat > $TMPC <<EOF
5754 #include <stdint.h>
5755 #include <qnio/qnio_api.h>
5756
5757 void *vxhs_callback;
5758
5759 int main(void) {
5760     iio_init(QNIO_VERSION, vxhs_callback);
5761     return 0;
5762 }
5763 EOF
5764   vxhs_libs="-lvxhs -lssl"
5765   if compile_prog "" "$vxhs_libs" ; then
5766     vxhs=yes
5767   else
5768     if test "$vxhs" = "yes" ; then
5769       feature_not_found "vxhs block device" "Install libvxhs See github"
5770     fi
5771     vxhs=no
5772   fi
5773 fi
5774
5775 ##########################################
5776 # check for _Static_assert()
5777
5778 have_static_assert=no
5779 cat > $TMPC << EOF
5780 _Static_assert(1, "success");
5781 int main(void) {
5782     return 0;
5783 }
5784 EOF
5785 if compile_prog "" "" ; then
5786     have_static_assert=yes
5787 fi
5788
5789 ##########################################
5790 # check for utmpx.h, it is missing e.g. on OpenBSD
5791
5792 have_utmpx=no
5793 cat > $TMPC << EOF
5794 #include <utmpx.h>
5795 struct utmpx user_info;
5796 int main(void) {
5797     return 0;
5798 }
5799 EOF
5800 if compile_prog "" "" ; then
5801     have_utmpx=yes
5802 fi
5803
5804 ##########################################
5805 # check for getrandom()
5806
5807 have_getrandom=no
5808 cat > $TMPC << EOF
5809 #include <sys/random.h>
5810 int main(void) {
5811     return getrandom(0, 0, GRND_NONBLOCK);
5812 }
5813 EOF
5814 if compile_prog "" "" ; then
5815     have_getrandom=yes
5816 fi
5817
5818 ##########################################
5819 # checks for sanitizers
5820
5821 have_asan=no
5822 have_ubsan=no
5823 have_asan_iface_h=no
5824 have_asan_iface_fiber=no
5825
5826 if test "$sanitizers" = "yes" ; then
5827   write_c_skeleton
5828   if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5829       have_asan=yes
5830   fi
5831
5832   # we could use a simple skeleton for flags checks, but this also
5833   # detect the static linking issue of ubsan, see also:
5834   # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5835   cat > $TMPC << EOF
5836 #include <stdlib.h>
5837 int main(void) {
5838     void *tmp = malloc(10);
5839     return *(int *)(tmp + 2);
5840 }
5841 EOF
5842   if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5843       have_ubsan=yes
5844   fi
5845
5846   if check_include "sanitizer/asan_interface.h" ; then
5847       have_asan_iface_h=yes
5848   fi
5849
5850   cat > $TMPC << EOF
5851 #include <sanitizer/asan_interface.h>
5852 int main(void) {
5853   __sanitizer_start_switch_fiber(0, 0, 0);
5854   return 0;
5855 }
5856 EOF
5857   if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5858       have_asan_iface_fiber=yes
5859   fi
5860 fi
5861
5862 ##########################################
5863 # check for libpmem
5864
5865 if test "$libpmem" != "no"; then
5866         if $pkg_config --exists "libpmem"; then
5867                 libpmem="yes"
5868                 libpmem_libs=$($pkg_config --libs libpmem)
5869                 libpmem_cflags=$($pkg_config --cflags libpmem)
5870                 libs_softmmu="$libs_softmmu $libpmem_libs"
5871                 QEMU_CFLAGS="$QEMU_CFLAGS $libpmem_cflags"
5872         else
5873                 if test "$libpmem" = "yes" ; then
5874                         feature_not_found "libpmem" "Install nvml or pmdk"
5875                 fi
5876                 libpmem="no"
5877         fi
5878 fi
5879
5880 ##########################################
5881 # check for slirp
5882
5883 case "$slirp" in
5884   "" | yes)
5885     if $pkg_config slirp; then
5886       slirp=system
5887     elif test -e "${source_path}/.git" && test $git_update = 'yes' ; then
5888       slirp=git
5889     elif test -e "${source_path}/slirp/Makefile" ; then
5890       slirp=internal
5891     elif test -z "$slirp" ; then
5892       slirp=no
5893     else
5894       feature_not_found "slirp" "Install slirp devel or git submodule"
5895     fi
5896     ;;
5897
5898   system)
5899     if ! $pkg_config slirp; then
5900       feature_not_found "slirp" "Install slirp devel"
5901     fi
5902     ;;
5903 esac
5904
5905 case "$slirp" in
5906   git | internal)
5907     if test "$slirp" = git; then
5908       git_submodules="${git_submodules} slirp"
5909     fi
5910     mkdir -p slirp
5911     slirp_cflags="-I\$(SRC_PATH)/slirp/src -I\$(BUILD_DIR)/slirp/src"
5912     slirp_libs="-L\$(BUILD_DIR)/slirp -lslirp"
5913     ;;
5914
5915   system)
5916     slirp_version=$($pkg_config --modversion slirp 2>/dev/null)
5917     slirp_cflags=$($pkg_config --cflags slirp 2>/dev/null)
5918     slirp_libs=$($pkg_config --libs slirp 2>/dev/null)
5919     ;;
5920
5921   no)
5922     ;;
5923   *)
5924     error_exit "Unknown state for slirp: $slirp"
5925     ;;
5926 esac
5927
5928
5929 ##########################################
5930 # End of CC checks
5931 # After here, no more $cc or $ld runs
5932
5933 write_c_skeleton
5934
5935 if test "$gcov" = "yes" ; then
5936   CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5937   LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
5938 elif test "$fortify_source" = "yes" ; then
5939   CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
5940 elif test "$debug" = "no"; then
5941   CFLAGS="-O2 $CFLAGS"
5942 fi
5943
5944 if test "$have_asan" = "yes"; then
5945   CFLAGS="-fsanitize=address $CFLAGS"
5946   if test "$have_asan_iface_h" = "no" ; then
5947       echo "ASAN build enabled, but ASAN header missing." \
5948            "Without code annotation, the report may be inferior."
5949   elif test "$have_asan_iface_fiber" = "no" ; then
5950       echo "ASAN build enabled, but ASAN header is too old." \
5951            "Without code annotation, the report may be inferior."
5952   fi
5953 fi
5954 if test "$have_ubsan" = "yes"; then
5955   CFLAGS="-fsanitize=undefined $CFLAGS"
5956 fi
5957
5958 ##########################################
5959 # Do we have libnfs
5960 if test "$libnfs" != "no" ; then
5961   if $pkg_config --atleast-version=1.9.3 libnfs; then
5962     libnfs="yes"
5963     libnfs_libs=$($pkg_config --libs libnfs)
5964   else
5965     if test "$libnfs" = "yes" ; then
5966       feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
5967     fi
5968     libnfs="no"
5969   fi
5970 fi
5971
5972 ##########################################
5973 # Do we have libudev
5974 if test "$libudev" != "no" ; then
5975   if $pkg_config libudev && test "$static" != "yes"; then
5976     libudev="yes"
5977     libudev_libs=$($pkg_config --libs libudev)
5978   else
5979     libudev="no"
5980   fi
5981 fi
5982
5983 # Now we've finished running tests it's OK to add -Werror to the compiler flags
5984 if test "$werror" = "yes"; then
5985     QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5986 fi
5987
5988 if test "$solaris" = "no" ; then
5989     if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5990         LDFLAGS="-Wl,--warn-common $LDFLAGS"
5991     fi
5992 fi
5993
5994 # test if pod2man has --utf8 option
5995 if pod2man --help | grep -q utf8; then
5996     POD2MAN="pod2man --utf8"
5997 else
5998     POD2MAN="pod2man"
5999 fi
6000
6001 # Use ASLR, no-SEH and DEP if available
6002 if test "$mingw32" = "yes" ; then
6003     for flag in --dynamicbase --no-seh --nxcompat; do
6004         if ld_has $flag ; then
6005             LDFLAGS="-Wl,$flag $LDFLAGS"
6006         fi
6007     done
6008 fi
6009
6010 # Disable OpenBSD W^X if available
6011 if test "$tcg" = "yes" && test "$targetos" = "OpenBSD"; then
6012     cat > $TMPC <<EOF
6013     int main(void) { return 0; }
6014 EOF
6015     wx_ldflags="-Wl,-z,wxneeded"
6016     if compile_prog "" "$wx_ldflags"; then
6017         QEMU_LDFLAGS="$QEMU_LDFLAGS $wx_ldflags"
6018     fi
6019 fi
6020
6021 qemu_confdir=$sysconfdir$confsuffix
6022 qemu_moddir=$libdir$confsuffix
6023 qemu_datadir=$datadir$confsuffix
6024 qemu_localedir="$datadir/locale"
6025 qemu_icondir="$datadir/icons"
6026 qemu_desktopdir="$datadir/applications"
6027
6028 # We can only support ivshmem if we have eventfd
6029 if [ "$eventfd" = "yes" ]; then
6030   ivshmem=yes
6031 fi
6032
6033 tools=""
6034 if test "$want_tools" = "yes" ; then
6035   tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) qemu-edid\$(EXESUF) $tools"
6036   if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
6037     tools="qemu-nbd\$(EXESUF) $tools"
6038   fi
6039   if [ "$ivshmem" = "yes" ]; then
6040     tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
6041   fi
6042   if [ "$curl" = "yes" ]; then
6043       tools="elf2dmp\$(EXESUF) $tools"
6044   fi
6045 fi
6046 if test "$softmmu" = yes ; then
6047   if test "$linux" = yes; then
6048     if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
6049       virtfs=yes
6050       tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
6051     else
6052       if test "$virtfs" = yes; then
6053         error_exit "VirtFS requires libcap devel and libattr devel"
6054       fi
6055       virtfs=no
6056     fi
6057     if test "$mpath" != no && test "$mpathpersist" = yes ; then
6058       mpath=yes
6059     else
6060       if test "$mpath" = yes; then
6061         error_exit "Multipath requires libmpathpersist devel"
6062       fi
6063       mpath=no
6064     fi
6065     tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
6066   else
6067     if test "$virtfs" = yes; then
6068       error_exit "VirtFS is supported only on Linux"
6069     fi
6070     virtfs=no
6071     if test "$mpath" = yes; then
6072       error_exit "Multipath is supported only on Linux"
6073     fi
6074     mpath=no
6075   fi
6076   if test "$xkbcommon" = "yes"; then
6077     tools="qemu-keymap\$(EXESUF) $tools"
6078   fi
6079 fi
6080
6081 # Probe for guest agent support/options
6082
6083 if [ "$guest_agent" != "no" ]; then
6084   if [ "$softmmu" = no -a "$want_tools" = no ] ; then
6085       guest_agent=no
6086   elif [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
6087       tools="qemu-ga\$(EXESUF) $tools"
6088       guest_agent=yes
6089   elif [ "$guest_agent" != yes ]; then
6090       guest_agent=no
6091   else
6092       error_exit "Guest agent is not supported on this platform"
6093   fi
6094 fi
6095
6096 # Guest agent Window MSI  package
6097
6098 if test "$guest_agent" != yes; then
6099   if test "$guest_agent_msi" = yes; then
6100     error_exit "MSI guest agent package requires guest agent enabled"
6101   fi
6102   guest_agent_msi=no
6103 elif test "$mingw32" != "yes"; then
6104   if test "$guest_agent_msi" = "yes"; then
6105     error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
6106   fi
6107   guest_agent_msi=no
6108 elif ! has wixl; then
6109   if test "$guest_agent_msi" = "yes"; then
6110     error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
6111   fi
6112   guest_agent_msi=no
6113 else
6114   # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
6115   # disabled explicitly
6116   if test "$guest_agent_msi" != "no"; then
6117     guest_agent_msi=yes
6118   fi
6119 fi
6120
6121 if test "$guest_agent_msi" = "yes"; then
6122   if test "$guest_agent_with_vss" = "yes"; then
6123     QEMU_GA_MSI_WITH_VSS="-D InstallVss"
6124   fi
6125
6126   if test "$QEMU_GA_MANUFACTURER" = ""; then
6127     QEMU_GA_MANUFACTURER=QEMU
6128   fi
6129
6130   if test "$QEMU_GA_DISTRO" = ""; then
6131     QEMU_GA_DISTRO=Linux
6132   fi
6133
6134   if test "$QEMU_GA_VERSION" = ""; then
6135       QEMU_GA_VERSION=$(cat $source_path/VERSION)
6136   fi
6137
6138   QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
6139
6140   case "$cpu" in
6141   x86_64)
6142     QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
6143     ;;
6144   i386)
6145     QEMU_GA_MSI_ARCH="-D Arch=32"
6146     ;;
6147   *)
6148     error_exit "CPU $cpu not supported for building installation package"
6149     ;;
6150   esac
6151 fi
6152
6153 # Mac OS X ships with a broken assembler
6154 roms=
6155 if { test "$cpu" = "i386" || test "$cpu" = "x86_64"; } && \
6156         test "$targetos" != "Darwin" && test "$targetos" != "SunOS" && \
6157         test "$softmmu" = yes ; then
6158     # Different host OS linkers have different ideas about the name of the ELF
6159     # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
6160     # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
6161     for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
6162         if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
6163             ld_i386_emulation="$emu"
6164             roms="optionrom"
6165             break
6166         fi
6167     done
6168 fi
6169 if test "$ARCH" = "ppc64" && test "$targetos" != "Darwin" ; then
6170   roms="$roms spapr-rtas"
6171 fi
6172
6173 # Only build s390-ccw bios if we're on s390x and the compiler has -march=z900
6174 if test "$cpu" = "s390x" ; then
6175   write_c_skeleton
6176   if compile_prog "-march=z900" ""; then
6177     roms="$roms s390-ccw"
6178   fi
6179 fi
6180
6181 # Probe for the need for relocating the user-only binary.
6182 if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
6183   textseg_addr=
6184   case "$cpu" in
6185     arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
6186       # ??? Rationale for choosing this address
6187       textseg_addr=0x60000000
6188       ;;
6189     mips)
6190       # A 256M aligned address, high in the address space, with enough
6191       # room for the code_gen_buffer above it before the stack.
6192       textseg_addr=0x60000000
6193       ;;
6194   esac
6195   if [ -n "$textseg_addr" ]; then
6196     cat > $TMPC <<EOF
6197     int main(void) { return 0; }
6198 EOF
6199     textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
6200     if ! compile_prog "" "$textseg_ldflags"; then
6201       # In case ld does not support -Ttext-segment, edit the default linker
6202       # script via sed to set the .text start addr.  This is needed on FreeBSD
6203       # at least.
6204       if ! $ld --verbose >/dev/null 2>&1; then
6205         error_exit \
6206             "We need to link the QEMU user mode binaries at a" \
6207             "specific text address. Unfortunately your linker" \
6208             "doesn't support either the -Ttext-segment option or" \
6209             "printing the default linker script with --verbose." \
6210             "If you don't want the user mode binaries, pass the" \
6211             "--disable-user option to configure."
6212       fi
6213
6214       $ld --verbose | sed \
6215         -e '1,/==================================================/d' \
6216         -e '/==================================================/,$d' \
6217         -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
6218         -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
6219       textseg_ldflags="-Wl,-T../config-host.ld"
6220     fi
6221   fi
6222 fi
6223
6224 # Check that the C++ compiler exists and works with the C compiler.
6225 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
6226 if has $cxx; then
6227     cat > $TMPC <<EOF
6228 int c_function(void);
6229 int main(void) { return c_function(); }
6230 EOF
6231
6232     compile_object
6233
6234     cat > $TMPCXX <<EOF
6235 extern "C" {
6236    int c_function(void);
6237 }
6238 int c_function(void) { return 42; }
6239 EOF
6240
6241     update_cxxflags
6242
6243     if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
6244         # C++ compiler $cxx works ok with C compiler $cc
6245         :
6246     else
6247         echo "C++ compiler $cxx does not work with C compiler $cc"
6248         echo "Disabling C++ specific optional code"
6249         cxx=
6250     fi
6251 else
6252     echo "No C++ compiler available; disabling C++ specific optional code"
6253     cxx=
6254 fi
6255
6256 echo_version() {
6257     if test "$1" = "yes" ; then
6258         echo "($2)"
6259     fi
6260 }
6261
6262 # prepend pixman and ftd flags after all config tests are done
6263 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
6264 QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
6265 libs_softmmu="$pixman_libs $libs_softmmu"
6266
6267 echo "Install prefix    $prefix"
6268 echo "BIOS directory    $(eval echo $qemu_datadir)"
6269 echo "firmware path     $(eval echo $firmwarepath)"
6270 echo "binary directory  $(eval echo $bindir)"
6271 echo "library directory $(eval echo $libdir)"
6272 echo "module directory  $(eval echo $qemu_moddir)"
6273 echo "libexec directory $(eval echo $libexecdir)"
6274 echo "include directory $(eval echo $includedir)"
6275 echo "config directory  $(eval echo $sysconfdir)"
6276 if test "$mingw32" = "no" ; then
6277 echo "local state directory   $(eval echo $local_statedir)"
6278 echo "Manual directory  $(eval echo $mandir)"
6279 echo "ELF interp prefix $interp_prefix"
6280 else
6281 echo "local state directory   queried at runtime"
6282 echo "Windows SDK       $win_sdk"
6283 fi
6284 echo "Source path       $source_path"
6285 echo "GIT binary        $git"
6286 echo "GIT submodules    $git_submodules"
6287 echo "C compiler        $cc"
6288 echo "Host C compiler   $host_cc"
6289 echo "C++ compiler      $cxx"
6290 echo "Objective-C compiler $objcc"
6291 echo "ARFLAGS           $ARFLAGS"
6292 echo "CFLAGS            $CFLAGS"
6293 echo "QEMU_CFLAGS       $QEMU_CFLAGS"
6294 echo "LDFLAGS           $LDFLAGS"
6295 echo "QEMU_LDFLAGS      $QEMU_LDFLAGS"
6296 echo "make              $make"
6297 echo "install           $install"
6298 echo "python            $python ($python_version)"
6299 echo "slirp support     $slirp $(echo_version $slirp $slirp_version)"
6300 if test "$slirp" != "no" ; then
6301     echo "smbd              $smbd"
6302 fi
6303 echo "module support    $modules"
6304 echo "host CPU          $cpu"
6305 echo "host big endian   $bigendian"
6306 echo "target list       $target_list"
6307 echo "gprof enabled     $gprof"
6308 echo "sparse enabled    $sparse"
6309 echo "strip binaries    $strip_opt"
6310 echo "profiler          $profiler"
6311 echo "static build      $static"
6312 if test "$darwin" = "yes" ; then
6313     echo "Cocoa support     $cocoa"
6314 fi
6315 echo "SDL support       $sdl $(echo_version $sdl $sdlversion)"
6316 echo "SDL image support $sdl_image"
6317 echo "GTK support       $gtk $(echo_version $gtk $gtk_version)"
6318 echo "GTK GL support    $gtk_gl"
6319 echo "VTE support       $vte $(echo_version $vte $vteversion)"
6320 echo "TLS priority      $tls_priority"
6321 echo "GNUTLS support    $gnutls"
6322 echo "libgcrypt         $gcrypt"
6323 echo "nettle            $nettle $(echo_version $nettle $nettle_version)"
6324 echo "libtasn1          $tasn1"
6325 echo "PAM               $auth_pam"
6326 echo "iconv support     $iconv"
6327 echo "curses support    $curses"
6328 echo "virgl support     $virglrenderer $(echo_version $virglrenderer $virgl_version)"
6329 echo "curl support      $curl"
6330 echo "mingw32 support   $mingw32"
6331 echo "Audio drivers     $audio_drv_list"
6332 echo "Block whitelist (rw) $block_drv_rw_whitelist"
6333 echo "Block whitelist (ro) $block_drv_ro_whitelist"
6334 echo "VirtFS support    $virtfs"
6335 echo "Multipath support $mpath"
6336 echo "VNC support       $vnc"
6337 if test "$vnc" = "yes" ; then
6338     echo "VNC SASL support  $vnc_sasl"
6339     echo "VNC JPEG support  $vnc_jpeg"
6340     echo "VNC PNG support   $vnc_png"
6341 fi
6342 echo "xen support       $xen"
6343 if test "$xen" = "yes" ; then
6344   echo "xen ctrl version  $xen_ctrl_version"
6345 fi
6346 echo "brlapi support    $brlapi"
6347 echo "bluez  support    $bluez"
6348 echo "Documentation     $docs"
6349 echo "PIE               $pie"
6350 echo "vde support       $vde"
6351 echo "netmap support    $netmap"
6352 echo "Linux AIO support $linux_aio"
6353 echo "ATTR/XATTR support $attr"
6354 echo "Install blobs     $blobs"
6355 echo "KVM support       $kvm"
6356 echo "HAX support       $hax"
6357 echo "HVF support       $hvf"
6358 echo "WHPX support      $whpx"
6359 echo "TCG support       $tcg"
6360 if test "$tcg" = "yes" ; then
6361     echo "TCG debug enabled $debug_tcg"
6362     echo "TCG interpreter   $tcg_interpreter"
6363 fi
6364 echo "malloc trim support $malloc_trim"
6365 echo "RDMA support      $rdma"
6366 echo "PVRDMA support    $pvrdma"
6367 echo "fdt support       $fdt"
6368 echo "membarrier        $membarrier"
6369 echo "preadv support    $preadv"
6370 echo "fdatasync         $fdatasync"
6371 echo "madvise           $madvise"
6372 echo "posix_madvise     $posix_madvise"
6373 echo "posix_memalign    $posix_memalign"
6374 echo "libcap-ng support $cap_ng"
6375 echo "vhost-net support $vhost_net"
6376 echo "vhost-crypto support $vhost_crypto"
6377 echo "vhost-scsi support $vhost_scsi"
6378 echo "vhost-vsock support $vhost_vsock"
6379 echo "vhost-user support $vhost_user"
6380 echo "Trace backends    $trace_backends"
6381 if have_backend "simple"; then
6382 echo "Trace output file $trace_file-<pid>"
6383 fi
6384 echo "spice support     $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
6385 echo "rbd support       $rbd"
6386 echo "xfsctl support    $xfs"
6387 echo "smartcard support $smartcard"
6388 echo "libusb            $libusb"
6389 echo "usb net redir     $usb_redir"
6390 echo "OpenGL support    $opengl"
6391 echo "OpenGL dmabufs    $opengl_dmabuf"
6392 echo "libiscsi support  $libiscsi"
6393 echo "libnfs support    $libnfs"
6394 echo "build guest agent $guest_agent"
6395 echo "QGA VSS support   $guest_agent_with_vss"
6396 echo "QGA w32 disk info $guest_agent_ntddscsi"
6397 echo "QGA MSI support   $guest_agent_msi"
6398 echo "seccomp support   $seccomp"
6399 echo "coroutine backend $coroutine"
6400 echo "coroutine pool    $coroutine_pool"
6401 echo "debug stack usage $debug_stack_usage"
6402 echo "mutex debugging   $debug_mutex"
6403 echo "crypto afalg      $crypto_afalg"
6404 echo "GlusterFS support $glusterfs"
6405 echo "gcov              $gcov_tool"
6406 echo "gcov enabled      $gcov"
6407 echo "TPM support       $tpm"
6408 echo "libssh support    $libssh"
6409 echo "QOM debugging     $qom_cast_debug"
6410 echo "Live block migration $live_block_migration"
6411 echo "lzo support       $lzo"
6412 echo "snappy support    $snappy"
6413 echo "bzip2 support     $bzip2"
6414 echo "lzfse support     $lzfse"
6415 echo "NUMA host support $numa"
6416 echo "libxml2           $libxml2"
6417 echo "tcmalloc support  $tcmalloc"
6418 echo "jemalloc support  $jemalloc"
6419 echo "avx2 optimization $avx2_opt"
6420 echo "replication support $replication"
6421 echo "VxHS block device $vxhs"
6422 echo "bochs support     $bochs"
6423 echo "cloop support     $cloop"
6424 echo "dmg support       $dmg"
6425 echo "qcow v1 support   $qcow1"
6426 echo "vdi support       $vdi"
6427 echo "vvfat support     $vvfat"
6428 echo "qed support       $qed"
6429 echo "parallels support $parallels"
6430 echo "sheepdog support  $sheepdog"
6431 echo "capstone          $capstone"
6432 echo "libpmem support   $libpmem"
6433 echo "libudev           $libudev"
6434 echo "default devices   $default_devices"
6435
6436 if test "$supported_cpu" = "no"; then
6437     echo
6438     echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
6439     echo
6440     echo "CPU host architecture $cpu support is not currently maintained."
6441     echo "The QEMU project intends to remove support for this host CPU in"
6442     echo "a future release if nobody volunteers to maintain it and to"
6443     echo "provide a build host for our continuous integration setup."
6444     echo "configure has succeeded and you can continue to build, but"
6445     echo "if you care about QEMU on this platform you should contact"
6446     echo "us upstream at [email protected]."
6447 fi
6448
6449 if test "$supported_os" = "no"; then
6450     echo
6451     echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
6452     echo
6453     echo "Host OS $targetos support is not currently maintained."
6454     echo "The QEMU project intends to remove support for this host OS in"
6455     echo "a future release if nobody volunteers to maintain it and to"
6456     echo "provide a build host for our continuous integration setup."
6457     echo "configure has succeeded and you can continue to build, but"
6458     echo "if you care about QEMU on this platform you should contact"
6459     echo "us upstream at [email protected]."
6460 fi
6461
6462 # Note that if the Python conditional here evaluates True we will exit
6463 # with status 1 which is a shell 'false' value.
6464 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,0))'; then
6465   echo
6466   echo "warning: Python 2 support is deprecated" >&2
6467   echo "warning: Python 3 will be required for building future versions of QEMU" >&2
6468   python2="y"
6469 fi
6470
6471 config_host_mak="config-host.mak"
6472
6473 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
6474
6475 echo "# Automatically generated by configure - do not modify" > $config_host_mak
6476 echo >> $config_host_mak
6477
6478 echo all: >> $config_host_mak
6479 echo "prefix=$prefix" >> $config_host_mak
6480 echo "bindir=$bindir" >> $config_host_mak
6481 echo "libdir=$libdir" >> $config_host_mak
6482 echo "libexecdir=$libexecdir" >> $config_host_mak
6483 echo "includedir=$includedir" >> $config_host_mak
6484 echo "mandir=$mandir" >> $config_host_mak
6485 echo "sysconfdir=$sysconfdir" >> $config_host_mak
6486 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
6487 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
6488 echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
6489 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
6490 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
6491 if test "$mingw32" = "no" ; then
6492   echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
6493 fi
6494 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
6495 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
6496 echo "qemu_icondir=$qemu_icondir" >> $config_host_mak
6497 echo "qemu_desktopdir=$qemu_desktopdir" >> $config_host_mak
6498 echo "libs_cpu=$libs_cpu" >> $config_host_mak
6499 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
6500 echo "GIT=$git" >> $config_host_mak
6501 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
6502 echo "GIT_UPDATE=$git_update" >> $config_host_mak
6503
6504 echo "ARCH=$ARCH" >> $config_host_mak
6505
6506 if test "$default_devices" = "yes" ; then
6507   echo "CONFIG_MINIKCONF_MODE=--defconfig" >> $config_host_mak
6508 else
6509   echo "CONFIG_MINIKCONF_MODE=--allnoconfig" >> $config_host_mak
6510 fi
6511 if test "$debug_tcg" = "yes" ; then
6512   echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
6513 fi
6514 if test "$strip_opt" = "yes" ; then
6515   echo "STRIP=${strip}" >> $config_host_mak
6516 fi
6517 if test "$bigendian" = "yes" ; then
6518   echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
6519 fi
6520 if test "$mingw32" = "yes" ; then
6521   echo "CONFIG_WIN32=y" >> $config_host_mak
6522   rc_version=$(cat $source_path/VERSION)
6523   version_major=${rc_version%%.*}
6524   rc_version=${rc_version#*.}
6525   version_minor=${rc_version%%.*}
6526   rc_version=${rc_version#*.}
6527   version_subminor=${rc_version%%.*}
6528   version_micro=0
6529   echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6530   echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6531   if test "$guest_agent_with_vss" = "yes" ; then
6532     echo "CONFIG_QGA_VSS=y" >> $config_host_mak
6533     echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
6534     echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6535   fi
6536   if test "$guest_agent_ntddscsi" = "yes" ; then
6537     echo "CONFIG_QGA_NTDDSCSI=y" >> $config_host_mak
6538   fi
6539   if test "$guest_agent_msi" = "yes"; then
6540     echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
6541     echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6542     echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6543     echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6544     echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6545     echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6546     echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6547   fi
6548 else
6549   echo "CONFIG_POSIX=y" >> $config_host_mak
6550 fi
6551
6552 if test "$linux" = "yes" ; then
6553   echo "CONFIG_LINUX=y" >> $config_host_mak
6554 fi
6555
6556 if test "$darwin" = "yes" ; then
6557   echo "CONFIG_DARWIN=y" >> $config_host_mak
6558 fi
6559
6560 if test "$solaris" = "yes" ; then
6561   echo "CONFIG_SOLARIS=y" >> $config_host_mak
6562 fi
6563 if test "$haiku" = "yes" ; then
6564   echo "CONFIG_HAIKU=y" >> $config_host_mak
6565 fi
6566 if test "$static" = "yes" ; then
6567   echo "CONFIG_STATIC=y" >> $config_host_mak
6568 fi
6569 if test "$profiler" = "yes" ; then
6570   echo "CONFIG_PROFILER=y" >> $config_host_mak
6571 fi
6572 if test "$want_tools" = "yes" ; then
6573   echo "CONFIG_TOOLS=y" >> $config_host_mak
6574 fi
6575 if test "$slirp" != "no"; then
6576   echo "CONFIG_SLIRP=y" >> $config_host_mak
6577   echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
6578   echo "SLIRP_CFLAGS=$slirp_cflags" >> $config_host_mak
6579   echo "SLIRP_LIBS=$slirp_libs" >> $config_host_mak
6580 fi
6581 if [ "$slirp" = "git" -o "$slirp" = "internal" ]; then
6582     echo "config-host.h: slirp/all" >> $config_host_mak
6583 fi
6584 if test "$vde" = "yes" ; then
6585   echo "CONFIG_VDE=y" >> $config_host_mak
6586   echo "VDE_LIBS=$vde_libs" >> $config_host_mak
6587 fi
6588 if test "$netmap" = "yes" ; then
6589   echo "CONFIG_NETMAP=y" >> $config_host_mak
6590 fi
6591 if test "$l2tpv3" = "yes" ; then
6592   echo "CONFIG_L2TPV3=y" >> $config_host_mak
6593 fi
6594 if test "$cap_ng" = "yes" ; then
6595   echo "CONFIG_LIBCAP=y" >> $config_host_mak
6596 fi
6597 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
6598 for drv in $audio_drv_list; do
6599     def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
6600     case "$drv" in
6601         alsa | oss | pa | sdl)
6602             echo "$def=m" >> $config_host_mak ;;
6603         *)
6604             echo "$def=y" >> $config_host_mak ;;
6605     esac
6606 done
6607 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6608 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6609 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6610 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6611 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
6612 if test "$audio_win_int" = "yes" ; then
6613   echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6614 fi
6615 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6616 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
6617 if test "$vnc" = "yes" ; then
6618   echo "CONFIG_VNC=y" >> $config_host_mak
6619 fi
6620 if test "$vnc_sasl" = "yes" ; then
6621   echo "CONFIG_VNC_SASL=y" >> $config_host_mak
6622 fi
6623 if test "$vnc_jpeg" = "yes" ; then
6624   echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
6625 fi
6626 if test "$vnc_png" = "yes" ; then
6627   echo "CONFIG_VNC_PNG=y" >> $config_host_mak
6628 fi
6629 if test "$xkbcommon" = "yes" ; then
6630   echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6631   echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6632 fi
6633 if test "$xfs" = "yes" ; then
6634   echo "CONFIG_XFS=y" >> $config_host_mak
6635 fi
6636 qemu_version=$(head $source_path/VERSION)
6637 echo "VERSION=$qemu_version" >>$config_host_mak
6638 echo "PKGVERSION=$pkgversion" >>$config_host_mak
6639 echo "SRC_PATH=$source_path" >> $config_host_mak
6640 echo "TARGET_DIRS=$target_list" >> $config_host_mak
6641 if [ "$docs" = "yes" ] ; then
6642   echo "BUILD_DOCS=yes" >> $config_host_mak
6643 fi
6644 if test "$modules" = "yes"; then
6645   # $shacmd can generate a hash started with digit, which the compiler doesn't
6646   # like as an symbol. So prefix it with an underscore
6647   echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
6648   echo "CONFIG_MODULES=y" >> $config_host_mak
6649 fi
6650 if test "$have_x11" = "yes" && test "$need_x11" = "yes"; then
6651   echo "CONFIG_X11=y" >> $config_host_mak
6652   echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6653   echo "X11_LIBS=$x11_libs" >> $config_host_mak
6654 fi
6655 if test "$sdl" = "yes" ; then
6656   echo "CONFIG_SDL=m" >> $config_host_mak
6657   echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
6658   echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
6659   if test "$sdl_image" = "yes" ; then
6660       echo "CONFIG_SDL_IMAGE=y" >> $config_host_mak
6661   fi
6662 fi
6663 if test "$cocoa" = "yes" ; then
6664   echo "CONFIG_COCOA=y" >> $config_host_mak
6665 fi
6666 if test "$iconv" = "yes" ; then
6667   echo "CONFIG_ICONV=y" >> $config_host_mak
6668   echo "ICONV_CFLAGS=$iconv_cflags" >> $config_host_mak
6669   echo "ICONV_LIBS=$iconv_lib" >> $config_host_mak
6670 fi
6671 if test "$curses" = "yes" ; then
6672   echo "CONFIG_CURSES=m" >> $config_host_mak
6673   echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6674   echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
6675 fi
6676 if test "$pipe2" = "yes" ; then
6677   echo "CONFIG_PIPE2=y" >> $config_host_mak
6678 fi
6679 if test "$accept4" = "yes" ; then
6680   echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6681 fi
6682 if test "$splice" = "yes" ; then
6683   echo "CONFIG_SPLICE=y" >> $config_host_mak
6684 fi
6685 if test "$eventfd" = "yes" ; then
6686   echo "CONFIG_EVENTFD=y" >> $config_host_mak
6687 fi
6688 if test "$memfd" = "yes" ; then
6689   echo "CONFIG_MEMFD=y" >> $config_host_mak
6690 fi
6691 if test "$have_usbfs" = "yes" ; then
6692   echo "CONFIG_USBFS=y" >> $config_host_mak
6693 fi
6694 if test "$fallocate" = "yes" ; then
6695   echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6696 fi
6697 if test "$fallocate_punch_hole" = "yes" ; then
6698   echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6699 fi
6700 if test "$fallocate_zero_range" = "yes" ; then
6701   echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6702 fi
6703 if test "$posix_fallocate" = "yes" ; then
6704   echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6705 fi
6706 if test "$sync_file_range" = "yes" ; then
6707   echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6708 fi
6709 if test "$fiemap" = "yes" ; then
6710   echo "CONFIG_FIEMAP=y" >> $config_host_mak
6711 fi
6712 if test "$dup3" = "yes" ; then
6713   echo "CONFIG_DUP3=y" >> $config_host_mak
6714 fi
6715 if test "$ppoll" = "yes" ; then
6716   echo "CONFIG_PPOLL=y" >> $config_host_mak
6717 fi
6718 if test "$prctl_pr_set_timerslack" = "yes" ; then
6719   echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6720 fi
6721 if test "$epoll" = "yes" ; then
6722   echo "CONFIG_EPOLL=y" >> $config_host_mak
6723 fi
6724 if test "$epoll_create1" = "yes" ; then
6725   echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6726 fi
6727 if test "$sendfile" = "yes" ; then
6728   echo "CONFIG_SENDFILE=y" >> $config_host_mak
6729 fi
6730 if test "$timerfd" = "yes" ; then
6731   echo "CONFIG_TIMERFD=y" >> $config_host_mak
6732 fi
6733 if test "$setns" = "yes" ; then
6734   echo "CONFIG_SETNS=y" >> $config_host_mak
6735 fi
6736 if test "$clock_adjtime" = "yes" ; then
6737   echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6738 fi
6739 if test "$syncfs" = "yes" ; then
6740   echo "CONFIG_SYNCFS=y" >> $config_host_mak
6741 fi
6742 if test "$inotify" = "yes" ; then
6743   echo "CONFIG_INOTIFY=y" >> $config_host_mak
6744 fi
6745 if test "$inotify1" = "yes" ; then
6746   echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6747 fi
6748 if test "$sem_timedwait" = "yes" ; then
6749   echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6750 fi
6751 if test "$strchrnul" = "yes" ; then
6752   echo "HAVE_STRCHRNUL=y" >> $config_host_mak
6753 fi
6754 if test "$byteswap_h" = "yes" ; then
6755   echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6756 fi
6757 if test "$bswap_h" = "yes" ; then
6758   echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6759 fi
6760 if test "$curl" = "yes" ; then
6761   echo "CONFIG_CURL=m" >> $config_host_mak
6762   echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6763   echo "CURL_LIBS=$curl_libs" >> $config_host_mak
6764 fi
6765 if test "$brlapi" = "yes" ; then
6766   echo "CONFIG_BRLAPI=y" >> $config_host_mak
6767   echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
6768 fi
6769 if test "$bluez" = "yes" ; then
6770   echo "CONFIG_BLUEZ=y" >> $config_host_mak
6771   echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
6772 fi
6773 if test "$gtk" = "yes" ; then
6774   echo "CONFIG_GTK=m" >> $config_host_mak
6775   echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
6776   echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
6777   if test "$gtk_gl" = "yes" ; then
6778     echo "CONFIG_GTK_GL=y" >> $config_host_mak
6779   fi
6780 fi
6781 if test "$gio" = "yes" ; then
6782     echo "CONFIG_GIO=y" >> $config_host_mak
6783     echo "GIO_CFLAGS=$gio_cflags" >> $config_host_mak
6784     echo "GIO_LIBS=$gio_libs" >> $config_host_mak
6785 fi
6786 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
6787 if test "$gnutls" = "yes" ; then
6788   echo "CONFIG_GNUTLS=y" >> $config_host_mak
6789 fi
6790 if test "$gcrypt" = "yes" ; then
6791   echo "CONFIG_GCRYPT=y" >> $config_host_mak
6792   if test "$gcrypt_hmac" = "yes" ; then
6793     echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6794   fi
6795 fi
6796 if test "$nettle" = "yes" ; then
6797   echo "CONFIG_NETTLE=y" >> $config_host_mak
6798   echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
6799 fi
6800 if test "$tasn1" = "yes" ; then
6801   echo "CONFIG_TASN1=y" >> $config_host_mak
6802 fi
6803 if test "$auth_pam" = "yes" ; then
6804     echo "CONFIG_AUTH_PAM=y" >> $config_host_mak
6805 fi
6806 if test "$have_ifaddrs_h" = "yes" ; then
6807     echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6808 fi
6809 if test "$have_broken_size_max" = "yes" ; then
6810     echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6811 fi
6812
6813 # Work around a system header bug with some kernel/XFS header
6814 # versions where they both try to define 'struct fsxattr':
6815 # xfs headers will not try to redefine structs from linux headers
6816 # if this macro is set.
6817 if test "$have_fsxattr" = "yes" ; then
6818     echo "HAVE_FSXATTR=y" >> $config_host_mak
6819 fi
6820 if test "$have_copy_file_range" = "yes" ; then
6821     echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6822 fi
6823 if test "$vte" = "yes" ; then
6824   echo "CONFIG_VTE=y" >> $config_host_mak
6825   echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
6826   echo "VTE_LIBS=$vte_libs" >> $config_host_mak
6827 fi
6828 if test "$virglrenderer" = "yes" ; then
6829   echo "CONFIG_VIRGL=y" >> $config_host_mak
6830   echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6831   echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6832 fi
6833 if test "$xen" = "yes" ; then
6834   echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
6835   echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
6836 fi
6837 if test "$linux_aio" = "yes" ; then
6838   echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6839 fi
6840 if test "$attr" = "yes" ; then
6841   echo "CONFIG_ATTR=y" >> $config_host_mak
6842 fi
6843 if test "$libattr" = "yes" ; then
6844   echo "CONFIG_LIBATTR=y" >> $config_host_mak
6845 fi
6846 if test "$virtfs" = "yes" ; then
6847   echo "CONFIG_VIRTFS=y" >> $config_host_mak
6848 fi
6849 if test "$mpath" = "yes" ; then
6850   echo "CONFIG_MPATH=y" >> $config_host_mak
6851   if test "$mpathpersist_new_api" = "yes"; then
6852     echo "CONFIG_MPATH_NEW_API=y" >> $config_host_mak
6853   fi
6854 fi
6855 if test "$vhost_scsi" = "yes" ; then
6856   echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6857 fi
6858 if test "$vhost_net" = "yes" ; then
6859   echo "CONFIG_VHOST_NET=y" >> $config_host_mak
6860 fi
6861 if test "$vhost_net_user" = "yes" ; then
6862   echo "CONFIG_VHOST_NET_USER=y" >> $config_host_mak
6863 fi
6864 if test "$vhost_crypto" = "yes" ; then
6865   echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6866 fi
6867 if test "$vhost_vsock" = "yes" ; then
6868   echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6869 fi
6870 if test "$vhost_kernel" = "yes" ; then
6871   echo "CONFIG_VHOST_KERNEL=y" >> $config_host_mak
6872 fi
6873 if test "$vhost_user" = "yes" ; then
6874   echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6875 fi
6876 if test "$blobs" = "yes" ; then
6877   echo "INSTALL_BLOBS=yes" >> $config_host_mak
6878 fi
6879 if test "$iovec" = "yes" ; then
6880   echo "CONFIG_IOVEC=y" >> $config_host_mak
6881 fi
6882 if test "$preadv" = "yes" ; then
6883   echo "CONFIG_PREADV=y" >> $config_host_mak
6884 fi
6885 if test "$fdt" != "no" ; then
6886   echo "CONFIG_FDT=y" >> $config_host_mak
6887 fi
6888 if test "$membarrier" = "yes" ; then
6889   echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6890 fi
6891 if test "$signalfd" = "yes" ; then
6892   echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6893 fi
6894 if test "$optreset" = "yes" ; then
6895   echo "HAVE_OPTRESET=y" >> $config_host_mak
6896 fi
6897 if test "$tcg" = "yes"; then
6898   echo "CONFIG_TCG=y" >> $config_host_mak
6899   if test "$tcg_interpreter" = "yes" ; then
6900     echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6901   fi
6902 fi
6903 if test "$fdatasync" = "yes" ; then
6904   echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6905 fi
6906 if test "$madvise" = "yes" ; then
6907   echo "CONFIG_MADVISE=y" >> $config_host_mak
6908 fi
6909 if test "$posix_madvise" = "yes" ; then
6910   echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6911 fi
6912 if test "$posix_memalign" = "yes" ; then
6913   echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6914 fi
6915
6916 if test "$spice" = "yes" ; then
6917   echo "CONFIG_SPICE=y" >> $config_host_mak
6918 fi
6919
6920 if test "$smartcard" = "yes" ; then
6921   echo "CONFIG_SMARTCARD=y" >> $config_host_mak
6922   echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6923   echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
6924 fi
6925
6926 if test "$libusb" = "yes" ; then
6927   echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
6928   echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6929   echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
6930 fi
6931
6932 if test "$usb_redir" = "yes" ; then
6933   echo "CONFIG_USB_REDIR=y" >> $config_host_mak
6934   echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6935   echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
6936 fi
6937
6938 if test "$opengl" = "yes" ; then
6939   echo "CONFIG_OPENGL=y" >> $config_host_mak
6940   echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
6941   if test "$opengl_dmabuf" = "yes" ; then
6942     echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6943   fi
6944 fi
6945
6946 if test "$gbm" = "yes" ; then
6947     echo "CONFIG_GBM=y" >> $config_host_mak
6948     echo "GBM_LIBS=$gbm_libs" >> $config_host_mak
6949     echo "GBM_CFLAGS=$gbm_cflags" >> $config_host_mak
6950 fi
6951
6952
6953 if test "$malloc_trim" = "yes" ; then
6954   echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6955 fi
6956
6957 if test "$avx2_opt" = "yes" ; then
6958   echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6959 fi
6960
6961 if test "$lzo" = "yes" ; then
6962   echo "CONFIG_LZO=y" >> $config_host_mak
6963 fi
6964
6965 if test "$snappy" = "yes" ; then
6966   echo "CONFIG_SNAPPY=y" >> $config_host_mak
6967 fi
6968
6969 if test "$bzip2" = "yes" ; then
6970   echo "CONFIG_BZIP2=y" >> $config_host_mak
6971   echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6972 fi
6973
6974 if test "$lzfse" = "yes" ; then
6975   echo "CONFIG_LZFSE=y" >> $config_host_mak
6976   echo "LZFSE_LIBS=-llzfse" >> $config_host_mak
6977 fi
6978
6979 if test "$libiscsi" = "yes" ; then
6980   echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6981   echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6982   echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
6983 fi
6984
6985 if test "$libnfs" = "yes" ; then
6986   echo "CONFIG_LIBNFS=m" >> $config_host_mak
6987   echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6988 fi
6989
6990 if test "$seccomp" = "yes"; then
6991   echo "CONFIG_SECCOMP=y" >> $config_host_mak
6992   echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6993   echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
6994 fi
6995
6996 # XXX: suppress that
6997 if [ "$bsd" = "yes" ] ; then
6998   echo "CONFIG_BSD=y" >> $config_host_mak
6999 fi
7000
7001 if test "$localtime_r" = "yes" ; then
7002   echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
7003 fi
7004 if test "$qom_cast_debug" = "yes" ; then
7005   echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
7006 fi
7007 if test "$rbd" = "yes" ; then
7008   echo "CONFIG_RBD=m" >> $config_host_mak
7009   echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
7010   echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
7011 fi
7012
7013 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
7014 if test "$coroutine_pool" = "yes" ; then
7015   echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
7016 else
7017   echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
7018 fi
7019
7020 if test "$debug_stack_usage" = "yes" ; then
7021   echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
7022 fi
7023
7024 if test "$crypto_afalg" = "yes" ; then
7025   echo "CONFIG_AF_ALG=y" >> $config_host_mak
7026 fi
7027
7028 if test "$open_by_handle_at" = "yes" ; then
7029   echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
7030 fi
7031
7032 if test "$linux_magic_h" = "yes" ; then
7033   echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
7034 fi
7035
7036 if test "$pragma_diagnostic_available" = "yes" ; then
7037   echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
7038 fi
7039
7040 if test "$valgrind_h" = "yes" ; then
7041   echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
7042 fi
7043
7044 if test "$have_asan_iface_fiber" = "yes" ; then
7045     echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
7046 fi
7047
7048 if test "$has_environ" = "yes" ; then
7049   echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
7050 fi
7051
7052 if test "$cpuid_h" = "yes" ; then
7053   echo "CONFIG_CPUID_H=y" >> $config_host_mak
7054 fi
7055
7056 if test "$int128" = "yes" ; then
7057   echo "CONFIG_INT128=y" >> $config_host_mak
7058 fi
7059
7060 if test "$atomic128" = "yes" ; then
7061   echo "CONFIG_ATOMIC128=y" >> $config_host_mak
7062 fi
7063
7064 if test "$cmpxchg128" = "yes" ; then
7065   echo "CONFIG_CMPXCHG128=y" >> $config_host_mak
7066 fi
7067
7068 if test "$atomic64" = "yes" ; then
7069   echo "CONFIG_ATOMIC64=y" >> $config_host_mak
7070 fi
7071
7072 if test "$vector16" = "yes" ; then
7073   echo "CONFIG_VECTOR16=y" >> $config_host_mak
7074 fi
7075
7076 if test "$getauxval" = "yes" ; then
7077   echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
7078 fi
7079
7080 if test "$glusterfs" = "yes" ; then
7081   echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
7082   echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
7083   echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
7084 fi
7085
7086 if test "$glusterfs_xlator_opt" = "yes" ; then
7087   echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
7088 fi
7089
7090 if test "$glusterfs_discard" = "yes" ; then
7091   echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
7092 fi
7093
7094 if test "$glusterfs_fallocate" = "yes" ; then
7095   echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
7096 fi
7097
7098 if test "$glusterfs_zerofill" = "yes" ; then
7099   echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
7100 fi
7101
7102 if test "$glusterfs_ftruncate_has_stat" = "yes" ; then
7103   echo "CONFIG_GLUSTERFS_FTRUNCATE_HAS_STAT=y" >> $config_host_mak
7104 fi
7105
7106 if test "$glusterfs_iocb_has_stat" = "yes" ; then
7107   echo "CONFIG_GLUSTERFS_IOCB_HAS_STAT=y" >> $config_host_mak
7108 fi
7109
7110 if test "$libssh" = "yes" ; then
7111   echo "CONFIG_LIBSSH=m" >> $config_host_mak
7112   echo "LIBSSH_CFLAGS=$libssh_cflags" >> $config_host_mak
7113   echo "LIBSSH_LIBS=$libssh_libs" >> $config_host_mak
7114 fi
7115
7116 if test "$live_block_migration" = "yes" ; then
7117   echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
7118 fi
7119
7120 if test "$tpm" = "yes"; then
7121   echo 'CONFIG_TPM=y' >> $config_host_mak
7122 fi
7123
7124 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
7125 if have_backend "nop"; then
7126   echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
7127 fi
7128 if have_backend "simple"; then
7129   echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
7130   # Set the appropriate trace file.
7131   trace_file="\"$trace_file-\" FMT_pid"
7132 fi
7133 if have_backend "log"; then
7134   echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
7135 fi
7136 if have_backend "ust"; then
7137   echo "CONFIG_TRACE_UST=y" >> $config_host_mak
7138 fi
7139 if have_backend "dtrace"; then
7140   echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
7141   if test "$trace_backend_stap" = "yes" ; then
7142     echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
7143   fi
7144 fi
7145 if have_backend "ftrace"; then
7146   if test "$linux" = "yes" ; then
7147     echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
7148   else
7149     feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
7150   fi
7151 fi
7152 if have_backend "syslog"; then
7153   if test "$posix_syslog" = "yes" ; then
7154     echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
7155   else
7156     feature_not_found "syslog(trace backend)" "syslog not available"
7157   fi
7158 fi
7159 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
7160
7161 if test "$rdma" = "yes" ; then
7162   echo "CONFIG_RDMA=y" >> $config_host_mak
7163   echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
7164 fi
7165
7166 if test "$pvrdma" = "yes" ; then
7167   echo "CONFIG_PVRDMA=y" >> $config_host_mak
7168 fi
7169
7170 if test "$have_rtnetlink" = "yes" ; then
7171   echo "CONFIG_RTNETLINK=y" >> $config_host_mak
7172 fi
7173
7174 if test "$libxml2" = "yes" ; then
7175   echo "CONFIG_LIBXML2=y" >> $config_host_mak
7176   echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
7177   echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
7178 fi
7179
7180 if test "$replication" = "yes" ; then
7181   echo "CONFIG_REPLICATION=y" >> $config_host_mak
7182 fi
7183
7184 if test "$have_af_vsock" = "yes" ; then
7185   echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
7186 fi
7187
7188 if test "$have_sysmacros" = "yes" ; then
7189   echo "CONFIG_SYSMACROS=y" >> $config_host_mak
7190 fi
7191
7192 if test "$have_static_assert" = "yes" ; then
7193   echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
7194 fi
7195
7196 if test "$have_utmpx" = "yes" ; then
7197   echo "HAVE_UTMPX=y" >> $config_host_mak
7198 fi
7199 if test "$have_getrandom" = "yes" ; then
7200   echo "CONFIG_GETRANDOM=y" >> $config_host_mak
7201 fi
7202 if test "$ivshmem" = "yes" ; then
7203   echo "CONFIG_IVSHMEM=y" >> $config_host_mak
7204 fi
7205 if test "$capstone" != "no" ; then
7206   echo "CONFIG_CAPSTONE=y" >> $config_host_mak
7207 fi
7208 if test "$debug_mutex" = "yes" ; then
7209   echo "CONFIG_DEBUG_MUTEX=y" >> $config_host_mak
7210 fi
7211
7212 # Hold two types of flag:
7213 #   CONFIG_THREAD_SETNAME_BYTHREAD  - we've got a way of setting the name on
7214 #                                     a thread we have a handle to
7215 #   CONFIG_PTHREAD_SETNAME_NP_W_TID - A way of doing it on a particular
7216 #                                     platform
7217 if test "$pthread_setname_np_w_tid" = "yes" ; then
7218   echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7219   echo "CONFIG_PTHREAD_SETNAME_NP_W_TID=y" >> $config_host_mak
7220 elif test "$pthread_setname_np_wo_tid" = "yes" ; then
7221   echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
7222   echo "CONFIG_PTHREAD_SETNAME_NP_WO_TID=y" >> $config_host_mak
7223 fi
7224
7225 if test "$vxhs" = "yes" ; then
7226   echo "CONFIG_VXHS=y" >> $config_host_mak
7227   echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
7228 fi
7229
7230 if test "$libpmem" = "yes" ; then
7231   echo "CONFIG_LIBPMEM=y" >> $config_host_mak
7232 fi
7233
7234 if test "$bochs" = "yes" ; then
7235   echo "CONFIG_BOCHS=y" >> $config_host_mak
7236 fi
7237 if test "$cloop" = "yes" ; then
7238   echo "CONFIG_CLOOP=y" >> $config_host_mak
7239 fi
7240 if test "$dmg" = "yes" ; then
7241   echo "CONFIG_DMG=y" >> $config_host_mak
7242 fi
7243 if test "$qcow1" = "yes" ; then
7244   echo "CONFIG_QCOW1=y" >> $config_host_mak
7245 fi
7246 if test "$vdi" = "yes" ; then
7247   echo "CONFIG_VDI=y" >> $config_host_mak
7248 fi
7249 if test "$vvfat" = "yes" ; then
7250   echo "CONFIG_VVFAT=y" >> $config_host_mak
7251 fi
7252 if test "$qed" = "yes" ; then
7253   echo "CONFIG_QED=y" >> $config_host_mak
7254 fi
7255 if test "$parallels" = "yes" ; then
7256   echo "CONFIG_PARALLELS=y" >> $config_host_mak
7257 fi
7258 if test "$sheepdog" = "yes" ; then
7259   echo "CONFIG_SHEEPDOG=y" >> $config_host_mak
7260 fi
7261
7262 if test "$tcg_interpreter" = "yes"; then
7263   QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
7264 elif test "$ARCH" = "sparc64" ; then
7265   QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
7266 elif test "$ARCH" = "s390x" ; then
7267   QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
7268 elif test "$ARCH" = "x86_64" || test "$ARCH" = "x32" ; then
7269   QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
7270 elif test "$ARCH" = "ppc64" ; then
7271   QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
7272 elif test "$ARCH" = "riscv32" || test "$ARCH" = "riscv64" ; then
7273   QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/riscv $QEMU_INCLUDES"
7274 else
7275   QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
7276 fi
7277 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
7278
7279 echo "TOOLS=$tools" >> $config_host_mak
7280 echo "ROMS=$roms" >> $config_host_mak
7281 echo "MAKE=$make" >> $config_host_mak
7282 echo "INSTALL=$install" >> $config_host_mak
7283 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
7284 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
7285 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
7286 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
7287 echo "PYTHON=$python" >> $config_host_mak
7288 echo "PYTHON2=$python2" >> $config_host_mak
7289 echo "CC=$cc" >> $config_host_mak
7290 if $iasl -h > /dev/null 2>&1; then
7291   echo "IASL=$iasl" >> $config_host_mak
7292 fi
7293 echo "HOST_CC=$host_cc" >> $config_host_mak
7294 echo "CXX=$cxx" >> $config_host_mak
7295 echo "OBJCC=$objcc" >> $config_host_mak
7296 echo "AR=$ar" >> $config_host_mak
7297 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
7298 echo "AS=$as" >> $config_host_mak
7299 echo "CCAS=$ccas" >> $config_host_mak
7300 echo "CPP=$cpp" >> $config_host_mak
7301 echo "OBJCOPY=$objcopy" >> $config_host_mak
7302 echo "LD=$ld" >> $config_host_mak
7303 echo "RANLIB=$ranlib" >> $config_host_mak
7304 echo "NM=$nm" >> $config_host_mak
7305 echo "PKG_CONFIG=$pkg_config_exe" >> $config_host_mak
7306 echo "WINDRES=$windres" >> $config_host_mak
7307 echo "CFLAGS=$CFLAGS" >> $config_host_mak
7308 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
7309 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
7310 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
7311 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
7312 if test "$sparse" = "yes" ; then
7313   echo "CC           := REAL_CC=\"\$(CC)\" cgcc"       >> $config_host_mak
7314   echo "CPP          := REAL_CC=\"\$(CPP)\" cgcc"      >> $config_host_mak
7315   echo "CXX          := REAL_CC=\"\$(CXX)\" cgcc"      >> $config_host_mak
7316   echo "HOST_CC      := REAL_CC=\"\$(HOST_CC)\" cgcc"  >> $config_host_mak
7317   echo "QEMU_CFLAGS  += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
7318 fi
7319 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
7320 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
7321 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
7322 echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
7323 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
7324 echo "LIBS+=$LIBS" >> $config_host_mak
7325 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
7326 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
7327 echo "EXESUF=$EXESUF" >> $config_host_mak
7328 echo "DSOSUF=$DSOSUF" >> $config_host_mak
7329 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
7330 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
7331 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
7332 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
7333 echo "POD2MAN=$POD2MAN" >> $config_host_mak
7334 if test "$gcov" = "yes" ; then
7335   echo "CONFIG_GCOV=y" >> $config_host_mak
7336   echo "GCOV=$gcov_tool" >> $config_host_mak
7337 fi
7338
7339 if test "$libudev" != "no"; then
7340     echo "CONFIG_LIBUDEV=y" >> $config_host_mak
7341     echo "LIBUDEV_LIBS=$libudev_libs" >> $config_host_mak
7342 fi
7343
7344 # use included Linux headers
7345 if test "$linux" = "yes" ; then
7346   mkdir -p linux-headers
7347   case "$cpu" in
7348   i386|x86_64|x32)
7349     linux_arch=x86
7350     ;;
7351   ppc|ppc64|ppc64le)
7352     linux_arch=powerpc
7353     ;;
7354   s390x)
7355     linux_arch=s390
7356     ;;
7357   aarch64)
7358     linux_arch=arm64
7359     ;;
7360   mips64)
7361     linux_arch=mips
7362     ;;
7363   *)
7364     # For most CPUs the kernel architecture name and QEMU CPU name match.
7365     linux_arch="$cpu"
7366     ;;
7367   esac
7368     # For non-KVM architectures we will not have asm headers
7369     if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
7370       symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
7371     fi
7372 fi
7373
7374 for target in $target_list; do
7375 target_dir="$target"
7376 config_target_mak=$target_dir/config-target.mak
7377 target_name=$(echo $target | cut -d '-' -f 1)
7378 target_aligned_only="no"
7379 case "$target_name" in
7380   alpha|hppa|mips64el|mips64|mipsel|mips|mipsn32|mipsn32el|sh4|sh4eb|sparc|sparc64|sparc32plus|xtensa|xtensaeb)
7381   target_aligned_only="yes"
7382   ;;
7383 esac
7384 target_bigendian="no"
7385 case "$target_name" in
7386   armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
7387   target_bigendian="yes"
7388   ;;
7389 esac
7390 target_softmmu="no"
7391 target_user_only="no"
7392 target_linux_user="no"
7393 target_bsd_user="no"
7394 case "$target" in
7395   ${target_name}-softmmu)
7396     target_softmmu="yes"
7397     ;;
7398   ${target_name}-linux-user)
7399     target_user_only="yes"
7400     target_linux_user="yes"
7401     ;;
7402   ${target_name}-bsd-user)
7403     target_user_only="yes"
7404     target_bsd_user="yes"
7405     ;;
7406   *)
7407     error_exit "Target '$target' not recognised"
7408     exit 1
7409     ;;
7410 esac
7411
7412 mkdir -p $target_dir
7413 echo "# Automatically generated by configure - do not modify" > $config_target_mak
7414
7415 bflt="no"
7416 mttcg="no"
7417 interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
7418 gdb_xml_files=""
7419
7420 TARGET_ARCH="$target_name"
7421 TARGET_BASE_ARCH=""
7422 TARGET_ABI_DIR=""
7423
7424 case "$target_name" in
7425   i386)
7426     mttcg="yes"
7427         gdb_xml_files="i386-32bit.xml"
7428   ;;
7429   x86_64)
7430     TARGET_BASE_ARCH=i386
7431     mttcg="yes"
7432         gdb_xml_files="i386-64bit.xml"
7433   ;;
7434   alpha)
7435     mttcg="yes"
7436   ;;
7437   arm|armeb)
7438     TARGET_ARCH=arm
7439     bflt="yes"
7440     mttcg="yes"
7441     gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
7442   ;;
7443   aarch64|aarch64_be)
7444     TARGET_ARCH=aarch64
7445     TARGET_BASE_ARCH=arm
7446     bflt="yes"
7447     mttcg="yes"
7448     gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
7449   ;;
7450   cris)
7451   ;;
7452   hppa)
7453     mttcg="yes"
7454   ;;
7455   lm32)
7456   ;;
7457   m68k)
7458     bflt="yes"
7459     gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
7460   ;;
7461   microblaze|microblazeel)
7462     TARGET_ARCH=microblaze
7463     bflt="yes"
7464     echo "TARGET_ABI32=y" >> $config_target_mak
7465   ;;
7466   mips|mipsel)
7467     mttcg="yes"
7468     TARGET_ARCH=mips
7469     echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
7470   ;;
7471   mipsn32|mipsn32el)
7472     mttcg="yes"
7473     TARGET_ARCH=mips64
7474     TARGET_BASE_ARCH=mips
7475     echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
7476     echo "TARGET_ABI32=y" >> $config_target_mak
7477   ;;
7478   mips64|mips64el)
7479     mttcg="yes"
7480     TARGET_ARCH=mips64
7481     TARGET_BASE_ARCH=mips
7482     echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
7483   ;;
7484   moxie)
7485   ;;
7486   nios2)
7487   ;;
7488   or1k)
7489     TARGET_ARCH=openrisc
7490     TARGET_BASE_ARCH=openrisc
7491   ;;
7492   ppc)
7493     gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
7494   ;;
7495   ppc64)
7496     TARGET_BASE_ARCH=ppc
7497     TARGET_ABI_DIR=ppc
7498     mttcg=yes
7499     gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7500   ;;
7501   ppc64le)
7502     TARGET_ARCH=ppc64
7503     TARGET_BASE_ARCH=ppc
7504     TARGET_ABI_DIR=ppc
7505     mttcg=yes
7506     gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7507   ;;
7508   ppc64abi32)
7509     TARGET_ARCH=ppc64
7510     TARGET_BASE_ARCH=ppc
7511     TARGET_ABI_DIR=ppc
7512     echo "TARGET_ABI32=y" >> $config_target_mak
7513     gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
7514   ;;
7515   riscv32)
7516     TARGET_BASE_ARCH=riscv
7517     TARGET_ABI_DIR=riscv
7518     mttcg=yes
7519     gdb_xml_files="riscv-32bit-cpu.xml riscv-32bit-fpu.xml riscv-32bit-csr.xml"
7520   ;;
7521   riscv64)
7522     TARGET_BASE_ARCH=riscv
7523     TARGET_ABI_DIR=riscv
7524     mttcg=yes
7525     gdb_xml_files="riscv-64bit-cpu.xml riscv-64bit-fpu.xml riscv-64bit-csr.xml"
7526   ;;
7527   sh4|sh4eb)
7528     TARGET_ARCH=sh4
7529     bflt="yes"
7530   ;;
7531   sparc)
7532   ;;
7533   sparc64)
7534     TARGET_BASE_ARCH=sparc
7535   ;;
7536   sparc32plus)
7537     TARGET_ARCH=sparc64
7538     TARGET_BASE_ARCH=sparc
7539     TARGET_ABI_DIR=sparc
7540     echo "TARGET_ABI32=y" >> $config_target_mak
7541   ;;
7542   s390x)
7543     mttcg=yes
7544     gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
7545   ;;
7546   tilegx)
7547   ;;
7548   tricore)
7549   ;;
7550   unicore32)
7551   ;;
7552   xtensa|xtensaeb)
7553     TARGET_ARCH=xtensa
7554     bflt="yes"
7555     mttcg="yes"
7556   ;;
7557   *)
7558     error_exit "Unsupported target CPU"
7559   ;;
7560 esac
7561 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
7562 if [ "$TARGET_BASE_ARCH" = "" ]; then
7563   TARGET_BASE_ARCH=$TARGET_ARCH
7564 fi
7565
7566 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
7567
7568 upper() {
7569     echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
7570 }
7571
7572 target_arch_name="$(upper $TARGET_ARCH)"
7573 echo "TARGET_$target_arch_name=y" >> $config_target_mak
7574 echo "TARGET_NAME=$target_name" >> $config_target_mak
7575 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
7576 if [ "$TARGET_ABI_DIR" = "" ]; then
7577   TARGET_ABI_DIR=$TARGET_ARCH
7578 fi
7579 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
7580 if [ "$HOST_VARIANT_DIR" != "" ]; then
7581     echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
7582 fi
7583
7584 if supported_xen_target $target; then
7585     echo "CONFIG_XEN=y" >> $config_target_mak
7586     echo "$target/config-devices.mak: CONFIG_XEN=y" >> $config_host_mak
7587     if test "$xen_pci_passthrough" = yes; then
7588         echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
7589     fi
7590 else
7591     echo "$target/config-devices.mak: CONFIG_XEN=n" >> $config_host_mak
7592 fi
7593 if supported_kvm_target $target; then
7594     echo "CONFIG_KVM=y" >> $config_target_mak
7595     echo "$target/config-devices.mak: CONFIG_KVM=y" >> $config_host_mak
7596 else
7597     echo "$target/config-devices.mak: CONFIG_KVM=n" >> $config_host_mak
7598 fi
7599 if supported_hax_target $target; then
7600     echo "CONFIG_HAX=y" >> $config_target_mak
7601 fi
7602 if supported_hvf_target $target; then
7603     echo "CONFIG_HVF=y" >> $config_target_mak
7604 fi
7605 if supported_whpx_target $target; then
7606     echo "CONFIG_WHPX=y" >> $config_target_mak
7607 fi
7608 if test "$target_aligned_only" = "yes" ; then
7609   echo "TARGET_ALIGNED_ONLY=y" >> $config_target_mak
7610 fi
7611 if test "$target_bigendian" = "yes" ; then
7612   echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
7613 fi
7614 if test "$target_softmmu" = "yes" ; then
7615   echo "CONFIG_SOFTMMU=y" >> $config_target_mak
7616   if test "$mttcg" = "yes" ; then
7617     echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7618   fi
7619 fi
7620 if test "$target_user_only" = "yes" ; then
7621   echo "CONFIG_USER_ONLY=y" >> $config_target_mak
7622   echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
7623 fi
7624 if test "$target_linux_user" = "yes" ; then
7625   echo "CONFIG_LINUX_USER=y" >> $config_target_mak
7626 fi
7627 list=""
7628 if test ! -z "$gdb_xml_files" ; then
7629   for x in $gdb_xml_files; do
7630     list="$list $source_path/gdb-xml/$x"
7631   done
7632   echo "TARGET_XML_FILES=$list" >> $config_target_mak
7633 fi
7634
7635 if test "$target_user_only" = "yes" && test "$bflt" = "yes"; then
7636   echo "TARGET_HAS_BFLT=y" >> $config_target_mak
7637 fi
7638 if test "$target_bsd_user" = "yes" ; then
7639   echo "CONFIG_BSD_USER=y" >> $config_target_mak
7640 fi
7641
7642
7643 # generate QEMU_CFLAGS/LDFLAGS for targets
7644
7645 cflags=""
7646 ldflags=""
7647
7648 disas_config() {
7649   echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7650   echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7651 }
7652
7653 for i in $ARCH $TARGET_BASE_ARCH ; do
7654   case "$i" in
7655   alpha)
7656     disas_config "ALPHA"
7657   ;;
7658   aarch64)
7659     if test -n "${cxx}"; then
7660       disas_config "ARM_A64"
7661     fi
7662   ;;
7663   arm)
7664     disas_config "ARM"
7665     if test -n "${cxx}"; then
7666       disas_config "ARM_A64"
7667     fi
7668   ;;
7669   cris)
7670     disas_config "CRIS"
7671   ;;
7672   hppa)
7673     disas_config "HPPA"
7674   ;;
7675   i386|x86_64|x32)
7676     disas_config "I386"
7677   ;;
7678   lm32)
7679     disas_config "LM32"
7680   ;;
7681   m68k)
7682     disas_config "M68K"
7683   ;;
7684   microblaze*)
7685     disas_config "MICROBLAZE"
7686   ;;
7687   mips*)
7688     disas_config "MIPS"
7689     if test -n "${cxx}"; then
7690       disas_config "NANOMIPS"
7691     fi
7692   ;;
7693   moxie*)
7694     disas_config "MOXIE"
7695   ;;
7696   nios2)
7697     disas_config "NIOS2"
7698   ;;
7699   or1k)
7700     disas_config "OPENRISC"
7701   ;;
7702   ppc*)
7703     disas_config "PPC"
7704   ;;
7705   riscv*)
7706     disas_config "RISCV"
7707   ;;
7708   s390*)
7709     disas_config "S390"
7710   ;;
7711   sh4)
7712     disas_config "SH4"
7713   ;;
7714   sparc*)
7715     disas_config "SPARC"
7716   ;;
7717   xtensa*)
7718     disas_config "XTENSA"
7719   ;;
7720   esac
7721 done
7722 if test "$tcg_interpreter" = "yes" ; then
7723   disas_config "TCI"
7724 fi
7725
7726 case "$ARCH" in
7727 alpha)
7728   # Ensure there's only a single GP
7729   cflags="-msmall-data $cflags"
7730 ;;
7731 esac
7732
7733 if test "$gprof" = "yes" ; then
7734   echo "TARGET_GPROF=y" >> $config_target_mak
7735   if test "$target_linux_user" = "yes" ; then
7736     cflags="-p $cflags"
7737     ldflags="-p $ldflags"
7738   fi
7739   if test "$target_softmmu" = "yes" ; then
7740     ldflags="-p $ldflags"
7741     echo "GPROF_CFLAGS=-p" >> $config_target_mak
7742   fi
7743 fi
7744
7745 if test "$target_linux_user" = "yes" || test "$target_bsd_user" = "yes" ; then
7746   ldflags="$ldflags $textseg_ldflags"
7747 fi
7748
7749 # Newer kernels on s390 check for an S390_PGSTE program header and
7750 # enable the pgste page table extensions in that case. This makes
7751 # the vm.allocate_pgste sysctl unnecessary. We enable this program
7752 # header if
7753 #  - we build on s390x
7754 #  - we build the system emulation for s390x (qemu-system-s390x)
7755 #  - KVM is enabled
7756 #  - the linker supports --s390-pgste
7757 if test "$TARGET_ARCH" = "s390x" && test "$target_softmmu" = "yes" && \
7758         test "$ARCH" = "s390x" && test "$kvm" = "yes"; then
7759     if ld_has --s390-pgste ; then
7760         ldflags="-Wl,--s390-pgste $ldflags"
7761     fi
7762 fi
7763
7764 echo "LDFLAGS+=$ldflags" >> $config_target_mak
7765 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
7766
7767 done # for target in $targets
7768
7769 echo "PIXMAN_CFLAGS=$pixman_cflags" >> $config_host_mak
7770 echo "PIXMAN_LIBS=$pixman_libs" >> $config_host_mak
7771
7772 if [ "$fdt" = "git" ]; then
7773   echo "config-host.h: dtc/all" >> $config_host_mak
7774 fi
7775 if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7776   echo "config-host.h: capstone/all" >> $config_host_mak
7777 fi
7778 if test -n "$LIBCAPSTONE"; then
7779   echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7780 fi
7781
7782 if test "$numa" = "yes"; then
7783   echo "CONFIG_NUMA=y" >> $config_host_mak
7784 fi
7785
7786 if test "$ccache_cpp2" = "yes"; then
7787   echo "export CCACHE_CPP2=y" >> $config_host_mak
7788 fi
7789
7790 # If we're using a separate build tree, set it up now.
7791 # DIRS are directories which we simply mkdir in the build tree;
7792 # LINKS are things to symlink back into the source tree
7793 # (these can be both files and directories).
7794 # Caution: do not add files or directories here using wildcards. This
7795 # will result in problems later if a new file matching the wildcard is
7796 # added to the source tree -- nothing will cause configure to be rerun
7797 # so the build tree will be missing the link back to the new file, and
7798 # tests might fail. Prefer to keep the relevant files in their own
7799 # directory and symlink the directory instead.
7800 DIRS="tests tests/tcg tests/tcg/lm32 tests/libqos tests/qapi-schema tests/qemu-iotests tests/vm"
7801 DIRS="$DIRS tests/fp tests/qgraph"
7802 DIRS="$DIRS docs docs/interop fsdev scsi"
7803 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
7804 DIRS="$DIRS roms/seabios roms/vgabios"
7805 LINKS="Makefile"
7806 LINKS="$LINKS tests/tcg/lm32/Makefile po/Makefile"
7807 LINKS="$LINKS tests/tcg/Makefile.target tests/fp/Makefile"
7808 LINKS="$LINKS pc-bios/optionrom/Makefile pc-bios/keymaps"
7809 LINKS="$LINKS pc-bios/spapr-rtas/Makefile"
7810 LINKS="$LINKS pc-bios/s390-ccw/Makefile"
7811 LINKS="$LINKS roms/seabios/Makefile roms/vgabios/Makefile"
7812 LINKS="$LINKS pc-bios/qemu-icon.bmp"
7813 LINKS="$LINKS .gdbinit scripts" # scripts needed by relative path in .gdbinit
7814 LINKS="$LINKS tests/acceptance tests/data"
7815 LINKS="$LINKS tests/qemu-iotests/check"
7816 LINKS="$LINKS python"
7817 for bios_file in \
7818     $source_path/pc-bios/*.bin \
7819     $source_path/pc-bios/*.lid \
7820     $source_path/pc-bios/*.rom \
7821     $source_path/pc-bios/*.dtb \
7822     $source_path/pc-bios/*.img \
7823     $source_path/pc-bios/openbios-* \
7824     $source_path/pc-bios/u-boot.* \
7825     $source_path/pc-bios/edk2-*.fd.bz2 \
7826     $source_path/pc-bios/palcode-*
7827 do
7828     LINKS="$LINKS pc-bios/$(basename $bios_file)"
7829 done
7830 mkdir -p $DIRS
7831 for f in $LINKS ; do
7832     if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
7833         symlink "$source_path/$f" "$f"
7834     fi
7835 done
7836
7837 (for i in $cross_cc_vars; do
7838   export $i
7839 done
7840 export target_list source_path
7841 $source_path/tests/tcg/configure.sh)
7842
7843 # temporary config to build submodules
7844 for rom in seabios vgabios ; do
7845     config_mak=roms/$rom/config.mak
7846     echo "# Automatically generated by configure - do not modify" > $config_mak
7847     echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
7848     echo "AS=$as" >> $config_mak
7849     echo "CCAS=$ccas" >> $config_mak
7850     echo "CC=$cc" >> $config_mak
7851     echo "BCC=bcc" >> $config_mak
7852     echo "CPP=$cpp" >> $config_mak
7853     echo "OBJCOPY=objcopy" >> $config_mak
7854     echo "IASL=$iasl" >> $config_mak
7855     echo "LD=$ld" >> $config_mak
7856     echo "RANLIB=$ranlib" >> $config_mak
7857 done
7858
7859 # set up qemu-iotests in this build directory
7860 iotests_common_env="tests/qemu-iotests/common.env"
7861
7862 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7863 echo >> "$iotests_common_env"
7864 echo "export PYTHON='$python'" >> "$iotests_common_env"
7865
7866 # Save the configure command line for later reuse.
7867 cat <<EOD >config.status
7868 #!/bin/sh
7869 # Generated by configure.
7870 # Run this file to recreate the current configuration.
7871 # Compiler output produced by configure, useful for debugging
7872 # configure, is in config.log if it exists.
7873 EOD
7874
7875 preserve_env() {
7876     envname=$1
7877
7878     eval envval=\$$envname
7879
7880     if test -n "$envval"
7881     then
7882         echo "$envname='$envval'" >> config.status
7883         echo "export $envname" >> config.status
7884     else
7885         echo "unset $envname" >> config.status
7886     fi
7887 }
7888
7889 # Preserve various env variables that influence what
7890 # features/build target configure will detect
7891 preserve_env AR
7892 preserve_env AS
7893 preserve_env CC
7894 preserve_env CPP
7895 preserve_env CXX
7896 preserve_env INSTALL
7897 preserve_env LD
7898 preserve_env LD_LIBRARY_PATH
7899 preserve_env LIBTOOL
7900 preserve_env MAKE
7901 preserve_env NM
7902 preserve_env OBJCOPY
7903 preserve_env PATH
7904 preserve_env PKG_CONFIG
7905 preserve_env PKG_CONFIG_LIBDIR
7906 preserve_env PKG_CONFIG_PATH
7907 preserve_env PYTHON
7908 preserve_env SDL2_CONFIG
7909 preserve_env SMBD
7910 preserve_env STRIP
7911 preserve_env WINDRES
7912
7913 printf "exec" >>config.status
7914 printf " '%s'" "$0" "$@" >>config.status
7915 echo ' "$@"' >>config.status
7916 chmod +x config.status
7917
7918 rm -r "$TMPDIR1"
This page took 0.452387 seconds and 4 git commands to generate.