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