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