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