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