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