crypto: add a nettle 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 gnutls_nettle=no
2131 if test "$gnutls" != "no"; then
2132     if $pkg_config --exists "gnutls"; then
2133         gnutls_cflags=`$pkg_config --cflags gnutls`
2134         gnutls_libs=`$pkg_config --libs gnutls`
2135         libs_softmmu="$gnutls_libs $libs_softmmu"
2136         libs_tools="$gnutls_libs $libs_tools"
2137         QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2138         gnutls="yes"
2139
2140         # gnutls_hash_init requires >= 2.9.10
2141         if $pkg_config --exists "gnutls >= 2.9.10"; then
2142             gnutls_hash="yes"
2143         else
2144             gnutls_hash="no"
2145         fi
2146
2147         if $pkg_config --exists 'gnutls >= 3.0'; then
2148             gnutls_gcrypt=no
2149             gnutls_nettle=yes
2150         elif $pkg_config --exists 'gnutls >= 2.12'; then
2151             case `$pkg_config --libs --static gnutls` in
2152                 *gcrypt*)
2153                     gnutls_gcrypt=yes
2154                     gnutls_nettle=no
2155                     ;;
2156                 *nettle*)
2157                     gnutls_gcrypt=no
2158                     gnutls_nettle=yes
2159                     ;;
2160                 *)
2161                     gnutls_gcrypt=yes
2162                     gnutls_nettle=no
2163                     ;;
2164             esac
2165         else
2166             gnutls_gcrypt=yes
2167             gnutls_nettle=no
2168         fi
2169     elif test "$gnutls" = "yes"; then
2170         feature_not_found "gnutls" "Install gnutls devel"
2171     else
2172         gnutls="no"
2173         gnutls_hash="no"
2174     fi
2175 else
2176     gnutls_hash="no"
2177 fi
2178
2179 if test "$gnutls_gcrypt" != "no"; then
2180     if has "libgcrypt-config"; then
2181         gcrypt_cflags=`libgcrypt-config --cflags`
2182         gcrypt_libs=`libgcrypt-config --libs`
2183         libs_softmmu="$gcrypt_libs $libs_softmmu"
2184         libs_tools="$gcrypt_libs $libs_tools"
2185         QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2186     else
2187         feature_not_found "gcrypt" "Install gcrypt devel"
2188     fi
2189 fi
2190
2191
2192 if test "$gnutls_nettle" != "no"; then
2193     if $pkg_config --exists "nettle"; then
2194         nettle_cflags=`$pkg_config --cflags nettle`
2195         nettle_libs=`$pkg_config --libs nettle`
2196         libs_softmmu="$nettle_libs $libs_softmmu"
2197         libs_tools="$nettle_libs $libs_tools"
2198         QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2199     else
2200         feature_not_found "nettle" "Install nettle devel"
2201     fi
2202 fi
2203
2204
2205 ##########################################
2206 # VTE probe
2207
2208 if test "$vte" != "no"; then
2209     if test "$gtkabi" = "3.0"; then
2210       vtepackage="vte-2.90"
2211       vteversion="0.32.0"
2212     else
2213       vtepackage="vte"
2214       vteversion="0.24.0"
2215     fi
2216     if $pkg_config --exists "$vtepackage >= $vteversion"; then
2217         vte_cflags=`$pkg_config --cflags $vtepackage`
2218         vte_libs=`$pkg_config --libs $vtepackage`
2219         libs_softmmu="$vte_libs $libs_softmmu"
2220         vte="yes"
2221     elif test "$vte" = "yes"; then
2222         if test "$gtkabi" = "3.0"; then
2223             feature_not_found "vte" "Install libvte-2.90 devel"
2224         else
2225             feature_not_found "vte" "Install libvte devel"
2226         fi
2227     else
2228         vte="no"
2229     fi
2230 fi
2231
2232 ##########################################
2233 # SDL probe
2234
2235 # Look for sdl configuration program (pkg-config or sdl-config).  Try
2236 # sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2237
2238 if test $sdlabi = "2.0"; then
2239     sdl_config=$sdl2_config
2240     sdlname=sdl2
2241     sdlconfigname=sdl2_config
2242 else
2243     sdlname=sdl
2244     sdlconfigname=sdl_config
2245 fi
2246
2247 if test "`basename $sdl_config`" != $sdlconfigname && ! has ${sdl_config}; then
2248   sdl_config=$sdlconfigname
2249 fi
2250
2251 if $pkg_config $sdlname --exists; then
2252   sdlconfig="$pkg_config $sdlname"
2253   _sdlversion=`$sdlconfig --modversion 2>/dev/null | sed 's/[^0-9]//g'`
2254 elif has ${sdl_config}; then
2255   sdlconfig="$sdl_config"
2256   _sdlversion=`$sdlconfig --version | sed 's/[^0-9]//g'`
2257 else
2258   if test "$sdl" = "yes" ; then
2259     feature_not_found "sdl" "Install SDL devel"
2260   fi
2261   sdl=no
2262 fi
2263 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2264   echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2265 fi
2266
2267 sdl_too_old=no
2268 if test "$sdl" != "no" ; then
2269   cat > $TMPC << EOF
2270 #include <SDL.h>
2271 #undef main /* We don't want SDL to override our main() */
2272 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2273 EOF
2274   sdl_cflags=`$sdlconfig --cflags 2> /dev/null`
2275   if test "$static" = "yes" ; then
2276     sdl_libs=`$sdlconfig --static-libs 2>/dev/null`
2277   else
2278     sdl_libs=`$sdlconfig --libs 2> /dev/null`
2279   fi
2280   if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2281     if test "$_sdlversion" -lt 121 ; then
2282       sdl_too_old=yes
2283     else
2284       if test "$cocoa" = "no" ; then
2285         sdl=yes
2286       fi
2287     fi
2288
2289     # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2290     if test "$sdl" = "yes" -a "$static" = "yes" ; then
2291       if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2292          sdl_libs="$sdl_libs `aalib-config --static-libs 2>/dev/null`"
2293          sdl_cflags="$sdl_cflags `aalib-config --cflags 2>/dev/null`"
2294       fi
2295       if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2296         :
2297       else
2298         sdl=no
2299       fi
2300     fi # static link
2301   else # sdl not found
2302     if test "$sdl" = "yes" ; then
2303       feature_not_found "sdl" "Install SDL devel"
2304     fi
2305     sdl=no
2306   fi # sdl compile test
2307 fi
2308
2309 if test "$sdl" = "yes" ; then
2310   cat > $TMPC <<EOF
2311 #include <SDL.h>
2312 #if defined(SDL_VIDEO_DRIVER_X11)
2313 #include <X11/XKBlib.h>
2314 #else
2315 #error No x11 support
2316 #endif
2317 int main(void) { return 0; }
2318 EOF
2319   if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2320     sdl_cflags="$sdl_cflags $x11_cflags"
2321     sdl_libs="$sdl_libs $x11_libs"
2322   fi
2323   libs_softmmu="$sdl_libs $libs_softmmu"
2324 fi
2325
2326 ##########################################
2327 # RDMA needs OpenFabrics libraries
2328 if test "$rdma" != "no" ; then
2329   cat > $TMPC <<EOF
2330 #include <rdma/rdma_cma.h>
2331 int main(void) { return 0; }
2332 EOF
2333   rdma_libs="-lrdmacm -libverbs"
2334   if compile_prog "" "$rdma_libs" ; then
2335     rdma="yes"
2336     libs_softmmu="$libs_softmmu $rdma_libs"
2337   else
2338     if test "$rdma" = "yes" ; then
2339         error_exit \
2340             " OpenFabrics librdmacm/libibverbs not present." \
2341             " Your options:" \
2342             "  (1) Fast: Install infiniband packages from your distro." \
2343             "  (2) Cleanest: Install libraries from www.openfabrics.org" \
2344             "  (3) Also: Install softiwarp if you don't have RDMA hardware"
2345     fi
2346     rdma="no"
2347   fi
2348 fi
2349
2350 ##########################################
2351 # VNC TLS/WS detection
2352 if test "$vnc" = "yes" -a \( "$vnc_tls" != "no" -o "$vnc_ws" != "no" \) ; then
2353   cat > $TMPC <<EOF
2354 #include <gnutls/gnutls.h>
2355 int main(void) { gnutls_session_t s; gnutls_init(&s, GNUTLS_SERVER); return 0; }
2356 EOF
2357   vnc_tls_cflags=`$pkg_config --cflags gnutls 2> /dev/null`
2358   vnc_tls_libs=`$pkg_config --libs gnutls 2> /dev/null`
2359   if compile_prog "$vnc_tls_cflags" "$vnc_tls_libs" ; then
2360     if test "$vnc_tls" != "no" ; then
2361       vnc_tls=yes
2362     fi
2363     if test "$vnc_ws" != "no" ; then
2364       vnc_ws=yes
2365     fi
2366     libs_softmmu="$vnc_tls_libs $libs_softmmu"
2367     QEMU_CFLAGS="$QEMU_CFLAGS $vnc_tls_cflags"
2368   else
2369     if test "$vnc_tls" = "yes" ; then
2370       feature_not_found "vnc-tls" "Install gnutls devel"
2371     fi
2372     if test "$vnc_ws" = "yes" ; then
2373       feature_not_found "vnc-ws" "Install gnutls devel"
2374     fi
2375     vnc_tls=no
2376     vnc_ws=no
2377   fi
2378 fi
2379
2380 ##########################################
2381 # Quorum probe (check for gnutls)
2382 if test "$quorum" != "no" ; then
2383 cat > $TMPC <<EOF
2384 #include <gnutls/gnutls.h>
2385 #include <gnutls/crypto.h>
2386 int main(void) {char data[4096], digest[32];
2387 gnutls_hash_fast(GNUTLS_DIG_SHA256, data, 4096, digest);
2388 return 0;
2389 }
2390 EOF
2391 quorum_tls_cflags=`$pkg_config --cflags gnutls 2> /dev/null`
2392 quorum_tls_libs=`$pkg_config --libs gnutls 2> /dev/null`
2393 if compile_prog "$quorum_tls_cflags" "$quorum_tls_libs" ; then
2394   qcow_tls=yes
2395   libs_softmmu="$quorum_tls_libs $libs_softmmu"
2396   libs_tools="$quorum_tls_libs $libs_softmmu"
2397   QEMU_CFLAGS="$QEMU_CFLAGS $quorum_tls_cflags"
2398   quorum="yes"
2399 else
2400   if test "$quorum" = "yes"; then
2401     feature_not_found "gnutls" "gnutls > 2.10.0 required to compile Quorum"
2402   fi
2403   quorum="no"
2404 fi
2405 fi
2406
2407 ##########################################
2408 # VNC SASL detection
2409 if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
2410   cat > $TMPC <<EOF
2411 #include <sasl/sasl.h>
2412 #include <stdio.h>
2413 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2414 EOF
2415   # Assuming Cyrus-SASL installed in /usr prefix
2416   vnc_sasl_cflags=""
2417   vnc_sasl_libs="-lsasl2"
2418   if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2419     vnc_sasl=yes
2420     libs_softmmu="$vnc_sasl_libs $libs_softmmu"
2421     QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
2422   else
2423     if test "$vnc_sasl" = "yes" ; then
2424       feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2425     fi
2426     vnc_sasl=no
2427   fi
2428 fi
2429
2430 ##########################################
2431 # VNC JPEG detection
2432 if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2433 cat > $TMPC <<EOF
2434 #include <stdio.h>
2435 #include <jpeglib.h>
2436 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2437 EOF
2438     vnc_jpeg_cflags=""
2439     vnc_jpeg_libs="-ljpeg"
2440   if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2441     vnc_jpeg=yes
2442     libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
2443     QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2444   else
2445     if test "$vnc_jpeg" = "yes" ; then
2446       feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2447     fi
2448     vnc_jpeg=no
2449   fi
2450 fi
2451
2452 ##########################################
2453 # VNC PNG detection
2454 if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
2455 cat > $TMPC <<EOF
2456 //#include <stdio.h>
2457 #include <png.h>
2458 #include <stddef.h>
2459 int main(void) {
2460     png_structp png_ptr;
2461     png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
2462     return png_ptr != 0;
2463 }
2464 EOF
2465   if $pkg_config libpng --exists; then
2466     vnc_png_cflags=`$pkg_config libpng --cflags`
2467     vnc_png_libs=`$pkg_config libpng --libs`
2468   else
2469     vnc_png_cflags=""
2470     vnc_png_libs="-lpng"
2471   fi
2472   if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2473     vnc_png=yes
2474     libs_softmmu="$vnc_png_libs $libs_softmmu"
2475     QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
2476   else
2477     if test "$vnc_png" = "yes" ; then
2478       feature_not_found "vnc-png" "Install libpng devel"
2479     fi
2480     vnc_png=no
2481   fi
2482 fi
2483
2484 ##########################################
2485 # fnmatch() probe, used for ACL routines
2486 fnmatch="no"
2487 cat > $TMPC << EOF
2488 #include <fnmatch.h>
2489 int main(void)
2490 {
2491     fnmatch("foo", "foo", 0);
2492     return 0;
2493 }
2494 EOF
2495 if compile_prog "" "" ; then
2496    fnmatch="yes"
2497 fi
2498
2499 ##########################################
2500 # uuid_generate() probe, used for vdi block driver
2501 # Note that on some systems (notably MacOSX) no extra library
2502 # need be linked to get the uuid functions.
2503 if test "$uuid" != "no" ; then
2504   uuid_libs="-luuid"
2505   cat > $TMPC << EOF
2506 #include <uuid/uuid.h>
2507 int main(void)
2508 {
2509     uuid_t my_uuid;
2510     uuid_generate(my_uuid);
2511     return 0;
2512 }
2513 EOF
2514   if compile_prog "" "" ; then
2515     uuid="yes"
2516   elif compile_prog "" "$uuid_libs" ; then
2517     uuid="yes"
2518     libs_softmmu="$uuid_libs $libs_softmmu"
2519     libs_tools="$uuid_libs $libs_tools"
2520   else
2521     if test "$uuid" = "yes" ; then
2522       feature_not_found "uuid" "Install libuuid devel"
2523     fi
2524     uuid=no
2525   fi
2526 fi
2527
2528 if test "$vhdx" = "yes" ; then
2529     if test "$uuid" = "no" ; then
2530         error_exit "uuid required for VHDX support"
2531     fi
2532 elif test "$vhdx" != "no" ; then
2533     if test "$uuid" = "yes" ; then
2534         vhdx=yes
2535     else
2536         vhdx=no
2537     fi
2538 fi
2539
2540 ##########################################
2541 # xfsctl() probe, used for raw-posix
2542 if test "$xfs" != "no" ; then
2543   cat > $TMPC << EOF
2544 #include <stddef.h>  /* NULL */
2545 #include <xfs/xfs.h>
2546 int main(void)
2547 {
2548     xfsctl(NULL, 0, 0, NULL);
2549     return 0;
2550 }
2551 EOF
2552   if compile_prog "" "" ; then
2553     xfs="yes"
2554   else
2555     if test "$xfs" = "yes" ; then
2556       feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
2557     fi
2558     xfs=no
2559   fi
2560 fi
2561
2562 ##########################################
2563 # vde libraries probe
2564 if test "$vde" != "no" ; then
2565   vde_libs="-lvdeplug"
2566   cat > $TMPC << EOF
2567 #include <libvdeplug.h>
2568 int main(void)
2569 {
2570     struct vde_open_args a = {0, 0, 0};
2571     char s[] = "";
2572     vde_open(s, s, &a);
2573     return 0;
2574 }
2575 EOF
2576   if compile_prog "" "$vde_libs" ; then
2577     vde=yes
2578     libs_softmmu="$vde_libs $libs_softmmu"
2579     libs_tools="$vde_libs $libs_tools"
2580   else
2581     if test "$vde" = "yes" ; then
2582       feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
2583     fi
2584     vde=no
2585   fi
2586 fi
2587
2588 ##########################################
2589 # netmap support probe
2590 # Apart from looking for netmap headers, we make sure that the host API version
2591 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2592 # a minor/major version number. Minor new features will be marked with values up
2593 # to 15, and if something happens that requires a change to the backend we will
2594 # move above 15, submit the backend fixes and modify this two bounds.
2595 if test "$netmap" != "no" ; then
2596   cat > $TMPC << EOF
2597 #include <inttypes.h>
2598 #include <net/if.h>
2599 #include <net/netmap.h>
2600 #include <net/netmap_user.h>
2601 #if (NETMAP_API < 11) || (NETMAP_API > 15)
2602 #error
2603 #endif
2604 int main(void) { return 0; }
2605 EOF
2606   if compile_prog "" "" ; then
2607     netmap=yes
2608   else
2609     if test "$netmap" = "yes" ; then
2610       feature_not_found "netmap"
2611     fi
2612     netmap=no
2613   fi
2614 fi
2615
2616 ##########################################
2617 # libcap-ng library probe
2618 if test "$cap_ng" != "no" ; then
2619   cap_libs="-lcap-ng"
2620   cat > $TMPC << EOF
2621 #include <cap-ng.h>
2622 int main(void)
2623 {
2624     capng_capability_to_name(CAPNG_EFFECTIVE);
2625     return 0;
2626 }
2627 EOF
2628   if compile_prog "" "$cap_libs" ; then
2629     cap_ng=yes
2630     libs_tools="$cap_libs $libs_tools"
2631   else
2632     if test "$cap_ng" = "yes" ; then
2633       feature_not_found "cap_ng" "Install libcap-ng devel"
2634     fi
2635     cap_ng=no
2636   fi
2637 fi
2638
2639 ##########################################
2640 # Sound support libraries probe
2641
2642 audio_drv_probe()
2643 {
2644     drv=$1
2645     hdr=$2
2646     lib=$3
2647     exp=$4
2648     cfl=$5
2649         cat > $TMPC << EOF
2650 #include <$hdr>
2651 int main(void) { $exp }
2652 EOF
2653     if compile_prog "$cfl" "$lib" ; then
2654         :
2655     else
2656         error_exit "$drv check failed" \
2657             "Make sure to have the $drv libs and headers installed."
2658     fi
2659 }
2660
2661 audio_drv_list=`echo "$audio_drv_list" | sed -e 's/,/ /g'`
2662 for drv in $audio_drv_list; do
2663     case $drv in
2664     alsa)
2665     audio_drv_probe $drv alsa/asoundlib.h -lasound \
2666         "return snd_pcm_close((snd_pcm_t *)0);"
2667     libs_softmmu="-lasound $libs_softmmu"
2668     ;;
2669
2670     pa)
2671     audio_drv_probe $drv pulse/mainloop.h "-lpulse" \
2672         "pa_mainloop *m = 0; pa_mainloop_free (m); return 0;"
2673     libs_softmmu="-lpulse $libs_softmmu"
2674     audio_pt_int="yes"
2675     ;;
2676
2677     coreaudio)
2678       libs_softmmu="-framework CoreAudio $libs_softmmu"
2679     ;;
2680
2681     dsound)
2682       libs_softmmu="-lole32 -ldxguid $libs_softmmu"
2683       audio_win_int="yes"
2684     ;;
2685
2686     oss)
2687       libs_softmmu="$oss_lib $libs_softmmu"
2688     ;;
2689
2690     sdl|wav)
2691     # XXX: Probes for CoreAudio, DirectSound, SDL(?)
2692     ;;
2693
2694     *)
2695     echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
2696         error_exit "Unknown driver '$drv' selected" \
2697             "Possible drivers are: $audio_possible_drivers"
2698     }
2699     ;;
2700     esac
2701 done
2702
2703 ##########################################
2704 # BrlAPI probe
2705
2706 if test "$brlapi" != "no" ; then
2707   brlapi_libs="-lbrlapi"
2708   cat > $TMPC << EOF
2709 #include <brlapi.h>
2710 #include <stddef.h>
2711 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
2712 EOF
2713   if compile_prog "" "$brlapi_libs" ; then
2714     brlapi=yes
2715     libs_softmmu="$brlapi_libs $libs_softmmu"
2716   else
2717     if test "$brlapi" = "yes" ; then
2718       feature_not_found "brlapi" "Install brlapi devel"
2719     fi
2720     brlapi=no
2721   fi
2722 fi
2723
2724 ##########################################
2725 # curses probe
2726 if test "$curses" != "no" ; then
2727   if test "$mingw32" = "yes" ; then
2728     curses_list="-lpdcurses"
2729   else
2730     curses_list="$($pkg_config --libs ncurses 2>/dev/null):-lncurses:-lcurses"
2731   fi
2732   curses_found=no
2733   cat > $TMPC << EOF
2734 #include <curses.h>
2735 int main(void) {
2736   const char *s = curses_version();
2737   resize_term(0, 0);
2738   return s != 0;
2739 }
2740 EOF
2741   IFS=:
2742   for curses_lib in $curses_list; do
2743     unset IFS
2744     if compile_prog "" "$curses_lib" ; then
2745       curses_found=yes
2746       libs_softmmu="$curses_lib $libs_softmmu"
2747       break
2748     fi
2749   done
2750   unset IFS
2751   if test "$curses_found" = "yes" ; then
2752     curses=yes
2753   else
2754     if test "$curses" = "yes" ; then
2755       feature_not_found "curses" "Install ncurses devel"
2756     fi
2757     curses=no
2758   fi
2759 fi
2760
2761 ##########################################
2762 # curl probe
2763 if test "$curl" != "no" ; then
2764   if $pkg_config libcurl --exists; then
2765     curlconfig="$pkg_config libcurl"
2766   else
2767     curlconfig=curl-config
2768   fi
2769   cat > $TMPC << EOF
2770 #include <curl/curl.h>
2771 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
2772 EOF
2773   curl_cflags=`$curlconfig --cflags 2>/dev/null`
2774   curl_libs=`$curlconfig --libs 2>/dev/null`
2775   if compile_prog "$curl_cflags" "$curl_libs" ; then
2776     curl=yes
2777   else
2778     if test "$curl" = "yes" ; then
2779       feature_not_found "curl" "Install libcurl devel"
2780     fi
2781     curl=no
2782   fi
2783 fi # test "$curl"
2784
2785 ##########################################
2786 # bluez support probe
2787 if test "$bluez" != "no" ; then
2788   cat > $TMPC << EOF
2789 #include <bluetooth/bluetooth.h>
2790 int main(void) { return bt_error(0); }
2791 EOF
2792   bluez_cflags=`$pkg_config --cflags bluez 2> /dev/null`
2793   bluez_libs=`$pkg_config --libs bluez 2> /dev/null`
2794   if compile_prog "$bluez_cflags" "$bluez_libs" ; then
2795     bluez=yes
2796     libs_softmmu="$bluez_libs $libs_softmmu"
2797   else
2798     if test "$bluez" = "yes" ; then
2799       feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
2800     fi
2801     bluez="no"
2802   fi
2803 fi
2804
2805 ##########################################
2806 # glib support probe
2807
2808 glib_req_ver=2.22
2809 glib_modules=gthread-2.0
2810 if test "$modules" = yes; then
2811     glib_modules="$glib_modules gmodule-2.0"
2812 fi
2813
2814 for i in $glib_modules; do
2815     if $pkg_config --atleast-version=$glib_req_ver $i; then
2816         glib_cflags=`$pkg_config --cflags $i`
2817         glib_libs=`$pkg_config --libs $i`
2818         CFLAGS="$glib_cflags $CFLAGS"
2819         LIBS="$glib_libs $LIBS"
2820         libs_qga="$glib_libs $libs_qga"
2821     else
2822         error_exit "glib-$glib_req_ver $i is required to compile QEMU"
2823     fi
2824 done
2825
2826 # g_test_trap_subprocess added in 2.38. Used by some tests.
2827 glib_subprocess=yes
2828 if ! $pkg_config --atleast-version=2.38 glib-2.0; then
2829     glib_subprocess=no
2830 fi
2831
2832 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
2833 cat > $TMPC << EOF
2834 #include <glib.h>
2835 int main(void) { return 0; }
2836 EOF
2837 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
2838     if cc_has_warning_flag "-Wno-unknown-attributes"; then
2839         glib_cflags="-Wno-unknown-attributes $glib_cflags"
2840         CFLAGS="-Wno-unknown-attributes $CFLAGS"
2841     fi
2842 fi
2843
2844 ##########################################
2845 # SHA command probe for modules
2846 if test "$modules" = yes; then
2847     shacmd_probe="sha1sum sha1 shasum"
2848     for c in $shacmd_probe; do
2849         if has $c; then
2850             shacmd="$c"
2851             break
2852         fi
2853     done
2854     if test "$shacmd" = ""; then
2855         error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
2856     fi
2857 fi
2858
2859 ##########################################
2860 # pixman support probe
2861
2862 if test "$pixman" = ""; then
2863   if test "$want_tools" = "no" -a "$softmmu" = "no"; then
2864     pixman="none"
2865   elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
2866     pixman="system"
2867   else
2868     pixman="internal"
2869   fi
2870 fi
2871 if test "$pixman" = "none"; then
2872   if test "$want_tools" != "no" -o "$softmmu" != "no"; then
2873     error_exit "pixman disabled but system emulation or tools build" \
2874         "enabled.  You can turn off pixman only if you also" \
2875         "disable all system emulation targets and the tools" \
2876         "build with '--disable-tools --disable-system'."
2877   fi
2878   pixman_cflags=
2879   pixman_libs=
2880 elif test "$pixman" = "system"; then
2881   # pixman version has been checked above
2882   pixman_cflags=`$pkg_config --cflags pixman-1`
2883   pixman_libs=`$pkg_config --libs pixman-1`
2884 else
2885   if test ! -d ${source_path}/pixman/pixman; then
2886     error_exit "pixman >= 0.21.8 not present. Your options:" \
2887         "  (1) Preferred: Install the pixman devel package (any recent" \
2888         "      distro should have packages as Xorg needs pixman too)." \
2889         "  (2) Fetch the pixman submodule, using:" \
2890         "      git submodule update --init pixman"
2891   fi
2892   mkdir -p pixman/pixman
2893   pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
2894   pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
2895 fi
2896
2897 ##########################################
2898 # libcap probe
2899
2900 if test "$cap" != "no" ; then
2901   cat > $TMPC <<EOF
2902 #include <stdio.h>
2903 #include <sys/capability.h>
2904 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
2905 EOF
2906   if compile_prog "" "-lcap" ; then
2907     cap=yes
2908   else
2909     cap=no
2910   fi
2911 fi
2912
2913 ##########################################
2914 # pthread probe
2915 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
2916
2917 pthread=no
2918 cat > $TMPC << EOF
2919 #include <pthread.h>
2920 static void *f(void *p) { return NULL; }
2921 int main(void) {
2922   pthread_t thread;
2923   pthread_create(&thread, 0, f, 0);
2924   return 0;
2925 }
2926 EOF
2927 if compile_prog "" "" ; then
2928   pthread=yes
2929 else
2930   for pthread_lib in $PTHREADLIBS_LIST; do
2931     if compile_prog "" "$pthread_lib" ; then
2932       pthread=yes
2933       found=no
2934       for lib_entry in $LIBS; do
2935         if test "$lib_entry" = "$pthread_lib"; then
2936           found=yes
2937           break
2938         fi
2939       done
2940       if test "$found" = "no"; then
2941         LIBS="$pthread_lib $LIBS"
2942       fi
2943       break
2944     fi
2945   done
2946 fi
2947
2948 if test "$mingw32" != yes -a "$pthread" = no; then
2949   error_exit "pthread check failed" \
2950       "Make sure to have the pthread libs and headers installed."
2951 fi
2952
2953 # check for pthread_setname_np
2954 pthread_setname_np=no
2955 cat > $TMPC << EOF
2956 #include <pthread.h>
2957
2958 static void *f(void *p) { return NULL; }
2959 int main(void)
2960 {
2961     pthread_t thread;
2962     pthread_create(&thread, 0, f, 0);
2963     pthread_setname_np(thread, "QEMU");
2964     return 0;
2965 }
2966 EOF
2967 if compile_prog "" "$pthread_lib" ; then
2968   pthread_setname_np=yes
2969 fi
2970
2971 ##########################################
2972 # rbd probe
2973 if test "$rbd" != "no" ; then
2974   cat > $TMPC <<EOF
2975 #include <stdio.h>
2976 #include <rbd/librbd.h>
2977 int main(void) {
2978     rados_t cluster;
2979     rados_create(&cluster, NULL);
2980     return 0;
2981 }
2982 EOF
2983   rbd_libs="-lrbd -lrados"
2984   if compile_prog "" "$rbd_libs" ; then
2985     rbd=yes
2986   else
2987     if test "$rbd" = "yes" ; then
2988       feature_not_found "rados block device" "Install librbd/ceph devel"
2989     fi
2990     rbd=no
2991   fi
2992 fi
2993
2994 ##########################################
2995 # libssh2 probe
2996 min_libssh2_version=1.2.8
2997 if test "$libssh2" != "no" ; then
2998   if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
2999     libssh2_cflags=`$pkg_config libssh2 --cflags`
3000     libssh2_libs=`$pkg_config libssh2 --libs`
3001     libssh2=yes
3002   else
3003     if test "$libssh2" = "yes" ; then
3004       error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
3005     fi
3006     libssh2=no
3007   fi
3008 fi
3009
3010 ##########################################
3011 # libssh2_sftp_fsync probe
3012
3013 if test "$libssh2" = "yes"; then
3014   cat > $TMPC <<EOF
3015 #include <stdio.h>
3016 #include <libssh2.h>
3017 #include <libssh2_sftp.h>
3018 int main(void) {
3019     LIBSSH2_SESSION *session;
3020     LIBSSH2_SFTP *sftp;
3021     LIBSSH2_SFTP_HANDLE *sftp_handle;
3022     session = libssh2_session_init ();
3023     sftp = libssh2_sftp_init (session);
3024     sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3025     libssh2_sftp_fsync (sftp_handle);
3026     return 0;
3027 }
3028 EOF
3029   # libssh2_cflags/libssh2_libs defined in previous test.
3030   if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3031     QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3032   fi
3033 fi
3034
3035 ##########################################
3036 # linux-aio probe
3037
3038 if test "$linux_aio" != "no" ; then
3039   cat > $TMPC <<EOF
3040 #include <libaio.h>
3041 #include <sys/eventfd.h>
3042 #include <stddef.h>
3043 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3044 EOF
3045   if compile_prog "" "-laio" ; then
3046     linux_aio=yes
3047   else
3048     if test "$linux_aio" = "yes" ; then
3049       feature_not_found "linux AIO" "Install libaio devel"
3050     fi
3051     linux_aio=no
3052   fi
3053 fi
3054
3055 ##########################################
3056 # TPM passthrough is only on x86 Linux
3057
3058 if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3059   tpm_passthrough=$tpm
3060 else
3061   tpm_passthrough=no
3062 fi
3063
3064 ##########################################
3065 # attr probe
3066
3067 if test "$attr" != "no" ; then
3068   cat > $TMPC <<EOF
3069 #include <stdio.h>
3070 #include <sys/types.h>
3071 #ifdef CONFIG_LIBATTR
3072 #include <attr/xattr.h>
3073 #else
3074 #include <sys/xattr.h>
3075 #endif
3076 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3077 EOF
3078   if compile_prog "" "" ; then
3079     attr=yes
3080   # Older distros have <attr/xattr.h>, and need -lattr:
3081   elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3082     attr=yes
3083     LIBS="-lattr $LIBS"
3084     libattr=yes
3085   else
3086     if test "$attr" = "yes" ; then
3087       feature_not_found "ATTR" "Install libc6 or libattr devel"
3088     fi
3089     attr=no
3090   fi
3091 fi
3092
3093 ##########################################
3094 # iovec probe
3095 cat > $TMPC <<EOF
3096 #include <sys/types.h>
3097 #include <sys/uio.h>
3098 #include <unistd.h>
3099 int main(void) { return sizeof(struct iovec); }
3100 EOF
3101 iovec=no
3102 if compile_prog "" "" ; then
3103   iovec=yes
3104 fi
3105
3106 ##########################################
3107 # preadv probe
3108 cat > $TMPC <<EOF
3109 #include <sys/types.h>
3110 #include <sys/uio.h>
3111 #include <unistd.h>
3112 int main(void) { return preadv(0, 0, 0, 0); }
3113 EOF
3114 preadv=no
3115 if compile_prog "" "" ; then
3116   preadv=yes
3117 fi
3118
3119 ##########################################
3120 # fdt probe
3121 # fdt support is mandatory for at least some target architectures,
3122 # so insist on it if we're building those system emulators.
3123 fdt_required=no
3124 for target in $target_list; do
3125   case $target in
3126     aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu)
3127       fdt_required=yes
3128     ;;
3129   esac
3130 done
3131
3132 if test "$fdt_required" = "yes"; then
3133   if test "$fdt" = "no"; then
3134     error_exit "fdt disabled but some requested targets require it." \
3135       "You can turn off fdt only if you also disable all the system emulation" \
3136       "targets which need it (by specifying a cut down --target-list)."
3137   fi
3138   fdt=yes
3139 fi
3140
3141 if test "$fdt" != "no" ; then
3142   fdt_libs="-lfdt"
3143   # explicitly check for libfdt_env.h as it is missing in some stable installs
3144   # and test for required functions to make sure we are on a version >= 1.4.0
3145   cat > $TMPC << EOF
3146 #include <libfdt.h>
3147 #include <libfdt_env.h>
3148 int main(void) { fdt_get_property_by_offset(0, 0, 0); return 0; }
3149 EOF
3150   if compile_prog "" "$fdt_libs" ; then
3151     # system DTC is good - use it
3152     fdt=yes
3153   elif test -d ${source_path}/dtc/libfdt ; then
3154     # have submodule DTC - use it
3155     fdt=yes
3156     dtc_internal="yes"
3157     mkdir -p dtc
3158     if [ "$pwd_is_source_path" != "y" ] ; then
3159        symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3160        symlink "$source_path/dtc/scripts" "dtc/scripts"
3161     fi
3162     fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3163     fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3164   elif test "$fdt" = "yes" ; then
3165     # have neither and want - prompt for system/submodule install
3166     error_exit "DTC (libfdt) version >= 1.4.0 not present. Your options:" \
3167         "  (1) Preferred: Install the DTC (libfdt) devel package" \
3168         "  (2) Fetch the DTC submodule, using:" \
3169         "      git submodule update --init dtc"
3170   else
3171     # don't have and don't want
3172     fdt_libs=
3173     fdt=no
3174   fi
3175 fi
3176
3177 libs_softmmu="$libs_softmmu $fdt_libs"
3178
3179 ##########################################
3180 # opengl probe (for sdl2, milkymist-tmu2)
3181
3182 # GLX probe, used by milkymist-tmu2
3183 # this is temporary, code will be switched to egl mid-term.
3184 cat > $TMPC << EOF
3185 #include <X11/Xlib.h>
3186 #include <GL/gl.h>
3187 #include <GL/glx.h>
3188 int main(void) { glBegin(0); glXQueryVersion(0,0,0); return 0; }
3189 EOF
3190 if compile_prog "" "-lGL -lX11" ; then
3191   have_glx=yes
3192 else
3193   have_glx=no
3194 fi
3195
3196 if test "$opengl" != "no" ; then
3197   opengl_pkgs="gl glesv2 epoxy egl"
3198   if $pkg_config $opengl_pkgs x11 && test "$have_glx" = "yes"; then
3199     opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3200     opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
3201     opengl=yes
3202   else
3203     if test "$opengl" = "yes" ; then
3204       feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3205     fi
3206     opengl_cflags=""
3207     opengl_libs=""
3208     opengl=no
3209   fi
3210 fi
3211
3212
3213 ##########################################
3214 # archipelago probe
3215 if test "$archipelago" != "no" ; then
3216     cat > $TMPC <<EOF
3217 #include <stdio.h>
3218 #include <xseg/xseg.h>
3219 #include <xseg/protocol.h>
3220 int main(void) {
3221     xseg_initialize();
3222     return 0;
3223 }
3224 EOF
3225     archipelago_libs=-lxseg
3226     if compile_prog "" "$archipelago_libs"; then
3227         archipelago="yes"
3228         libs_tools="$archipelago_libs $libs_tools"
3229         libs_softmmu="$archipelago_libs $libs_softmmu"
3230
3231         echo "WARNING: Please check the licenses of QEMU and libxseg carefully."
3232         echo "GPLv3 versions of libxseg may not be compatible with QEMU's"
3233         echo "license and therefore prevent redistribution."
3234         echo
3235         echo "To disable Archipelago, use --disable-archipelago"
3236     else
3237       if test "$archipelago" = "yes" ; then
3238         feature_not_found "Archipelago backend support" "Install libxseg devel"
3239       fi
3240       archipelago="no"
3241     fi
3242 fi
3243
3244
3245 ##########################################
3246 # glusterfs probe
3247 if test "$glusterfs" != "no" ; then
3248   if $pkg_config --atleast-version=3 glusterfs-api; then
3249     glusterfs="yes"
3250     glusterfs_cflags=`$pkg_config --cflags glusterfs-api`
3251     glusterfs_libs=`$pkg_config --libs glusterfs-api`
3252     if $pkg_config --atleast-version=5 glusterfs-api; then
3253       glusterfs_discard="yes"
3254     fi
3255     if $pkg_config --atleast-version=6 glusterfs-api; then
3256       glusterfs_zerofill="yes"
3257     fi
3258   else
3259     if test "$glusterfs" = "yes" ; then
3260       feature_not_found "GlusterFS backend support" \
3261           "Install glusterfs-api devel >= 3"
3262     fi
3263     glusterfs="no"
3264   fi
3265 fi
3266
3267 # Check for inotify functions when we are building linux-user
3268 # emulator.  This is done because older glibc versions don't
3269 # have syscall stubs for these implemented.  In that case we
3270 # don't provide them even if kernel supports them.
3271 #
3272 inotify=no
3273 cat > $TMPC << EOF
3274 #include <sys/inotify.h>
3275
3276 int
3277 main(void)
3278 {
3279         /* try to start inotify */
3280         return inotify_init();
3281 }
3282 EOF
3283 if compile_prog "" "" ; then
3284   inotify=yes
3285 fi
3286
3287 inotify1=no
3288 cat > $TMPC << EOF
3289 #include <sys/inotify.h>
3290
3291 int
3292 main(void)
3293 {
3294     /* try to start inotify */
3295     return inotify_init1(0);
3296 }
3297 EOF
3298 if compile_prog "" "" ; then
3299   inotify1=yes
3300 fi
3301
3302 # check if utimensat and futimens are supported
3303 utimens=no
3304 cat > $TMPC << EOF
3305 #define _ATFILE_SOURCE
3306 #include <stddef.h>
3307 #include <fcntl.h>
3308 #include <sys/stat.h>
3309
3310 int main(void)
3311 {
3312     utimensat(AT_FDCWD, "foo", NULL, 0);
3313     futimens(0, NULL);
3314     return 0;
3315 }
3316 EOF
3317 if compile_prog "" "" ; then
3318   utimens=yes
3319 fi
3320
3321 # check if pipe2 is there
3322 pipe2=no
3323 cat > $TMPC << EOF
3324 #include <unistd.h>
3325 #include <fcntl.h>
3326
3327 int main(void)
3328 {
3329     int pipefd[2];
3330     return pipe2(pipefd, O_CLOEXEC);
3331 }
3332 EOF
3333 if compile_prog "" "" ; then
3334   pipe2=yes
3335 fi
3336
3337 # check if accept4 is there
3338 accept4=no
3339 cat > $TMPC << EOF
3340 #include <sys/socket.h>
3341 #include <stddef.h>
3342
3343 int main(void)
3344 {
3345     accept4(0, NULL, NULL, SOCK_CLOEXEC);
3346     return 0;
3347 }
3348 EOF
3349 if compile_prog "" "" ; then
3350   accept4=yes
3351 fi
3352
3353 # check if tee/splice is there. vmsplice was added same time.
3354 splice=no
3355 cat > $TMPC << EOF
3356 #include <unistd.h>
3357 #include <fcntl.h>
3358 #include <limits.h>
3359
3360 int main(void)
3361 {
3362     int len, fd = 0;
3363     len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3364     splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3365     return 0;
3366 }
3367 EOF
3368 if compile_prog "" "" ; then
3369   splice=yes
3370 fi
3371
3372 ##########################################
3373 # libnuma probe
3374
3375 if test "$numa" != "no" ; then
3376   cat > $TMPC << EOF
3377 #include <numa.h>
3378 int main(void) { return numa_available(); }
3379 EOF
3380
3381   if compile_prog "" "-lnuma" ; then
3382     numa=yes
3383     libs_softmmu="-lnuma $libs_softmmu"
3384   else
3385     if test "$numa" = "yes" ; then
3386       feature_not_found "numa" "install numactl devel"
3387     fi
3388     numa=no
3389   fi
3390 fi
3391
3392 ##########################################
3393 # tcmalloc probe
3394
3395 if test "$tcmalloc" = "yes" ; then
3396   cat > $TMPC << EOF
3397 #include <stdlib.h>
3398 int main(void) { malloc(1); return 0; }
3399 EOF
3400
3401   if compile_prog "" "-ltcmalloc" ; then
3402     LIBS="-ltcmalloc $LIBS"
3403   else
3404     feature_not_found "tcmalloc" "install gperftools devel"
3405   fi
3406 fi
3407
3408 ##########################################
3409 # signalfd probe
3410 signalfd="no"
3411 cat > $TMPC << EOF
3412 #include <unistd.h>
3413 #include <sys/syscall.h>
3414 #include <signal.h>
3415 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3416 EOF
3417
3418 if compile_prog "" "" ; then
3419   signalfd=yes
3420 fi
3421
3422 # check if eventfd is supported
3423 eventfd=no
3424 cat > $TMPC << EOF
3425 #include <sys/eventfd.h>
3426
3427 int main(void)
3428 {
3429     return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3430 }
3431 EOF
3432 if compile_prog "" "" ; then
3433   eventfd=yes
3434 fi
3435
3436 # check for fallocate
3437 fallocate=no
3438 cat > $TMPC << EOF
3439 #include <fcntl.h>
3440
3441 int main(void)
3442 {
3443     fallocate(0, 0, 0, 0);
3444     return 0;
3445 }
3446 EOF
3447 if compile_prog "" "" ; then
3448   fallocate=yes
3449 fi
3450
3451 # check for fallocate hole punching
3452 fallocate_punch_hole=no
3453 cat > $TMPC << EOF
3454 #include <fcntl.h>
3455 #include <linux/falloc.h>
3456
3457 int main(void)
3458 {
3459     fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3460     return 0;
3461 }
3462 EOF
3463 if compile_prog "" "" ; then
3464   fallocate_punch_hole=yes
3465 fi
3466
3467 # check that fallocate supports range zeroing inside the file
3468 fallocate_zero_range=no
3469 cat > $TMPC << EOF
3470 #include <fcntl.h>
3471 #include <linux/falloc.h>
3472
3473 int main(void)
3474 {
3475     fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3476     return 0;
3477 }
3478 EOF
3479 if compile_prog "" "" ; then
3480   fallocate_zero_range=yes
3481 fi
3482
3483 # check for posix_fallocate
3484 posix_fallocate=no
3485 cat > $TMPC << EOF
3486 #include <fcntl.h>
3487
3488 int main(void)
3489 {
3490     posix_fallocate(0, 0, 0);
3491     return 0;
3492 }
3493 EOF
3494 if compile_prog "" "" ; then
3495     posix_fallocate=yes
3496 fi
3497
3498 # check for sync_file_range
3499 sync_file_range=no
3500 cat > $TMPC << EOF
3501 #include <fcntl.h>
3502
3503 int main(void)
3504 {
3505     sync_file_range(0, 0, 0, 0);
3506     return 0;
3507 }
3508 EOF
3509 if compile_prog "" "" ; then
3510   sync_file_range=yes
3511 fi
3512
3513 # check for linux/fiemap.h and FS_IOC_FIEMAP
3514 fiemap=no
3515 cat > $TMPC << EOF
3516 #include <sys/ioctl.h>
3517 #include <linux/fs.h>
3518 #include <linux/fiemap.h>
3519
3520 int main(void)
3521 {
3522     ioctl(0, FS_IOC_FIEMAP, 0);
3523     return 0;
3524 }
3525 EOF
3526 if compile_prog "" "" ; then
3527   fiemap=yes
3528 fi
3529
3530 # check for dup3
3531 dup3=no
3532 cat > $TMPC << EOF
3533 #include <unistd.h>
3534
3535 int main(void)
3536 {
3537     dup3(0, 0, 0);
3538     return 0;
3539 }
3540 EOF
3541 if compile_prog "" "" ; then
3542   dup3=yes
3543 fi
3544
3545 # check for ppoll support
3546 ppoll=no
3547 cat > $TMPC << EOF
3548 #include <poll.h>
3549
3550 int main(void)
3551 {
3552     struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3553     ppoll(&pfd, 1, 0, 0);
3554     return 0;
3555 }
3556 EOF
3557 if compile_prog "" "" ; then
3558   ppoll=yes
3559 fi
3560
3561 # check for prctl(PR_SET_TIMERSLACK , ... ) support
3562 prctl_pr_set_timerslack=no
3563 cat > $TMPC << EOF
3564 #include <sys/prctl.h>
3565
3566 int main(void)
3567 {
3568     prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3569     return 0;
3570 }
3571 EOF
3572 if compile_prog "" "" ; then
3573   prctl_pr_set_timerslack=yes
3574 fi
3575
3576 # check for epoll support
3577 epoll=no
3578 cat > $TMPC << EOF
3579 #include <sys/epoll.h>
3580
3581 int main(void)
3582 {
3583     epoll_create(0);
3584     return 0;
3585 }
3586 EOF
3587 if compile_prog "" "" ; then
3588   epoll=yes
3589 fi
3590
3591 # epoll_create1 and epoll_pwait are later additions
3592 # so we must check separately for their presence
3593 epoll_create1=no
3594 cat > $TMPC << EOF
3595 #include <sys/epoll.h>
3596
3597 int main(void)
3598 {
3599     /* Note that we use epoll_create1 as a value, not as
3600      * a function being called. This is necessary so that on
3601      * old SPARC glibc versions where the function was present in
3602      * the library but not declared in the header file we will
3603      * fail the configure check. (Otherwise we will get a compiler
3604      * warning but not an error, and will proceed to fail the
3605      * qemu compile where we compile with -Werror.)
3606      */
3607     return (int)(uintptr_t)&epoll_create1;
3608 }
3609 EOF
3610 if compile_prog "" "" ; then
3611   epoll_create1=yes
3612 fi
3613
3614 epoll_pwait=no
3615 cat > $TMPC << EOF
3616 #include <sys/epoll.h>
3617
3618 int main(void)
3619 {
3620     epoll_pwait(0, 0, 0, 0, 0);
3621     return 0;
3622 }
3623 EOF
3624 if compile_prog "" "" ; then
3625   epoll_pwait=yes
3626 fi
3627
3628 # check for sendfile support
3629 sendfile=no
3630 cat > $TMPC << EOF
3631 #include <sys/sendfile.h>
3632
3633 int main(void)
3634 {
3635     return sendfile(0, 0, 0, 0);
3636 }
3637 EOF
3638 if compile_prog "" "" ; then
3639   sendfile=yes
3640 fi
3641
3642 # check for timerfd support (glibc 2.8 and newer)
3643 timerfd=no
3644 cat > $TMPC << EOF
3645 #include <sys/timerfd.h>
3646
3647 int main(void)
3648 {
3649     return(timerfd_create(CLOCK_REALTIME, 0));
3650 }
3651 EOF
3652 if compile_prog "" "" ; then
3653   timerfd=yes
3654 fi
3655
3656 # check for setns and unshare support
3657 setns=no
3658 cat > $TMPC << EOF
3659 #include <sched.h>
3660
3661 int main(void)
3662 {
3663     int ret;
3664     ret = setns(0, 0);
3665     ret = unshare(0);
3666     return ret;
3667 }
3668 EOF
3669 if compile_prog "" "" ; then
3670   setns=yes
3671 fi
3672
3673 # Check if tools are available to build documentation.
3674 if test "$docs" != "no" ; then
3675   if has makeinfo && has pod2man; then
3676     docs=yes
3677   else
3678     if test "$docs" = "yes" ; then
3679       feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
3680     fi
3681     docs=no
3682   fi
3683 fi
3684
3685 # Search for bswap_32 function
3686 byteswap_h=no
3687 cat > $TMPC << EOF
3688 #include <byteswap.h>
3689 int main(void) { return bswap_32(0); }
3690 EOF
3691 if compile_prog "" "" ; then
3692   byteswap_h=yes
3693 fi
3694
3695 # Search for bswap32 function
3696 bswap_h=no
3697 cat > $TMPC << EOF
3698 #include <sys/endian.h>
3699 #include <sys/types.h>
3700 #include <machine/bswap.h>
3701 int main(void) { return bswap32(0); }
3702 EOF
3703 if compile_prog "" "" ; then
3704   bswap_h=yes
3705 fi
3706
3707 ##########################################
3708 # Do we have libiscsi >= 1.9.0
3709 if test "$libiscsi" != "no" ; then
3710   if $pkg_config --atleast-version=1.9.0 libiscsi; then
3711     libiscsi="yes"
3712     libiscsi_cflags=$($pkg_config --cflags libiscsi)
3713     libiscsi_libs=$($pkg_config --libs libiscsi)
3714   else
3715     if test "$libiscsi" = "yes" ; then
3716       feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
3717     fi
3718     libiscsi="no"
3719   fi
3720 fi
3721
3722 ##########################################
3723 # Do we need libm
3724 cat > $TMPC << EOF
3725 #include <math.h>
3726 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
3727 EOF
3728 if compile_prog "" "" ; then
3729   :
3730 elif compile_prog "" "-lm" ; then
3731   LIBS="-lm $LIBS"
3732   libs_qga="-lm $libs_qga"
3733 else
3734   error_exit "libm check failed"
3735 fi
3736
3737 ##########################################
3738 # Do we need librt
3739 # uClibc provides 2 versions of clock_gettime(), one with realtime
3740 # support and one without. This means that the clock_gettime() don't
3741 # need -lrt. We still need it for timer_create() so we check for this
3742 # function in addition.
3743 cat > $TMPC <<EOF
3744 #include <signal.h>
3745 #include <time.h>
3746 int main(void) {
3747   timer_create(CLOCK_REALTIME, NULL, NULL);
3748   return clock_gettime(CLOCK_REALTIME, NULL);
3749 }
3750 EOF
3751
3752 if compile_prog "" "" ; then
3753   :
3754 # we need pthread for static linking. use previous pthread test result
3755 elif compile_prog "" "$pthread_lib -lrt" ; then
3756   LIBS="$LIBS -lrt"
3757   libs_qga="$libs_qga -lrt"
3758 fi
3759
3760 if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
3761         "$aix" != "yes" -a "$haiku" != "yes" ; then
3762     libs_softmmu="-lutil $libs_softmmu"
3763 fi
3764
3765 ##########################################
3766 # spice probe
3767 if test "$spice" != "no" ; then
3768   cat > $TMPC << EOF
3769 #include <spice.h>
3770 int main(void) { spice_server_new(); return 0; }
3771 EOF
3772   spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
3773   spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
3774   if $pkg_config --atleast-version=0.12.0 spice-server && \
3775      $pkg_config --atleast-version=0.12.3 spice-protocol && \
3776      compile_prog "$spice_cflags" "$spice_libs" ; then
3777     spice="yes"
3778     libs_softmmu="$libs_softmmu $spice_libs"
3779     QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
3780     spice_protocol_version=$($pkg_config --modversion spice-protocol)
3781     spice_server_version=$($pkg_config --modversion spice-server)
3782   else
3783     if test "$spice" = "yes" ; then
3784       feature_not_found "spice" \
3785           "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
3786     fi
3787     spice="no"
3788   fi
3789 fi
3790
3791 # check for libcacard for smartcard support
3792 smartcard_cflags=""
3793 # TODO - what's the minimal nss version we support?
3794 if test "$smartcard_nss" != "no"; then
3795   cat > $TMPC << EOF
3796 #include <pk11pub.h>
3797 int main(void) { PK11_FreeSlot(0); return 0; }
3798 EOF
3799     # FIXME: do not include $glib_* in here
3800     nss_libs="$($pkg_config --libs nss 2>/dev/null) $glib_libs"
3801     nss_cflags="$($pkg_config --cflags nss 2>/dev/null) $glib_cflags"
3802     test_cflags="$nss_cflags"
3803     # The header files in nss < 3.13.3 have a bug which causes them to
3804     # emit a warning. If we're going to compile QEMU with -Werror, then
3805     # test that the headers don't have this bug. Otherwise we would pass
3806     # the configure test but fail to compile QEMU later.
3807     if test "$werror" = "yes"; then
3808         test_cflags="-Werror $test_cflags"
3809     fi
3810     if test -n "$libtool" &&
3811        $pkg_config --atleast-version=3.12.8 nss && \
3812       compile_prog "$test_cflags" "$nss_libs"; then
3813         smartcard_nss="yes"
3814     else
3815         if test "$smartcard_nss" = "yes"; then
3816             feature_not_found "nss" "Install nss devel >= 3.12.8"
3817         fi
3818         smartcard_nss="no"
3819     fi
3820 fi
3821
3822 # check for libusb
3823 if test "$libusb" != "no" ; then
3824     if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
3825         libusb="yes"
3826         libusb_cflags=$($pkg_config --cflags libusb-1.0)
3827         libusb_libs=$($pkg_config --libs libusb-1.0)
3828         QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
3829         libs_softmmu="$libs_softmmu $libusb_libs"
3830     else
3831         if test "$libusb" = "yes"; then
3832             feature_not_found "libusb" "Install libusb devel >= 1.0.13"
3833         fi
3834         libusb="no"
3835     fi
3836 fi
3837
3838 # check for usbredirparser for usb network redirection support
3839 if test "$usb_redir" != "no" ; then
3840     if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
3841         usb_redir="yes"
3842         usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
3843         usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
3844         QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
3845         libs_softmmu="$libs_softmmu $usb_redir_libs"
3846     else
3847         if test "$usb_redir" = "yes"; then
3848             feature_not_found "usb-redir" "Install usbredir devel"
3849         fi
3850         usb_redir="no"
3851     fi
3852 fi
3853
3854 ##########################################
3855 # check if we have VSS SDK headers for win
3856
3857 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
3858   case "$vss_win32_sdk" in
3859     "")   vss_win32_include="-I$source_path" ;;
3860     *\ *) # The SDK is installed in "Program Files" by default, but we cannot
3861           # handle path with spaces. So we symlink the headers into ".sdk/vss".
3862           vss_win32_include="-I$source_path/.sdk/vss"
3863           symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
3864           ;;
3865     *)    vss_win32_include="-I$vss_win32_sdk"
3866   esac
3867   cat > $TMPC << EOF
3868 #define __MIDL_user_allocate_free_DEFINED__
3869 #include <inc/win2003/vss.h>
3870 int main(void) { return VSS_CTX_BACKUP; }
3871 EOF
3872   if compile_prog "$vss_win32_include" "" ; then
3873     guest_agent_with_vss="yes"
3874     QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
3875     libs_qga="-lole32 -loleaut32 -lshlwapi -luuid -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
3876   else
3877     if test "$vss_win32_sdk" != "" ; then
3878       echo "ERROR: Please download and install Microsoft VSS SDK:"
3879       echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
3880       echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
3881       echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
3882       echo "ERROR: The headers are extracted in the directory \`inc'."
3883       feature_not_found "VSS support"
3884     fi
3885     guest_agent_with_vss="no"
3886   fi
3887 fi
3888
3889 ##########################################
3890 # lookup Windows platform SDK (if not specified)
3891 # The SDK is needed only to build .tlb (type library) file of guest agent
3892 # VSS provider from the source. It is usually unnecessary because the
3893 # pre-compiled .tlb file is included.
3894
3895 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
3896   if test -z "$win_sdk"; then
3897     programfiles="$PROGRAMFILES"
3898     test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
3899     if test -n "$programfiles"; then
3900       win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
3901     else
3902       feature_not_found "Windows SDK"
3903     fi
3904   elif test "$win_sdk" = "no"; then
3905     win_sdk=""
3906   fi
3907 fi
3908
3909 ##########################################
3910 # Guest agent Window MSI  package
3911
3912 if test "$guest_agent" != yes; then
3913   if test "$guest_agent_msi" = yes; then
3914     error_exit "MSI guest agent package requires guest agent enabled"
3915   fi
3916   guest_agent_msi=no
3917 elif test "$mingw32" != "yes"; then
3918   if test "$guest_agent_msi" = "yes"; then
3919     error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
3920   fi
3921   guest_agent_msi=no
3922 elif ! has wixl; then
3923   if test "$guest_agent_msi" = "yes"; then
3924     error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
3925   fi
3926   guest_agent_msi=no
3927 fi
3928
3929 if test "$guest_agent_msi" != "no"; then
3930   if test "$guest_agent_with_vss" = "yes"; then
3931     QEMU_GA_MSI_WITH_VSS="-D InstallVss"
3932   fi
3933
3934   if test "$QEMU_GA_MANUFACTURER" = ""; then
3935     QEMU_GA_MANUFACTURER=QEMU
3936   fi
3937
3938   if test "$QEMU_GA_DISTRO" = ""; then
3939     QEMU_GA_DISTRO=Linux
3940   fi
3941
3942   if test "$QEMU_GA_VERSION" = ""; then
3943       QEMU_GA_VERSION=`cat $source_path/VERSION`
3944   fi
3945
3946   QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=`$pkg_config --variable=prefix glib-2.0`/bin"
3947   
3948   case "$cpu" in
3949   x86_64)
3950     QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
3951     ;;
3952   i386)
3953     QEMU_GA_MSI_ARCH="-D Arch=32"
3954     ;;
3955   *)
3956     error_exit "CPU $cpu not supported for building installation package"
3957     ;;
3958   esac
3959 fi
3960
3961 ##########################################
3962 # check if we have fdatasync
3963
3964 fdatasync=no
3965 cat > $TMPC << EOF
3966 #include <unistd.h>
3967 int main(void) {
3968 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
3969 return fdatasync(0);
3970 #else
3971 #error Not supported
3972 #endif
3973 }
3974 EOF
3975 if compile_prog "" "" ; then
3976     fdatasync=yes
3977 fi
3978
3979 ##########################################
3980 # check if we have madvise
3981
3982 madvise=no
3983 cat > $TMPC << EOF
3984 #include <sys/types.h>
3985 #include <sys/mman.h>
3986 #include <stddef.h>
3987 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
3988 EOF
3989 if compile_prog "" "" ; then
3990     madvise=yes
3991 fi
3992
3993 ##########################################
3994 # check if we have posix_madvise
3995
3996 posix_madvise=no
3997 cat > $TMPC << EOF
3998 #include <sys/mman.h>
3999 #include <stddef.h>
4000 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4001 EOF
4002 if compile_prog "" "" ; then
4003     posix_madvise=yes
4004 fi
4005
4006 ##########################################
4007 # check if we have usable SIGEV_THREAD_ID
4008
4009 sigev_thread_id=no
4010 cat > $TMPC << EOF
4011 #include <signal.h>
4012 int main(void) {
4013   struct sigevent ev;
4014   ev.sigev_notify = SIGEV_THREAD_ID;
4015   ev._sigev_un._tid = 0;
4016   asm volatile("" : : "g"(&ev));
4017   return 0;
4018 }
4019 EOF
4020 if compile_prog "" "" ; then
4021     sigev_thread_id=yes
4022 fi
4023
4024 ##########################################
4025 # check if trace backend exists
4026
4027 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends  > /dev/null 2> /dev/null
4028 if test "$?" -ne 0 ; then
4029   error_exit "invalid trace backends" \
4030       "Please choose supported trace backends."
4031 fi
4032
4033 ##########################################
4034 # For 'ust' backend, test if ust headers are present
4035 if have_backend "ust"; then
4036   cat > $TMPC << EOF
4037 #include <lttng/tracepoint.h>
4038 int main(void) { return 0; }
4039 EOF
4040   if compile_prog "" "" ; then
4041     if $pkg_config lttng-ust --exists; then
4042       lttng_ust_libs=`$pkg_config --libs lttng-ust`
4043     else
4044       lttng_ust_libs="-llttng-ust"
4045     fi
4046     if $pkg_config liburcu-bp --exists; then
4047       urcu_bp_libs=`$pkg_config --libs liburcu-bp`
4048     else
4049       urcu_bp_libs="-lurcu-bp"
4050     fi
4051
4052     LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4053     libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4054   else
4055     error_exit "Trace backend 'ust' missing lttng-ust header files"
4056   fi
4057 fi
4058
4059 ##########################################
4060 # For 'dtrace' backend, test if 'dtrace' command is present
4061 if have_backend "dtrace"; then
4062   if ! has 'dtrace' ; then
4063     error_exit "dtrace command is not found in PATH $PATH"
4064   fi
4065   trace_backend_stap="no"
4066   if has 'stap' ; then
4067     trace_backend_stap="yes"
4068   fi
4069 fi
4070
4071 ##########################################
4072 # check and set a backend for coroutine
4073
4074 # We prefer ucontext, but it's not always possible. The fallback
4075 # is sigcontext. gthread is not selectable except explicitly, because
4076 # it is not functional enough to run QEMU proper. (It is occasionally
4077 # useful for debugging purposes.)  On Windows the only valid backend
4078 # is the Windows-specific one.
4079
4080 ucontext_works=no
4081 if test "$darwin" != "yes"; then
4082   cat > $TMPC << EOF
4083 #include <ucontext.h>
4084 #ifdef __stub_makecontext
4085 #error Ignoring glibc stub makecontext which will always fail
4086 #endif
4087 int main(void) { makecontext(0, 0, 0); return 0; }
4088 EOF
4089   if compile_prog "" "" ; then
4090     ucontext_works=yes
4091   fi
4092 fi
4093
4094 if test "$coroutine" = ""; then
4095   if test "$mingw32" = "yes"; then
4096     coroutine=win32
4097   elif test "$ucontext_works" = "yes"; then
4098     coroutine=ucontext
4099   else
4100     coroutine=sigaltstack
4101   fi
4102 else
4103   case $coroutine in
4104   windows)
4105     if test "$mingw32" != "yes"; then
4106       error_exit "'windows' coroutine backend only valid for Windows"
4107     fi
4108     # Unfortunately the user visible backend name doesn't match the
4109     # coroutine-*.c filename for this case, so we have to adjust it here.
4110     coroutine=win32
4111     ;;
4112   ucontext)
4113     if test "$ucontext_works" != "yes"; then
4114       feature_not_found "ucontext"
4115     fi
4116     ;;
4117   gthread|sigaltstack)
4118     if test "$mingw32" = "yes"; then
4119       error_exit "only the 'windows' coroutine backend is valid for Windows"
4120     fi
4121     ;;
4122   *)
4123     error_exit "unknown coroutine backend $coroutine"
4124     ;;
4125   esac
4126 fi
4127
4128 if test "$coroutine_pool" = ""; then
4129   if test "$coroutine" = "gthread"; then
4130     coroutine_pool=no
4131   else
4132     coroutine_pool=yes
4133   fi
4134 fi
4135 if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
4136   error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
4137 fi
4138
4139 ##########################################
4140 # check if we have open_by_handle_at
4141
4142 open_by_handle_at=no
4143 cat > $TMPC << EOF
4144 #include <fcntl.h>
4145 #if !defined(AT_EMPTY_PATH)
4146 # error missing definition
4147 #else
4148 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4149 #endif
4150 EOF
4151 if compile_prog "" "" ; then
4152     open_by_handle_at=yes
4153 fi
4154
4155 ########################################
4156 # check if we have linux/magic.h
4157
4158 linux_magic_h=no
4159 cat > $TMPC << EOF
4160 #include <linux/magic.h>
4161 int main(void) {
4162   return 0;
4163 }
4164 EOF
4165 if compile_prog "" "" ; then
4166     linux_magic_h=yes
4167 fi
4168
4169 ########################################
4170 # check whether we can disable warning option with a pragma (this is needed
4171 # to silence warnings in the headers of some versions of external libraries).
4172 # This test has to be compiled with -Werror as otherwise an unknown pragma is
4173 # only a warning.
4174 #
4175 # If we can't selectively disable warning in the code, disable -Werror so that
4176 # the build doesn't fail anyway.
4177
4178 pragma_disable_unused_but_set=no
4179 cat > $TMPC << EOF
4180 #pragma GCC diagnostic push
4181 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4182 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
4183 #pragma GCC diagnostic pop
4184
4185 int main(void) {
4186     return 0;
4187 }
4188 EOF
4189 if compile_prog "-Werror" "" ; then
4190     pragma_diagnostic_available=yes
4191 else
4192     werror=no
4193 fi
4194
4195 ########################################
4196 # check if we have valgrind/valgrind.h
4197
4198 valgrind_h=no
4199 cat > $TMPC << EOF
4200 #include <valgrind/valgrind.h>
4201 int main(void) {
4202   return 0;
4203 }
4204 EOF
4205 if compile_prog "" "" ; then
4206     valgrind_h=yes
4207 fi
4208
4209 ########################################
4210 # check if environ is declared
4211
4212 has_environ=no
4213 cat > $TMPC << EOF
4214 #include <unistd.h>
4215 int main(void) {
4216     environ = 0;
4217     return 0;
4218 }
4219 EOF
4220 if compile_prog "" "" ; then
4221     has_environ=yes
4222 fi
4223
4224 ########################################
4225 # check if cpuid.h is usable.
4226
4227 cpuid_h=no
4228 cat > $TMPC << EOF
4229 #include <cpuid.h>
4230 int main(void) {
4231     unsigned a, b, c, d;
4232     int max = __get_cpuid_max(0, 0);
4233
4234     if (max >= 1) {
4235         __cpuid(1, a, b, c, d);
4236     }
4237
4238     if (max >= 7) {
4239         __cpuid_count(7, 0, a, b, c, d);
4240     }
4241
4242     return 0;
4243 }
4244 EOF
4245 if compile_prog "" "" ; then
4246     cpuid_h=yes
4247 fi
4248
4249 ########################################
4250 # check if __[u]int128_t is usable.
4251
4252 int128=no
4253 cat > $TMPC << EOF
4254 #if defined(__clang_major__) && defined(__clang_minor__)
4255 # if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4256 #  error __int128_t does not work in CLANG before 3.2
4257 # endif
4258 #endif
4259 __int128_t a;
4260 __uint128_t b;
4261 int main (void) {
4262   a = a + b;
4263   b = a * b;
4264   a = a * a;
4265   return 0;
4266 }
4267 EOF
4268 if compile_prog "" "" ; then
4269     int128=yes
4270 fi
4271
4272 ########################################
4273 # check if getauxval is available.
4274
4275 getauxval=no
4276 cat > $TMPC << EOF
4277 #include <sys/auxv.h>
4278 int main(void) {
4279   return getauxval(AT_HWCAP) == 0;
4280 }
4281 EOF
4282 if compile_prog "" "" ; then
4283     getauxval=yes
4284 fi
4285
4286 ########################################
4287 # check if ccache is interfering with