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