hw/arm/virt: Merge VirtBoardInfo and VirtMachineState
[qemu.git] / configure
1 #!/bin/sh
2 #
3 # qemu configure script (c) 2003 Fabrice Bellard
4 #
5
6 # Unset some variables known to interfere with behavior of common tools,
7 # just as autoconf does.
8 CLICOLOR_FORCE= GREP_OPTIONS=
9 unset CLICOLOR_FORCE GREP_OPTIONS
10
11 # Don't allow CCACHE, if present, to use cached results of compile tests!
12 export CCACHE_RECACHE=yes
13
14 # Temporary directory used for files created while
15 # configure runs. Since it is in the build directory
16 # we can safely blow away any previous version of it
17 # (and we need not jump through hoops to try to delete
18 # it when configure exits.)
19 TMPDIR1="config-temp"
20 rm -rf "${TMPDIR1}"
21 mkdir -p "${TMPDIR1}"
22 if [ $? -ne 0 ]; then
23     echo "ERROR: failed to create temporary directory"
24     exit 1
25 fi
26
27 TMPB="qemu-conf"
28 TMPC="${TMPDIR1}/${TMPB}.c"
29 TMPO="${TMPDIR1}/${TMPB}.o"
30 TMPCXX="${TMPDIR1}/${TMPB}.cxx"
31 TMPE="${TMPDIR1}/${TMPB}.exe"
32 TMPMO="${TMPDIR1}/${TMPB}.mo"
33
34 rm -f config.log
35
36 # Print a helpful header at the top of config.log
37 echo "# QEMU configure log $(date)" >> config.log
38 printf "# Configured with:" >> config.log
39 printf " '%s'" "$0" "$@" >> config.log
40 echo >> config.log
41 echo "#" >> config.log
42
43 error_exit() {
44     echo
45     echo "ERROR: $1"
46     while test -n "$2"; do
47         echo "       $2"
48         shift
49     done
50     echo
51     exit 1
52 }
53
54 do_compiler() {
55     # Run the compiler, capturing its output to the log. First argument
56     # is compiler binary to execute.
57     local compiler="$1"
58     shift
59     echo $compiler "$@" >> config.log
60     $compiler "$@" >> config.log 2>&1 || return $?
61     # Test passed. If this is an --enable-werror build, rerun
62     # the test with -Werror and bail out if it fails. This
63     # makes warning-generating-errors in configure test code
64     # obvious to developers.
65     if test "$werror" != "yes"; then
66         return 0
67     fi
68     # Don't bother rerunning the compile if we were already using -Werror
69     case "$*" in
70         *-Werror*)
71            return 0
72         ;;
73     esac
74     echo $compiler -Werror "$@" >> config.log
75     $compiler -Werror "$@" >> config.log 2>&1 && return $?
76     error_exit "configure test passed without -Werror but failed with -Werror." \
77         "This is probably a bug in the configure script. The failing command" \
78         "will be at the bottom of config.log." \
79         "You can run configure with --disable-werror to bypass this check."
80 }
81
82 do_cc() {
83     do_compiler "$cc" "$@"
84 }
85
86 do_cxx() {
87     do_compiler "$cxx" "$@"
88 }
89
90 update_cxxflags() {
91     # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
92     # options which some versions of GCC's C++ compiler complain about
93     # because they only make sense for C programs.
94     QEMU_CXXFLAGS=
95     for arg in $QEMU_CFLAGS; do
96         case $arg in
97             -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
98             -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
99                 ;;
100             *)
101                 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
102                 ;;
103         esac
104     done
105 }
106
107 compile_object() {
108   local_cflags="$1"
109   do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
110 }
111
112 compile_prog() {
113   local_cflags="$1"
114   local_ldflags="$2"
115   do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
116 }
117
118 # symbolically link $1 to $2.  Portable version of "ln -sf".
119 symlink() {
120   rm -rf "$2"
121   mkdir -p "$(dirname "$2")"
122   ln -s "$1" "$2"
123 }
124
125 # check whether a command is available to this shell (may be either an
126 # executable or a builtin)
127 has() {
128     type "$1" >/dev/null 2>&1
129 }
130
131 # search for an executable in PATH
132 path_of() {
133     local_command="$1"
134     local_ifs="$IFS"
135     local_dir=""
136
137     # pathname has a dir component?
138     if [ "${local_command#*/}" != "$local_command" ]; then
139         if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
140             echo "$local_command"
141             return 0
142         fi
143     fi
144     if [ -z "$local_command" ]; then
145         return 1
146     fi
147
148     IFS=:
149     for local_dir in $PATH; do
150         if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
151             echo "$local_dir/$local_command"
152             IFS="${local_ifs:-$(printf ' \t\n')}"
153             return 0
154         fi
155     done
156     # not found
157     IFS="${local_ifs:-$(printf ' \t\n')}"
158     return 1
159 }
160
161 have_backend () {
162     echo "$trace_backends" | grep "$1" >/dev/null
163 }
164
165 # default parameters
166 source_path=$(dirname "$0")
167 cpu=""
168 iasl="iasl"
169 interp_prefix="/usr/gnemul/qemu-%M"
170 static="no"
171 cross_prefix=""
172 audio_drv_list=""
173 block_drv_rw_whitelist=""
174 block_drv_ro_whitelist=""
175 host_cc="cc"
176 libs_softmmu=""
177 libs_tools=""
178 audio_pt_int=""
179 audio_win_int=""
180 cc_i386=i386-pc-linux-gnu-gcc
181 libs_qga=""
182 debug_info="yes"
183 stack_protector=""
184
185 # Don't accept a target_list environment variable.
186 unset target_list
187
188 # Default value for a variable defining feature "foo".
189 #  * foo="no"  feature will only be used if --enable-foo arg is given
190 #  * foo=""    feature will be searched for, and if found, will be used
191 #              unless --disable-foo is given
192 #  * foo="yes" this value will only be set by --enable-foo flag.
193 #              feature will searched for,
194 #              if not found, configure exits with error
195 #
196 # Always add --enable-foo and --disable-foo command line args.
197 # Distributions want to ensure that several features are compiled in, and it
198 # is impossible without a --enable-foo that exits if a feature is not found.
199
200 bluez=""
201 brlapi=""
202 curl=""
203 curses=""
204 docs=""
205 fdt=""
206 netmap="no"
207 pixman=""
208 sdl=""
209 sdlabi=""
210 virtfs=""
211 vnc="yes"
212 sparse="no"
213 vde=""
214 vnc_sasl=""
215 vnc_jpeg=""
216 vnc_png=""
217 xen=""
218 xen_ctrl_version=""
219 xen_pv_domain_build="no"
220 xen_pci_passthrough=""
221 linux_aio=""
222 cap_ng=""
223 attr=""
224 libattr=""
225 xfs=""
226
227 vhost_net="no"
228 vhost_scsi="no"
229 vhost_vsock="no"
230 kvm="no"
231 colo="yes"
232 rdma=""
233 gprof="no"
234 debug_tcg="no"
235 debug="no"
236 fortify_source=""
237 strip_opt="yes"
238 tcg_interpreter="no"
239 bigendian="no"
240 mingw32="no"
241 gcov="no"
242 gcov_tool="gcov"
243 EXESUF=""
244 DSOSUF=".so"
245 LDFLAGS_SHARED="-shared"
246 modules="no"
247 prefix="/usr/local"
248 mandir="\${prefix}/share/man"
249 datadir="\${prefix}/share"
250 qemu_docdir="\${prefix}/share/doc/qemu"
251 bindir="\${prefix}/bin"
252 libdir="\${prefix}/lib"
253 libexecdir="\${prefix}/libexec"
254 includedir="\${prefix}/include"
255 sysconfdir="\${prefix}/etc"
256 local_statedir="\${prefix}/var"
257 confsuffix="/qemu"
258 slirp="yes"
259 oss_lib=""
260 bsd="no"
261 linux="no"
262 solaris="no"
263 profiler="no"
264 cocoa="no"
265 softmmu="yes"
266 linux_user="no"
267 bsd_user="no"
268 aix="no"
269 blobs="yes"
270 pkgversion=""
271 pie=""
272 qom_cast_debug="yes"
273 trace_backends="log"
274 trace_file="trace"
275 spice=""
276 rbd=""
277 smartcard=""
278 libusb=""
279 usb_redir=""
280 opengl=""
281 opengl_dmabuf="no"
282 avx2_opt="no"
283 zlib="yes"
284 lzo=""
285 snappy=""
286 bzip2=""
287 guest_agent=""
288 guest_agent_with_vss="no"
289 guest_agent_ntddscsi="no"
290 guest_agent_msi=""
291 vss_win32_sdk=""
292 win_sdk="no"
293 want_tools="yes"
294 libiscsi=""
295 libnfs=""
296 coroutine=""
297 coroutine_pool=""
298 debug_stack_usage="no"
299 seccomp=""
300 glusterfs=""
301 glusterfs_xlator_opt="no"
302 glusterfs_discard="no"
303 glusterfs_zerofill="no"
304 archipelago="no"
305 gtk=""
306 gtkabi=""
307 gtk_gl="no"
308 tls_priority="NORMAL"
309 gnutls=""
310 gnutls_rnd=""
311 nettle=""
312 nettle_kdf="no"
313 gcrypt=""
314 gcrypt_hmac="no"
315 gcrypt_kdf="no"
316 vte=""
317 virglrenderer=""
318 tpm="yes"
319 libssh2=""
320 numa=""
321 tcmalloc="no"
322 jemalloc="no"
323 replication="yes"
324
325 # parse CC options first
326 for opt do
327   optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
328   case "$opt" in
329   --cross-prefix=*) cross_prefix="$optarg"
330   ;;
331   --cc=*) CC="$optarg"
332   ;;
333   --cxx=*) CXX="$optarg"
334   ;;
335   --source-path=*) source_path="$optarg"
336   ;;
337   --cpu=*) cpu="$optarg"
338   ;;
339   --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
340                     EXTRA_CFLAGS="$optarg"
341   ;;
342   --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
343                      EXTRA_LDFLAGS="$optarg"
344   ;;
345   --enable-debug-info) debug_info="yes"
346   ;;
347   --disable-debug-info) debug_info="no"
348   ;;
349   esac
350 done
351 # OS specific
352 # Using uname is really, really broken.  Once we have the right set of checks
353 # we can eliminate its usage altogether.
354
355 # Preferred compiler:
356 #  ${CC} (if set)
357 #  ${cross_prefix}gcc (if cross-prefix specified)
358 #  system compiler
359 if test -z "${CC}${cross_prefix}"; then
360   cc="$host_cc"
361 else
362   cc="${CC-${cross_prefix}gcc}"
363 fi
364
365 if test -z "${CXX}${cross_prefix}"; then
366   cxx="c++"
367 else
368   cxx="${CXX-${cross_prefix}g++}"
369 fi
370
371 ar="${AR-${cross_prefix}ar}"
372 as="${AS-${cross_prefix}as}"
373 ccas="${CCAS-$cc}"
374 cpp="${CPP-$cc -E}"
375 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
376 ld="${LD-${cross_prefix}ld}"
377 nm="${NM-${cross_prefix}nm}"
378 strip="${STRIP-${cross_prefix}strip}"
379 windres="${WINDRES-${cross_prefix}windres}"
380 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
381 query_pkg_config() {
382     "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
383 }
384 pkg_config=query_pkg_config
385 sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
386 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
387
388 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
389 ARFLAGS="${ARFLAGS-rv}"
390
391 # default flags for all hosts
392 # We use -fwrapv to tell the compiler that we require a C dialect where
393 # left shift of signed integers is well defined and has the expected
394 # 2s-complement style results. (Both clang and gcc agree that it
395 # provides these semantics.)
396 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv $QEMU_CFLAGS"
397 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
398 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
399 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
400 QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/include"
401 if test "$debug_info" = "yes"; then
402     CFLAGS="-g $CFLAGS"
403     LDFLAGS="-g $LDFLAGS"
404 fi
405
406 # make source path absolute
407 source_path=$(cd "$source_path"; pwd)
408
409 # running configure in the source tree?
410 # we know that's the case if configure is there.
411 if test -f "./configure"; then
412     pwd_is_source_path="y"
413 else
414     pwd_is_source_path="n"
415 fi
416
417 check_define() {
418 cat > $TMPC <<EOF
419 #if !defined($1)
420 #error $1 not defined
421 #endif
422 int main(void) { return 0; }
423 EOF
424   compile_object
425 }
426
427 check_include() {
428 cat > $TMPC <<EOF
429 #include <$1>
430 int main(void) { return 0; }
431 EOF
432   compile_object
433 }
434
435 write_c_skeleton() {
436     cat > $TMPC <<EOF
437 int main(void) { return 0; }
438 EOF
439 }
440
441 if check_define __linux__ ; then
442   targetos="Linux"
443 elif check_define _WIN32 ; then
444   targetos='MINGW32'
445 elif check_define __OpenBSD__ ; then
446   targetos='OpenBSD'
447 elif check_define __sun__ ; then
448   targetos='SunOS'
449 elif check_define __HAIKU__ ; then
450   targetos='Haiku'
451 else
452   targetos=$(uname -s)
453 fi
454
455 # Some host OSes need non-standard checks for which CPU to use.
456 # Note that these checks are broken for cross-compilation: if you're
457 # cross-compiling to one of these OSes then you'll need to specify
458 # the correct CPU with the --cpu option.
459 case $targetos in
460 Darwin)
461   # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
462   # run 64-bit userspace code.
463   # If the user didn't specify a CPU explicitly and the kernel says this is
464   # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
465   if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
466     cpu="x86_64"
467   fi
468   ;;
469 SunOS)
470   # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
471   if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
472     cpu="x86_64"
473   fi
474 esac
475
476 if test ! -z "$cpu" ; then
477   # command line argument
478   :
479 elif check_define __i386__ ; then
480   cpu="i386"
481 elif check_define __x86_64__ ; then
482   if check_define __ILP32__ ; then
483     cpu="x32"
484   else
485     cpu="x86_64"
486   fi
487 elif check_define __sparc__ ; then
488   if check_define __arch64__ ; then
489     cpu="sparc64"
490   else
491     cpu="sparc"
492   fi
493 elif check_define _ARCH_PPC ; then
494   if check_define _ARCH_PPC64 ; then
495     cpu="ppc64"
496   else
497     cpu="ppc"
498   fi
499 elif check_define __mips__ ; then
500   cpu="mips"
501 elif check_define __ia64__ ; then
502   cpu="ia64"
503 elif check_define __s390__ ; then
504   if check_define __s390x__ ; then
505     cpu="s390x"
506   else
507     cpu="s390"
508   fi
509 elif check_define __arm__ ; then
510   cpu="arm"
511 elif check_define __aarch64__ ; then
512   cpu="aarch64"
513 else
514   cpu=$(uname -m)
515 fi
516
517 ARCH=
518 # Normalise host CPU name and set ARCH.
519 # Note that this case should only have supported host CPUs, not guests.
520 case "$cpu" in
521   ia64|ppc|ppc64|s390|s390x|sparc64|x32)
522     cpu="$cpu"
523   ;;
524   i386|i486|i586|i686|i86pc|BePC)
525     cpu="i386"
526   ;;
527   x86_64|amd64)
528     cpu="x86_64"
529   ;;
530   armv*b|armv*l|arm)
531     cpu="arm"
532   ;;
533   aarch64)
534     cpu="aarch64"
535   ;;
536   mips*)
537     cpu="mips"
538   ;;
539   sparc|sun4[cdmuv])
540     cpu="sparc"
541   ;;
542   *)
543     # This will result in either an error or falling back to TCI later
544     ARCH=unknown
545   ;;
546 esac
547 if test -z "$ARCH"; then
548   ARCH="$cpu"
549 fi
550
551 # OS specific
552
553 # host *BSD for user mode
554 HOST_VARIANT_DIR=""
555
556 case $targetos in
557 CYGWIN*)
558   mingw32="yes"
559   QEMU_CFLAGS="-mno-cygwin $QEMU_CFLAGS"
560   audio_possible_drivers="sdl"
561   audio_drv_list="sdl"
562 ;;
563 MINGW32*)
564   mingw32="yes"
565   audio_possible_drivers="dsound sdl"
566   if check_include dsound.h; then
567     audio_drv_list="dsound"
568   else
569     audio_drv_list=""
570   fi
571 ;;
572 GNU/kFreeBSD)
573   bsd="yes"
574   audio_drv_list="oss"
575   audio_possible_drivers="oss sdl pa"
576 ;;
577 FreeBSD)
578   bsd="yes"
579   make="${MAKE-gmake}"
580   audio_drv_list="oss"
581   audio_possible_drivers="oss sdl pa"
582   # needed for kinfo_getvmmap(3) in libutil.h
583   LIBS="-lutil $LIBS"
584   # needed for kinfo_getproc
585   libs_qga="-lutil $libs_qga"
586   netmap=""  # enable netmap autodetect
587   HOST_VARIANT_DIR="freebsd"
588 ;;
589 DragonFly)
590   bsd="yes"
591   make="${MAKE-gmake}"
592   audio_drv_list="oss"
593   audio_possible_drivers="oss sdl pa"
594   HOST_VARIANT_DIR="dragonfly"
595 ;;
596 NetBSD)
597   bsd="yes"
598   make="${MAKE-gmake}"
599   audio_drv_list="oss"
600   audio_possible_drivers="oss sdl"
601   oss_lib="-lossaudio"
602   HOST_VARIANT_DIR="netbsd"
603 ;;
604 OpenBSD)
605   bsd="yes"
606   make="${MAKE-gmake}"
607   audio_drv_list="sdl"
608   audio_possible_drivers="sdl"
609   HOST_VARIANT_DIR="openbsd"
610 ;;
611 Darwin)
612   bsd="yes"
613   darwin="yes"
614   LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
615   if [ "$cpu" = "x86_64" ] ; then
616     QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
617     LDFLAGS="-arch x86_64 $LDFLAGS"
618   fi
619   cocoa="yes"
620   audio_drv_list="coreaudio"
621   audio_possible_drivers="coreaudio sdl"
622   LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
623   libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
624   # Disable attempts to use ObjectiveC features in os/object.h since they
625   # won't work when we're compiling with gcc as a C compiler.
626   QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
627   HOST_VARIANT_DIR="darwin"
628 ;;
629 SunOS)
630   solaris="yes"
631   make="${MAKE-gmake}"
632   install="${INSTALL-ginstall}"
633   ld="gld"
634   smbd="${SMBD-/usr/sfw/sbin/smbd}"
635   needs_libsunmath="no"
636   solarisrev=$(uname -r | cut -f2 -d.)
637   if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
638     if test "$solarisrev" -le 9 ; then
639       if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then
640         needs_libsunmath="yes"
641         QEMU_CFLAGS="-I/opt/SUNWspro/prod/include/cc $QEMU_CFLAGS"
642         LDFLAGS="-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib $LDFLAGS"
643         LIBS="-lsunmath $LIBS"
644       else
645         error_exit "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without" \
646             "libsunmath from the Sun Studio compilers tools, due to a lack of" \
647             "C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86" \
648             "Studio 11 can be downloaded from www.sun.com."
649       fi
650     fi
651   fi
652   if test -f /usr/include/sys/soundcard.h ; then
653     audio_drv_list="oss"
654   fi
655   audio_possible_drivers="oss sdl"
656 # needed for CMSG_ macros in sys/socket.h
657   QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
658 # needed for TIOCWIN* defines in termios.h
659   QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
660   QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
661   solarisnetlibs="-lsocket -lnsl -lresolv"
662   LIBS="$solarisnetlibs $LIBS"
663   libs_qga="$solarisnetlibs $libs_qga"
664 ;;
665 AIX)
666   aix="yes"
667   make="${MAKE-gmake}"
668 ;;
669 Haiku)
670   haiku="yes"
671   QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
672   LIBS="-lposix_error_mapper -lnetwork $LIBS"
673 ;;
674 *)
675   audio_drv_list="oss"
676   audio_possible_drivers="oss alsa sdl pa"
677   linux="yes"
678   linux_user="yes"
679   kvm="yes"
680   vhost_net="yes"
681   vhost_scsi="yes"
682   vhost_vsock="yes"
683   QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
684 ;;
685 esac
686
687 if [ "$bsd" = "yes" ] ; then
688   if [ "$darwin" != "yes" ] ; then
689     bsd_user="yes"
690   fi
691 fi
692
693 : ${make=${MAKE-make}}
694 : ${install=${INSTALL-install}}
695 : ${python=${PYTHON-python}}
696 : ${smbd=${SMBD-/usr/sbin/smbd}}
697
698 # Default objcc to clang if available, otherwise use CC
699 if has clang; then
700   objcc=clang
701 else
702   objcc="$cc"
703 fi
704
705 if test "$mingw32" = "yes" ; then
706   EXESUF=".exe"
707   DSOSUF=".dll"
708   QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
709   # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
710   QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
711   # MinGW needs -mthreads for TLS and macro _MT.
712   QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
713   LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
714   write_c_skeleton;
715   if compile_prog "" "-liberty" ; then
716     LIBS="-liberty $LIBS"
717   fi
718   prefix="c:/Program Files/QEMU"
719   mandir="\${prefix}"
720   datadir="\${prefix}"
721   qemu_docdir="\${prefix}"
722   bindir="\${prefix}"
723   sysconfdir="\${prefix}"
724   local_statedir=
725   confsuffix=""
726   libs_qga="-lws2_32 -lwinmm -lpowrprof -liphlpapi -lnetapi32 $libs_qga"
727 fi
728
729 werror=""
730
731 for opt do
732   optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
733   case "$opt" in
734   --help|-h) show_help=yes
735   ;;
736   --version|-V) exec cat $source_path/VERSION
737   ;;
738   --prefix=*) prefix="$optarg"
739   ;;
740   --interp-prefix=*) interp_prefix="$optarg"
741   ;;
742   --source-path=*)
743   ;;
744   --cross-prefix=*)
745   ;;
746   --cc=*)
747   ;;
748   --host-cc=*) host_cc="$optarg"
749   ;;
750   --cxx=*)
751   ;;
752   --iasl=*) iasl="$optarg"
753   ;;
754   --objcc=*) objcc="$optarg"
755   ;;
756   --make=*) make="$optarg"
757   ;;
758   --install=*) install="$optarg"
759   ;;
760   --python=*) python="$optarg"
761   ;;
762   --gcov=*) gcov_tool="$optarg"
763   ;;
764   --smbd=*) smbd="$optarg"
765   ;;
766   --extra-cflags=*)
767   ;;
768   --extra-ldflags=*)
769   ;;
770   --enable-debug-info)
771   ;;
772   --disable-debug-info)
773   ;;
774   --enable-modules)
775       modules="yes"
776   ;;
777   --disable-modules)
778       modules="no"
779   ;;
780   --cpu=*)
781   ;;
782   --target-list=*) target_list="$optarg"
783   ;;
784   --enable-trace-backends=*) trace_backends="$optarg"
785   ;;
786   # XXX: backwards compatibility
787   --enable-trace-backend=*) trace_backends="$optarg"
788   ;;
789   --with-trace-file=*) trace_file="$optarg"
790   ;;
791   --enable-gprof) gprof="yes"
792   ;;
793   --enable-gcov) gcov="yes"
794   ;;
795   --static)
796     static="yes"
797     LDFLAGS="-static $LDFLAGS"
798     QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
799   ;;
800   --mandir=*) mandir="$optarg"
801   ;;
802   --bindir=*) bindir="$optarg"
803   ;;
804   --libdir=*) libdir="$optarg"
805   ;;
806   --libexecdir=*) libexecdir="$optarg"
807   ;;
808   --includedir=*) includedir="$optarg"
809   ;;
810   --datadir=*) datadir="$optarg"
811   ;;
812   --with-confsuffix=*) confsuffix="$optarg"
813   ;;
814   --docdir=*) qemu_docdir="$optarg"
815   ;;
816   --sysconfdir=*) sysconfdir="$optarg"
817   ;;
818   --localstatedir=*) local_statedir="$optarg"
819   ;;
820   --sbindir=*|--sharedstatedir=*|\
821   --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
822   --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
823     # These switches are silently ignored, for compatibility with
824     # autoconf-generated configure scripts. This allows QEMU's
825     # configure to be used by RPM and similar macros that set
826     # lots of directory switches by default.
827   ;;
828   --with-system-pixman) pixman="system"
829   ;;
830   --without-system-pixman) pixman="internal"
831   ;;
832   --without-pixman) pixman="none"
833   ;;
834   --disable-sdl) sdl="no"
835   ;;
836   --enable-sdl) sdl="yes"
837   ;;
838   --with-sdlabi=*) sdlabi="$optarg"
839   ;;
840   --disable-qom-cast-debug) qom_cast_debug="no"
841   ;;
842   --enable-qom-cast-debug) qom_cast_debug="yes"
843   ;;
844   --disable-virtfs) virtfs="no"
845   ;;
846   --enable-virtfs) virtfs="yes"
847   ;;
848   --disable-vnc) vnc="no"
849   ;;
850   --enable-vnc) vnc="yes"
851   ;;
852   --oss-lib=*) oss_lib="$optarg"
853   ;;
854   --audio-drv-list=*) audio_drv_list="$optarg"
855   ;;
856   --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
857   ;;
858   --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
859   ;;
860   --enable-debug-tcg) debug_tcg="yes"
861   ;;
862   --disable-debug-tcg) debug_tcg="no"
863   ;;
864   --enable-debug)
865       # Enable debugging options that aren't excessively noisy
866       debug_tcg="yes"
867       debug="yes"
868       strip_opt="no"
869       fortify_source="no"
870   ;;
871   --enable-sparse) sparse="yes"
872   ;;
873   --disable-sparse) sparse="no"
874   ;;
875   --disable-strip) strip_opt="no"
876   ;;
877   --disable-vnc-sasl) vnc_sasl="no"
878   ;;
879   --enable-vnc-sasl) vnc_sasl="yes"
880   ;;
881   --disable-vnc-jpeg) vnc_jpeg="no"
882   ;;
883   --enable-vnc-jpeg) vnc_jpeg="yes"
884   ;;
885   --disable-vnc-png) vnc_png="no"
886   ;;
887   --enable-vnc-png) vnc_png="yes"
888   ;;
889   --disable-slirp) slirp="no"
890   ;;
891   --disable-vde) vde="no"
892   ;;
893   --enable-vde) vde="yes"
894   ;;
895   --disable-netmap) netmap="no"
896   ;;
897   --enable-netmap) netmap="yes"
898   ;;
899   --disable-xen) xen="no"
900   ;;
901   --enable-xen) xen="yes"
902   ;;
903   --disable-xen-pci-passthrough) xen_pci_passthrough="no"
904   ;;
905   --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
906   ;;
907   --disable-xen-pv-domain-build) xen_pv_domain_build="no"
908   ;;
909   --enable-xen-pv-domain-build) xen_pv_domain_build="yes"
910   ;;
911   --disable-brlapi) brlapi="no"
912   ;;
913   --enable-brlapi) brlapi="yes"
914   ;;
915   --disable-bluez) bluez="no"
916   ;;
917   --enable-bluez) bluez="yes"
918   ;;
919   --disable-kvm) kvm="no"
920   ;;
921   --enable-kvm) kvm="yes"
922   ;;
923   --disable-colo) colo="no"
924   ;;
925   --enable-colo) colo="yes"
926   ;;
927   --disable-tcg-interpreter) tcg_interpreter="no"
928   ;;
929   --enable-tcg-interpreter) tcg_interpreter="yes"
930   ;;
931   --disable-cap-ng)  cap_ng="no"
932   ;;
933   --enable-cap-ng) cap_ng="yes"
934   ;;
935   --disable-spice) spice="no"
936   ;;
937   --enable-spice) spice="yes"
938   ;;
939   --disable-libiscsi) libiscsi="no"
940   ;;
941   --enable-libiscsi) libiscsi="yes"
942   ;;
943   --disable-libnfs) libnfs="no"
944   ;;
945   --enable-libnfs) libnfs="yes"
946   ;;
947   --enable-profiler) profiler="yes"
948   ;;
949   --disable-cocoa) cocoa="no"
950   ;;
951   --enable-cocoa)
952       cocoa="yes" ;
953       audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
954   ;;
955   --disable-system) softmmu="no"
956   ;;
957   --enable-system) softmmu="yes"
958   ;;
959   --disable-user)
960       linux_user="no" ;
961       bsd_user="no" ;
962   ;;
963   --enable-user) ;;
964   --disable-linux-user) linux_user="no"
965   ;;
966   --enable-linux-user) linux_user="yes"
967   ;;
968   --disable-bsd-user) bsd_user="no"
969   ;;
970   --enable-bsd-user) bsd_user="yes"
971   ;;
972   --enable-pie) pie="yes"
973   ;;
974   --disable-pie) pie="no"
975   ;;
976   --enable-werror) werror="yes"
977   ;;
978   --disable-werror) werror="no"
979   ;;
980   --enable-stack-protector) stack_protector="yes"
981   ;;
982   --disable-stack-protector) stack_protector="no"
983   ;;
984   --disable-curses) curses="no"
985   ;;
986   --enable-curses) curses="yes"
987   ;;
988   --disable-curl) curl="no"
989   ;;
990   --enable-curl) curl="yes"
991   ;;
992   --disable-fdt) fdt="no"
993   ;;
994   --enable-fdt) fdt="yes"
995   ;;
996   --disable-linux-aio) linux_aio="no"
997   ;;
998   --enable-linux-aio) linux_aio="yes"
999   ;;
1000   --disable-attr) attr="no"
1001   ;;
1002   --enable-attr) attr="yes"
1003   ;;
1004   --disable-blobs) blobs="no"
1005   ;;
1006   --with-pkgversion=*) pkgversion=" ($optarg)"
1007   ;;
1008   --with-coroutine=*) coroutine="$optarg"
1009   ;;
1010   --disable-coroutine-pool) coroutine_pool="no"
1011   ;;
1012   --enable-coroutine-pool) coroutine_pool="yes"
1013   ;;
1014   --enable-debug-stack-usage) debug_stack_usage="yes"
1015   ;;
1016   --disable-docs) docs="no"
1017   ;;
1018   --enable-docs) docs="yes"
1019   ;;
1020   --disable-vhost-net) vhost_net="no"
1021   ;;
1022   --enable-vhost-net) vhost_net="yes"
1023   ;;
1024   --disable-vhost-scsi) vhost_scsi="no"
1025   ;;
1026   --enable-vhost-scsi) vhost_scsi="yes"
1027   ;;
1028   --disable-vhost-vsock) vhost_vsock="no"
1029   ;;
1030   --enable-vhost-vsock) vhost_vsock="yes"
1031   ;;
1032   --disable-opengl) opengl="no"
1033   ;;
1034   --enable-opengl) opengl="yes"
1035   ;;
1036   --disable-rbd) rbd="no"
1037   ;;
1038   --enable-rbd) rbd="yes"
1039   ;;
1040   --disable-xfsctl) xfs="no"
1041   ;;
1042   --enable-xfsctl) xfs="yes"
1043   ;;
1044   --disable-smartcard) smartcard="no"
1045   ;;
1046   --enable-smartcard) smartcard="yes"
1047   ;;
1048   --disable-libusb) libusb="no"
1049   ;;
1050   --enable-libusb) libusb="yes"
1051   ;;
1052   --disable-usb-redir) usb_redir="no"
1053   ;;
1054   --enable-usb-redir) usb_redir="yes"
1055   ;;
1056   --disable-zlib-test) zlib="no"
1057   ;;
1058   --disable-lzo) lzo="no"
1059   ;;
1060   --enable-lzo) lzo="yes"
1061   ;;
1062   --disable-snappy) snappy="no"
1063   ;;
1064   --enable-snappy) snappy="yes"
1065   ;;
1066   --disable-bzip2) bzip2="no"
1067   ;;
1068   --enable-bzip2) bzip2="yes"
1069   ;;
1070   --enable-guest-agent) guest_agent="yes"
1071   ;;
1072   --disable-guest-agent) guest_agent="no"
1073   ;;
1074   --enable-guest-agent-msi) guest_agent_msi="yes"
1075   ;;
1076   --disable-guest-agent-msi) guest_agent_msi="no"
1077   ;;
1078   --with-vss-sdk) vss_win32_sdk=""
1079   ;;
1080   --with-vss-sdk=*) vss_win32_sdk="$optarg"
1081   ;;
1082   --without-vss-sdk) vss_win32_sdk="no"
1083   ;;
1084   --with-win-sdk) win_sdk=""
1085   ;;
1086   --with-win-sdk=*) win_sdk="$optarg"
1087   ;;
1088   --without-win-sdk) win_sdk="no"
1089   ;;
1090   --enable-tools) want_tools="yes"
1091   ;;
1092   --disable-tools) want_tools="no"
1093   ;;
1094   --enable-seccomp) seccomp="yes"
1095   ;;
1096   --disable-seccomp) seccomp="no"
1097   ;;
1098   --disable-glusterfs) glusterfs="no"
1099   ;;
1100   --enable-glusterfs) glusterfs="yes"
1101   ;;
1102   --disable-archipelago) archipelago="no"
1103   ;;
1104   --enable-archipelago) archipelago="yes"
1105   ;;
1106   --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1107       echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1108   ;;
1109   --enable-vhdx|--disable-vhdx)
1110       echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1111   ;;
1112   --enable-uuid|--disable-uuid)
1113       echo "$0: $opt is obsolete, UUID support is always built" >&2
1114   ;;
1115   --disable-gtk) gtk="no"
1116   ;;
1117   --enable-gtk) gtk="yes"
1118   ;;
1119   --tls-priority=*) tls_priority="$optarg"
1120   ;;
1121   --disable-gnutls) gnutls="no"
1122   ;;
1123   --enable-gnutls) gnutls="yes"
1124   ;;
1125   --disable-nettle) nettle="no"
1126   ;;
1127   --enable-nettle) nettle="yes"
1128   ;;
1129   --disable-gcrypt) gcrypt="no"
1130   ;;
1131   --enable-gcrypt) gcrypt="yes"
1132   ;;
1133   --enable-rdma) rdma="yes"
1134   ;;
1135   --disable-rdma) rdma="no"
1136   ;;
1137   --with-gtkabi=*) gtkabi="$optarg"
1138   ;;
1139   --disable-vte) vte="no"
1140   ;;
1141   --enable-vte) vte="yes"
1142   ;;
1143   --disable-virglrenderer) virglrenderer="no"
1144   ;;
1145   --enable-virglrenderer) virglrenderer="yes"
1146   ;;
1147   --disable-tpm) tpm="no"
1148   ;;
1149   --enable-tpm) tpm="yes"
1150   ;;
1151   --disable-libssh2) libssh2="no"
1152   ;;
1153   --enable-libssh2) libssh2="yes"
1154   ;;
1155   --disable-numa) numa="no"
1156   ;;
1157   --enable-numa) numa="yes"
1158   ;;
1159   --disable-tcmalloc) tcmalloc="no"
1160   ;;
1161   --enable-tcmalloc) tcmalloc="yes"
1162   ;;
1163   --disable-jemalloc) jemalloc="no"
1164   ;;
1165   --enable-jemalloc) jemalloc="yes"
1166   ;;
1167   --disable-replication) replication="no"
1168   ;;
1169   --enable-replication) replication="yes"
1170   ;;
1171   *)
1172       echo "ERROR: unknown option $opt"
1173       echo "Try '$0 --help' for more information"
1174       exit 1
1175   ;;
1176   esac
1177 done
1178
1179 if ! has $python; then
1180   error_exit "Python not found. Use --python=/path/to/python"
1181 fi
1182
1183 # Note that if the Python conditional here evaluates True we will exit
1184 # with status 1 which is a shell 'false' value.
1185 if ! $python -c 'import sys; sys.exit(sys.version_info < (2,6) or sys.version_info >= (3,))'; then
1186   error_exit "Cannot use '$python', Python 2.6 or later is required." \
1187       "Note that Python 3 or later is not yet supported." \
1188       "Use --python=/path/to/python to specify a supported Python."
1189 fi
1190
1191 # Suppress writing compiled files
1192 python="$python -B"
1193
1194 case "$cpu" in
1195     ppc)
1196            CPU_CFLAGS="-m32"
1197            LDFLAGS="-m32 $LDFLAGS"
1198            ;;
1199     ppc64)
1200            CPU_CFLAGS="-m64"
1201            LDFLAGS="-m64 $LDFLAGS"
1202            ;;
1203     sparc)
1204            LDFLAGS="-m32 $LDFLAGS"
1205            CPU_CFLAGS="-m32 -mcpu=ultrasparc"
1206            ;;
1207     sparc64)
1208            LDFLAGS="-m64 $LDFLAGS"
1209            CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1210            ;;
1211     s390)
1212            CPU_CFLAGS="-m31"
1213            LDFLAGS="-m31 $LDFLAGS"
1214            ;;
1215     s390x)
1216            CPU_CFLAGS="-m64"
1217            LDFLAGS="-m64 $LDFLAGS"
1218            ;;
1219     i386)
1220            CPU_CFLAGS="-m32"
1221            LDFLAGS="-m32 $LDFLAGS"
1222            cc_i386='$(CC) -m32'
1223            ;;
1224     x86_64)
1225            # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1226            # If we truly care, we should simply detect this case at
1227            # runtime and generate the fallback to serial emulation.
1228            CPU_CFLAGS="-m64 -mcx16"
1229            LDFLAGS="-m64 $LDFLAGS"
1230            cc_i386='$(CC) -m32'
1231            ;;
1232     x32)
1233            CPU_CFLAGS="-mx32"
1234            LDFLAGS="-mx32 $LDFLAGS"
1235            cc_i386='$(CC) -m32'
1236            ;;
1237     # No special flags required for other host CPUs
1238 esac
1239
1240 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1241 EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1242
1243 # For user-mode emulation the host arch has to be one we explicitly
1244 # support, even if we're using TCI.
1245 if [ "$ARCH" = "unknown" ]; then
1246   bsd_user="no"
1247   linux_user="no"
1248 fi
1249
1250 default_target_list=""
1251
1252 mak_wilds=""
1253
1254 if [ "$softmmu" = "yes" ]; then
1255     mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1256 fi
1257 if [ "$linux_user" = "yes" ]; then
1258     mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1259 fi
1260 if [ "$bsd_user" = "yes" ]; then
1261     mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1262 fi
1263
1264 for config in $mak_wilds; do
1265     default_target_list="${default_target_list} $(basename "$config" .mak)"
1266 done
1267
1268 if test x"$show_help" = x"yes" ; then
1269 cat << EOF
1270
1271 Usage: configure [options]
1272 Options: [defaults in brackets after descriptions]
1273
1274 Standard options:
1275   --help                   print this message
1276   --prefix=PREFIX          install in PREFIX [$prefix]
1277   --interp-prefix=PREFIX   where to find shared libraries, etc.
1278                            use %M for cpu name [$interp_prefix]
1279   --target-list=LIST       set target list (default: build everything)
1280 $(echo Available targets: $default_target_list | \
1281   fold -s -w 53 | sed -e 's/^/                           /')
1282
1283 Advanced options (experts only):
1284   --source-path=PATH       path of source code [$source_path]
1285   --cross-prefix=PREFIX    use PREFIX for compile tools [$cross_prefix]
1286   --cc=CC                  use C compiler CC [$cc]
1287   --iasl=IASL              use ACPI compiler IASL [$iasl]
1288   --host-cc=CC             use C compiler CC [$host_cc] for code run at
1289                            build time
1290   --cxx=CXX                use C++ compiler CXX [$cxx]
1291   --objcc=OBJCC            use Objective-C compiler OBJCC [$objcc]
1292   --extra-cflags=CFLAGS    append extra C compiler flags QEMU_CFLAGS
1293   --extra-ldflags=LDFLAGS  append extra linker flags LDFLAGS
1294   --make=MAKE              use specified make [$make]
1295   --install=INSTALL        use specified install [$install]
1296   --python=PYTHON          use specified python [$python]
1297   --smbd=SMBD              use specified smbd [$smbd]
1298   --static                 enable static build [$static]
1299   --mandir=PATH            install man pages in PATH
1300   --datadir=PATH           install firmware in PATH$confsuffix
1301   --docdir=PATH            install documentation in PATH$confsuffix
1302   --bindir=PATH            install binaries in PATH
1303   --libdir=PATH            install libraries in PATH
1304   --sysconfdir=PATH        install config in PATH$confsuffix
1305   --localstatedir=PATH     install local state in PATH (set at runtime on win32)
1306   --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1307   --enable-debug           enable common debug build options
1308   --disable-strip          disable stripping binaries
1309   --disable-werror         disable compilation abort on warning
1310   --disable-stack-protector disable compiler-provided stack protection
1311   --audio-drv-list=LIST    set audio drivers list:
1312                            Available drivers: $audio_possible_drivers
1313   --block-drv-whitelist=L  Same as --block-drv-rw-whitelist=L
1314   --block-drv-rw-whitelist=L
1315                            set block driver read-write whitelist
1316                            (affects only QEMU, not qemu-img)
1317   --block-drv-ro-whitelist=L
1318                            set block driver read-only whitelist
1319                            (affects only QEMU, not qemu-img)
1320   --enable-trace-backends=B Set trace backend
1321                            Available backends: $($python $source_path/scripts/tracetool.py --list-backends)
1322   --with-trace-file=NAME   Full PATH,NAME of file to store traces
1323                            Default:trace-<pid>
1324   --disable-slirp          disable SLIRP userspace network connectivity
1325   --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1326   --oss-lib                path to OSS library
1327   --cpu=CPU                Build for host CPU [$cpu]
1328   --with-coroutine=BACKEND coroutine backend. Supported options:
1329                            gthread, ucontext, sigaltstack, windows
1330   --enable-gcov            enable test coverage analysis with gcov
1331   --gcov=GCOV              use specified gcov [$gcov_tool]
1332   --disable-blobs          disable installing provided firmware blobs
1333   --with-vss-sdk=SDK-path  enable Windows VSS support in QEMU Guest Agent
1334   --with-win-sdk=SDK-path  path to Windows Platform SDK (to build VSS .tlb)
1335   --tls-priority           default TLS protocol/cipher priority string
1336
1337 Optional features, enabled with --enable-FEATURE and
1338 disabled with --disable-FEATURE, default is enabled if available:
1339
1340   system          all system emulation targets
1341   user            supported user emulation targets
1342   linux-user      all linux usermode emulation targets
1343   bsd-user        all BSD usermode emulation targets
1344   docs            build documentation
1345   guest-agent     build the QEMU Guest Agent
1346   guest-agent-msi build guest agent Windows MSI installation package
1347   pie             Position Independent Executables
1348   modules         modules support
1349   debug-tcg       TCG debugging (default is disabled)
1350   debug-info      debugging information
1351   sparse          sparse checker
1352
1353   gnutls          GNUTLS cryptography support
1354   nettle          nettle cryptography support
1355   gcrypt          libgcrypt cryptography support
1356   sdl             SDL UI
1357   --with-sdlabi     select preferred SDL ABI 1.2 or 2.0
1358   gtk             gtk UI
1359   --with-gtkabi     select preferred GTK ABI 2.0 or 3.0
1360   vte             vte support for the gtk UI
1361   curses          curses UI
1362   vnc             VNC UI support
1363   vnc-sasl        SASL encryption for VNC server
1364   vnc-jpeg        JPEG lossy compression for VNC server
1365   vnc-png         PNG compression for VNC server
1366   cocoa           Cocoa UI (Mac OS X only)
1367   virtfs          VirtFS
1368   xen             xen backend driver support
1369   xen-pci-passthrough
1370   brlapi          BrlAPI (Braile)
1371   curl            curl connectivity
1372   fdt             fdt device tree
1373   bluez           bluez stack connectivity
1374   kvm             KVM acceleration support
1375   colo            COarse-grain LOck-stepping VM for Non-stop Service
1376   rdma            RDMA-based migration support
1377   vde             support for vde network
1378   netmap          support for netmap network
1379   linux-aio       Linux AIO support
1380   cap-ng          libcap-ng support
1381   attr            attr and xattr support
1382   vhost-net       vhost-net acceleration support
1383   spice           spice
1384   rbd             rados block device (rbd)
1385   libiscsi        iscsi support
1386   libnfs          nfs support
1387   smartcard       smartcard support (libcacard)
1388   libusb          libusb (for usb passthrough)
1389   usb-redir       usb network redirection support
1390   lzo             support of lzo compression library
1391   snappy          support of snappy compression library
1392   bzip2           support of bzip2 compression library
1393                   (for reading bzip2-compressed dmg images)
1394   seccomp         seccomp support
1395   coroutine-pool  coroutine freelist (better performance)
1396   glusterfs       GlusterFS backend
1397   archipelago     Archipelago backend
1398   tpm             TPM support
1399   libssh2         ssh block device support
1400   numa            libnuma support
1401   tcmalloc        tcmalloc support
1402   jemalloc        jemalloc support
1403   replication     replication support
1404
1405 NOTE: The object files are built at the place where configure is launched
1406 EOF
1407 exit 0
1408 fi
1409
1410 # Now we have handled --enable-tcg-interpreter and know we're not just
1411 # printing the help message, bail out if the host CPU isn't supported.
1412 if test "$ARCH" = "unknown"; then
1413     if test "$tcg_interpreter" = "yes" ; then
1414         echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1415     else
1416         error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1417     fi
1418 fi
1419
1420 # Consult white-list to determine whether to enable werror
1421 # by default.  Only enable by default for git builds
1422 if test -z "$werror" ; then
1423     if test -d "$source_path/.git" -a \
1424         \( "$linux" = "yes" -o "$mingw32" = "yes" \) ; then
1425         werror="yes"
1426     else
1427         werror="no"
1428     fi
1429 fi
1430
1431 # check that the C compiler works.
1432 write_c_skeleton;
1433 if compile_object ; then
1434   : C compiler works ok
1435 else
1436     error_exit "\"$cc\" either does not exist or does not work"
1437 fi
1438 if ! compile_prog ; then
1439     error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1440 fi
1441
1442 # Check that the C++ compiler exists and works with the C compiler
1443 if has $cxx; then
1444     cat > $TMPC <<EOF
1445 int c_function(void);
1446 int main(void) { return c_function(); }
1447 EOF
1448
1449     compile_object
1450
1451     cat > $TMPCXX <<EOF
1452 extern "C" {
1453    int c_function(void);
1454 }
1455 int c_function(void) { return 42; }
1456 EOF
1457
1458     update_cxxflags
1459
1460     if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
1461         # C++ compiler $cxx works ok with C compiler $cc
1462         :
1463     else
1464         echo "C++ compiler $cxx does not work with C compiler $cc"
1465         echo "Disabling C++ specific optional code"
1466         cxx=
1467     fi
1468 else
1469     echo "No C++ compiler available; disabling C++ specific optional code"
1470     cxx=
1471 fi
1472
1473 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1474 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1475 gcc_flags="-Wmissing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1476 gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
1477 gcc_flags="-Wno-initializer-overrides $gcc_flags"
1478 gcc_flags="-Wno-string-plus-int $gcc_flags"
1479 # Note that we do not add -Werror to gcc_flags here, because that would
1480 # enable it for all configure tests. If a configure test failed due
1481 # to -Werror this would just silently disable some features,
1482 # so it's too error prone.
1483
1484 cc_has_warning_flag() {
1485     write_c_skeleton;
1486
1487     # Use the positive sense of the flag when testing for -Wno-wombat
1488     # support (gcc will happily accept the -Wno- form of unknown
1489     # warning options).
1490     optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1491     compile_prog "-Werror $optflag" ""
1492 }
1493
1494 for flag in $gcc_flags; do
1495     if cc_has_warning_flag $flag ; then
1496         QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1497     fi
1498 done
1499
1500 if test "$stack_protector" != "no"; then
1501   cat > $TMPC << EOF
1502 int main(int argc, char *argv[])
1503 {
1504     char arr[64], *p = arr, *c = argv[0];
1505     while (*c) {
1506         *p++ = *c++;
1507     }
1508     return 0;
1509 }
1510 EOF
1511   gcc_flags="-fstack-protector-strong -fstack-protector-all"
1512   sp_on=0
1513   for flag in $gcc_flags; do
1514     # We need to check both a compile and a link, since some compiler
1515     # setups fail only on a .c->.o compile and some only at link time
1516     if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1517        compile_prog "-Werror $flag" ""; then
1518       QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1519       sp_on=1
1520       break
1521     fi
1522   done
1523   if test "$stack_protector" = yes; then
1524     if test $sp_on = 0; then
1525       error_exit "Stack protector not supported"
1526     fi
1527   fi
1528 fi
1529
1530 # Workaround for http://gcc.gnu.org/PR55489.  Happens with -fPIE/-fPIC and
1531 # large functions that use global variables.  The bug is in all releases of
1532 # GCC, but it became particularly acute in 4.6.x and 4.7.x.  It is fixed in
1533 # 4.7.3 and 4.8.0.  We should be able to delete this at the end of 2013.
1534 cat > $TMPC << EOF
1535 #if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1536 int main(void) { return 0; }
1537 #else
1538 #error No bug in this compiler.
1539 #endif
1540 EOF
1541 if compile_prog "-Werror -fno-gcse" "" ; then
1542   TRANSLATE_OPT_CFLAGS=-fno-gcse
1543 fi
1544
1545 if test "$static" = "yes" ; then
1546   if test "$modules" = "yes" ; then
1547     error_exit "static and modules are mutually incompatible"
1548   fi
1549   if test "$pie" = "yes" ; then
1550     error_exit "static and pie are mutually incompatible"
1551   else
1552     pie="no"
1553   fi
1554 fi
1555
1556 # Unconditional check for compiler __thread support
1557   cat > $TMPC << EOF
1558 static __thread int tls_var;
1559 int main(void) { return tls_var; }
1560 EOF
1561
1562 if ! compile_prog "-Werror" "" ; then
1563     error_exit "Your compiler does not support the __thread specifier for " \
1564         "Thread-Local Storage (TLS). Please upgrade to a version that does."
1565 fi
1566
1567 if test "$pie" = ""; then
1568   case "$cpu-$targetos" in
1569     i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
1570       ;;
1571     *)
1572       pie="no"
1573       ;;
1574   esac
1575 fi
1576
1577 if test "$pie" != "no" ; then
1578   cat > $TMPC << EOF
1579
1580 #ifdef __linux__
1581 #  define THREAD __thread
1582 #else
1583 #  define THREAD
1584 #endif
1585
1586 static THREAD int tls_var;
1587
1588 int main(void) { return tls_var; }
1589
1590 EOF
1591   if compile_prog "-fPIE -DPIE" "-pie"; then
1592     QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1593     LDFLAGS="-pie $LDFLAGS"
1594     pie="yes"
1595     if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1596       LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1597     fi
1598   else
1599     if test "$pie" = "yes"; then
1600       error_exit "PIE not available due to missing toolchain support"
1601     else
1602       echo "Disabling PIE due to missing toolchain support"
1603       pie="no"
1604     fi
1605   fi
1606
1607   if compile_prog "-Werror -fno-pie" "-nopie"; then
1608     CFLAGS_NOPIE="-fno-pie"
1609     LDFLAGS_NOPIE="-nopie"
1610   fi
1611 fi
1612
1613 ##########################################
1614 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
1615 # use i686 as default anyway, but for those that don't, an explicit
1616 # specification is necessary
1617
1618 if test "$cpu" = "i386"; then
1619   cat > $TMPC << EOF
1620 static int sfaa(int *ptr)
1621 {
1622   return __sync_fetch_and_and(ptr, 0);
1623 }
1624
1625 int main(void)
1626 {
1627   int val = 42;
1628   val = __sync_val_compare_and_swap(&val, 0, 1);
1629   sfaa(&val);
1630   return val;
1631 }
1632 EOF
1633   if ! compile_prog "" "" ; then
1634     QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1635   fi
1636 fi
1637
1638 #########################################
1639 # Solaris specific configure tool chain decisions
1640
1641 if test "$solaris" = "yes" ; then
1642   if has $install; then
1643     :
1644   else
1645     error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1646         "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1647         "to get ginstall which is used by default (which lives in /opt/csw/bin)"
1648   fi
1649   if test "$(path_of $install)" = "/usr/sbin/install" ; then
1650     error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1651         "try ginstall from the GNU fileutils available from www.blastwave.org" \
1652         "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
1653   fi
1654   if has ar; then
1655     :
1656   else
1657     if test -f /usr/ccs/bin/ar ; then
1658       error_exit "No path includes ar" \
1659           "Add /usr/ccs/bin to your path and rerun configure"
1660     fi
1661     error_exit "No path includes ar"
1662   fi
1663 fi
1664
1665 if test -z "${target_list+xxx}" ; then
1666     target_list="$default_target_list"
1667 else
1668     target_list=$(echo "$target_list" | sed -e 's/,/ /g')
1669 fi
1670
1671 # Check that we recognised the target name; this allows a more
1672 # friendly error message than if we let it fall through.
1673 for target in $target_list; do
1674     case " $default_target_list " in
1675         *" $target "*)
1676             ;;
1677         *)
1678             error_exit "Unknown target name '$target'"
1679             ;;
1680     esac
1681 done
1682
1683 # see if system emulation was really requested
1684 case " $target_list " in
1685   *"-softmmu "*) softmmu=yes
1686   ;;
1687   *) softmmu=no
1688   ;;
1689 esac
1690
1691 feature_not_found() {
1692   feature=$1
1693   remedy=$2
1694
1695   error_exit "User requested feature $feature" \
1696       "configure was not able to find it." \
1697       "$remedy"
1698 }
1699
1700 # ---
1701 # big/little endian test
1702 cat > $TMPC << EOF
1703 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1704 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1705 extern int foo(short *, short *);
1706 int main(int argc, char *argv[]) {
1707     return foo(big_endian, little_endian);
1708 }
1709 EOF
1710
1711 if compile_object ; then
1712     if grep -q BiGeNdIaN $TMPO ; then
1713         bigendian="yes"
1714     elif grep -q LiTtLeEnDiAn $TMPO ; then
1715         bigendian="no"
1716     else
1717         echo big/little test failed
1718     fi
1719 else
1720     echo big/little test failed
1721 fi
1722
1723 ##########################################
1724 # cocoa implies not SDL or GTK
1725 # (the cocoa UI code currently assumes it is always the active UI
1726 # and doesn't interact well with other UI frontend code)
1727 if test "$cocoa" = "yes"; then
1728     if test "$sdl" = "yes"; then
1729         error_exit "Cocoa and SDL UIs cannot both be enabled at once"
1730     fi
1731     if test "$gtk" = "yes"; then
1732         error_exit "Cocoa and GTK UIs cannot both be enabled at once"
1733     fi
1734     gtk=no
1735     sdl=no
1736 fi
1737
1738 # Some versions of Mac OS X incorrectly define SIZE_MAX
1739 cat > $TMPC << EOF
1740 #include <stdint.h>
1741 #include <stdio.h>
1742 int main(int argc, char *argv[]) {
1743     return printf("%zu", SIZE_MAX);
1744 }
1745 EOF
1746 have_broken_size_max=no
1747 if ! compile_object -Werror ; then
1748     have_broken_size_max=yes
1749 fi
1750
1751 ##########################################
1752 # L2TPV3 probe
1753
1754 cat > $TMPC <<EOF
1755 #include <sys/socket.h>
1756 #include <linux/ip.h>
1757 int main(void) { return sizeof(struct mmsghdr); }
1758 EOF
1759 if compile_prog "" "" ; then
1760   l2tpv3=yes
1761 else
1762   l2tpv3=no
1763 fi
1764
1765 ##########################################
1766 # MinGW / Mingw-w64 localtime_r/gmtime_r check
1767
1768 if test "$mingw32" = "yes"; then
1769     # Some versions of MinGW / Mingw-w64 lack localtime_r
1770     # and gmtime_r entirely.
1771     #
1772     # Some versions of Mingw-w64 define a macro for
1773     # localtime_r/gmtime_r.
1774     #
1775     # Some versions of Mingw-w64 will define functions
1776     # for localtime_r/gmtime_r, but only if you have
1777     # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
1778     # though, unistd.h and pthread.h both define
1779     # that for you.
1780     #
1781     # So this #undef localtime_r and #include <unistd.h>
1782     # are not in fact redundant.
1783 cat > $TMPC << EOF
1784 #include <unistd.h>
1785 #include <time.h>
1786 #undef localtime_r
1787 int main(void) { localtime_r(NULL, NULL); return 0; }
1788 EOF
1789     if compile_prog "" "" ; then
1790         localtime_r="yes"
1791     else
1792         localtime_r="no"
1793     fi
1794 fi
1795
1796 ##########################################
1797 # pkg-config probe
1798
1799 if ! has "$pkg_config_exe"; then
1800   error_exit "pkg-config binary '$pkg_config_exe' not found"
1801 fi
1802
1803 ##########################################
1804 # NPTL probe
1805
1806 if test "$linux_user" = "yes"; then
1807   cat > $TMPC <<EOF
1808 #include <sched.h>
1809 #include <linux/futex.h>
1810 int main(void) {
1811 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1812 #error bork
1813 #endif
1814   return 0;
1815 }
1816 EOF
1817   if ! compile_object ; then
1818     feature_not_found "nptl" "Install glibc and linux kernel headers."
1819   fi
1820 fi
1821
1822 ##########################################
1823 # avx2 optimization requirement check
1824
1825 cat > $TMPC << EOF
1826 #pragma GCC push_options
1827 #pragma GCC target("avx2")
1828 #include <cpuid.h>
1829 #include <immintrin.h>
1830 static int bar(void *a) {
1831     __m256i x = *(__m256i *)a;
1832     return _mm256_testz_si256(x, x);
1833 }
1834 int main(int argc, char *argv[]) { return bar(argv[0]); }
1835 EOF
1836 if compile_object "" ; then
1837   avx2_opt="yes"
1838 fi
1839
1840 #########################################
1841 # zlib check
1842
1843 if test "$zlib" != "no" ; then
1844     cat > $TMPC << EOF
1845 #include <zlib.h>
1846 int main(void) { zlibVersion(); return 0; }
1847 EOF
1848     if compile_prog "" "-lz" ; then
1849         :
1850     else
1851         error_exit "zlib check failed" \
1852             "Make sure to have the zlib libs and headers installed."
1853     fi
1854 fi
1855 LIBS="$LIBS -lz"
1856
1857 ##########################################
1858 # lzo check
1859
1860 if test "$lzo" != "no" ; then
1861     cat > $TMPC << EOF
1862 #include <lzo/lzo1x.h>
1863 int main(void) { lzo_version(); return 0; }
1864 EOF
1865     if compile_prog "" "-llzo2" ; then
1866         libs_softmmu="$libs_softmmu -llzo2"
1867         lzo="yes"
1868     else
1869         if test "$lzo" = "yes"; then
1870             feature_not_found "liblzo2" "Install liblzo2 devel"
1871         fi
1872         lzo="no"
1873     fi
1874 fi
1875
1876 ##########################################
1877 # snappy check
1878
1879 if test "$snappy" != "no" ; then
1880     cat > $TMPC << EOF
1881 #include <snappy-c.h>
1882 int main(void) { snappy_max_compressed_length(4096); return 0; }
1883 EOF
1884     if compile_prog "" "-lsnappy" ; then
1885         libs_softmmu="$libs_softmmu -lsnappy"
1886         snappy="yes"
1887     else
1888         if test "$snappy" = "yes"; then
1889             feature_not_found "libsnappy" "Install libsnappy devel"
1890         fi
1891         snappy="no"
1892     fi
1893 fi
1894
1895 ##########################################
1896 # bzip2 check
1897
1898 if test "$bzip2" != "no" ; then
1899     cat > $TMPC << EOF
1900 #include <bzlib.h>
1901 int main(void) { BZ2_bzlibVersion(); return 0; }
1902 EOF
1903     if compile_prog "" "-lbz2" ; then
1904         bzip2="yes"
1905     else
1906         if test "$bzip2" = "yes"; then
1907             feature_not_found "libbzip2" "Install libbzip2 devel"
1908         fi
1909         bzip2="no"
1910     fi
1911 fi
1912
1913 ##########################################
1914 # libseccomp check
1915
1916 if test "$seccomp" != "no" ; then
1917     case "$cpu" in
1918     i386|x86_64)
1919         libseccomp_minver="2.1.0"
1920         ;;
1921     mips)
1922         libseccomp_minver="2.2.0"
1923         ;;
1924     arm|aarch64)
1925         libseccomp_minver="2.2.3"
1926         ;;
1927     ppc|ppc64)
1928         libseccomp_minver="2.3.0"
1929         ;;
1930     *)
1931         libseccomp_minver=""
1932         ;;
1933     esac
1934
1935     if test "$libseccomp_minver" != "" &&
1936        $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
1937         libs_softmmu="$libs_softmmu $($pkg_config --libs libseccomp)"
1938         QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags libseccomp)"
1939         seccomp="yes"
1940     else
1941         if test "$seccomp" = "yes" ; then
1942             if test "$libseccomp_minver" != "" ; then
1943                 feature_not_found "libseccomp" \
1944                     "Install libseccomp devel >= $libseccomp_minver"
1945             else
1946                 feature_not_found "libseccomp" \
1947                     "libseccomp is not supported for host cpu $cpu"
1948             fi
1949         fi
1950         seccomp="no"
1951     fi
1952 fi
1953 ##########################################
1954 # xen probe
1955
1956 if test "$xen" != "no" ; then
1957   xen_libs="-lxenstore -lxenctrl -lxenguest"
1958   xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
1959
1960   # First we test whether Xen headers and libraries are available.
1961   # If no, we are done and there is no Xen support.
1962   # If yes, more tests are run to detect the Xen version.
1963
1964   # Xen (any)
1965   cat > $TMPC <<EOF
1966 #include <xenctrl.h>
1967 int main(void) {
1968   return 0;
1969 }
1970 EOF
1971   if ! compile_prog "" "$xen_libs" ; then
1972     # Xen not found
1973     if test "$xen" = "yes" ; then
1974       feature_not_found "xen" "Install xen devel"
1975     fi
1976     xen=no
1977
1978   # Xen unstable
1979   elif
1980       cat > $TMPC <<EOF &&
1981 /*
1982  * If we have stable libs the we don't want the libxc compat
1983  * layers, regardless of what CFLAGS we may have been given.
1984  *
1985  * Also, check if xengnttab_grant_copy_segment_t is defined and
1986  * grant copy operation is implemented.
1987  */
1988 #undef XC_WANT_COMPAT_EVTCHN_API
1989 #undef XC_WANT_COMPAT_GNTTAB_API
1990 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
1991 #include <xenctrl.h>
1992 #include <xenstore.h>
1993 #include <xenevtchn.h>
1994 #include <xengnttab.h>
1995 #include <xenforeignmemory.h>
1996 #include <stdint.h>
1997 #include <xen/hvm/hvm_info_table.h>
1998 #if !defined(HVM_MAX_VCPUS)
1999 # error HVM_MAX_VCPUS not defined
2000 #endif
2001 int main(void) {
2002   xc_interface *xc = NULL;
2003   xenforeignmemory_handle *xfmem;
2004   xenevtchn_handle *xe;
2005   xengnttab_handle *xg;
2006   xen_domain_handle_t handle;
2007   xengnttab_grant_copy_segment_t* seg = NULL;
2008
2009   xs_daemon_open();
2010
2011   xc = xc_interface_open(0, 0, 0);
2012   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2013   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2014   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2015   xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2016   xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2017
2018   xfmem = xenforeignmemory_open(0, 0);
2019   xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2020
2021   xe = xenevtchn_open(0, 0);
2022   xenevtchn_fd(xe);
2023
2024   xg = xengnttab_open(0, 0);
2025   xengnttab_grant_copy(xg, 0, seg);
2026
2027   return 0;
2028 }
2029 EOF
2030       compile_prog "" "$xen_libs $xen_stable_libs"
2031     then
2032     xen_ctrl_version=480
2033     xen=yes
2034   elif
2035       cat > $TMPC <<EOF &&
2036 /*
2037  * If we have stable libs the we don't want the libxc compat
2038  * layers, regardless of what CFLAGS we may have been given.
2039  */
2040 #undef XC_WANT_COMPAT_EVTCHN_API
2041 #undef XC_WANT_COMPAT_GNTTAB_API
2042 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2043 #include <xenctrl.h>
2044 #include <xenstore.h>
2045 #include <xenevtchn.h>
2046 #include <xengnttab.h>
2047 #include <xenforeignmemory.h>
2048 #include <stdint.h>
2049 #include <xen/hvm/hvm_info_table.h>
2050 #if !defined(HVM_MAX_VCPUS)
2051 # error HVM_MAX_VCPUS not defined
2052 #endif
2053 int main(void) {
2054   xc_interface *xc = NULL;
2055   xenforeignmemory_handle *xfmem;
2056   xenevtchn_handle *xe;
2057   xengnttab_handle *xg;
2058   xen_domain_handle_t handle;
2059
2060   xs_daemon_open();
2061
2062   xc = xc_interface_open(0, 0, 0);
2063   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2064   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2065   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2066   xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2067   xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2068
2069   xfmem = xenforeignmemory_open(0, 0);
2070   xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2071
2072   xe = xenevtchn_open(0, 0);
2073   xenevtchn_fd(xe);
2074
2075   xg = xengnttab_open(0, 0);
2076   xengnttab_map_grant_ref(xg, 0, 0, 0);
2077
2078   return 0;
2079 }
2080 EOF
2081       compile_prog "" "$xen_libs $xen_stable_libs"
2082     then
2083     xen_ctrl_version=471
2084     xen=yes
2085   elif
2086       cat > $TMPC <<EOF &&
2087 #include <xenctrl.h>
2088 #include <stdint.h>
2089 int main(void) {
2090   xc_interface *xc = NULL;
2091   xen_domain_handle_t handle;
2092   xc_domain_create(xc, 0, handle, 0, NULL, NULL);
2093   return 0;
2094 }
2095 EOF
2096       compile_prog "" "$xen_libs"
2097     then
2098     xen_ctrl_version=470
2099     xen=yes
2100
2101   # Xen 4.6
2102   elif
2103       cat > $TMPC <<EOF &&
2104 #include <xenctrl.h>
2105 #include <xenstore.h>
2106 #include <stdint.h>
2107 #include <xen/hvm/hvm_info_table.h>
2108 #if !defined(HVM_MAX_VCPUS)
2109 # error HVM_MAX_VCPUS not defined
2110 #endif
2111 int main(void) {
2112   xc_interface *xc;
2113   xs_daemon_open();
2114   xc = xc_interface_open(0, 0, 0);
2115   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2116   xc_gnttab_open(NULL, 0);
2117   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2118   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2119   xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2120   xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2121   return 0;
2122 }
2123 EOF
2124       compile_prog "" "$xen_libs"
2125     then
2126     xen_ctrl_version=460
2127     xen=yes
2128
2129   # Xen 4.5
2130   elif
2131       cat > $TMPC <<EOF &&
2132 #include <xenctrl.h>
2133 #include <xenstore.h>
2134 #include <stdint.h>
2135 #include <xen/hvm/hvm_info_table.h>
2136 #if !defined(HVM_MAX_VCPUS)
2137 # error HVM_MAX_VCPUS not defined
2138 #endif
2139 int main(void) {
2140   xc_interface *xc;
2141   xs_daemon_open();
2142   xc = xc_interface_open(0, 0, 0);
2143   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2144   xc_gnttab_open(NULL, 0);
2145   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2146   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2147   xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2148   return 0;
2149 }
2150 EOF
2151       compile_prog "" "$xen_libs"
2152     then
2153     xen_ctrl_version=450
2154     xen=yes
2155
2156   elif
2157       cat > $TMPC <<EOF &&
2158 #include <xenctrl.h>
2159 #include <xenstore.h>
2160 #include <stdint.h>
2161 #include <xen/hvm/hvm_info_table.h>
2162 #if !defined(HVM_MAX_VCPUS)
2163 # error HVM_MAX_VCPUS not defined
2164 #endif
2165 int main(void) {
2166   xc_interface *xc;
2167   xs_daemon_open();
2168   xc = xc_interface_open(0, 0, 0);
2169   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2170   xc_gnttab_open(NULL, 0);
2171   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2172   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2173   return 0;
2174 }
2175 EOF
2176       compile_prog "" "$xen_libs"
2177     then
2178     xen_ctrl_version=420
2179     xen=yes
2180
2181   else
2182     if test "$xen" = "yes" ; then
2183       feature_not_found "xen (unsupported version)" \
2184                         "Install a supported xen (xen 4.2 or newer)"
2185     fi
2186     xen=no
2187   fi
2188
2189   if test "$xen" = yes; then
2190     if test $xen_ctrl_version -ge 471  ; then
2191       libs_softmmu="$xen_stable_libs $libs_softmmu"
2192     fi
2193     libs_softmmu="$xen_libs $libs_softmmu"
2194   fi
2195 fi
2196
2197 if test "$xen_pci_passthrough" != "no"; then
2198   if test "$xen" = "yes" && test "$linux" = "yes"; then
2199     xen_pci_passthrough=yes
2200   else
2201     if test "$xen_pci_passthrough" = "yes"; then
2202       error_exit "User requested feature Xen PCI Passthrough" \
2203           " but this feature requires /sys from Linux"
2204     fi
2205     xen_pci_passthrough=no
2206   fi
2207 fi
2208
2209 if test "$xen_pv_domain_build" = "yes" &&
2210    test "$xen" != "yes"; then
2211     error_exit "User requested Xen PV domain builder support" \
2212                "which requires Xen support."
2213 fi
2214
2215 ##########################################
2216 # Sparse probe
2217 if test "$sparse" != "no" ; then
2218   if has cgcc; then
2219     sparse=yes
2220   else
2221     if test "$sparse" = "yes" ; then
2222       feature_not_found "sparse" "Install sparse binary"
2223     fi
2224     sparse=no
2225   fi
2226 fi
2227
2228 ##########################################
2229 # X11 probe
2230 x11_cflags=
2231 x11_libs=-lX11
2232 if $pkg_config --exists "x11"; then
2233     x11_cflags=$($pkg_config --cflags x11)
2234     x11_libs=$($pkg_config --libs x11)
2235 fi
2236
2237 ##########################################
2238 # GTK probe
2239
2240 if test "$gtkabi" = ""; then
2241     # The GTK ABI was not specified explicitly, so try whether 2.0 is available.
2242     # Use 3.0 as a fallback if that is available.
2243     if $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2244         gtkabi=2.0
2245     elif $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2246         gtkabi=3.0
2247     else
2248         gtkabi=2.0
2249     fi
2250 fi
2251
2252 if test "$gtk" != "no"; then
2253     gtkpackage="gtk+-$gtkabi"
2254     gtkx11package="gtk+-x11-$gtkabi"
2255     if test "$gtkabi" = "3.0" ; then
2256       gtkversion="3.0.0"
2257     else
2258       gtkversion="2.18.0"
2259     fi
2260     if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2261         gtk_cflags=$($pkg_config --cflags $gtkpackage)
2262         gtk_libs=$($pkg_config --libs $gtkpackage)
2263         gtk_version=$($pkg_config --modversion $gtkpackage)
2264         if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2265             gtk_cflags="$gtk_cflags $x11_cflags"
2266             gtk_libs="$gtk_libs $x11_libs"
2267         fi
2268         libs_softmmu="$gtk_libs $libs_softmmu"
2269         gtk="yes"
2270     elif test "$gtk" = "yes"; then
2271         feature_not_found "gtk" "Install gtk2 or gtk3 devel"
2272     else
2273         gtk="no"
2274     fi
2275 fi
2276
2277
2278 ##########################################
2279 # GNUTLS probe
2280
2281 gnutls_works() {
2282     # Unfortunately some distros have bad pkg-config information for gnutls
2283     # such that it claims to exist but you get a compiler error if you try
2284     # to use the options returned by --libs. Specifically, Ubuntu for --static
2285     # builds doesn't work:
2286     # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2287     #
2288     # So sanity check the cflags/libs before assuming gnutls can be used.
2289     if ! $pkg_config --exists "gnutls"; then
2290         return 1
2291     fi
2292
2293     write_c_skeleton
2294     compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2295 }
2296
2297 gnutls_gcrypt=no
2298 gnutls_nettle=no
2299 if test "$gnutls" != "no"; then
2300     if gnutls_works; then
2301         gnutls_cflags=$($pkg_config --cflags gnutls)
2302         gnutls_libs=$($pkg_config --libs gnutls)
2303         libs_softmmu="$gnutls_libs $libs_softmmu"
2304         libs_tools="$gnutls_libs $libs_tools"
2305         QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2306         gnutls="yes"
2307
2308         # gnutls_rnd requires >= 2.11.0
2309         if $pkg_config --exists "gnutls >= 2.11.0"; then
2310             gnutls_rnd="yes"
2311         else
2312             gnutls_rnd="no"
2313         fi
2314
2315         if $pkg_config --exists 'gnutls >= 3.0'; then
2316             gnutls_gcrypt=no
2317             gnutls_nettle=yes
2318         elif $pkg_config --exists 'gnutls >= 2.12'; then
2319             case $($pkg_config --libs --static gnutls) in
2320                 *gcrypt*)
2321                     gnutls_gcrypt=yes
2322                     gnutls_nettle=no
2323                     ;;
2324                 *nettle*)
2325                     gnutls_gcrypt=no
2326                     gnutls_nettle=yes
2327                     ;;
2328                 *)
2329                     gnutls_gcrypt=yes
2330                     gnutls_nettle=no
2331                     ;;
2332             esac
2333         else
2334             gnutls_gcrypt=yes
2335             gnutls_nettle=no
2336         fi
2337     elif test "$gnutls" = "yes"; then
2338         feature_not_found "gnutls" "Install gnutls devel"
2339     else
2340         gnutls="no"
2341         gnutls_rnd="no"
2342     fi
2343 else
2344     gnutls_rnd="no"
2345 fi
2346
2347
2348 # If user didn't give a --disable/enable-gcrypt flag,
2349 # then mark as disabled if user requested nettle
2350 # explicitly, or if gnutls links to nettle
2351 if test -z "$gcrypt"
2352 then
2353     if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2354     then
2355         gcrypt="no"
2356     fi
2357 fi
2358
2359 # If user didn't give a --disable/enable-nettle flag,
2360 # then mark as disabled if user requested gcrypt
2361 # explicitly, or if gnutls links to gcrypt
2362 if test -z "$nettle"
2363 then
2364     if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2365     then
2366         nettle="no"
2367     fi
2368 fi
2369
2370 has_libgcrypt_config() {
2371     if ! has "libgcrypt-config"
2372     then
2373         return 1
2374     fi
2375
2376     if test -n "$cross_prefix"
2377     then
2378         host=$(libgcrypt-config --host)
2379         if test "$host-" != $cross_prefix
2380         then
2381             return 1
2382         fi
2383     fi
2384
2385     return 0
2386 }
2387
2388 if test "$gcrypt" != "no"; then
2389     if has_libgcrypt_config; then
2390         gcrypt_cflags=$(libgcrypt-config --cflags)
2391         gcrypt_libs=$(libgcrypt-config --libs)
2392         # Debian has remove -lgpg-error from libgcrypt-config
2393         # as it "spreads unnecessary dependencies" which in
2394         # turn breaks static builds...
2395         if test "$static" = "yes"
2396         then
2397             gcrypt_libs="$gcrypt_libs -lgpg-error"
2398         fi
2399         libs_softmmu="$gcrypt_libs $libs_softmmu"
2400         libs_tools="$gcrypt_libs $libs_tools"
2401         QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2402         gcrypt="yes"
2403         if test -z "$nettle"; then
2404            nettle="no"
2405         fi
2406
2407         cat > $TMPC << EOF
2408 #include <gcrypt.h>
2409 int main(void) {
2410   gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2411                   GCRY_MD_SHA256,
2412                   NULL, 0, 0, 0, NULL);
2413  return 0;
2414 }
2415 EOF
2416         if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2417             gcrypt_kdf=yes
2418         fi
2419
2420         cat > $TMPC << EOF
2421 #include <gcrypt.h>
2422 int main(void) {
2423   gcry_mac_hd_t handle;
2424   gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
2425                 GCRY_MAC_FLAG_SECURE, NULL);
2426   return 0;
2427 }
2428 EOF
2429         if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2430             gcrypt_hmac=yes
2431         fi
2432     else
2433         if test "$gcrypt" = "yes"; then
2434             feature_not_found "gcrypt" "Install gcrypt devel"
2435         else
2436             gcrypt="no"
2437         fi
2438     fi
2439 fi
2440
2441
2442 if test "$nettle" != "no"; then
2443     if $pkg_config --exists "nettle"; then
2444         nettle_cflags=$($pkg_config --cflags nettle)
2445         nettle_libs=$($pkg_config --libs nettle)
2446         nettle_version=$($pkg_config --modversion nettle)
2447         libs_softmmu="$nettle_libs $libs_softmmu"
2448         libs_tools="$nettle_libs $libs_tools"
2449         QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2450         nettle="yes"
2451
2452         cat > $TMPC << EOF
2453 #include <stddef.h>
2454 #include <nettle/pbkdf2.h>
2455 int main(void) {
2456      pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2457      return 0;
2458 }
2459 EOF
2460         if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2461             nettle_kdf=yes
2462         fi
2463     else
2464         if test "$nettle" = "yes"; then
2465             feature_not_found "nettle" "Install nettle devel"
2466         else
2467             nettle="no"
2468         fi
2469     fi
2470 fi
2471
2472 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2473 then
2474     error_exit "Only one of gcrypt & nettle can be enabled"
2475 fi
2476
2477 ##########################################
2478 # libtasn1 - only for the TLS creds/session test suite
2479
2480 tasn1=yes
2481 tasn1_cflags=""
2482 tasn1_libs=""
2483 if $pkg_config --exists "libtasn1"; then
2484     tasn1_cflags=$($pkg_config --cflags libtasn1)
2485     tasn1_libs=$($pkg_config --libs libtasn1)
2486 else
2487     tasn1=no
2488 fi
2489
2490
2491 ##########################################
2492 # getifaddrs (for tests/test-io-channel-socket )
2493
2494 have_ifaddrs_h=yes
2495 if ! check_include "ifaddrs.h" ; then
2496   have_ifaddrs_h=no
2497 fi
2498
2499 ##########################################
2500 # VTE probe
2501
2502 if test "$vte" != "no"; then
2503     if test "$gtkabi" = "3.0"; then
2504       vteminversion="0.32.0"
2505       if $pkg_config --exists "vte-2.91"; then
2506         vtepackage="vte-2.91"
2507       else
2508         vtepackage="vte-2.90"
2509       fi
2510     else
2511       vtepackage="vte"
2512       vteminversion="0.24.0"
2513     fi
2514     if $pkg_config --exists "$vtepackage >= $vteminversion"; then
2515         vte_cflags=$($pkg_config --cflags $vtepackage)
2516         vte_libs=$($pkg_config --libs $vtepackage)
2517         vteversion=$($pkg_config --modversion $vtepackage)
2518         libs_softmmu="$vte_libs $libs_softmmu"
2519         vte="yes"
2520     elif test "$vte" = "yes"; then
2521         if test "$gtkabi" = "3.0"; then
2522             feature_not_found "vte" "Install libvte-2.90/2.91 devel"
2523         else
2524             feature_not_found "vte" "Install libvte devel"
2525         fi
2526     else
2527         vte="no"
2528     fi
2529 fi
2530
2531 ##########################################
2532 # SDL probe
2533
2534 # Look for sdl configuration program (pkg-config or sdl-config).  Try
2535 # sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2536
2537 if test "$sdlabi" = ""; then
2538     if $pkg_config --exists "sdl"; then
2539         sdlabi=1.2
2540     elif $pkg_config --exists "sdl2"; then
2541         sdlabi=2.0
2542     else
2543         sdlabi=1.2
2544     fi
2545 fi
2546
2547 if test $sdlabi = "2.0"; then
2548     sdl_config=$sdl2_config
2549     sdlname=sdl2
2550     sdlconfigname=sdl2_config
2551 elif test $sdlabi = "1.2"; then
2552     sdlname=sdl
2553     sdlconfigname=sdl_config
2554 else
2555     error_exit "Unknown sdlabi $sdlabi, must be 1.2 or 2.0"
2556 fi
2557
2558 if test "$(basename $sdl_config)" != $sdlconfigname && ! has ${sdl_config}; then
2559   sdl_config=$sdlconfigname
2560 fi
2561
2562 if $pkg_config $sdlname --exists; then
2563   sdlconfig="$pkg_config $sdlname"
2564   sdlversion=$($sdlconfig --modversion 2>/dev/null)
2565 elif has ${sdl_config}; then
2566   sdlconfig="$sdl_config"
2567   sdlversion=$($sdlconfig --version)
2568 else
2569   if test "$sdl" = "yes" ; then
2570     feature_not_found "sdl" "Install SDL devel"
2571   fi
2572   sdl=no
2573 fi
2574 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2575   echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2576 fi
2577
2578 sdl_too_old=no
2579 if test "$sdl" != "no" ; then
2580   cat > $TMPC << EOF
2581 #include <SDL.h>
2582 #undef main /* We don't want SDL to override our main() */
2583 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2584 EOF
2585   sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
2586   if test "$static" = "yes" ; then
2587     sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
2588   else
2589     sdl_libs=$($sdlconfig --libs 2>/dev/null)
2590   fi
2591   if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2592     if test $(echo $sdlversion | sed 's/[^0-9]//g') -lt 121 ; then
2593       sdl_too_old=yes
2594     else
2595       sdl=yes
2596     fi
2597
2598     # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2599     if test "$sdl" = "yes" -a "$static" = "yes" ; then
2600       if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2601          sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
2602          sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
2603       fi
2604       if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2605         :
2606       else
2607         sdl=no
2608       fi
2609     fi # static link
2610   else # sdl not found
2611     if test "$sdl" = "yes" ; then
2612       feature_not_found "sdl" "Install SDL devel"
2613     fi
2614     sdl=no
2615   fi # sdl compile test
2616 fi
2617
2618 if test "$sdl" = "yes" ; then
2619   cat > $TMPC <<EOF
2620 #include <SDL.h>
2621 #if defined(SDL_VIDEO_DRIVER_X11)
2622 #include <X11/XKBlib.h>
2623 #else
2624 #error No x11 support
2625 #endif
2626 int main(void) { return 0; }
2627 EOF
2628   if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2629     sdl_cflags="$sdl_cflags $x11_cflags"
2630     sdl_libs="$sdl_libs $x11_libs"
2631   fi
2632   libs_softmmu="$sdl_libs $libs_softmmu"
2633 fi
2634
2635 ##########################################
2636 # RDMA needs OpenFabrics libraries
2637 if test "$rdma" != "no" ; then
2638   cat > $TMPC <<EOF
2639 #include <rdma/rdma_cma.h>
2640 int main(void) { return 0; }
2641 EOF
2642   rdma_libs="-lrdmacm -libverbs"
2643   if compile_prog "" "$rdma_libs" ; then
2644     rdma="yes"
2645     libs_softmmu="$libs_softmmu $rdma_libs"
2646   else
2647     if test "$rdma" = "yes" ; then
2648         error_exit \
2649             " OpenFabrics librdmacm/libibverbs not present." \
2650             " Your options:" \
2651             "  (1) Fast: Install infiniband packages from your distro." \
2652             "  (2) Cleanest: Install libraries from www.openfabrics.org" \
2653             "  (3) Also: Install softiwarp if you don't have RDMA hardware"
2654     fi
2655     rdma="no"
2656   fi
2657 fi
2658
2659
2660 ##########################################
2661 # VNC SASL detection
2662 if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
2663   cat > $TMPC <<EOF
2664 #include <sasl/sasl.h>
2665 #include <stdio.h>
2666 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2667 EOF
2668   # Assuming Cyrus-SASL installed in /usr prefix
2669   vnc_sasl_cflags=""
2670   vnc_sasl_libs="-lsasl2"
2671   if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2672     vnc_sasl=yes
2673     libs_softmmu="$vnc_sasl_libs $libs_softmmu"
2674     QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
2675   else
2676     if test "$vnc_sasl" = "yes" ; then
2677       feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2678     fi
2679     vnc_sasl=no
2680   fi
2681 fi
2682
2683 ##########################################
2684 # VNC JPEG detection
2685 if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2686 cat > $TMPC <<EOF
2687 #include <stdio.h>
2688 #include <jpeglib.h>
2689 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2690 EOF
2691     vnc_jpeg_cflags=""
2692     vnc_jpeg_libs="-ljpeg"
2693   if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2694     vnc_jpeg=yes
2695     libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
2696     QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2697   else
2698     if test "$vnc_jpeg" = "yes" ; then
2699       feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2700     fi
2701     vnc_jpeg=no
2702   fi
2703 fi
2704
2705 ##########################################
2706 # VNC PNG detection
2707 if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
2708 cat > $TMPC <<EOF
2709 //#include <stdio.h>
2710 #include <png.h>
2711 #include <stddef.h>
2712 int main(void) {
2713     png_structp png_ptr;
2714     png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
2715     return png_ptr != 0;
2716 }
2717 EOF
2718   if $pkg_config libpng --exists; then
2719     vnc_png_cflags=$($pkg_config libpng --cflags)
2720     vnc_png_libs=$($pkg_config libpng --libs)
2721   else
2722     vnc_png_cflags=""
2723     vnc_png_libs="-lpng"
2724   fi
2725   if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2726     vnc_png=yes
2727     libs_softmmu="$vnc_png_libs $libs_softmmu"
2728     QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
2729   else
2730     if test "$vnc_png" = "yes" ; then
2731       feature_not_found "vnc-png" "Install libpng devel"
2732     fi
2733     vnc_png=no
2734   fi
2735 fi
2736
2737 ##########################################
2738 # fnmatch() probe, used for ACL routines
2739 fnmatch="no"
2740 cat > $TMPC << EOF
2741 #include <fnmatch.h>
2742 int main(void)
2743 {
2744     fnmatch("foo", "foo", 0);
2745     return 0;
2746 }
2747 EOF
2748 if compile_prog "" "" ; then
2749    fnmatch="yes"
2750 fi
2751
2752 ##########################################
2753 # xfsctl() probe, used for raw-posix
2754 if test "$xfs" != "no" ; then
2755   cat > $TMPC << EOF
2756 #include <stddef.h>  /* NULL */
2757 #include <xfs/xfs.h>
2758 int main(void)
2759 {
2760     xfsctl(NULL, 0, 0, NULL);
2761     return 0;
2762 }
2763 EOF
2764   if compile_prog "" "" ; then
2765     xfs="yes"
2766   else
2767     if test "$xfs" = "yes" ; then
2768       feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
2769     fi
2770     xfs=no
2771   fi
2772 fi
2773
2774 ##########################################
2775 # vde libraries probe
2776 if test "$vde" != "no" ; then
2777   vde_libs="-lvdeplug"
2778   cat > $TMPC << EOF
2779 #include <libvdeplug.h>
2780 int main(void)
2781 {
2782     struct vde_open_args a = {0, 0, 0};
2783     char s[] = "";
2784     vde_open(s, s, &a);
2785     return 0;
2786 }
2787 EOF
2788   if compile_prog "" "$vde_libs" ; then
2789     vde=yes
2790     libs_softmmu="$vde_libs $libs_softmmu"
2791     libs_tools="$vde_libs $libs_tools"
2792   else
2793     if test "$vde" = "yes" ; then
2794       feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
2795     fi
2796     vde=no
2797   fi
2798 fi
2799
2800 ##########################################
2801 # netmap support probe
2802 # Apart from looking for netmap headers, we make sure that the host API version
2803 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2804 # a minor/major version number. Minor new features will be marked with values up
2805 # to 15, and if something happens that requires a change to the backend we will
2806 # move above 15, submit the backend fixes and modify this two bounds.
2807 if test "$netmap" != "no" ; then
2808   cat > $TMPC << EOF
2809 #include <inttypes.h>
2810 #include <net/if.h>
2811 #include <net/netmap.h>
2812 #include <net/netmap_user.h>
2813 #if (NETMAP_API < 11) || (NETMAP_API > 15)
2814 #error
2815 #endif
2816 int main(void) { return 0; }
2817 EOF
2818   if compile_prog "" "" ; then
2819     netmap=yes
2820   else
2821     if test "$netmap" = "yes" ; then
2822       feature_not_found "netmap"
2823     fi
2824     netmap=no
2825   fi
2826 fi
2827
2828 ##########################################
2829 # libcap-ng library probe
2830 if test "$cap_ng" != "no" ; then
2831   cap_libs="-lcap-ng"
2832   cat > $TMPC << EOF
2833 #include <cap-ng.h>
2834 int main(void)
2835 {
2836     capng_capability_to_name(CAPNG_EFFECTIVE);
2837     return 0;
2838 }
2839 EOF
2840   if compile_prog "" "$cap_libs" ; then
2841     cap_ng=yes
2842     libs_tools="$cap_libs $libs_tools"
2843   else
2844     if test "$cap_ng" = "yes" ; then
2845       feature_not_found "cap_ng" "Install libcap-ng devel"
2846     fi
2847     cap_ng=no
2848   fi
2849 fi
2850
2851 ##########################################
2852 # Sound support libraries probe
2853
2854 audio_drv_probe()
2855 {
2856     drv=$1
2857     hdr=$2
2858     lib=$3
2859     exp=$4
2860     cfl=$5
2861         cat > $TMPC << EOF
2862 #include <$hdr>
2863 int main(void) { $exp }
2864 EOF
2865     if compile_prog "$cfl" "$lib" ; then
2866         :
2867     else
2868         error_exit "$drv check failed" \
2869             "Make sure to have the $drv libs and headers installed."
2870     fi
2871 }
2872
2873 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
2874 for drv in $audio_drv_list; do
2875     case $drv in
2876     alsa)
2877     audio_drv_probe $drv alsa/asoundlib.h -lasound \
2878         "return snd_pcm_close((snd_pcm_t *)0);"
2879     libs_softmmu="-lasound $libs_softmmu"
2880     ;;
2881
2882     pa)
2883     audio_drv_probe $drv pulse/pulseaudio.h "-lpulse" \
2884         "pa_context_set_source_output_volume(NULL, 0, NULL, NULL, NULL); return 0;"
2885     libs_softmmu="-lpulse $libs_softmmu"
2886     audio_pt_int="yes"
2887     ;;
2888
2889     coreaudio)
2890       libs_softmmu="-framework CoreAudio $libs_softmmu"
2891     ;;
2892
2893     dsound)
2894       libs_softmmu="-lole32 -ldxguid $libs_softmmu"
2895       audio_win_int="yes"
2896     ;;
2897
2898     oss)
2899       libs_softmmu="$oss_lib $libs_softmmu"
2900     ;;
2901
2902     sdl|wav)
2903     # XXX: Probes for CoreAudio, DirectSound, SDL(?)
2904     ;;
2905
2906     *)
2907     echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
2908         error_exit "Unknown driver '$drv' selected" \
2909             "Possible drivers are: $audio_possible_drivers"
2910     }
2911     ;;
2912     esac
2913 done
2914
2915 ##########################################
2916 # BrlAPI probe
2917
2918 if test "$brlapi" != "no" ; then
2919   brlapi_libs="-lbrlapi"
2920   cat > $TMPC << EOF
2921 #include <brlapi.h>
2922 #include <stddef.h>
2923 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
2924 EOF
2925   if compile_prog "" "$brlapi_libs" ; then
2926     brlapi=yes
2927     libs_softmmu="$brlapi_libs $libs_softmmu"
2928   else
2929     if test "$brlapi" = "yes" ; then
2930       feature_not_found "brlapi" "Install brlapi devel"
2931     fi
2932     brlapi=no
2933   fi
2934 fi
2935
2936 ##########################################
2937 # curses probe
2938 if test "$curses" != "no" ; then
2939   if test "$mingw32" = "yes" ; then
2940     curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
2941     curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
2942   else
2943     curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
2944     curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
2945   fi
2946   curses_found=no
2947   cat > $TMPC << EOF
2948 #include <locale.h>
2949 #include <curses.h>
2950 #include <wchar.h>
2951 int main(void) {
2952   const char *s = curses_version();
2953   wchar_t wch = L'w';
2954   setlocale(LC_ALL, "");
2955   resize_term(0, 0);
2956   addwstr(L"wide chars\n");
2957   addnwstr(&wch, 1);
2958   add_wch(WACS_DEGREE);
2959   return s != 0;
2960 }
2961 EOF
2962   IFS=:
2963   for curses_inc in $curses_inc_list; do
2964     IFS=:
2965     for curses_lib in $curses_lib_list; do
2966       unset IFS
2967       if compile_prog "$curses_inc" "$curses_lib" ; then
2968         curses_found=yes
2969         QEMU_CFLAGS="$curses_inc $QEMU_CFLAGS"
2970         libs_softmmu="$curses_lib $libs_softmmu"
2971         break
2972       fi
2973     done
2974     if test "$curses_found" = yes ; then
2975       break
2976     fi
2977   done
2978   unset IFS
2979   if test "$curses_found" = "yes" ; then
2980     curses=yes
2981   else
2982     if test "$curses" = "yes" ; then
2983       feature_not_found "curses" "Install ncurses devel"
2984     fi
2985     curses=no
2986   fi
2987 fi
2988
2989 ##########################################
2990 # curl probe
2991 if test "$curl" != "no" ; then
2992   if $pkg_config libcurl --exists; then
2993     curlconfig="$pkg_config libcurl"
2994   else
2995     curlconfig=curl-config
2996   fi
2997   cat > $TMPC << EOF
2998 #include <curl/curl.h>
2999 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3000 EOF
3001   curl_cflags=$($curlconfig --cflags 2>/dev/null)
3002   curl_libs=$($curlconfig --libs 2>/dev/null)
3003   if compile_prog "$curl_cflags" "$curl_libs" ; then
3004     curl=yes
3005   else
3006     if test "$curl" = "yes" ; then
3007       feature_not_found "curl" "Install libcurl devel"
3008     fi
3009     curl=no
3010   fi
3011 fi # test "$curl"
3012
3013 ##########################################
3014 # bluez support probe
3015 if test "$bluez" != "no" ; then
3016   cat > $TMPC << EOF
3017 #include <bluetooth/bluetooth.h>
3018 int main(void) { return bt_error(0); }
3019 EOF
3020   bluez_cflags=$($pkg_config --cflags bluez 2>/dev/null)
3021   bluez_libs=$($pkg_config --libs bluez 2>/dev/null)
3022   if compile_prog "$bluez_cflags" "$bluez_libs" ; then
3023     bluez=yes
3024     libs_softmmu="$bluez_libs $libs_softmmu"
3025   else
3026     if test "$bluez" = "yes" ; then
3027       feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
3028     fi
3029     bluez="no"
3030   fi
3031 fi
3032
3033 ##########################################
3034 # glib support probe
3035
3036 glib_req_ver=2.22
3037 glib_modules=gthread-2.0
3038 if test "$modules" = yes; then
3039     glib_modules="$glib_modules gmodule-2.0"
3040 fi
3041
3042 for i in $glib_modules; do
3043     if $pkg_config --atleast-version=$glib_req_ver $i; then
3044         glib_cflags=$($pkg_config --cflags $i)
3045         glib_libs=$($pkg_config --libs $i)
3046         QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3047         LIBS="$glib_libs $LIBS"
3048         libs_qga="$glib_libs $libs_qga"
3049     else
3050         error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3051     fi
3052 done
3053
3054 # Sanity check that the current size_t matches the
3055 # size that glib thinks it should be. This catches
3056 # problems on multi-arch where people try to build
3057 # 32-bit QEMU while pointing at 64-bit glib headers
3058 cat > $TMPC <<EOF
3059 #include <glib.h>
3060 #include <unistd.h>
3061
3062 #define QEMU_BUILD_BUG_ON(x) \
3063   typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3064
3065 int main(void) {
3066    QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3067    return 0;
3068 }
3069 EOF
3070
3071 if ! compile_prog "$CFLAGS" "$LIBS" ; then
3072     error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3073                "You probably need to set PKG_CONFIG_LIBDIR"\
3074                "to point to the right pkg-config files for your"\
3075                "build target"
3076 fi
3077
3078 # g_test_trap_subprocess added in 2.38. Used by some tests.
3079 glib_subprocess=yes
3080 if test "$mingw32" = "yes" || ! $pkg_config --atleast-version=2.38 glib-2.0; then
3081     glib_subprocess=no
3082 fi
3083
3084 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3085 cat > $TMPC << EOF
3086 #include <glib.h>
3087 int main(void) { return 0; }
3088 EOF
3089 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3090     if cc_has_warning_flag "-Wno-unknown-attributes"; then
3091         glib_cflags="-Wno-unknown-attributes $glib_cflags"
3092         CFLAGS="-Wno-unknown-attributes $CFLAGS"
3093     fi
3094 fi
3095
3096 ##########################################
3097 # SHA command probe for modules
3098 if test "$modules" = yes; then
3099     shacmd_probe="sha1sum sha1 shasum"
3100     for c in $shacmd_probe; do
3101         if has $c; then
3102             shacmd="$c"
3103             break
3104         fi
3105     done
3106     if test "$shacmd" = ""; then
3107         error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3108     fi
3109 fi
3110
3111 ##########################################
3112 # pixman support probe
3113
3114 if test "$pixman" = ""; then
3115   if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3116     pixman="none"
3117   elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3118     pixman="system"
3119   else
3120     pixman="internal"
3121   fi
3122 fi
3123 if test "$pixman" = "none"; then
3124   if test "$want_tools" != "no" -o "$softmmu" != "no"; then
3125     error_exit "pixman disabled but system emulation or tools build" \
3126         "enabled.  You can turn off pixman only if you also" \
3127         "disable all system emulation targets and the tools" \
3128         "build with '--disable-tools --disable-system'."
3129   fi
3130   pixman_cflags=
3131   pixman_libs=
3132 elif test "$pixman" = "system"; then
3133   # pixman version has been checked above
3134   pixman_cflags=$($pkg_config --cflags pixman-1)
3135   pixman_libs=$($pkg_config --libs pixman-1)
3136 else
3137   if test ! -d ${source_path}/pixman/pixman; then
3138     error_exit "pixman >= 0.21.8 not present. Your options:" \
3139         "  (1) Preferred: Install the pixman devel package (any recent" \
3140         "      distro should have packages as Xorg needs pixman too)." \
3141         "  (2) Fetch the pixman submodule, using:" \
3142         "      git submodule update --init pixman"
3143   fi
3144   mkdir -p pixman/pixman
3145   pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
3146   pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
3147 fi
3148
3149 ##########################################
3150 # libcap probe
3151
3152 if test "$cap" != "no" ; then
3153   cat > $TMPC <<EOF
3154 #include <stdio.h>
3155 #include <sys/capability.h>
3156 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3157 EOF
3158   if compile_prog "" "-lcap" ; then
3159     cap=yes
3160   else
3161     cap=no
3162   fi
3163 fi
3164
3165 ##########################################
3166 # pthread probe
3167 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3168
3169 pthread=no
3170 cat > $TMPC << EOF
3171 #include <pthread.h>
3172 static void *f(void *p) { return NULL; }
3173 int main(void) {
3174   pthread_t thread;
3175   pthread_create(&thread, 0, f, 0);
3176   return 0;
3177 }
3178 EOF
3179 if compile_prog "" "" ; then
3180   pthread=yes
3181 else
3182   for pthread_lib in $PTHREADLIBS_LIST; do
3183     if compile_prog "" "$pthread_lib" ; then
3184       pthread=yes
3185       found=no
3186       for lib_entry in $LIBS; do
3187         if test "$lib_entry" = "$pthread_lib"; then
3188           found=yes
3189           break
3190         fi
3191       done
3192       if test "$found" = "no"; then
3193         LIBS="$pthread_lib $LIBS"
3194       fi
3195       PTHREAD_LIB="$pthread_lib"
3196       break
3197     fi
3198   done
3199 fi
3200
3201 if test "$mingw32" != yes -a "$pthread" = no; then
3202   error_exit "pthread check failed" \
3203       "Make sure to have the pthread libs and headers installed."
3204 fi
3205
3206 # check for pthread_setname_np
3207 pthread_setname_np=no
3208 cat > $TMPC << EOF
3209 #include <pthread.h>
3210
3211 static void *f(void *p) { return NULL; }
3212 int main(void)
3213 {
3214     pthread_t thread;
3215     pthread_create(&thread, 0, f, 0);
3216     pthread_setname_np(thread, "QEMU");
3217     return 0;
3218 }
3219 EOF
3220 if compile_prog "" "$pthread_lib" ; then
3221   pthread_setname_np=yes
3222 fi
3223
3224 ##########################################
3225 # rbd probe
3226 if test "$rbd" != "no" ; then
3227   cat > $TMPC <<EOF
3228 #include <stdio.h>
3229 #include <rbd/librbd.h>
3230 int main(void) {
3231     rados_t cluster;
3232     rados_create(&cluster, NULL);
3233     return 0;
3234 }
3235 EOF
3236   rbd_libs="-lrbd -lrados"
3237   if compile_prog "" "$rbd_libs" ; then
3238     rbd=yes
3239   else
3240     if test "$rbd" = "yes" ; then
3241       feature_not_found "rados block device" "Install librbd/ceph devel"
3242     fi
3243     rbd=no
3244   fi
3245 fi
3246
3247 ##########################################
3248 # libssh2 probe
3249 min_libssh2_version=1.2.8
3250 if test "$libssh2" != "no" ; then
3251   if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
3252     libssh2_cflags=$($pkg_config libssh2 --cflags)
3253     libssh2_libs=$($pkg_config libssh2 --libs)
3254     libssh2=yes
3255   else
3256     if test "$libssh2" = "yes" ; then
3257       error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
3258     fi
3259     libssh2=no
3260   fi
3261 fi
3262
3263 ##########################################
3264 # libssh2_sftp_fsync probe
3265
3266 if test "$libssh2" = "yes"; then
3267   cat > $TMPC <<EOF
3268 #include <stdio.h>
3269 #include <libssh2.h>
3270 #include <libssh2_sftp.h>
3271 int main(void) {
3272     LIBSSH2_SESSION *session;
3273     LIBSSH2_SFTP *sftp;
3274     LIBSSH2_SFTP_HANDLE *sftp_handle;
3275     session = libssh2_session_init ();
3276     sftp = libssh2_sftp_init (session);
3277     sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3278     libssh2_sftp_fsync (sftp_handle);
3279     return 0;
3280 }
3281 EOF
3282   # libssh2_cflags/libssh2_libs defined in previous test.
3283   if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3284     QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3285   fi
3286 fi
3287
3288 ##########################################
3289 # linux-aio probe
3290
3291 if test "$linux_aio" != "no" ; then
3292   cat > $TMPC <<EOF
3293 #include <libaio.h>
3294 #include <sys/eventfd.h>
3295 #include <stddef.h>
3296 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3297 EOF
3298   if compile_prog "" "-laio" ; then
3299     linux_aio=yes
3300   else
3301     if test "$linux_aio" = "yes" ; then
3302       feature_not_found "linux AIO" "Install libaio devel"
3303     fi
3304     linux_aio=no
3305   fi
3306 fi
3307
3308 ##########################################
3309 # TPM passthrough is only on x86 Linux
3310
3311 if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3312   tpm_passthrough=$tpm
3313 else
3314   tpm_passthrough=no
3315 fi
3316
3317 ##########################################
3318 # attr probe
3319
3320 if test "$attr" != "no" ; then
3321   cat > $TMPC <<EOF
3322 #include <stdio.h>
3323 #include <sys/types.h>
3324 #ifdef CONFIG_LIBATTR
3325 #include <attr/xattr.h>
3326 #else
3327 #include <sys/xattr.h>
3328 #endif
3329 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3330 EOF
3331   if compile_prog "" "" ; then
3332     attr=yes
3333   # Older distros have <attr/xattr.h>, and need -lattr:
3334   elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3335     attr=yes
3336     LIBS="-lattr $LIBS"
3337     libattr=yes
3338   else
3339     if test "$attr" = "yes" ; then
3340       feature_not_found "ATTR" "Install libc6 or libattr devel"
3341     fi
3342     attr=no
3343   fi
3344 fi
3345
3346 ##########################################
3347 # iovec probe
3348 cat > $TMPC <<EOF
3349 #include <sys/types.h>
3350 #include <sys/uio.h>
3351 #include <unistd.h>
3352 int main(void) { return sizeof(struct iovec); }
3353 EOF
3354 iovec=no
3355 if compile_prog "" "" ; then
3356   iovec=yes
3357 fi
3358
3359 ##########################################
3360 # preadv probe
3361 cat > $TMPC <<EOF
3362 #include <sys/types.h>
3363 #include <sys/uio.h>
3364 #include <unistd.h>
3365 int main(void) { return preadv(0, 0, 0, 0); }
3366 EOF
3367 preadv=no
3368 if compile_prog "" "" ; then
3369   preadv=yes
3370 fi
3371
3372 ##########################################
3373 # fdt probe
3374 # fdt support is mandatory for at least some target architectures,
3375 # so insist on it if we're building those system emulators.
3376 fdt_required=no
3377 for target in $target_list; do
3378   case $target in
3379     aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu)
3380       fdt_required=yes
3381     ;;
3382   esac
3383 done
3384
3385 if test "$fdt_required" = "yes"; then
3386   if test "$fdt" = "no"; then
3387     error_exit "fdt disabled but some requested targets require it." \
3388       "You can turn off fdt only if you also disable all the system emulation" \
3389       "targets which need it (by specifying a cut down --target-list)."
3390   fi
3391   fdt=yes
3392 fi
3393
3394 if test "$fdt" != "no" ; then
3395   fdt_libs="-lfdt"
3396   # explicitly check for libfdt_env.h as it is missing in some stable installs
3397   # and test for required functions to make sure we are on a version >= 1.4.0
3398   cat > $TMPC << EOF
3399 #include <libfdt.h>
3400 #include <libfdt_env.h>
3401 int main(void) { fdt_get_property_by_offset(0, 0, 0); return 0; }
3402 EOF
3403   if compile_prog "" "$fdt_libs" ; then
3404     # system DTC is good - use it
3405     fdt=yes
3406   elif test -d ${source_path}/dtc/libfdt ; then
3407     # have submodule DTC - use it
3408     fdt=yes
3409     dtc_internal="yes"
3410     mkdir -p dtc
3411     if [ "$pwd_is_source_path" != "y" ] ; then
3412        symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3413        symlink "$source_path/dtc/scripts" "dtc/scripts"
3414     fi
3415     fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3416     fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3417   elif test "$fdt" = "yes" ; then
3418     # have neither and want - prompt for system/submodule install
3419     error_exit "DTC (libfdt) version >= 1.4.0 not present. Your options:" \
3420         "  (1) Preferred: Install the DTC (libfdt) devel package" \
3421         "  (2) Fetch the DTC submodule, using:" \
3422         "      git submodule update --init dtc"
3423   else
3424     # don't have and don't want
3425     fdt_libs=
3426     fdt=no
3427   fi
3428 fi
3429
3430 libs_softmmu="$libs_softmmu $fdt_libs"
3431
3432 ##########################################
3433 # opengl probe (for sdl2, gtk, milkymist-tmu2)
3434
3435 if test "$opengl" != "no" ; then
3436   opengl_pkgs="epoxy libdrm gbm"
3437   if $pkg_config $opengl_pkgs x11; then
3438     opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3439     opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
3440     opengl=yes
3441     if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3442         gtk_gl="yes"
3443     fi
3444   else
3445     if test "$opengl" = "yes" ; then
3446       feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3447     fi
3448     opengl_cflags=""
3449     opengl_libs=""
3450     opengl=no
3451   fi
3452 fi
3453
3454 if test "$opengl" = "yes"; then
3455   cat > $TMPC << EOF
3456 #include <epoxy/egl.h>
3457 #ifndef EGL_MESA_image_dma_buf_export
3458 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3459 #endif
3460 int main(void) { return 0; }
3461 EOF
3462   if compile_prog "" "" ; then
3463     opengl_dmabuf=yes
3464   fi
3465 fi
3466
3467 ##########################################
3468 # archipelago probe
3469 if test "$archipelago" != "no" ; then
3470     cat > $TMPC <<EOF
3471 #include <stdio.h>
3472 #include <xseg/xseg.h>
3473 #include <xseg/protocol.h>
3474 int main(void) {
3475     xseg_initialize();
3476     return 0;
3477 }
3478 EOF
3479     archipelago_libs=-lxseg
3480     if compile_prog "" "$archipelago_libs"; then
3481         archipelago="yes"
3482         libs_tools="$archipelago_libs $libs_tools"
3483         libs_softmmu="$archipelago_libs $libs_softmmu"
3484
3485         echo "WARNING: Please check the licenses of QEMU and libxseg carefully."
3486         echo "GPLv3 versions of libxseg may not be compatible with QEMU's"
3487         echo "license and therefore prevent redistribution."
3488         echo
3489         echo "To disable Archipelago, use --disable-archipelago"
3490     else
3491       if test "$archipelago" = "yes" ; then
3492         feature_not_found "Archipelago backend support" "Install libxseg devel"
3493       fi
3494       archipelago="no"
3495     fi
3496 fi
3497
3498
3499 ##########################################
3500 # glusterfs probe
3501 if test "$glusterfs" != "no" ; then
3502   if $pkg_config --atleast-version=3 glusterfs-api; then
3503     glusterfs="yes"
3504     glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
3505     glusterfs_libs=$($pkg_config --libs glusterfs-api)
3506     if $pkg_config --atleast-version=4 glusterfs-api; then
3507       glusterfs_xlator_opt="yes"
3508     fi
3509     if $pkg_config --atleast-version=5 glusterfs-api; then
3510       glusterfs_discard="yes"
3511     fi
3512     if $pkg_config --atleast-version=6 glusterfs-api; then
3513       glusterfs_zerofill="yes"
3514     fi
3515   else
3516     if test "$glusterfs" = "yes" ; then
3517       feature_not_found "GlusterFS backend support" \
3518           "Install glusterfs-api devel >= 3"
3519     fi
3520     glusterfs="no"
3521   fi
3522 fi
3523
3524 # Check for inotify functions when we are building linux-user
3525 # emulator.  This is done because older glibc versions don't
3526 # have syscall stubs for these implemented.  In that case we
3527 # don't provide them even if kernel supports them.
3528 #
3529 inotify=no
3530 cat > $TMPC << EOF
3531 #include <sys/inotify.h>
3532
3533 int
3534 main(void)
3535 {
3536         /* try to start inotify */
3537         return inotify_init();
3538 }
3539 EOF
3540 if compile_prog "" "" ; then
3541   inotify=yes
3542 fi
3543
3544 inotify1=no
3545 cat > $TMPC << EOF
3546 #include <sys/inotify.h>
3547
3548 int
3549 main(void)
3550 {
3551     /* try to start inotify */
3552     return inotify_init1(0);
3553 }
3554 EOF
3555 if compile_prog "" "" ; then
3556   inotify1=yes
3557 fi
3558
3559 # check if utimensat and futimens are supported
3560 utimens=no
3561 cat > $TMPC << EOF
3562 #define _ATFILE_SOURCE
3563 #include <stddef.h>
3564 #include <fcntl.h>
3565 #include <sys/stat.h>
3566
3567 int main(void)
3568 {
3569     utimensat(AT_FDCWD, "foo", NULL, 0);
3570     futimens(0, NULL);
3571     return 0;
3572 }
3573 EOF
3574 if compile_prog "" "" ; then
3575   utimens=yes
3576 fi
3577
3578 # check if pipe2 is there
3579 pipe2=no
3580 cat > $TMPC << EOF
3581 #include <unistd.h>
3582 #include <fcntl.h>
3583
3584 int main(void)
3585 {
3586     int pipefd[2];
3587     return pipe2(pipefd, O_CLOEXEC);
3588 }
3589 EOF
3590 if compile_prog "" "" ; then
3591   pipe2=yes
3592 fi
3593
3594 # check if accept4 is there
3595 accept4=no
3596 cat > $TMPC << EOF
3597 #include <sys/socket.h>
3598 #include <stddef.h>
3599
3600 int main(void)
3601 {
3602     accept4(0, NULL, NULL, SOCK_CLOEXEC);
3603     return 0;
3604 }
3605 EOF
3606 if compile_prog "" "" ; then
3607   accept4=yes
3608 fi
3609
3610 # check if tee/splice is there. vmsplice was added same time.
3611 splice=no
3612 cat > $TMPC << EOF
3613 #include <unistd.h>
3614 #include <fcntl.h>
3615 #include <limits.h>
3616
3617 int main(void)
3618 {
3619     int len, fd = 0;
3620     len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3621     splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3622     return 0;
3623 }
3624 EOF
3625 if compile_prog "" "" ; then
3626   splice=yes
3627 fi
3628
3629 ##########################################
3630 # libnuma probe
3631
3632 if test "$numa" != "no" ; then
3633   cat > $TMPC << EOF
3634 #include <numa.h>
3635 int main(void) { return numa_available(); }
3636 EOF
3637
3638   if compile_prog "" "-lnuma" ; then
3639     numa=yes
3640     libs_softmmu="-lnuma $libs_softmmu"
3641   else
3642     if test "$numa" = "yes" ; then
3643       feature_not_found "numa" "install numactl devel"
3644     fi
3645     numa=no
3646   fi
3647 fi
3648
3649 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3650     echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3651     exit 1
3652 fi
3653
3654 ##########################################
3655 # tcmalloc probe
3656
3657 if test "$tcmalloc" = "yes" ; then
3658   cat > $TMPC << EOF
3659 #include <stdlib.h>
3660 int main(void) { malloc(1); return 0; }
3661 EOF
3662
3663   if compile_prog "" "-ltcmalloc" ; then
3664     LIBS="-ltcmalloc $LIBS"
3665   else
3666     feature_not_found "tcmalloc" "install gperftools devel"
3667   fi
3668 fi
3669
3670 ##########################################
3671 # jemalloc probe
3672
3673 if test "$jemalloc" = "yes" ; then
3674   cat > $TMPC << EOF
3675 #include <stdlib.h>
3676 int main(void) { malloc(1); return 0; }
3677 EOF
3678
3679   if compile_prog "" "-ljemalloc" ; then
3680     LIBS="-ljemalloc $LIBS"
3681   else
3682     feature_not_found "jemalloc" "install jemalloc devel"
3683   fi
3684 fi
3685
3686 ##########################################
3687 # signalfd probe
3688 signalfd="no"
3689 cat > $TMPC << EOF
3690 #include <unistd.h>
3691 #include <sys/syscall.h>
3692 #include <signal.h>
3693 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3694 EOF
3695
3696 if compile_prog "" "" ; then
3697   signalfd=yes
3698 fi
3699
3700 # check if eventfd is supported
3701 eventfd=no
3702 cat > $TMPC << EOF
3703 #include <sys/eventfd.h>
3704
3705 int main(void)
3706 {
3707     return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3708 }
3709 EOF
3710 if compile_prog "" "" ; then
3711   eventfd=yes
3712 fi
3713
3714 # check if memfd is supported
3715 memfd=no
3716 cat > $TMPC << EOF
3717 #include <sys/memfd.h>
3718
3719 int main(void)
3720 {
3721     return memfd_create("foo", MFD_ALLOW_SEALING);
3722 }
3723 EOF
3724 if compile_prog "" "" ; then
3725   memfd=yes
3726 fi
3727
3728
3729
3730 # check for fallocate
3731 fallocate=no
3732 cat > $TMPC << EOF
3733 #include <fcntl.h>
3734
3735 int main(void)
3736 {
3737     fallocate(0, 0, 0, 0);
3738     return 0;
3739 }
3740 EOF
3741 if compile_prog "" "" ; then
3742   fallocate=yes
3743 fi
3744
3745 # check for fallocate hole punching
3746 fallocate_punch_hole=no
3747 cat > $TMPC << EOF
3748 #include <fcntl.h>
3749 #include <linux/falloc.h>
3750
3751 int main(void)
3752 {
3753     fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3754     return 0;
3755 }
3756 EOF
3757 if compile_prog "" "" ; then
3758   fallocate_punch_hole=yes
3759 fi
3760
3761 # check that fallocate supports range zeroing inside the file
3762 fallocate_zero_range=no
3763 cat > $TMPC << EOF
3764 #include <fcntl.h>
3765 #include <linux/falloc.h>
3766
3767 int main(void)
3768 {
3769     fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3770     return 0;
3771 }
3772 EOF
3773 if compile_prog "" "" ; then
3774   fallocate_zero_range=yes
3775 fi
3776
3777 # check for posix_fallocate
3778 posix_fallocate=no
3779 cat > $TMPC << EOF
3780 #include <fcntl.h>
3781
3782 int main(void)
3783 {
3784     posix_fallocate(0, 0, 0);
3785     return 0;
3786 }
3787 EOF
3788 if compile_prog "" "" ; then
3789     posix_fallocate=yes
3790 fi
3791
3792 # check for sync_file_range
3793 sync_file_range=no
3794 cat > $TMPC << EOF
3795 #include <fcntl.h>
3796
3797 int main(void)
3798 {
3799     sync_file_range(0, 0, 0, 0);
3800     return 0;
3801 }
3802 EOF
3803 if compile_prog "" "" ; then
3804   sync_file_range=yes
3805 fi
3806
3807 # check for linux/fiemap.h and FS_IOC_FIEMAP
3808 fiemap=no
3809 cat > $TMPC << EOF
3810 #include <sys/ioctl.h>
3811 #include <linux/fs.h>
3812 #include <linux/fiemap.h>
3813
3814 int main(void)
3815 {
3816     ioctl(0, FS_IOC_FIEMAP, 0);
3817     return 0;
3818 }
3819 EOF
3820 if compile_prog "" "" ; then
3821   fiemap=yes
3822 fi
3823
3824 # check for dup3
3825 dup3=no
3826 cat > $TMPC << EOF
3827 #include <unistd.h>
3828
3829 int main(void)
3830 {
3831     dup3(0, 0, 0);
3832     return 0;
3833 }
3834 EOF
3835 if compile_prog "" "" ; then
3836   dup3=yes
3837 fi
3838
3839 # check for ppoll support
3840 ppoll=no
3841 cat > $TMPC << EOF
3842 #include <poll.h>
3843
3844 int main(void)
3845 {
3846     struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3847     ppoll(&pfd, 1, 0, 0);
3848     return 0;
3849 }
3850 EOF
3851 if compile_prog "" "" ; then
3852   ppoll=yes
3853 fi
3854
3855 # check for prctl(PR_SET_TIMERSLACK , ... ) support
3856 prctl_pr_set_timerslack=no
3857 cat > $TMPC << EOF
3858 #include <sys/prctl.h>
3859
3860 int main(void)
3861 {
3862     prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3863     return 0;
3864 }
3865 EOF
3866 if compile_prog "" "" ; then
3867   prctl_pr_set_timerslack=yes
3868 fi
3869
3870 # check for epoll support
3871 epoll=no
3872 cat > $TMPC << EOF
3873 #include <sys/epoll.h>
3874
3875 int main(void)
3876 {
3877     epoll_create(0);
3878     return 0;
3879 }
3880 EOF
3881 if compile_prog "" "" ; then
3882   epoll=yes
3883 fi
3884
3885 # epoll_create1 is a later addition
3886 # so we must check separately for its presence
3887 epoll_create1=no
3888 cat > $TMPC << EOF
3889 #include <sys/epoll.h>
3890
3891 int main(void)
3892 {
3893     /* Note that we use epoll_create1 as a value, not as
3894      * a function being called. This is necessary so that on
3895      * old SPARC glibc versions where the function was present in
3896      * the library but not declared in the header file we will
3897      * fail the configure check. (Otherwise we will get a compiler
3898      * warning but not an error, and will proceed to fail the
3899      * qemu compile where we compile with -Werror.)
3900      */
3901     return (int)(uintptr_t)&epoll_create1;
3902 }
3903 EOF
3904 if compile_prog "" "" ; then
3905   epoll_create1=yes
3906 fi
3907
3908 # check for sendfile support
3909 sendfile=no
3910 cat > $TMPC << EOF
3911 #include <sys/sendfile.h>
3912
3913 int main(void)
3914 {
3915     return sendfile(0, 0, 0, 0);
3916 }
3917 EOF
3918 if compile_prog "" "" ; then
3919   sendfile=yes
3920 fi
3921
3922 # check for timerfd support (glibc 2.8 and newer)
3923 timerfd=no
3924 cat > $TMPC << EOF
3925 #include <sys/timerfd.h>
3926
3927 int main(void)
3928 {
3929     return(timerfd_create(CLOCK_REALTIME, 0));
3930 }
3931 EOF
3932 if compile_prog "" "" ; then
3933   timerfd=yes
3934 fi
3935
3936 # check for setns and unshare support
3937 setns=no
3938 cat > $TMPC << EOF
3939 #include <sched.h>
3940
3941 int main(void)
3942 {
3943     int ret;
3944     ret = setns(0, 0);
3945     ret = unshare(0);
3946     return ret;
3947 }
3948 EOF
3949 if compile_prog "" "" ; then
3950   setns=yes
3951 fi
3952
3953 # clock_adjtime probe
3954 clock_adjtime=no
3955 cat > $TMPC <<EOF
3956 #include <time.h>
3957
3958 int main(void)
3959 {
3960     return clock_adjtime(0, 0);
3961 }
3962 EOF
3963 clock_adjtime=no
3964 if compile_prog "" "" ; then
3965   clock_adjtime=yes
3966 fi
3967
3968 # syncfs probe
3969 syncfs=no
3970 cat > $TMPC <<EOF
3971 #include <unistd.h>
3972
3973 int main(void)
3974 {
3975     return syncfs(0);
3976 }
3977 EOF
3978 syncfs=no
3979 if compile_prog "" "" ; then
3980   syncfs=yes
3981 fi
3982
3983 # Check if tools are available to build documentation.
3984 if test "$docs" != "no" ; then
3985   if has makeinfo && has pod2man; then
3986     docs=yes
3987   else
3988     if test "$docs" = "yes" ; then
3989       feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
3990     fi
3991     docs=no
3992   fi
3993 fi
3994
3995 # Search for bswap_32 function
3996 byteswap_h=no
3997 cat > $TMPC << EOF
3998 #include <byteswap.h>
3999 int main(void) { return bswap_32(0); }
4000 EOF
4001 if compile_prog "" "" ; then
4002   byteswap_h=yes
4003 fi
4004
4005 # Search for bswap32 function
4006 bswap_h=no
4007 cat > $TMPC << EOF
4008 #include <sys/endian.h>
4009 #include <sys/types.h>
4010 #include <machine/bswap.h>
4011 int main(void) { return bswap32(0); }
4012 EOF
4013 if compile_prog "" "" ; then
4014   bswap_h=yes
4015 fi
4016
4017 ##########################################
4018 # Do we have libiscsi >= 1.9.0
4019 if test "$libiscsi" != "no" ; then
4020   if $pkg_config --atleast-version=1.9.0 libiscsi; then
4021     libiscsi="yes"
4022     libiscsi_cflags=$($pkg_config --cflags libiscsi)
4023     libiscsi_libs=$($pkg_config --libs libiscsi)
4024   else
4025     if test "$libiscsi" = "yes" ; then
4026       feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4027     fi
4028     libiscsi="no"
4029   fi
4030 fi
4031
4032 ##########################################
4033 # Do we need libm
4034 cat > $TMPC << EOF
4035 #include <math.h>
4036 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
4037 EOF
4038 if compile_prog "" "" ; then
4039   :
4040 elif compile_prog "" "-lm" ; then
4041   LIBS="-lm $LIBS"
4042   libs_qga="-lm $libs_qga"
4043 else
4044   error_exit "libm check failed"
4045 fi
4046
4047 ##########################################
4048 # Do we need librt
4049 # uClibc provides 2 versions of clock_gettime(), one with realtime
4050 # support and one without. This means that the clock_gettime() don't
4051 # need -lrt. We still need it for timer_create() so we check for this
4052 # function in addition.
4053 cat > $TMPC <<EOF
4054 #include <signal.h>
4055 #include <time.h>
4056 int main(void) {
4057   timer_create(CLOCK_REALTIME, NULL, NULL);
4058   return clock_gettime(CLOCK_REALTIME, NULL);
4059 }
4060 EOF
4061
4062 if compile_prog "" "" ; then
4063   :
4064 # we need pthread for static linking. use previous pthread test result
4065 elif compile_prog "" "$pthread_lib -lrt" ; then
4066   LIBS="$LIBS -lrt"
4067   libs_qga="$libs_qga -lrt"
4068 fi
4069
4070 if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
4071         "$aix" != "yes" -a "$haiku" != "yes" ; then
4072     libs_softmmu="-lutil $libs_softmmu"
4073 fi
4074
4075 ##########################################
4076 # spice probe
4077 if test "$spice" != "no" ; then
4078   cat > $TMPC << EOF
4079 #include <spice.h>
4080 int main(void) { spice_server_new(); return 0; }
4081 EOF
4082   spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4083   spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4084   if $pkg_config --atleast-version=0.12.0 spice-server && \
4085      $pkg_config --atleast-version=0.12.3 spice-protocol && \
4086      compile_prog "$spice_cflags" "$spice_libs" ; then
4087     spice="yes"
4088     libs_softmmu="$libs_softmmu $spice_libs"
4089     QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4090     spice_protocol_version=$($pkg_config --modversion spice-protocol)
4091     spice_server_version=$($pkg_config --modversion spice-server)
4092   else
4093     if test "$spice" = "yes" ; then
4094       feature_not_found "spice" \
4095           "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
4096     fi
4097     spice="no"
4098   fi
4099 fi
4100
4101 # check for smartcard support
4102 smartcard_cflags=""
4103 if test "$smartcard" != "no"; then
4104     if $pkg_config libcacard; then
4105         libcacard_cflags=$($pkg_config --cflags libcacard)
4106         libcacard_libs=$($pkg_config --libs libcacard)
4107         QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags"
4108         libs_softmmu="$libs_softmmu $libcacard_libs"
4109         smartcard="yes"
4110     else
4111         if test "$smartcard" = "yes"; then
4112             feature_not_found "smartcard" "Install libcacard devel"
4113         fi
4114         smartcard="no"
4115     fi
4116 fi
4117
4118 # check for libusb
4119 if test "$libusb" != "no" ; then
4120     if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4121         libusb="yes"
4122         libusb_cflags=$($pkg_config --cflags libusb-1.0)
4123         libusb_libs=$($pkg_config --libs libusb-1.0)
4124         QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
4125         libs_softmmu="$libs_softmmu $libusb_libs"
4126     else
4127         if test "$libusb" = "yes"; then
4128             feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4129         fi
4130         libusb="no"
4131     fi
4132 fi
4133
4134 # check for usbredirparser for usb network redirection support
4135 if test "$usb_redir" != "no" ; then
4136     if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4137         usb_redir="yes"
4138         usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4139         usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4140         QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
4141         libs_softmmu="$libs_softmmu $usb_redir_libs"
4142     else
4143         if test "$usb_redir" = "yes"; then
4144             feature_not_found "usb-redir" "Install usbredir devel"
4145         fi
4146         usb_redir="no"
4147     fi
4148 fi
4149
4150 ##########################################
4151 # check if we have VSS SDK headers for win
4152
4153 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4154   case "$vss_win32_sdk" in
4155     "")   vss_win32_include="-isystem $source_path" ;;
4156     *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4157           # handle path with spaces. So we symlink the headers into ".sdk/vss".
4158           vss_win32_include="-isystem $source_path/.sdk/vss"
4159           symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4160           ;;
4161     *)    vss_win32_include="-isystem $vss_win32_sdk"
4162   esac
4163   cat > $TMPC << EOF
4164 #define __MIDL_user_allocate_free_DEFINED__
4165 #include <inc/win2003/vss.h>
4166 int main(void) { return VSS_CTX_BACKUP; }
4167 EOF
4168   if compile_prog "$vss_win32_include" "" ; then
4169     guest_agent_with_vss="yes"
4170     QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4171     libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4172     qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4173   else
4174     if test "$vss_win32_sdk" != "" ; then
4175       echo "ERROR: Please download and install Microsoft VSS SDK:"
4176       echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4177       echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4178       echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
4179       echo "ERROR: The headers are extracted in the directory \`inc'."
4180       feature_not_found "VSS support"
4181     fi
4182     guest_agent_with_vss="no"
4183   fi
4184 fi
4185
4186 ##########################################
4187 # lookup Windows platform SDK (if not specified)
4188 # The SDK is needed only to build .tlb (type library) file of guest agent
4189 # VSS provider from the source. It is usually unnecessary because the
4190 # pre-compiled .tlb file is included.
4191
4192 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4193   if test -z "$win_sdk"; then
4194     programfiles="$PROGRAMFILES"
4195     test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4196     if test -n "$programfiles"; then
4197       win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4198     else
4199       feature_not_found "Windows SDK"
4200     fi
4201   elif test "$win_sdk" = "no"; then
4202     win_sdk=""
4203   fi
4204 fi
4205
4206 ##########################################
4207 # check if mingw environment provides a recent ntddscsi.h
4208 if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4209   cat > $TMPC << EOF
4210 #include <windows.h>
4211 #include <ntddscsi.h>
4212 int main(void) {
4213 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4214 #error Missing required ioctl definitions
4215 #endif
4216   SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4217   return addr.Lun;
4218 }
4219 EOF
4220   if compile_prog "" "" ; then
4221     guest_agent_ntddscsi=yes
4222     libs_qga="-lsetupapi $libs_qga"
4223   fi
4224 fi
4225
4226 ##########################################
4227 # virgl renderer probe
4228
4229 if test "$virglrenderer" != "no" ; then
4230   cat > $TMPC << EOF
4231 #include <virglrenderer.h>
4232 int main(void) { virgl_renderer_poll(); return 0; }
4233 EOF
4234   virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4235   virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4236   if $pkg_config virglrenderer >/dev/null 2>&1 && \
4237      compile_prog "$virgl_cflags" "$virgl_libs" ; then
4238     virglrenderer="yes"
4239   else
4240     if test "$virglrenderer" = "yes" ; then
4241       feature_not_found "virglrenderer"
4242     fi
4243     virglrenderer="no"
4244   fi
4245 fi
4246
4247 ##########################################
4248 # check if we have fdatasync
4249
4250 fdatasync=no
4251 cat > $TMPC << EOF
4252 #include <unistd.h>
4253 int main(void) {
4254 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4255 return fdatasync(0);
4256 #else
4257 #error Not supported
4258 #endif
4259 }
4260 EOF
4261 if compile_prog "" "" ; then
4262     fdatasync=yes
4263 fi
4264
4265 ##########################################
4266 # check if we have madvise
4267
4268 madvise=no
4269 cat > $TMPC << EOF
4270 #include <sys/types.h>
4271 #include <sys/mman.h>
4272 #include <stddef.h>
4273 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4274 EOF
4275 if compile_prog "" "" ; then
4276     madvise=yes