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