]> Git Repo - qemu.git/blob - configure
Merge remote-tracking branch 'remotes/vivier2/tags/linux-user-for-3.0-pull-request...
[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 copy_file_range is provided by glibc
5175 have_copy_file_range=no
5176 cat > $TMPC << EOF
5177 #include <unistd.h>
5178 int main(void) {
5179   copy_file_range(0, NULL, 0, NULL, 0, 0);
5180   return 0;
5181 }
5182 EOF
5183 if compile_prog "" "" ; then
5184     have_copy_file_range=yes
5185 fi
5186
5187 ##########################################
5188 # check if struct fsxattr is available via linux/fs.h
5189
5190 have_fsxattr=no
5191 cat > $TMPC << EOF
5192 #include <linux/fs.h>
5193 struct fsxattr foo;
5194 int main(void) {
5195   return 0;
5196 }
5197 EOF
5198 if compile_prog "" "" ; then
5199     have_fsxattr=yes
5200 fi
5201
5202 ##########################################
5203 # check for usable membarrier system call
5204 if test "$membarrier" = "yes"; then
5205     have_membarrier=no
5206     if test "$mingw32" = "yes" ; then
5207         have_membarrier=yes
5208     elif test "$linux" = "yes" ; then
5209         cat > $TMPC << EOF
5210     #include <linux/membarrier.h>
5211     #include <sys/syscall.h>
5212     #include <unistd.h>
5213     #include <stdlib.h>
5214     int main(void) {
5215         syscall(__NR_membarrier, MEMBARRIER_CMD_QUERY, 0);
5216         syscall(__NR_membarrier, MEMBARRIER_CMD_SHARED, 0);
5217         exit(0);
5218     }
5219 EOF
5220         if compile_prog "" "" ; then
5221             have_membarrier=yes
5222         fi
5223     fi
5224     if test "$have_membarrier" = "no"; then
5225       feature_not_found "membarrier" "membarrier system call not available"
5226     fi
5227 else
5228     # Do not enable it by default even for Mingw32, because it doesn't
5229     # work on Wine.
5230     membarrier=no
5231 fi
5232
5233 ##########################################
5234 # check if rtnetlink.h exists and is useful
5235 have_rtnetlink=no
5236 cat > $TMPC << EOF
5237 #include <linux/rtnetlink.h>
5238 int main(void) {
5239   return IFLA_PROTO_DOWN;
5240 }
5241 EOF
5242 if compile_prog "" "" ; then
5243     have_rtnetlink=yes
5244 fi
5245
5246 ##########################################
5247 # check for usable AF_VSOCK environment
5248 have_af_vsock=no
5249 cat > $TMPC << EOF
5250 #include <errno.h>
5251 #include <sys/types.h>
5252 #include <sys/socket.h>
5253 #if !defined(AF_VSOCK)
5254 # error missing AF_VSOCK flag
5255 #endif
5256 #include <linux/vm_sockets.h>
5257 int main(void) {
5258     int sock, ret;
5259     struct sockaddr_vm svm;
5260     socklen_t len = sizeof(svm);
5261     sock = socket(AF_VSOCK, SOCK_STREAM, 0);
5262     ret = getpeername(sock, (struct sockaddr *)&svm, &len);
5263     if ((ret == -1) && (errno == ENOTCONN)) {
5264         return 0;
5265     }
5266     return -1;
5267 }
5268 EOF
5269 if compile_prog "" "" ; then
5270     have_af_vsock=yes
5271 fi
5272
5273 ##########################################
5274 # check for usable AF_ALG environment
5275 hava_afalg=no
5276 cat > $TMPC << EOF
5277 #include <errno.h>
5278 #include <sys/types.h>
5279 #include <sys/socket.h>
5280 #include <linux/if_alg.h>
5281 int main(void) {
5282     int sock;
5283     sock = socket(AF_ALG, SOCK_SEQPACKET, 0);
5284     return sock;
5285 }
5286 EOF
5287 if compile_prog "" "" ; then
5288     have_afalg=yes
5289 fi
5290 if test "$crypto_afalg" = "yes"
5291 then
5292     if test "$have_afalg" != "yes"
5293     then
5294         error_exit "AF_ALG requested but could not be detected"
5295     fi
5296 fi
5297
5298
5299 #################################################
5300 # Check to see if we have the Hypervisor framework
5301 if [ "$darwin" = "yes" ] ; then
5302   cat > $TMPC << EOF
5303 #include <Hypervisor/hv.h>
5304 int main() { return 0;}
5305 EOF
5306   if ! compile_object ""; then
5307     hvf='no'
5308   else
5309     hvf='yes'
5310     LDFLAGS="-framework Hypervisor $LDFLAGS"
5311   fi
5312 fi
5313
5314 #################################################
5315 # Sparc implicitly links with --relax, which is
5316 # incompatible with -r, so --no-relax should be
5317 # given. It does no harm to give it on other
5318 # platforms too.
5319
5320 # Note: the prototype is needed since QEMU_CFLAGS
5321 #       contains -Wmissing-prototypes
5322 cat > $TMPC << EOF
5323 extern int foo(void);
5324 int foo(void) { return 0; }
5325 EOF
5326 if ! compile_object ""; then
5327   error_exit "Failed to compile object file for LD_REL_FLAGS test"
5328 fi
5329 for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
5330   if do_cc -nostdlib $i -o $TMPMO $TMPO; then
5331     LD_REL_FLAGS=$i
5332     break
5333   fi
5334 done
5335 if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
5336   feature_not_found "modules" "Cannot find how to build relocatable objects"
5337 fi
5338
5339 ##########################################
5340 # check for sysmacros.h
5341
5342 have_sysmacros=no
5343 cat > $TMPC << EOF
5344 #include <sys/sysmacros.h>
5345 int main(void) {
5346     return makedev(0, 0);
5347 }
5348 EOF
5349 if compile_prog "" "" ; then
5350     have_sysmacros=yes
5351 fi
5352
5353 ##########################################
5354 # Veritas HyperScale block driver VxHS
5355 # Check if libvxhs is installed
5356
5357 if test "$vxhs" != "no" ; then
5358   cat > $TMPC <<EOF
5359 #include <stdint.h>
5360 #include <qnio/qnio_api.h>
5361
5362 void *vxhs_callback;
5363
5364 int main(void) {
5365     iio_init(QNIO_VERSION, vxhs_callback);
5366     return 0;
5367 }
5368 EOF
5369   vxhs_libs="-lvxhs -lssl"
5370   if compile_prog "" "$vxhs_libs" ; then
5371     vxhs=yes
5372   else
5373     if test "$vxhs" = "yes" ; then
5374       feature_not_found "vxhs block device" "Install libvxhs See github"
5375     fi
5376     vxhs=no
5377   fi
5378 fi
5379
5380 ##########################################
5381 # check for _Static_assert()
5382
5383 have_static_assert=no
5384 cat > $TMPC << EOF
5385 _Static_assert(1, "success");
5386 int main(void) {
5387     return 0;
5388 }
5389 EOF
5390 if compile_prog "" "" ; then
5391     have_static_assert=yes
5392 fi
5393
5394 ##########################################
5395 # check for utmpx.h, it is missing e.g. on OpenBSD
5396
5397 have_utmpx=no
5398 cat > $TMPC << EOF
5399 #include <utmpx.h>
5400 struct utmpx user_info;
5401 int main(void) {
5402     return 0;
5403 }
5404 EOF
5405 if compile_prog "" "" ; then
5406     have_utmpx=yes
5407 fi
5408
5409 ##########################################
5410 # checks for sanitizers
5411
5412 have_asan=no
5413 have_ubsan=no
5414 have_asan_iface_h=no
5415 have_asan_iface_fiber=no
5416
5417 if test "$sanitizers" = "yes" ; then
5418   write_c_skeleton
5419   if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" ""; then
5420       have_asan=yes
5421   fi
5422
5423   # we could use a simple skeleton for flags checks, but this also
5424   # detect the static linking issue of ubsan, see also:
5425   # https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84285
5426   cat > $TMPC << EOF
5427 #include <stdlib.h>
5428 int main(void) {
5429     void *tmp = malloc(10);
5430     return *(int *)(tmp + 2);
5431 }
5432 EOF
5433   if compile_prog "$CPU_CFLAGS -Werror -fsanitize=undefined" ""; then
5434       have_ubsan=yes
5435   fi
5436
5437   if check_include "sanitizer/asan_interface.h" ; then
5438       have_asan_iface_h=yes
5439   fi
5440
5441   cat > $TMPC << EOF
5442 #include <sanitizer/asan_interface.h>
5443 int main(void) {
5444   __sanitizer_start_switch_fiber(0, 0, 0);
5445   return 0;
5446 }
5447 EOF
5448   if compile_prog "$CPU_CFLAGS -Werror -fsanitize=address" "" ; then
5449       have_asan_iface_fiber=yes
5450   fi
5451 fi
5452
5453 ##########################################
5454 # End of CC checks
5455 # After here, no more $cc or $ld runs
5456
5457 write_c_skeleton
5458
5459 if test "$gcov" = "yes" ; then
5460   CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
5461   LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
5462 elif test "$fortify_source" = "yes" ; then
5463   CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
5464 elif test "$debug" = "no"; then
5465   CFLAGS="-O2 $CFLAGS"
5466 fi
5467
5468 if test "$have_asan" = "yes"; then
5469   CFLAGS="-fsanitize=address $CFLAGS"
5470   if test "$have_asan_iface_h" = "no" ; then
5471       echo "ASAN build enabled, but ASAN header missing." \
5472            "Without code annotation, the report may be inferior."
5473   elif test "$have_asan_iface_fiber" = "no" ; then
5474       echo "ASAN build enabled, but ASAN header is too old." \
5475            "Without code annotation, the report may be inferior."
5476   fi
5477 fi
5478 if test "$have_ubsan" = "yes"; then
5479   CFLAGS="-fsanitize=undefined $CFLAGS"
5480 fi
5481
5482 ##########################################
5483 # Do we have libnfs
5484 if test "$libnfs" != "no" ; then
5485   if $pkg_config --atleast-version=1.9.3 libnfs; then
5486     libnfs="yes"
5487     libnfs_libs=$($pkg_config --libs libnfs)
5488   else
5489     if test "$libnfs" = "yes" ; then
5490       feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
5491     fi
5492     libnfs="no"
5493   fi
5494 fi
5495
5496 # Now we've finished running tests it's OK to add -Werror to the compiler flags
5497 if test "$werror" = "yes"; then
5498     QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
5499 fi
5500
5501 if test "$solaris" = "no" ; then
5502     if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
5503         LDFLAGS="-Wl,--warn-common $LDFLAGS"
5504     fi
5505 fi
5506
5507 # test if pod2man has --utf8 option
5508 if pod2man --help | grep -q utf8; then
5509     POD2MAN="pod2man --utf8"
5510 else
5511     POD2MAN="pod2man"
5512 fi
5513
5514 # Use ASLR, no-SEH and DEP if available
5515 if test "$mingw32" = "yes" ; then
5516     for flag in --dynamicbase --no-seh --nxcompat; do
5517         if ld_has $flag ; then
5518             LDFLAGS="-Wl,$flag $LDFLAGS"
5519         fi
5520     done
5521 fi
5522
5523 qemu_confdir=$sysconfdir$confsuffix
5524 qemu_moddir=$libdir$confsuffix
5525 qemu_datadir=$datadir$confsuffix
5526 qemu_localedir="$datadir/locale"
5527
5528 # We can only support ivshmem if we have eventfd
5529 if [ "$eventfd" = "yes" ]; then
5530   ivshmem=yes
5531 fi
5532
5533 tools=""
5534 if test "$want_tools" = "yes" ; then
5535   tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
5536   if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
5537     tools="qemu-nbd\$(EXESUF) $tools"
5538   fi
5539   if [ "$ivshmem" = "yes" ]; then
5540     tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
5541   fi
5542 fi
5543 if test "$softmmu" = yes ; then
5544   if test "$linux" = yes; then
5545     if test "$virtfs" != no && test "$cap" = yes && test "$attr" = yes ; then
5546       virtfs=yes
5547       tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
5548     else
5549       if test "$virtfs" = yes; then
5550         error_exit "VirtFS requires libcap devel and libattr devel"
5551       fi
5552       virtfs=no
5553     fi
5554     if test "$mpath" != no && test "$mpathpersist" = yes ; then
5555       mpath=yes
5556     else
5557       if test "$mpath" = yes; then
5558         error_exit "Multipath requires libmpathpersist devel"
5559       fi
5560       mpath=no
5561     fi
5562     tools="$tools scsi/qemu-pr-helper\$(EXESUF)"
5563   else
5564     if test "$virtfs" = yes; then
5565       error_exit "VirtFS is supported only on Linux"
5566     fi
5567     virtfs=no
5568     if test "$mpath" = yes; then
5569       error_exit "Multipath is supported only on Linux"
5570     fi
5571     mpath=no
5572   fi
5573   if test "$xkbcommon" = "yes"; then
5574     tools="qemu-keymap\$(EXESUF) $tools"
5575   fi
5576 fi
5577
5578 # Probe for guest agent support/options
5579
5580 if [ "$guest_agent" != "no" ]; then
5581   if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
5582       tools="qemu-ga $tools"
5583       guest_agent=yes
5584   elif [ "$guest_agent" != yes ]; then
5585       guest_agent=no
5586   else
5587       error_exit "Guest agent is not supported on this platform"
5588   fi
5589 fi
5590
5591 # Guest agent Window MSI  package
5592
5593 if test "$guest_agent" != yes; then
5594   if test "$guest_agent_msi" = yes; then
5595     error_exit "MSI guest agent package requires guest agent enabled"
5596   fi
5597   guest_agent_msi=no
5598 elif test "$mingw32" != "yes"; then
5599   if test "$guest_agent_msi" = "yes"; then
5600     error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
5601   fi
5602   guest_agent_msi=no
5603 elif ! has wixl; then
5604   if test "$guest_agent_msi" = "yes"; then
5605     error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
5606   fi
5607   guest_agent_msi=no
5608 else
5609   # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
5610   # disabled explicitly
5611   if test "$guest_agent_msi" != "no"; then
5612     guest_agent_msi=yes
5613   fi
5614 fi
5615
5616 if test "$guest_agent_msi" = "yes"; then
5617   if test "$guest_agent_with_vss" = "yes"; then
5618     QEMU_GA_MSI_WITH_VSS="-D InstallVss"
5619   fi
5620
5621   if test "$QEMU_GA_MANUFACTURER" = ""; then
5622     QEMU_GA_MANUFACTURER=QEMU
5623   fi
5624
5625   if test "$QEMU_GA_DISTRO" = ""; then
5626     QEMU_GA_DISTRO=Linux
5627   fi
5628
5629   if test "$QEMU_GA_VERSION" = ""; then
5630       QEMU_GA_VERSION=$(cat $source_path/VERSION)
5631   fi
5632
5633   QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
5634
5635   case "$cpu" in
5636   x86_64)
5637     QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
5638     ;;
5639   i386)
5640     QEMU_GA_MSI_ARCH="-D Arch=32"
5641     ;;
5642   *)
5643     error_exit "CPU $cpu not supported for building installation package"
5644     ;;
5645   esac
5646 fi
5647
5648 # Mac OS X ships with a broken assembler
5649 roms=
5650 if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5651         "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5652         "$softmmu" = yes ; then
5653     # Different host OS linkers have different ideas about the name of the ELF
5654     # emulation. Linux and OpenBSD/amd64 use 'elf_i386'; FreeBSD uses the _fbsd
5655     # variant; OpenBSD/i386 uses the _obsd variant; and Windows uses i386pe.
5656     for emu in elf_i386 elf_i386_fbsd elf_i386_obsd i386pe; do
5657         if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5658             ld_i386_emulation="$emu"
5659             roms="optionrom"
5660             break
5661         fi
5662     done
5663 fi
5664 if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
5665   roms="$roms spapr-rtas"
5666 fi
5667
5668 if test "$cpu" = "s390x" ; then
5669   roms="$roms s390-ccw"
5670 fi
5671
5672 # Probe for the need for relocating the user-only binary.
5673 if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
5674   textseg_addr=
5675   case "$cpu" in
5676     arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5677       # ??? Rationale for choosing this address
5678       textseg_addr=0x60000000
5679       ;;
5680     mips)
5681       # A 256M aligned address, high in the address space, with enough
5682       # room for the code_gen_buffer above it before the stack.
5683       textseg_addr=0x60000000
5684       ;;
5685   esac
5686   if [ -n "$textseg_addr" ]; then
5687     cat > $TMPC <<EOF
5688     int main(void) { return 0; }
5689 EOF
5690     textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5691     if ! compile_prog "" "$textseg_ldflags"; then
5692       # In case ld does not support -Ttext-segment, edit the default linker
5693       # script via sed to set the .text start addr.  This is needed on FreeBSD
5694       # at least.
5695       if ! $ld --verbose >/dev/null 2>&1; then
5696         error_exit \
5697             "We need to link the QEMU user mode binaries at a" \
5698             "specific text address. Unfortunately your linker" \
5699             "doesn't support either the -Ttext-segment option or" \
5700             "printing the default linker script with --verbose." \
5701             "If you don't want the user mode binaries, pass the" \
5702             "--disable-user option to configure."
5703       fi
5704
5705       $ld --verbose | sed \
5706         -e '1,/==================================================/d' \
5707         -e '/==================================================/,$d' \
5708         -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5709         -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5710       textseg_ldflags="-Wl,-T../config-host.ld"
5711     fi
5712   fi
5713 fi
5714
5715 # Check that the C++ compiler exists and works with the C compiler.
5716 # All the QEMU_CXXFLAGS are based on QEMU_CFLAGS. Keep this at the end to don't miss any other that could be added.
5717 if has $cxx; then
5718     cat > $TMPC <<EOF
5719 int c_function(void);
5720 int main(void) { return c_function(); }
5721 EOF
5722
5723     compile_object
5724
5725     cat > $TMPCXX <<EOF
5726 extern "C" {
5727    int c_function(void);
5728 }
5729 int c_function(void) { return 42; }
5730 EOF
5731
5732     update_cxxflags
5733
5734     if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
5735         # C++ compiler $cxx works ok with C compiler $cc
5736         :
5737     else
5738         echo "C++ compiler $cxx does not work with C compiler $cc"
5739         echo "Disabling C++ specific optional code"
5740         cxx=
5741     fi
5742 else
5743     echo "No C++ compiler available; disabling C++ specific optional code"
5744     cxx=
5745 fi
5746
5747 echo_version() {
5748     if test "$1" = "yes" ; then
5749         echo "($2)"
5750     fi
5751 }
5752
5753 # prepend pixman and ftd flags after all config tests are done
5754 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
5755 QEMU_LDFLAGS="$fdt_ldflags $QEMU_LDFLAGS"
5756 libs_softmmu="$pixman_libs $libs_softmmu"
5757
5758 echo "Install prefix    $prefix"
5759 echo "BIOS directory    $(eval echo $qemu_datadir)"
5760 echo "firmware path     $(eval echo $firmwarepath)"
5761 echo "binary directory  $(eval echo $bindir)"
5762 echo "library directory $(eval echo $libdir)"
5763 echo "module directory  $(eval echo $qemu_moddir)"
5764 echo "libexec directory $(eval echo $libexecdir)"
5765 echo "include directory $(eval echo $includedir)"
5766 echo "config directory  $(eval echo $sysconfdir)"
5767 if test "$mingw32" = "no" ; then
5768 echo "local state directory   $(eval echo $local_statedir)"
5769 echo "Manual directory  $(eval echo $mandir)"
5770 echo "ELF interp prefix $interp_prefix"
5771 else
5772 echo "local state directory   queried at runtime"
5773 echo "Windows SDK       $win_sdk"
5774 fi
5775 echo "Source path       $source_path"
5776 echo "GIT binary        $git"
5777 echo "GIT submodules    $git_submodules"
5778 echo "C compiler        $cc"
5779 echo "Host C compiler   $host_cc"
5780 echo "C++ compiler      $cxx"
5781 echo "Objective-C compiler $objcc"
5782 echo "ARFLAGS           $ARFLAGS"
5783 echo "CFLAGS            $CFLAGS"
5784 echo "QEMU_CFLAGS       $QEMU_CFLAGS"
5785 echo "LDFLAGS           $LDFLAGS"
5786 echo "QEMU_LDFLAGS      $QEMU_LDFLAGS"
5787 echo "make              $make"
5788 echo "install           $install"
5789 echo "python            $python"
5790 if test "$slirp" = "yes" ; then
5791     echo "smbd              $smbd"
5792 fi
5793 echo "module support    $modules"
5794 echo "host CPU          $cpu"
5795 echo "host big endian   $bigendian"
5796 echo "target list       $target_list"
5797 echo "gprof enabled     $gprof"
5798 echo "sparse enabled    $sparse"
5799 echo "strip binaries    $strip_opt"
5800 echo "profiler          $profiler"
5801 echo "static build      $static"
5802 if test "$darwin" = "yes" ; then
5803     echo "Cocoa support     $cocoa"
5804 fi
5805 echo "SDL support       $sdl $(echo_version $sdl $sdlversion)"
5806 echo "GTK support       $gtk $(echo_version $gtk $gtk_version)"
5807 echo "GTK GL support    $gtk_gl"
5808 echo "VTE support       $vte $(echo_version $vte $vteversion)"
5809 echo "TLS priority      $tls_priority"
5810 echo "GNUTLS support    $gnutls"
5811 echo "GNUTLS rnd        $gnutls_rnd"
5812 echo "libgcrypt         $gcrypt"
5813 echo "libgcrypt kdf     $gcrypt_kdf"
5814 echo "nettle            $nettle $(echo_version $nettle $nettle_version)"
5815 echo "nettle kdf        $nettle_kdf"
5816 echo "libtasn1          $tasn1"
5817 echo "curses support    $curses"
5818 echo "virgl support     $virglrenderer"
5819 echo "curl support      $curl"
5820 echo "mingw32 support   $mingw32"
5821 echo "Audio drivers     $audio_drv_list"
5822 echo "Block whitelist (rw) $block_drv_rw_whitelist"
5823 echo "Block whitelist (ro) $block_drv_ro_whitelist"
5824 echo "VirtFS support    $virtfs"
5825 echo "Multipath support $mpath"
5826 echo "VNC support       $vnc"
5827 if test "$vnc" = "yes" ; then
5828     echo "VNC SASL support  $vnc_sasl"
5829     echo "VNC JPEG support  $vnc_jpeg"
5830     echo "VNC PNG support   $vnc_png"
5831 fi
5832 if test -n "$sparc_cpu"; then
5833     echo "Target Sparc Arch $sparc_cpu"
5834 fi
5835 echo "xen support       $xen"
5836 if test "$xen" = "yes" ; then
5837   echo "xen ctrl version  $xen_ctrl_version"
5838   echo "pv dom build      $xen_pv_domain_build"
5839 fi
5840 echo "brlapi support    $brlapi"
5841 echo "bluez  support    $bluez"
5842 echo "Documentation     $docs"
5843 echo "PIE               $pie"
5844 echo "vde support       $vde"
5845 echo "netmap support    $netmap"
5846 echo "Linux AIO support $linux_aio"
5847 echo "ATTR/XATTR support $attr"
5848 echo "Install blobs     $blobs"
5849 echo "KVM support       $kvm"
5850 echo "HAX support       $hax"
5851 echo "HVF support       $hvf"
5852 echo "WHPX support      $whpx"
5853 echo "TCG support       $tcg"
5854 if test "$tcg" = "yes" ; then
5855     echo "TCG debug enabled $debug_tcg"
5856     echo "TCG interpreter   $tcg_interpreter"
5857 fi
5858 echo "malloc trim support $malloc_trim"
5859 echo "RDMA support      $rdma"
5860 echo "fdt support       $fdt"
5861 echo "membarrier        $membarrier"
5862 echo "preadv support    $preadv"
5863 echo "fdatasync         $fdatasync"
5864 echo "madvise           $madvise"
5865 echo "posix_madvise     $posix_madvise"
5866 echo "posix_memalign    $posix_memalign"
5867 echo "libcap-ng support $cap_ng"
5868 echo "vhost-net support $vhost_net"
5869 echo "vhost-crypto support $vhost_crypto"
5870 echo "vhost-scsi support $vhost_scsi"
5871 echo "vhost-vsock support $vhost_vsock"
5872 echo "vhost-user support $vhost_user"
5873 echo "Trace backends    $trace_backends"
5874 if have_backend "simple"; then
5875 echo "Trace output file $trace_file-<pid>"
5876 fi
5877 echo "spice support     $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
5878 echo "rbd support       $rbd"
5879 echo "xfsctl support    $xfs"
5880 echo "smartcard support $smartcard"
5881 echo "libusb            $libusb"
5882 echo "usb net redir     $usb_redir"
5883 echo "OpenGL support    $opengl"
5884 echo "OpenGL dmabufs    $opengl_dmabuf"
5885 echo "libiscsi support  $libiscsi"
5886 echo "libnfs support    $libnfs"
5887 echo "build guest agent $guest_agent"
5888 echo "QGA VSS support   $guest_agent_with_vss"
5889 echo "QGA w32 disk info $guest_agent_ntddscsi"
5890 echo "QGA MSI support   $guest_agent_msi"
5891 echo "seccomp support   $seccomp"
5892 echo "coroutine backend $coroutine"
5893 echo "coroutine pool    $coroutine_pool"
5894 echo "debug stack usage $debug_stack_usage"
5895 echo "crypto afalg      $crypto_afalg"
5896 echo "GlusterFS support $glusterfs"
5897 echo "gcov              $gcov_tool"
5898 echo "gcov enabled      $gcov"
5899 echo "TPM support       $tpm"
5900 echo "libssh2 support   $libssh2"
5901 echo "TPM passthrough   $tpm_passthrough"
5902 echo "TPM emulator      $tpm_emulator"
5903 echo "QOM debugging     $qom_cast_debug"
5904 echo "Live block migration $live_block_migration"
5905 echo "lzo support       $lzo"
5906 echo "snappy support    $snappy"
5907 echo "bzip2 support     $bzip2"
5908 echo "NUMA host support $numa"
5909 echo "libxml2           $libxml2"
5910 echo "tcmalloc support  $tcmalloc"
5911 echo "jemalloc support  $jemalloc"
5912 echo "avx2 optimization $avx2_opt"
5913 echo "replication support $replication"
5914 echo "VxHS block device $vxhs"
5915 echo "capstone          $capstone"
5916
5917 if test "$sdl_too_old" = "yes"; then
5918 echo "-> Your SDL version is too old - please upgrade to have SDL support"
5919 fi
5920
5921 if test "$gtkabi" = "2.0"; then
5922     echo
5923     echo "WARNING: Use of GTK 2.0 is deprecated and will be removed in"
5924     echo "WARNING: future releases. Please switch to using GTK 3.0"
5925 fi
5926
5927 if test "$sdlabi" = "1.2"; then
5928     echo
5929     echo "WARNING: Use of SDL 1.2 is deprecated and will be removed in"
5930     echo "WARNING: future releases. Please switch to using SDL 2.0"
5931 fi
5932
5933 if test "$supported_cpu" = "no"; then
5934     echo
5935     echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
5936     echo
5937     echo "CPU host architecture $cpu support is not currently maintained."
5938     echo "The QEMU project intends to remove support for this host CPU in"
5939     echo "a future release if nobody volunteers to maintain it and to"
5940     echo "provide a build host for our continuous integration setup."
5941     echo "configure has succeeded and you can continue to build, but"
5942     echo "if you care about QEMU on this platform you should contact"
5943     echo "us upstream at [email protected]."
5944 fi
5945
5946 if test "$supported_os" = "no"; then
5947     echo
5948     echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
5949     echo
5950     echo "Host OS $targetos support is not currently maintained."
5951     echo "The QEMU project intends to remove support for this host OS in"
5952     echo "a future release if nobody volunteers to maintain it and to"
5953     echo "provide a build host for our continuous integration setup."
5954     echo "configure has succeeded and you can continue to build, but"
5955     echo "if you care about QEMU on this platform you should contact"
5956     echo "us upstream at [email protected]."
5957 fi
5958
5959 config_host_mak="config-host.mak"
5960
5961 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
5962
5963 echo "# Automatically generated by configure - do not modify" > $config_host_mak
5964 echo >> $config_host_mak
5965
5966 echo all: >> $config_host_mak
5967 echo "prefix=$prefix" >> $config_host_mak
5968 echo "bindir=$bindir" >> $config_host_mak
5969 echo "libdir=$libdir" >> $config_host_mak
5970 echo "libexecdir=$libexecdir" >> $config_host_mak
5971 echo "includedir=$includedir" >> $config_host_mak
5972 echo "mandir=$mandir" >> $config_host_mak
5973 echo "sysconfdir=$sysconfdir" >> $config_host_mak
5974 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
5975 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
5976 echo "qemu_firmwarepath=$firmwarepath" >> $config_host_mak
5977 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
5978 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
5979 if test "$mingw32" = "no" ; then
5980   echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
5981 fi
5982 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
5983 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
5984 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
5985 echo "GIT=$git" >> $config_host_mak
5986 echo "GIT_SUBMODULES=$git_submodules" >> $config_host_mak
5987 echo "GIT_UPDATE=$git_update" >> $config_host_mak
5988
5989 echo "ARCH=$ARCH" >> $config_host_mak
5990
5991 if test "$debug_tcg" = "yes" ; then
5992   echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
5993 fi
5994 if test "$strip_opt" = "yes" ; then
5995   echo "STRIP=${strip}" >> $config_host_mak
5996 fi
5997 if test "$bigendian" = "yes" ; then
5998   echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
5999 fi
6000 if test "$mingw32" = "yes" ; then
6001   echo "CONFIG_WIN32=y" >> $config_host_mak
6002   rc_version=$(cat $source_path/VERSION)
6003   version_major=${rc_version%%.*}
6004   rc_version=${rc_version#*.}
6005   version_minor=${rc_version%%.*}
6006   rc_version=${rc_version#*.}
6007   version_subminor=${rc_version%%.*}
6008   version_micro=0
6009   echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6010   echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
6011   if test "$guest_agent_with_vss" = "yes" ; then
6012     echo "CONFIG_QGA_VSS=y" >> $config_host_mak
6013     echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
6014     echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
6015   fi
6016   if test "$guest_agent_ntddscsi" = "yes" ; then
6017     echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
6018   fi
6019   if test "$guest_agent_msi" = "yes"; then
6020     echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
6021     echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
6022     echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
6023     echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
6024     echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
6025     echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
6026     echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
6027   fi
6028 else
6029   echo "CONFIG_POSIX=y" >> $config_host_mak
6030 fi
6031
6032 if test "$linux" = "yes" ; then
6033   echo "CONFIG_LINUX=y" >> $config_host_mak
6034 fi
6035
6036 if test "$darwin" = "yes" ; then
6037   echo "CONFIG_DARWIN=y" >> $config_host_mak
6038 fi
6039
6040 if test "$solaris" = "yes" ; then
6041   echo "CONFIG_SOLARIS=y" >> $config_host_mak
6042 fi
6043 if test "$haiku" = "yes" ; then
6044   echo "CONFIG_HAIKU=y" >> $config_host_mak
6045 fi
6046 if test "$static" = "yes" ; then
6047   echo "CONFIG_STATIC=y" >> $config_host_mak
6048 fi
6049 if test "$profiler" = "yes" ; then
6050   echo "CONFIG_PROFILER=y" >> $config_host_mak
6051 fi
6052 if test "$slirp" = "yes" ; then
6053   echo "CONFIG_SLIRP=y" >> $config_host_mak
6054   echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
6055 fi
6056 if test "$vde" = "yes" ; then
6057   echo "CONFIG_VDE=y" >> $config_host_mak
6058   echo "VDE_LIBS=$vde_libs" >> $config_host_mak
6059 fi
6060 if test "$netmap" = "yes" ; then
6061   echo "CONFIG_NETMAP=y" >> $config_host_mak
6062 fi
6063 if test "$l2tpv3" = "yes" ; then
6064   echo "CONFIG_L2TPV3=y" >> $config_host_mak
6065 fi
6066 if test "$cap_ng" = "yes" ; then
6067   echo "CONFIG_LIBCAP=y" >> $config_host_mak
6068 fi
6069 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
6070 for drv in $audio_drv_list; do
6071     def=CONFIG_AUDIO_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
6072     case "$drv" in
6073         alsa | oss | pa | sdl)
6074             echo "$def=m" >> $config_host_mak ;;
6075         *)
6076             echo "$def=y" >> $config_host_mak ;;
6077     esac
6078 done
6079 echo "ALSA_LIBS=$alsa_libs" >> $config_host_mak
6080 echo "PULSE_LIBS=$pulse_libs" >> $config_host_mak
6081 echo "COREAUDIO_LIBS=$coreaudio_libs" >> $config_host_mak
6082 echo "DSOUND_LIBS=$dsound_libs" >> $config_host_mak
6083 echo "OSS_LIBS=$oss_libs" >> $config_host_mak
6084 if test "$audio_pt_int" = "yes" ; then
6085   echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
6086 fi
6087 if test "$audio_win_int" = "yes" ; then
6088   echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
6089 fi
6090 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
6091 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
6092 if test "$vnc" = "yes" ; then
6093   echo "CONFIG_VNC=y" >> $config_host_mak
6094 fi
6095 if test "$vnc_sasl" = "yes" ; then
6096   echo "CONFIG_VNC_SASL=y" >> $config_host_mak
6097 fi
6098 if test "$vnc_jpeg" = "yes" ; then
6099   echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
6100 fi
6101 if test "$vnc_png" = "yes" ; then
6102   echo "CONFIG_VNC_PNG=y" >> $config_host_mak
6103 fi
6104 if test "$xkbcommon" = "yes" ; then
6105   echo "XKBCOMMON_CFLAGS=$xkbcommon_cflags" >> $config_host_mak
6106   echo "XKBCOMMON_LIBS=$xkbcommon_libs" >> $config_host_mak
6107 fi
6108 if test "$fnmatch" = "yes" ; then
6109   echo "CONFIG_FNMATCH=y" >> $config_host_mak
6110 fi
6111 if test "$xfs" = "yes" ; then
6112   echo "CONFIG_XFS=y" >> $config_host_mak
6113 fi
6114 qemu_version=$(head $source_path/VERSION)
6115 echo "VERSION=$qemu_version" >>$config_host_mak
6116 echo "PKGVERSION=$pkgversion" >>$config_host_mak
6117 echo "SRC_PATH=$source_path" >> $config_host_mak
6118 echo "TARGET_DIRS=$target_list" >> $config_host_mak
6119 if [ "$docs" = "yes" ] ; then
6120   echo "BUILD_DOCS=yes" >> $config_host_mak
6121 fi
6122 if test "$modules" = "yes"; then
6123   # $shacmd can generate a hash started with digit, which the compiler doesn't
6124   # like as an symbol. So prefix it with an underscore
6125   echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
6126   echo "CONFIG_MODULES=y" >> $config_host_mak
6127 fi
6128 if test "$have_x11" = "yes" -a "$need_x11" = "yes"; then
6129   echo "CONFIG_X11=y" >> $config_host_mak
6130   echo "X11_CFLAGS=$x11_cflags" >> $config_host_mak
6131   echo "X11_LIBS=$x11_libs" >> $config_host_mak
6132 fi
6133 if test "$sdl" = "yes" ; then
6134   echo "CONFIG_SDL=m" >> $config_host_mak
6135   echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
6136   echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
6137   echo "SDL_LIBS=$sdl_libs" >> $config_host_mak
6138 fi
6139 if test "$cocoa" = "yes" ; then
6140   echo "CONFIG_COCOA=y" >> $config_host_mak
6141 fi
6142 if test "$curses" = "yes" ; then
6143   echo "CONFIG_CURSES=m" >> $config_host_mak
6144   echo "CURSES_CFLAGS=$curses_inc" >> $config_host_mak
6145   echo "CURSES_LIBS=$curses_lib" >> $config_host_mak
6146 fi
6147 if test "$pipe2" = "yes" ; then
6148   echo "CONFIG_PIPE2=y" >> $config_host_mak
6149 fi
6150 if test "$accept4" = "yes" ; then
6151   echo "CONFIG_ACCEPT4=y" >> $config_host_mak
6152 fi
6153 if test "$splice" = "yes" ; then
6154   echo "CONFIG_SPLICE=y" >> $config_host_mak
6155 fi
6156 if test "$eventfd" = "yes" ; then
6157   echo "CONFIG_EVENTFD=y" >> $config_host_mak
6158 fi
6159 if test "$memfd" = "yes" ; then
6160   echo "CONFIG_MEMFD=y" >> $config_host_mak
6161 fi
6162 if test "$fallocate" = "yes" ; then
6163   echo "CONFIG_FALLOCATE=y" >> $config_host_mak
6164 fi
6165 if test "$fallocate_punch_hole" = "yes" ; then
6166   echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
6167 fi
6168 if test "$fallocate_zero_range" = "yes" ; then
6169   echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
6170 fi
6171 if test "$posix_fallocate" = "yes" ; then
6172   echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
6173 fi
6174 if test "$sync_file_range" = "yes" ; then
6175   echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
6176 fi
6177 if test "$fiemap" = "yes" ; then
6178   echo "CONFIG_FIEMAP=y" >> $config_host_mak
6179 fi
6180 if test "$dup3" = "yes" ; then
6181   echo "CONFIG_DUP3=y" >> $config_host_mak
6182 fi
6183 if test "$ppoll" = "yes" ; then
6184   echo "CONFIG_PPOLL=y" >> $config_host_mak
6185 fi
6186 if test "$prctl_pr_set_timerslack" = "yes" ; then
6187   echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
6188 fi
6189 if test "$epoll" = "yes" ; then
6190   echo "CONFIG_EPOLL=y" >> $config_host_mak
6191 fi
6192 if test "$epoll_create1" = "yes" ; then
6193   echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
6194 fi
6195 if test "$sendfile" = "yes" ; then
6196   echo "CONFIG_SENDFILE=y" >> $config_host_mak
6197 fi
6198 if test "$timerfd" = "yes" ; then
6199   echo "CONFIG_TIMERFD=y" >> $config_host_mak
6200 fi
6201 if test "$setns" = "yes" ; then
6202   echo "CONFIG_SETNS=y" >> $config_host_mak
6203 fi
6204 if test "$clock_adjtime" = "yes" ; then
6205   echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
6206 fi
6207 if test "$syncfs" = "yes" ; then
6208   echo "CONFIG_SYNCFS=y" >> $config_host_mak
6209 fi
6210 if test "$inotify" = "yes" ; then
6211   echo "CONFIG_INOTIFY=y" >> $config_host_mak
6212 fi
6213 if test "$inotify1" = "yes" ; then
6214   echo "CONFIG_INOTIFY1=y" >> $config_host_mak
6215 fi
6216 if test "$sem_timedwait" = "yes" ; then
6217   echo "CONFIG_SEM_TIMEDWAIT=y" >> $config_host_mak
6218 fi
6219 if test "$byteswap_h" = "yes" ; then
6220   echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
6221 fi
6222 if test "$bswap_h" = "yes" ; then
6223   echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
6224 fi
6225 if test "$curl" = "yes" ; then
6226   echo "CONFIG_CURL=m" >> $config_host_mak
6227   echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
6228   echo "CURL_LIBS=$curl_libs" >> $config_host_mak
6229 fi
6230 if test "$brlapi" = "yes" ; then
6231   echo "CONFIG_BRLAPI=y" >> $config_host_mak
6232   echo "BRLAPI_LIBS=$brlapi_libs" >> $config_host_mak
6233 fi
6234 if test "$bluez" = "yes" ; then
6235   echo "CONFIG_BLUEZ=y" >> $config_host_mak
6236   echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
6237 fi
6238 if test "$glib_subprocess" = "yes" ; then
6239   echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
6240 fi
6241 if test "$gtk" = "yes" ; then
6242   echo "CONFIG_GTK=m" >> $config_host_mak
6243   echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
6244   echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
6245   echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
6246   if test "$gtk_gl" = "yes" ; then
6247     echo "CONFIG_GTK_GL=y" >> $config_host_mak
6248   fi
6249 fi
6250 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
6251 if test "$gnutls" = "yes" ; then
6252   echo "CONFIG_GNUTLS=y" >> $config_host_mak
6253 fi
6254 if test "$gnutls_rnd" = "yes" ; then
6255   echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
6256 fi
6257 if test "$gcrypt" = "yes" ; then
6258   echo "CONFIG_GCRYPT=y" >> $config_host_mak
6259   if test "$gcrypt_hmac" = "yes" ; then
6260     echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
6261   fi
6262   if test "$gcrypt_kdf" = "yes" ; then
6263     echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
6264   fi
6265 fi
6266 if test "$nettle" = "yes" ; then
6267   echo "CONFIG_NETTLE=y" >> $config_host_mak
6268   echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
6269   if test "$nettle_kdf" = "yes" ; then
6270     echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
6271   fi
6272 fi
6273 if test "$tasn1" = "yes" ; then
6274   echo "CONFIG_TASN1=y" >> $config_host_mak
6275 fi
6276 if test "$have_ifaddrs_h" = "yes" ; then
6277     echo "HAVE_IFADDRS_H=y" >> $config_host_mak
6278 fi
6279 if test "$have_broken_size_max" = "yes" ; then
6280     echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
6281 fi
6282
6283 # Work around a system header bug with some kernel/XFS header
6284 # versions where they both try to define 'struct fsxattr':
6285 # xfs headers will not try to redefine structs from linux headers
6286 # if this macro is set.
6287 if test "$have_fsxattr" = "yes" ; then
6288     echo "HAVE_FSXATTR=y" >> $config_host_mak
6289 fi
6290 if test "$have_copy_file_range" = "yes" ; then
6291     echo "HAVE_COPY_FILE_RANGE=y" >> $config_host_mak
6292 fi
6293 if test "$vte" = "yes" ; then
6294   echo "CONFIG_VTE=y" >> $config_host_mak
6295   echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
6296   echo "VTE_LIBS=$vte_libs" >> $config_host_mak
6297 fi
6298 if test "$virglrenderer" = "yes" ; then
6299   echo "CONFIG_VIRGL=y" >> $config_host_mak
6300   echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
6301   echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
6302 fi
6303 if test "$xen" = "yes" ; then
6304   echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
6305   echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
6306   if test "$xen_pv_domain_build" = "yes" ; then
6307     echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
6308   fi
6309 fi
6310 if test "$linux_aio" = "yes" ; then
6311   echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
6312 fi
6313 if test "$attr" = "yes" ; then
6314   echo "CONFIG_ATTR=y" >> $config_host_mak
6315 fi
6316 if test "$libattr" = "yes" ; then
6317   echo "CONFIG_LIBATTR=y" >> $config_host_mak
6318 fi
6319 if test "$virtfs" = "yes" ; then
6320   echo "CONFIG_VIRTFS=y" >> $config_host_mak
6321 fi
6322 if test "$mpath" = "yes" ; then
6323   echo "CONFIG_MPATH=y" >> $config_host_mak
6324 fi
6325 if test "$vhost_scsi" = "yes" ; then
6326   echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
6327 fi
6328 if test "$vhost_net" = "yes" -a "$vhost_user" = "yes"; then
6329   echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
6330 fi
6331 if test "$vhost_crypto" = "yes" ; then
6332   echo "CONFIG_VHOST_CRYPTO=y" >> $config_host_mak
6333 fi
6334 if test "$vhost_vsock" = "yes" ; then
6335   echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
6336 fi
6337 if test "$vhost_user" = "yes" ; then
6338   echo "CONFIG_VHOST_USER=y" >> $config_host_mak
6339 fi
6340 if test "$blobs" = "yes" ; then
6341   echo "INSTALL_BLOBS=yes" >> $config_host_mak
6342 fi
6343 if test "$iovec" = "yes" ; then
6344   echo "CONFIG_IOVEC=y" >> $config_host_mak
6345 fi
6346 if test "$preadv" = "yes" ; then
6347   echo "CONFIG_PREADV=y" >> $config_host_mak
6348 fi
6349 if test "$fdt" != "no" ; then
6350   echo "CONFIG_FDT=y" >> $config_host_mak
6351 fi
6352 if test "$membarrier" = "yes" ; then
6353   echo "CONFIG_MEMBARRIER=y" >> $config_host_mak
6354 fi
6355 if test "$signalfd" = "yes" ; then
6356   echo "CONFIG_SIGNALFD=y" >> $config_host_mak
6357 fi
6358 if test "$tcg" = "yes"; then
6359   echo "CONFIG_TCG=y" >> $config_host_mak
6360   if test "$tcg_interpreter" = "yes" ; then
6361     echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
6362   fi
6363 fi
6364 if test "$fdatasync" = "yes" ; then
6365   echo "CONFIG_FDATASYNC=y" >> $config_host_mak
6366 fi
6367 if test "$madvise" = "yes" ; then
6368   echo "CONFIG_MADVISE=y" >> $config_host_mak
6369 fi
6370 if test "$posix_madvise" = "yes" ; then
6371   echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
6372 fi
6373 if test "$posix_memalign" = "yes" ; then
6374   echo "CONFIG_POSIX_MEMALIGN=y" >> $config_host_mak
6375 fi
6376
6377 if test "$spice" = "yes" ; then
6378   echo "CONFIG_SPICE=y" >> $config_host_mak
6379 fi
6380
6381 if test "$smartcard" = "yes" ; then
6382   echo "CONFIG_SMARTCARD=y" >> $config_host_mak
6383   echo "SMARTCARD_CFLAGS=$libcacard_cflags" >> $config_host_mak
6384   echo "SMARTCARD_LIBS=$libcacard_libs" >> $config_host_mak
6385 fi
6386
6387 if test "$libusb" = "yes" ; then
6388   echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
6389   echo "LIBUSB_CFLAGS=$libusb_cflags" >> $config_host_mak
6390   echo "LIBUSB_LIBS=$libusb_libs" >> $config_host_mak
6391 fi
6392
6393 if test "$usb_redir" = "yes" ; then
6394   echo "CONFIG_USB_REDIR=y" >> $config_host_mak
6395   echo "USB_REDIR_CFLAGS=$usb_redir_cflags" >> $config_host_mak
6396   echo "USB_REDIR_LIBS=$usb_redir_libs" >> $config_host_mak
6397 fi
6398
6399 if test "$opengl" = "yes" ; then
6400   echo "CONFIG_OPENGL=y" >> $config_host_mak
6401   echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
6402   if test "$opengl_dmabuf" = "yes" ; then
6403     echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
6404   fi
6405 fi
6406
6407 if test "$malloc_trim" = "yes" ; then
6408   echo "CONFIG_MALLOC_TRIM=y" >> $config_host_mak
6409 fi
6410
6411 if test "$avx2_opt" = "yes" ; then
6412   echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
6413 fi
6414
6415 if test "$lzo" = "yes" ; then
6416   echo "CONFIG_LZO=y" >> $config_host_mak
6417 fi
6418
6419 if test "$snappy" = "yes" ; then
6420   echo "CONFIG_SNAPPY=y" >> $config_host_mak
6421 fi
6422
6423 if test "$bzip2" = "yes" ; then
6424   echo "CONFIG_BZIP2=y" >> $config_host_mak
6425   echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
6426 fi
6427
6428 if test "$libiscsi" = "yes" ; then
6429   echo "CONFIG_LIBISCSI=m" >> $config_host_mak
6430   echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
6431   echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
6432 fi
6433
6434 if test "$libnfs" = "yes" ; then
6435   echo "CONFIG_LIBNFS=m" >> $config_host_mak
6436   echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
6437 fi
6438
6439 if test "$seccomp" = "yes"; then
6440   echo "CONFIG_SECCOMP=y" >> $config_host_mak
6441   echo "SECCOMP_CFLAGS=$seccomp_cflags" >> $config_host_mak
6442   echo "SECCOMP_LIBS=$seccomp_libs" >> $config_host_mak
6443 fi
6444
6445 # XXX: suppress that
6446 if [ "$bsd" = "yes" ] ; then
6447   echo "CONFIG_BSD=y" >> $config_host_mak
6448 fi
6449
6450 if test "$localtime_r" = "yes" ; then
6451   echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
6452 fi
6453 if test "$qom_cast_debug" = "yes" ; then
6454   echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
6455 fi
6456 if test "$rbd" = "yes" ; then
6457   echo "CONFIG_RBD=m" >> $config_host_mak
6458   echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
6459   echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
6460 fi
6461
6462 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
6463 if test "$coroutine_pool" = "yes" ; then
6464   echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
6465 else
6466   echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
6467 fi
6468
6469 if test "$debug_stack_usage" = "yes" ; then
6470   echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
6471 fi
6472
6473 if test "$crypto_afalg" = "yes" ; then
6474   echo "CONFIG_AF_ALG=y" >> $config_host_mak
6475 fi
6476
6477 if test "$open_by_handle_at" = "yes" ; then
6478   echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
6479 fi
6480
6481 if test "$linux_magic_h" = "yes" ; then
6482   echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
6483 fi
6484
6485 if test "$pragma_diagnostic_available" = "yes" ; then
6486   echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
6487 fi
6488
6489 if test "$valgrind_h" = "yes" ; then
6490   echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
6491 fi
6492
6493 if test "$have_asan_iface_fiber" = "yes" ; then
6494     echo "CONFIG_ASAN_IFACE_FIBER=y" >> $config_host_mak
6495 fi
6496
6497 if test "$has_environ" = "yes" ; then
6498   echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
6499 fi
6500
6501 if test "$cpuid_h" = "yes" ; then
6502   echo "CONFIG_CPUID_H=y" >> $config_host_mak
6503 fi
6504
6505 if test "$int128" = "yes" ; then
6506   echo "CONFIG_INT128=y" >> $config_host_mak
6507 fi
6508
6509 if test "$atomic128" = "yes" ; then
6510   echo "CONFIG_ATOMIC128=y" >> $config_host_mak
6511 fi
6512
6513 if test "$atomic64" = "yes" ; then
6514   echo "CONFIG_ATOMIC64=y" >> $config_host_mak
6515 fi
6516
6517 if test "$vector16" = "yes" ; then
6518   echo "CONFIG_VECTOR16=y" >> $config_host_mak
6519 fi
6520
6521 if test "$getauxval" = "yes" ; then
6522   echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
6523 fi
6524
6525 if test "$glusterfs" = "yes" ; then
6526   echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
6527   echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
6528   echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
6529 fi
6530
6531 if test "$glusterfs_xlator_opt" = "yes" ; then
6532   echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
6533 fi
6534
6535 if test "$glusterfs_discard" = "yes" ; then
6536   echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
6537 fi
6538
6539 if test "$glusterfs_fallocate" = "yes" ; then
6540   echo "CONFIG_GLUSTERFS_FALLOCATE=y" >> $config_host_mak
6541 fi
6542
6543 if test "$glusterfs_zerofill" = "yes" ; then
6544   echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
6545 fi
6546
6547 if test "$libssh2" = "yes" ; then
6548   echo "CONFIG_LIBSSH2=m" >> $config_host_mak
6549   echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
6550   echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
6551 fi
6552
6553 if test "$live_block_migration" = "yes" ; then
6554   echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
6555 fi
6556
6557 if test "$tpm" = "yes"; then
6558   echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
6559   # TPM passthrough support?
6560   if test "$tpm_passthrough" = "yes"; then
6561     echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
6562   fi
6563   # TPM emulator support?
6564   if test "$tpm_emulator" = "yes"; then
6565     echo "CONFIG_TPM_EMULATOR=y" >> $config_host_mak
6566   fi
6567 fi
6568
6569 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
6570 if have_backend "nop"; then
6571   echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
6572 fi
6573 if have_backend "simple"; then
6574   echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
6575   # Set the appropriate trace file.
6576   trace_file="\"$trace_file-\" FMT_pid"
6577 fi
6578 if have_backend "log"; then
6579   echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
6580 fi
6581 if have_backend "ust"; then
6582   echo "CONFIG_TRACE_UST=y" >> $config_host_mak
6583 fi
6584 if have_backend "dtrace"; then
6585   echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
6586   if test "$trace_backend_stap" = "yes" ; then
6587     echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
6588   fi
6589 fi
6590 if have_backend "ftrace"; then
6591   if test "$linux" = "yes" ; then
6592     echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
6593   else
6594     feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
6595   fi
6596 fi
6597 if have_backend "syslog"; then
6598   if test "$posix_syslog" = "yes" ; then
6599     echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
6600   else
6601     feature_not_found "syslog(trace backend)" "syslog not available"
6602   fi
6603 fi
6604 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
6605
6606 if test "$rdma" = "yes" ; then
6607   echo "CONFIG_RDMA=y" >> $config_host_mak
6608   echo "RDMA_LIBS=$rdma_libs" >> $config_host_mak
6609 fi
6610
6611 if test "$have_rtnetlink" = "yes" ; then
6612   echo "CONFIG_RTNETLINK=y" >> $config_host_mak
6613 fi
6614
6615 if test "$libxml2" = "yes" ; then
6616   echo "CONFIG_LIBXML2=y" >> $config_host_mak
6617   echo "LIBXML2_CFLAGS=$libxml2_cflags" >> $config_host_mak
6618   echo "LIBXML2_LIBS=$libxml2_libs" >> $config_host_mak
6619 fi
6620
6621 if test "$replication" = "yes" ; then
6622   echo "CONFIG_REPLICATION=y" >> $config_host_mak
6623 fi
6624
6625 if test "$have_af_vsock" = "yes" ; then
6626   echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
6627 fi
6628
6629 if test "$have_sysmacros" = "yes" ; then
6630   echo "CONFIG_SYSMACROS=y" >> $config_host_mak
6631 fi
6632
6633 if test "$have_static_assert" = "yes" ; then
6634   echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
6635 fi
6636
6637 if test "$have_utmpx" = "yes" ; then
6638   echo "HAVE_UTMPX=y" >> $config_host_mak
6639 fi
6640
6641 if test "$ivshmem" = "yes" ; then
6642   echo "CONFIG_IVSHMEM=y" >> $config_host_mak
6643 fi
6644 if test "$capstone" != "no" ; then
6645   echo "CONFIG_CAPSTONE=y" >> $config_host_mak
6646 fi
6647
6648 # Hold two types of flag:
6649 #   CONFIG_THREAD_SETNAME_BYTHREAD  - we've got a way of setting the name on
6650 #                                     a thread we have a handle to
6651 #   CONFIG_PTHREAD_SETNAME_NP       - A way of doing it on a particular
6652 #                                     platform
6653 if test "$pthread_setname_np" = "yes" ; then
6654   echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
6655   echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
6656 fi
6657
6658 if test "$vxhs" = "yes" ; then
6659   echo "CONFIG_VXHS=y" >> $config_host_mak
6660   echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
6661 fi
6662
6663 if test "$tcg_interpreter" = "yes"; then
6664   QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
6665 elif test "$ARCH" = "sparc64" ; then
6666   QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
6667 elif test "$ARCH" = "s390x" ; then
6668   QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
6669 elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
6670   QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
6671 elif test "$ARCH" = "ppc64" ; then
6672   QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
6673 else
6674   QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
6675 fi
6676 QEMU_INCLUDES="-iquote \$(SRC_PATH)/tcg $QEMU_INCLUDES"
6677
6678 echo "TOOLS=$tools" >> $config_host_mak
6679 echo "ROMS=$roms" >> $config_host_mak
6680 echo "MAKE=$make" >> $config_host_mak
6681 echo "INSTALL=$install" >> $config_host_mak
6682 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
6683 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
6684 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
6685 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
6686 echo "PYTHON=$python" >> $config_host_mak
6687 echo "CC=$cc" >> $config_host_mak
6688 if $iasl -h > /dev/null 2>&1; then
6689   echo "IASL=$iasl" >> $config_host_mak
6690 fi
6691 echo "CC_I386=$cc_i386" >> $config_host_mak
6692 echo "HOST_CC=$host_cc" >> $config_host_mak
6693 echo "CXX=$cxx" >> $config_host_mak
6694 echo "OBJCC=$objcc" >> $config_host_mak
6695 echo "AR=$ar" >> $config_host_mak
6696 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
6697 echo "AS=$as" >> $config_host_mak
6698 echo "CCAS=$ccas" >> $config_host_mak
6699 echo "CPP=$cpp" >> $config_host_mak
6700 echo "OBJCOPY=$objcopy" >> $config_host_mak
6701 echo "LD=$ld" >> $config_host_mak
6702 echo "RANLIB=$ranlib" >> $config_host_mak
6703 echo "NM=$nm" >> $config_host_mak
6704 echo "WINDRES=$windres" >> $config_host_mak
6705 echo "CFLAGS=$CFLAGS" >> $config_host_mak
6706 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
6707 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
6708 echo "QEMU_CXXFLAGS=$QEMU_CXXFLAGS" >> $config_host_mak
6709 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
6710 if test "$sparse" = "yes" ; then
6711   echo "CC           := REAL_CC=\"\$(CC)\" cgcc"       >> $config_host_mak
6712   echo "CPP          := REAL_CC=\"\$(CPP)\" cgcc"      >> $config_host_mak
6713   echo "CXX          := REAL_CC=\"\$(CXX)\" cgcc"      >> $config_host_mak
6714   echo "HOST_CC      := REAL_CC=\"\$(HOST_CC)\" cgcc"  >> $config_host_mak
6715   echo "QEMU_CFLAGS  += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
6716 fi
6717 if test "$cross_prefix" != ""; then
6718   echo "AUTOCONF_HOST := --host=${cross_prefix%-}"     >> $config_host_mak
6719 else
6720   echo "AUTOCONF_HOST := "                             >> $config_host_mak
6721 fi
6722 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
6723 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
6724 echo "QEMU_LDFLAGS=$QEMU_LDFLAGS" >> $config_host_mak
6725 echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
6726 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
6727 echo "LIBS+=$LIBS" >> $config_host_mak
6728 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
6729 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
6730 echo "EXESUF=$EXESUF" >> $config_host_mak
6731 echo "DSOSUF=$DSOSUF" >> $config_host_mak
6732 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
6733 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
6734 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
6735 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
6736 echo "POD2MAN=$POD2MAN" >> $config_host_mak
6737 echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
6738 if test "$gcov" = "yes" ; then
6739   echo "CONFIG_GCOV=y" >> $config_host_mak
6740   echo "GCOV=$gcov_tool" >> $config_host_mak
6741 fi
6742
6743 # use included Linux headers
6744 if test "$linux" = "yes" ; then
6745   mkdir -p linux-headers
6746   case "$cpu" in
6747   i386|x86_64|x32)
6748     linux_arch=x86
6749     ;;
6750   ppcemb|ppc|ppc64)
6751     linux_arch=powerpc
6752     ;;
6753   s390x)
6754     linux_arch=s390
6755     ;;
6756   aarch64)
6757     linux_arch=arm64
6758     ;;
6759   mips64)
6760     linux_arch=mips
6761     ;;
6762   *)
6763     # For most CPUs the kernel architecture name and QEMU CPU name match.
6764     linux_arch="$cpu"
6765     ;;
6766   esac
6767     # For non-KVM architectures we will not have asm headers
6768     if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
6769       symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
6770     fi
6771 fi
6772
6773 for target in $target_list; do
6774 target_dir="$target"
6775 config_target_mak=$target_dir/config-target.mak
6776 target_name=$(echo $target | cut -d '-' -f 1)
6777 target_bigendian="no"
6778
6779 case "$target_name" in
6780   armeb|aarch64_be|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
6781   target_bigendian=yes
6782   ;;
6783 esac
6784 target_softmmu="no"
6785 target_user_only="no"
6786 target_linux_user="no"
6787 target_bsd_user="no"
6788 case "$target" in
6789   ${target_name}-softmmu)
6790     target_softmmu="yes"
6791     ;;
6792   ${target_name}-linux-user)
6793     target_user_only="yes"
6794     target_linux_user="yes"
6795     ;;
6796   ${target_name}-bsd-user)
6797     target_user_only="yes"
6798     target_bsd_user="yes"
6799     ;;
6800   *)
6801     error_exit "Target '$target' not recognised"
6802     exit 1
6803     ;;
6804 esac
6805
6806 mkdir -p $target_dir
6807 echo "# Automatically generated by configure - do not modify" > $config_target_mak
6808
6809 bflt="no"
6810 mttcg="no"
6811 interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
6812 gdb_xml_files=""
6813
6814 TARGET_ARCH="$target_name"
6815 TARGET_BASE_ARCH=""
6816 TARGET_ABI_DIR=""
6817
6818 case "$target_name" in
6819   i386)
6820     gdb_xml_files="i386-32bit.xml i386-32bit-core.xml i386-32bit-sse.xml"
6821   ;;
6822   x86_64)
6823     TARGET_BASE_ARCH=i386
6824     gdb_xml_files="i386-64bit.xml i386-64bit-core.xml i386-64bit-sse.xml"
6825   ;;
6826   alpha)
6827     mttcg="yes"
6828   ;;
6829   arm|armeb)
6830     TARGET_ARCH=arm
6831     bflt="yes"
6832     mttcg="yes"
6833     gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6834   ;;
6835   aarch64|aarch64_be)
6836     TARGET_ARCH=aarch64
6837     TARGET_BASE_ARCH=arm
6838     bflt="yes"
6839     mttcg="yes"
6840     gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6841   ;;
6842   cris)
6843   ;;
6844   hppa)
6845     mttcg="yes"
6846   ;;
6847   lm32)
6848   ;;
6849   m68k)
6850     bflt="yes"
6851     gdb_xml_files="cf-core.xml cf-fp.xml m68k-fp.xml"
6852   ;;
6853   microblaze|microblazeel)
6854     TARGET_ARCH=microblaze
6855     bflt="yes"
6856     echo "TARGET_ABI32=y" >> $config_target_mak
6857   ;;
6858   mips|mipsel)
6859     TARGET_ARCH=mips
6860     echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
6861   ;;
6862   mipsn32|mipsn32el)
6863     TARGET_ARCH=mips64
6864     TARGET_BASE_ARCH=mips
6865     echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
6866     echo "TARGET_ABI32=y" >> $config_target_mak
6867   ;;
6868   mips64|mips64el)
6869     TARGET_ARCH=mips64
6870     TARGET_BASE_ARCH=mips
6871     echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
6872   ;;
6873   moxie)
6874   ;;
6875   nios2)
6876   ;;
6877   or1k)
6878     TARGET_ARCH=openrisc
6879     TARGET_BASE_ARCH=openrisc
6880   ;;
6881   ppc)
6882     gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
6883   ;;
6884   ppcemb)
6885     TARGET_BASE_ARCH=ppc
6886     TARGET_ABI_DIR=ppc
6887     gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
6888   ;;
6889   ppc64)
6890     TARGET_BASE_ARCH=ppc
6891     TARGET_ABI_DIR=ppc
6892     mttcg=yes
6893     gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6894   ;;
6895   ppc64le)
6896     TARGET_ARCH=ppc64
6897     TARGET_BASE_ARCH=ppc
6898     TARGET_ABI_DIR=ppc
6899     mttcg=yes
6900     gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6901   ;;
6902   ppc64abi32)
6903     TARGET_ARCH=ppc64
6904     TARGET_BASE_ARCH=ppc
6905     TARGET_ABI_DIR=ppc
6906     echo "TARGET_ABI32=y" >> $config_target_mak
6907     gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6908   ;;
6909   riscv32)
6910     TARGET_BASE_ARCH=riscv
6911     TARGET_ABI_DIR=riscv
6912     mttcg=yes
6913   ;;
6914   riscv64)
6915     TARGET_BASE_ARCH=riscv
6916     TARGET_ABI_DIR=riscv
6917     mttcg=yes
6918   ;;
6919   sh4|sh4eb)
6920     TARGET_ARCH=sh4
6921     bflt="yes"
6922   ;;
6923   sparc)
6924   ;;
6925   sparc64)
6926     TARGET_BASE_ARCH=sparc
6927   ;;
6928   sparc32plus)
6929     TARGET_ARCH=sparc64
6930     TARGET_BASE_ARCH=sparc
6931     TARGET_ABI_DIR=sparc
6932     echo "TARGET_ABI32=y" >> $config_target_mak
6933   ;;
6934   s390x)
6935     mttcg=yes
6936     gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml s390-gs.xml"
6937   ;;
6938   tilegx)
6939   ;;
6940   tricore)
6941   ;;
6942   unicore32)
6943   ;;
6944   xtensa|xtensaeb)
6945     TARGET_ARCH=xtensa
6946     mttcg="yes"
6947   ;;
6948   *)
6949     error_exit "Unsupported target CPU"
6950   ;;
6951 esac
6952 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
6953 if [ "$TARGET_BASE_ARCH" = "" ]; then
6954   TARGET_BASE_ARCH=$TARGET_ARCH
6955 fi
6956
6957 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
6958
6959 upper() {
6960     echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
6961 }
6962
6963 target_arch_name="$(upper $TARGET_ARCH)"
6964 echo "TARGET_$target_arch_name=y" >> $config_target_mak
6965 echo "TARGET_NAME=$target_name" >> $config_target_mak
6966 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
6967 if [ "$TARGET_ABI_DIR" = "" ]; then
6968   TARGET_ABI_DIR=$TARGET_ARCH
6969 fi
6970 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
6971 if [ "$HOST_VARIANT_DIR" != "" ]; then
6972     echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
6973 fi
6974
6975 if supported_xen_target $target; then
6976     echo "CONFIG_XEN=y" >> $config_target_mak
6977     if test "$xen_pci_passthrough" = yes; then
6978         echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
6979     fi
6980 fi
6981 if supported_kvm_target $target; then
6982     echo "CONFIG_KVM=y" >> $config_target_mak
6983     if test "$vhost_net" = "yes" ; then
6984         echo "CONFIG_VHOST_NET=y" >> $config_target_mak
6985         if test "$vhost_user" = "yes" ; then
6986             echo "CONFIG_VHOST_USER_NET_TEST_$target_name=y" >> $config_host_mak
6987         fi
6988     fi
6989 fi
6990 if supported_hax_target $target; then
6991     echo "CONFIG_HAX=y" >> $config_target_mak
6992 fi
6993 if supported_hvf_target $target; then
6994     echo "CONFIG_HVF=y" >> $config_target_mak
6995 fi
6996 if supported_whpx_target $target; then
6997     echo "CONFIG_WHPX=y" >> $config_target_mak
6998 fi
6999 if test "$target_bigendian" = "yes" ; then
7000   echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
7001 fi
7002 if test "$target_softmmu" = "yes" ; then
7003   echo "CONFIG_SOFTMMU=y" >> $config_target_mak
7004   if test "$mttcg" = "yes" ; then
7005     echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
7006   fi
7007 fi
7008 if test "$target_user_only" = "yes" ; then
7009   echo "CONFIG_USER_ONLY=y" >> $config_target_mak
7010   echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
7011 fi
7012 if test "$target_linux_user" = "yes" ; then
7013   echo "CONFIG_LINUX_USER=y" >> $config_target_mak
7014 fi
7015 list=""
7016 if test ! -z "$gdb_xml_files" ; then
7017   for x in $gdb_xml_files; do
7018     list="$list $source_path/gdb-xml/$x"
7019   done
7020   echo "TARGET_XML_FILES=$list" >> $config_target_mak
7021 fi
7022
7023 if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
7024   echo "TARGET_HAS_BFLT=y" >> $config_target_mak
7025 fi
7026 if test "$target_bsd_user" = "yes" ; then
7027   echo "CONFIG_BSD_USER=y" >> $config_target_mak
7028 fi
7029
7030 # generate QEMU_CFLAGS/LDFLAGS for targets
7031
7032 cflags=""
7033 ldflags=""
7034
7035 disas_config() {
7036   echo "CONFIG_${1}_DIS=y" >> $config_target_mak
7037   echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
7038 }
7039
7040 for i in $ARCH $TARGET_BASE_ARCH ; do
7041   case "$i" in
7042   alpha)
7043     disas_config "ALPHA"
7044   ;;
7045   aarch64)
7046     if test -n "${cxx}"; then
7047       disas_config "ARM_A64"
7048     fi
7049   ;;
7050   arm)
7051     disas_config "ARM"
7052     if test -n "${cxx}"; then
7053       disas_config "ARM_A64"
7054     fi
7055   ;;
7056   cris)
7057     disas_config "CRIS"
7058   ;;
7059   hppa)
7060     disas_config "HPPA"
7061   ;;
7062   i386|x86_64|x32)
7063     disas_config "I386"
7064   ;;
7065   lm32)
7066     disas_config "LM32"
7067   ;;
7068   m68k)
7069     disas_config "M68K"
7070   ;;
7071   microblaze*)
7072     disas_config "MICROBLAZE"
7073   ;;
7074   mips*)
7075     disas_config "MIPS"
7076   ;;
7077   moxie*)
7078     disas_config "MOXIE"
7079   ;;
7080   nios2)
7081     disas_config "NIOS2"
7082   ;;
7083   or1k)
7084     disas_config "OPENRISC"
7085   ;;
7086   ppc*)
7087     disas_config "PPC"
7088   ;;
7089   riscv)
7090     disas_config "RISCV"
7091   ;;
7092   s390*)
7093     disas_config "S390"
7094   ;;
7095   sh4)
7096     disas_config "SH4"
7097   ;;
7098   sparc*)
7099     disas_config "SPARC"
7100   ;;
7101   xtensa*)
7102     disas_config "XTENSA"
7103   ;;
7104   esac
7105 done
7106 if test "$tcg_interpreter" = "yes" ; then
7107   disas_config "TCI"
7108 fi
7109
7110 case "$ARCH" in
7111 alpha)
7112   # Ensure there's only a single GP
7113   cflags="-msmall-data $cflags"
7114 ;;
7115 esac
7116
7117 if test "$gprof" = "yes" ; then
7118   echo "TARGET_GPROF=yes" >> $config_target_mak
7119   if test "$target_linux_user" = "yes" ; then
7120     cflags="-p $cflags"
7121     ldflags="-p $ldflags"
7122   fi
7123   if test "$target_softmmu" = "yes" ; then
7124     ldflags="-p $ldflags"
7125     echo "GPROF_CFLAGS=-p" >> $config_target_mak
7126   fi
7127 fi
7128
7129 if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
7130   ldflags="$ldflags $textseg_ldflags"
7131 fi
7132
7133 # Newer kernels on s390 check for an S390_PGSTE program header and
7134 # enable the pgste page table extensions in that case. This makes
7135 # the vm.allocate_pgste sysctl unnecessary. We enable this program
7136 # header if
7137 #  - we build on s390x
7138 #  - we build the system emulation for s390x (qemu-system-s390x)
7139 #  - KVM is enabled
7140 #  - the linker supports --s390-pgste
7141 if test "$TARGET_ARCH" = "s390x" -a "$target_softmmu" = "yes"  -a "$ARCH" = "s390x" -a "$kvm" = "yes"; then
7142     if ld_has --s390-pgste ; then
7143         ldflags="-Wl,--s390-pgste $ldflags"
7144     fi
7145 fi
7146
7147 echo "LDFLAGS+=$ldflags" >> $config_target_mak
7148 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
7149
7150 done # for target in $targets
7151
7152 if [ "$fdt" = "git" ]; then
7153   echo "config-host.h: subdir-dtc" >> $config_host_mak
7154 fi
7155 if [ "$capstone" = "git" -o "$capstone" = "internal" ]; then
7156   echo "config-host.h: subdir-capstone" >> $config_host_mak
7157 fi
7158 if test -n "$LIBCAPSTONE"; then
7159   echo "LIBCAPSTONE=$LIBCAPSTONE" >> $config_host_mak
7160 fi
7161
7162 if test "$numa" = "yes"; then
7163   echo "CONFIG_NUMA=y" >> $config_host_mak
7164 fi
7165
7166 if test "$ccache_cpp2" = "yes"; then
7167   echo "export CCACHE_CPP2=y" >> $config_host_mak
7168 fi
7169
7170 # build tree in object directory in case the source is not in the current directory
7171 DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests tests/vm"
7172 DIRS="$DIRS docs docs/interop fsdev scsi"
7173 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
7174 DIRS="$DIRS roms/seabios roms/vgabios"
7175 FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
7176 FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
7177 FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
7178 FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
7179 FILES="$FILES pc-bios/spapr-rtas/Makefile"
7180 FILES="$FILES pc-bios/s390-ccw/Makefile"
7181 FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
7182 FILES="$FILES pc-bios/qemu-icon.bmp"
7183 FILES="$FILES .gdbinit scripts" # scripts needed by relative path in .gdbinit
7184 for bios_file in \
7185     $source_path/pc-bios/*.bin \
7186     $source_path/pc-bios/*.lid \
7187     $source_path/pc-bios/*.aml \
7188     $source_path/pc-bios/*.rom \
7189     $source_path/pc-bios/*.dtb \
7190     $source_path/pc-bios/*.img \
7191     $source_path/pc-bios/openbios-* \
7192     $source_path/pc-bios/u-boot.* \
7193     $source_path/pc-bios/palcode-*
7194 do
7195     FILES="$FILES pc-bios/$(basename $bios_file)"
7196 done
7197 for test_file in $(find $source_path/tests/acpi-test-data -type f)
7198 do
7199     FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
7200 done
7201 mkdir -p $DIRS
7202 for f in $FILES ; do
7203     if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
7204         symlink "$source_path/$f" "$f"
7205     fi
7206 done
7207
7208 # temporary config to build submodules
7209 for rom in seabios vgabios ; do
7210     config_mak=roms/$rom/config.mak
7211     echo "# Automatically generated by configure - do not modify" > $config_mak
7212     echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
7213     echo "AS=$as" >> $config_mak
7214     echo "CCAS=$ccas" >> $config_mak
7215     echo "CC=$cc" >> $config_mak
7216     echo "BCC=bcc" >> $config_mak
7217     echo "CPP=$cpp" >> $config_mak
7218     echo "OBJCOPY=objcopy" >> $config_mak
7219     echo "IASL=$iasl" >> $config_mak
7220     echo "LD=$ld" >> $config_mak
7221     echo "RANLIB=$ranlib" >> $config_mak
7222 done
7223
7224 # set up tests data directory
7225 if [ ! -e tests/data ]; then
7226     symlink "$source_path/tests/data" tests/data
7227 fi
7228
7229 # set up qemu-iotests in this build directory
7230 iotests_common_env="tests/qemu-iotests/common.env"
7231 iotests_check="tests/qemu-iotests/check"
7232
7233 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
7234 echo >> "$iotests_common_env"
7235 echo "export PYTHON='$python'" >> "$iotests_common_env"
7236
7237 if [ ! -e "$iotests_check" ]; then
7238     symlink "$source_path/$iotests_check" "$iotests_check"
7239 fi
7240
7241 # Save the configure command line for later reuse.
7242 cat <<EOD >config.status
7243 #!/bin/sh
7244 # Generated by configure.
7245 # Run this file to recreate the current configuration.
7246 # Compiler output produced by configure, useful for debugging
7247 # configure, is in config.log if it exists.
7248 EOD
7249 printf "exec" >>config.status
7250 printf " '%s'" "$0" "$@" >>config.status
7251 echo ' "$@"' >>config.status
7252 chmod +x config.status
7253
7254 rm -r "$TMPDIR1"
This page took 0.416497 seconds and 4 git commands to generate.