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