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