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