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