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