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