block: convert quorum blockdrv to use crypto APIs
[qemu.git] / configure
1 #!/bin/sh
2 #
3 # qemu configure script (c) 2003 Fabrice Bellard
4 #
5
6 # Unset some variables known to interfere with behavior of common tools,
7 # just as autoconf does.
8 CLICOLOR_FORCE= GREP_OPTIONS=
9 unset CLICOLOR_FORCE GREP_OPTIONS
10
11 # Temporary directory used for files created while
12 # configure runs. Since it is in the build directory
13 # we can safely blow away any previous version of it
14 # (and we need not jump through hoops to try to delete
15 # it when configure exits.)
16 TMPDIR1="config-temp"
17 rm -rf "${TMPDIR1}"
18 mkdir -p "${TMPDIR1}"
19 if [ $? -ne 0 ]; then
20     echo "ERROR: failed to create temporary directory"
21     exit 1
22 fi
23
24 TMPB="qemu-conf"
25 TMPC="${TMPDIR1}/${TMPB}.c"
26 TMPO="${TMPDIR1}/${TMPB}.o"
27 TMPCXX="${TMPDIR1}/${TMPB}.cxx"
28 TMPL="${TMPDIR1}/${TMPB}.lo"
29 TMPA="${TMPDIR1}/lib${TMPB}.la"
30 TMPE="${TMPDIR1}/${TMPB}.exe"
31
32 rm -f config.log
33
34 # Print a helpful header at the top of config.log
35 echo "# QEMU configure log $(date)" >> config.log
36 printf "# Configured with:" >> config.log
37 printf " '%s'" "$0" "$@" >> config.log
38 echo >> config.log
39 echo "#" >> config.log
40
41 error_exit() {
42     echo
43     echo "ERROR: $1"
44     while test -n "$2"; do
45         echo "       $2"
46         shift
47     done
48     echo
49     exit 1
50 }
51
52 do_compiler() {
53     # Run the compiler, capturing its output to the log. First argument
54     # is compiler binary to execute.
55     local compiler="$1"
56     shift
57     echo $compiler "$@" >> config.log
58     $compiler "$@" >> config.log 2>&1 || return $?
59     # Test passed. If this is an --enable-werror build, rerun
60     # the test with -Werror and bail out if it fails. This
61     # makes warning-generating-errors in configure test code
62     # obvious to developers.
63     if test "$werror" != "yes"; then
64         return 0
65     fi
66     # Don't bother rerunning the compile if we were already using -Werror
67     case "$*" in
68         *-Werror*)
69            return 0
70         ;;
71     esac
72     echo $compiler -Werror "$@" >> config.log
73     $compiler -Werror "$@" >> config.log 2>&1 && return $?
74     error_exit "configure test passed without -Werror but failed with -Werror." \
75         "This is probably a bug in the configure script. The failing command" \
76         "will be at the bottom of config.log." \
77         "You can run configure with --disable-werror to bypass this check."
78 }
79
80 do_cc() {
81     do_compiler "$cc" "$@"
82 }
83
84 do_cxx() {
85     do_compiler "$cxx" "$@"
86 }
87
88 update_cxxflags() {
89     # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
90     # options which some versions of GCC's C++ compiler complain about
91     # because they only make sense for C programs.
92     QEMU_CXXFLAGS=
93     for arg in $QEMU_CFLAGS; do
94         case $arg in
95             -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
96             -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
97                 ;;
98             *)
99                 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
100                 ;;
101         esac
102     done
103 }
104
105 compile_object() {
106   local_cflags="$1"
107   do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
108 }
109
110 compile_prog() {
111   local_cflags="$1"
112   local_ldflags="$2"
113   do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
114 }
115
116 do_libtool() {
117     local mode=$1
118     shift
119     # Run the compiler, capturing its output to the log.
120     echo $libtool $mode --tag=CC $cc "$@" >> config.log
121     $libtool $mode --tag=CC $cc "$@" >> config.log 2>&1 || return $?
122     # Test passed. If this is an --enable-werror build, rerun
123     # the test with -Werror and bail out if it fails. This
124     # makes warning-generating-errors in configure test code
125     # obvious to developers.
126     if test "$werror" != "yes"; then
127         return 0
128     fi
129     # Don't bother rerunning the compile if we were already using -Werror
130     case "$*" in
131         *-Werror*)
132            return 0
133         ;;
134     esac
135     echo $libtool $mode --tag=CC $cc -Werror "$@" >> config.log
136     $libtool $mode --tag=CC $cc -Werror "$@" >> config.log 2>&1 && return $?
137     error_exit "configure test passed without -Werror but failed with -Werror." \
138         "This is probably a bug in the configure script. The failing command" \
139         "will be at the bottom of config.log." \
140         "You can run configure with --disable-werror to bypass this check."
141 }
142
143 libtool_prog() {
144     do_libtool --mode=compile $QEMU_CFLAGS -c -fPIE -DPIE -o $TMPO $TMPC || return $?
145     do_libtool --mode=link $LDFLAGS -o $TMPA $TMPL -rpath /usr/local/lib
146 }
147
148 # symbolically link $1 to $2.  Portable version of "ln -sf".
149 symlink() {
150   rm -rf "$2"
151   mkdir -p "$(dirname "$2")"
152   ln -s "$1" "$2"
153 }
154
155 # check whether a command is available to this shell (may be either an
156 # executable or a builtin)
157 has() {
158     type "$1" >/dev/null 2>&1
159 }
160
161 # search for an executable in PATH
162 path_of() {
163     local_command="$1"
164     local_ifs="$IFS"
165     local_dir=""
166
167     # pathname has a dir component?
168     if [ "${local_command#*/}" != "$local_command" ]; then
169         if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
170             echo "$local_command"
171             return 0
172         fi
173     fi
174     if [ -z "$local_command" ]; then
175         return 1
176     fi
177
178     IFS=:
179     for local_dir in $PATH; do
180         if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
181             echo "$local_dir/$local_command"
182             IFS="${local_ifs:-$(printf ' \t\n')}"
183             return 0
184         fi
185     done
186     # not found
187     IFS="${local_ifs:-$(printf ' \t\n')}"
188     return 1
189 }
190
191 have_backend () {
192     echo "$trace_backends" | grep "$1" >/dev/null
193 }
194
195 # default parameters
196 source_path=`dirname "$0"`
197 cpu=""
198 iasl="iasl"
199 interp_prefix="/usr/gnemul/qemu-%M"
200 static="no"
201 cross_prefix=""
202 audio_drv_list=""
203 block_drv_rw_whitelist=""
204 block_drv_ro_whitelist=""
205 host_cc="cc"
206 libs_softmmu=""
207 libs_tools=""
208 audio_pt_int=""
209 audio_win_int=""
210 cc_i386=i386-pc-linux-gnu-gcc
211 libs_qga=""
212 debug_info="yes"
213 stack_protector=""
214
215 # Don't accept a target_list environment variable.
216 unset target_list
217
218 # Default value for a variable defining feature "foo".
219 #  * foo="no"  feature will only be used if --enable-foo arg is given
220 #  * foo=""    feature will be searched for, and if found, will be used
221 #              unless --disable-foo is given
222 #  * foo="yes" this value will only be set by --enable-foo flag.
223 #              feature will searched for,
224 #              if not found, configure exits with error
225 #
226 # Always add --enable-foo and --disable-foo command line args.
227 # Distributions want to ensure that several features are compiled in, and it
228 # is impossible without a --enable-foo that exits if a feature is not found.
229
230 bluez=""
231 brlapi=""
232 curl=""
233 curses=""
234 docs=""
235 fdt=""
236 netmap="no"
237 pixman=""
238 sdl=""
239 sdlabi="1.2"
240 virtfs=""
241 vnc="yes"
242 sparse="no"
243 uuid=""
244 vde=""
245 vnc_tls=""
246 vnc_sasl=""
247 vnc_jpeg=""
248 vnc_png=""
249 vnc_ws=""
250 xen=""
251 xen_ctrl_version=""
252 xen_pci_passthrough=""
253 linux_aio=""
254 cap_ng=""
255 attr=""
256 libattr=""
257 xfs=""
258
259 vhost_net="no"
260 vhost_scsi="no"
261 kvm="no"
262 rdma=""
263 gprof="no"
264 debug_tcg="no"
265 debug="no"
266 strip_opt="yes"
267 tcg_interpreter="no"
268 bigendian="no"
269 mingw32="no"
270 gcov="no"
271 gcov_tool="gcov"
272 EXESUF=""
273 DSOSUF=".so"
274 LDFLAGS_SHARED="-shared"
275 modules="no"
276 prefix="/usr/local"
277 mandir="\${prefix}/share/man"
278 datadir="\${prefix}/share"
279 qemu_docdir="\${prefix}/share/doc/qemu"
280 bindir="\${prefix}/bin"
281 libdir="\${prefix}/lib"
282 libexecdir="\${prefix}/libexec"
283 includedir="\${prefix}/include"
284 sysconfdir="\${prefix}/etc"
285 local_statedir="\${prefix}/var"
286 confsuffix="/qemu"
287 slirp="yes"
288 oss_lib=""
289 bsd="no"
290 linux="no"
291 solaris="no"
292 profiler="no"
293 cocoa="no"
294 softmmu="yes"
295 linux_user="no"
296 bsd_user="no"
297 guest_base="yes"
298 aix="no"
299 blobs="yes"
300 pkgversion=""
301 pie=""
302 zero_malloc=""
303 qom_cast_debug="yes"
304 trace_backends="nop"
305 trace_file="trace"
306 spice=""
307 rbd=""
308 smartcard_nss=""
309 libusb=""
310 usb_redir=""
311 opengl=""
312 zlib="yes"
313 lzo=""
314 snappy=""
315 bzip2=""
316 guest_agent=""
317 guest_agent_with_vss="no"
318 guest_agent_msi=""
319 vss_win32_sdk=""
320 win_sdk="no"
321 want_tools="yes"
322 libiscsi=""
323 libnfs=""
324 coroutine=""
325 coroutine_pool=""
326 seccomp=""
327 glusterfs=""
328 glusterfs_discard="no"
329 glusterfs_zerofill="no"
330 archipelago="no"
331 gtk=""
332 gtkabi=""
333 gnutls=""
334 gnutls_hash=""
335 vte=""
336 tpm="yes"
337 libssh2=""
338 vhdx=""
339 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 $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-vnc-ws) vnc_ws="no"
900   ;;
901   --enable-vnc-ws) vnc_ws="yes"
902   ;;
903   --disable-slirp) slirp="no"
904   ;;
905   --disable-uuid) uuid="no"
906   ;;
907   --enable-uuid) uuid="yes"
908   ;;
909   --disable-vde) vde="no"
910   ;;
911   --enable-vde) vde="yes"
912   ;;
913   --disable-netmap) netmap="no"
914   ;;
915   --enable-netmap) netmap="yes"
916   ;;
917   --disable-xen) xen="no"
918   ;;
919   --enable-xen) xen="yes"
920   ;;
921   --disable-xen-pci-passthrough) xen_pci_passthrough="no"
922   ;;
923   --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
924   ;;
925   --disable-brlapi) brlapi="no"
926   ;;
927   --enable-brlapi) brlapi="yes"
928   ;;
929   --disable-bluez) bluez="no"
930   ;;
931   --enable-bluez) bluez="yes"
932   ;;
933   --disable-kvm) kvm="no"
934   ;;
935   --enable-kvm) kvm="yes"
936   ;;
937   --disable-tcg-interpreter) tcg_interpreter="no"
938   ;;
939   --enable-tcg-interpreter) tcg_interpreter="yes"
940   ;;
941   --disable-cap-ng)  cap_ng="no"
942   ;;
943   --enable-cap-ng) cap_ng="yes"
944   ;;
945   --disable-spice) spice="no"
946   ;;
947   --enable-spice) spice="yes"
948   ;;
949   --disable-libiscsi) libiscsi="no"
950   ;;
951   --enable-libiscsi) libiscsi="yes"
952   ;;
953   --disable-libnfs) libnfs="no"
954   ;;
955   --enable-libnfs) libnfs="yes"
956   ;;
957   --enable-profiler) profiler="yes"
958   ;;
959   --disable-cocoa) cocoa="no"
960   ;;
961   --enable-cocoa)
962       cocoa="yes" ;
963       sdl="no" ;
964       audio_drv_list="coreaudio `echo $audio_drv_list | sed s,coreaudio,,g`"
965   ;;
966   --disable-system) softmmu="no"
967   ;;
968   --enable-system) softmmu="yes"
969   ;;
970   --disable-user)
971       linux_user="no" ;
972       bsd_user="no" ;
973   ;;
974   --enable-user) ;;
975   --disable-linux-user) linux_user="no"
976   ;;
977   --enable-linux-user) linux_user="yes"
978   ;;
979   --disable-bsd-user) bsd_user="no"
980   ;;
981   --enable-bsd-user) bsd_user="yes"
982   ;;
983   --enable-guest-base) guest_base="yes"
984   ;;
985   --disable-guest-base) guest_base="no"
986   ;;
987   --enable-pie) pie="yes"
988   ;;
989   --disable-pie) pie="no"
990   ;;
991   --enable-werror) werror="yes"
992   ;;
993   --disable-werror) werror="no"
994   ;;
995   --enable-stack-protector) stack_protector="yes"
996   ;;
997   --disable-stack-protector) stack_protector="no"
998   ;;
999   --disable-curses) curses="no"
1000   ;;
1001   --enable-curses) curses="yes"
1002   ;;
1003   --disable-curl) curl="no"
1004   ;;
1005   --enable-curl) curl="yes"
1006   ;;
1007   --disable-fdt) fdt="no"
1008   ;;
1009   --enable-fdt) fdt="yes"
1010   ;;
1011   --disable-linux-aio) linux_aio="no"
1012   ;;
1013   --enable-linux-aio) linux_aio="yes"
1014   ;;
1015   --disable-attr) attr="no"
1016   ;;
1017   --enable-attr) attr="yes"
1018   ;;
1019   --disable-blobs) blobs="no"
1020   ;;
1021   --with-pkgversion=*) pkgversion=" ($optarg)"
1022   ;;
1023   --with-coroutine=*) coroutine="$optarg"
1024   ;;
1025   --disable-coroutine-pool) coroutine_pool="no"
1026   ;;
1027   --enable-coroutine-pool) coroutine_pool="yes"
1028   ;;
1029   --disable-docs) docs="no"
1030   ;;
1031   --enable-docs) docs="yes"
1032   ;;
1033   --disable-vhost-net) vhost_net="no"
1034   ;;
1035   --enable-vhost-net) vhost_net="yes"
1036   ;;
1037   --disable-vhost-scsi) vhost_scsi="no"
1038   ;;
1039   --enable-vhost-scsi) vhost_scsi="yes"
1040   ;;
1041   --disable-opengl) opengl="no"
1042   ;;
1043   --enable-opengl) opengl="yes"
1044   ;;
1045   --disable-rbd) rbd="no"
1046   ;;
1047   --enable-rbd) rbd="yes"
1048   ;;
1049   --disable-xfsctl) xfs="no"
1050   ;;
1051   --enable-xfsctl) xfs="yes"
1052   ;;
1053   --disable-smartcard-nss) smartcard_nss="no"
1054   ;;
1055   --enable-smartcard-nss) smartcard_nss="yes"
1056   ;;
1057   --disable-libusb) libusb="no"
1058   ;;
1059   --enable-libusb) libusb="yes"
1060   ;;
1061   --disable-usb-redir) usb_redir="no"
1062   ;;
1063   --enable-usb-redir) usb_redir="yes"
1064   ;;
1065   --disable-zlib-test) zlib="no"
1066   ;;
1067   --disable-lzo) lzo="no"
1068   ;;
1069   --enable-lzo) lzo="yes"
1070   ;;
1071   --disable-snappy) snappy="no"
1072   ;;
1073   --enable-snappy) snappy="yes"
1074   ;;
1075   --disable-bzip2) bzip2="no"
1076   ;;
1077   --enable-bzip2) bzip2="yes"
1078   ;;
1079   --enable-guest-agent) guest_agent="yes"
1080   ;;
1081   --disable-guest-agent) guest_agent="no"
1082   ;;
1083   --enable-guest-agent-msi) guest_agent_msi="yes"
1084   ;;
1085   --disable-guest-agent-msi) guest_agent_msi="no"
1086   ;;
1087   --with-vss-sdk) vss_win32_sdk=""
1088   ;;
1089   --with-vss-sdk=*) vss_win32_sdk="$optarg"
1090   ;;
1091   --without-vss-sdk) vss_win32_sdk="no"
1092   ;;
1093   --with-win-sdk) win_sdk=""
1094   ;;
1095   --with-win-sdk=*) win_sdk="$optarg"
1096   ;;
1097   --without-win-sdk) win_sdk="no"
1098   ;;
1099   --enable-tools) want_tools="yes"
1100   ;;
1101   --disable-tools) want_tools="no"
1102   ;;
1103   --enable-seccomp) seccomp="yes"
1104   ;;
1105   --disable-seccomp) seccomp="no"
1106   ;;
1107   --disable-glusterfs) glusterfs="no"
1108   ;;
1109   --enable-glusterfs) glusterfs="yes"
1110   ;;
1111   --disable-archipelago) archipelago="no"
1112   ;;
1113   --enable-archipelago) archipelago="yes"
1114   ;;
1115   --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1116       echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1117   ;;
1118   --disable-gtk) gtk="no"
1119   ;;
1120   --enable-gtk) gtk="yes"
1121   ;;
1122   --disable-gnutls) gnutls="no"
1123   ;;
1124   --enable-gnutls) gnutls="yes"
1125   ;;
1126   --enable-rdma) rdma="yes"
1127   ;;
1128   --disable-rdma) rdma="no"
1129   ;;
1130   --with-gtkabi=*) gtkabi="$optarg"
1131   ;;
1132   --disable-vte) vte="no"
1133   ;;
1134   --enable-vte) vte="yes"
1135   ;;
1136   --disable-tpm) tpm="no"
1137   ;;
1138   --enable-tpm) tpm="yes"
1139   ;;
1140   --disable-libssh2) libssh2="no"
1141   ;;
1142   --enable-libssh2) libssh2="yes"
1143   ;;
1144   --enable-vhdx) vhdx="yes"
1145   ;;
1146   --disable-vhdx) vhdx="no"
1147   ;;
1148   --disable-numa) numa="no"
1149   ;;
1150   --enable-numa) numa="yes"
1151   ;;
1152   --disable-tcmalloc) tcmalloc="no"
1153   ;;
1154   --enable-tcmalloc) tcmalloc="yes"
1155   ;;
1156   *)
1157       echo "ERROR: unknown option $opt"
1158       echo "Try '$0 --help' for more information"
1159       exit 1
1160   ;;
1161   esac
1162 done
1163
1164 if ! has $python; then
1165   error_exit "Python not found. Use --python=/path/to/python"
1166 fi
1167
1168 # Note that if the Python conditional here evaluates True we will exit
1169 # with status 1 which is a shell 'false' value.
1170 if ! $python -c 'import sys; sys.exit(sys.version_info < (2,4) or sys.version_info >= (3,))'; then
1171   error_exit "Cannot use '$python', Python 2.4 or later is required." \
1172       "Note that Python 3 or later is not yet supported." \
1173       "Use --python=/path/to/python to specify a supported Python."
1174 fi
1175
1176 # The -B switch was added in Python 2.6.
1177 # If it is supplied, compiled files are not written.
1178 # Use it for Python versions which support it.
1179 if $python -B -c 'import sys; sys.exit(0)' 2>/dev/null; then
1180   python="$python -B"
1181 fi
1182
1183 case "$cpu" in
1184     ppc)
1185            CPU_CFLAGS="-m32"
1186            LDFLAGS="-m32 $LDFLAGS"
1187            ;;
1188     ppc64)
1189            CPU_CFLAGS="-m64"
1190            LDFLAGS="-m64 $LDFLAGS"
1191            ;;
1192     sparc)
1193            LDFLAGS="-m32 $LDFLAGS"
1194            CPU_CFLAGS="-m32 -mcpu=ultrasparc"
1195            ;;
1196     sparc64)
1197            LDFLAGS="-m64 $LDFLAGS"
1198            CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1199            ;;
1200     s390)
1201            CPU_CFLAGS="-m31"
1202            LDFLAGS="-m31 $LDFLAGS"
1203            ;;
1204     s390x)
1205            CPU_CFLAGS="-m64"
1206            LDFLAGS="-m64 $LDFLAGS"
1207            ;;
1208     i386)
1209            CPU_CFLAGS="-m32"
1210            LDFLAGS="-m32 $LDFLAGS"
1211            cc_i386='$(CC) -m32'
1212            ;;
1213     x86_64)
1214            CPU_CFLAGS="-m64"
1215            LDFLAGS="-m64 $LDFLAGS"
1216            cc_i386='$(CC) -m32'
1217            ;;
1218     x32)
1219            CPU_CFLAGS="-mx32"
1220            LDFLAGS="-mx32 $LDFLAGS"
1221            cc_i386='$(CC) -m32'
1222            ;;
1223     # No special flags required for other host CPUs
1224 esac
1225
1226 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1227 EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1228
1229 default_target_list=""
1230
1231 mak_wilds=""
1232
1233 if [ "$softmmu" = "yes" ]; then
1234     mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1235 fi
1236 if [ "$linux_user" = "yes" ]; then
1237     mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1238 fi
1239 if [ "$bsd_user" = "yes" ]; then
1240     mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1241 fi
1242
1243 for config in $mak_wilds; do
1244     default_target_list="${default_target_list} $(basename "$config" .mak)"
1245 done
1246
1247 if test x"$show_help" = x"yes" ; then
1248 cat << EOF
1249
1250 Usage: configure [options]
1251 Options: [defaults in brackets after descriptions]
1252
1253 Standard options:
1254   --help                   print this message
1255   --prefix=PREFIX          install in PREFIX [$prefix]
1256   --interp-prefix=PREFIX   where to find shared libraries, etc.
1257                            use %M for cpu name [$interp_prefix]
1258   --target-list=LIST       set target list (default: build everything)
1259 $(echo Available targets: $default_target_list | \
1260   fold -s -w 53 | sed -e 's/^/                           /')
1261
1262 Advanced options (experts only):
1263   --source-path=PATH       path of source code [$source_path]
1264   --cross-prefix=PREFIX    use PREFIX for compile tools [$cross_prefix]
1265   --cc=CC                  use C compiler CC [$cc]
1266   --iasl=IASL              use ACPI compiler IASL [$iasl]
1267   --host-cc=CC             use C compiler CC [$host_cc] for code run at
1268                            build time
1269   --cxx=CXX                use C++ compiler CXX [$cxx]
1270   --objcc=OBJCC            use Objective-C compiler OBJCC [$objcc]
1271   --extra-cflags=CFLAGS    append extra C compiler flags QEMU_CFLAGS
1272   --extra-ldflags=LDFLAGS  append extra linker flags LDFLAGS
1273   --make=MAKE              use specified make [$make]
1274   --install=INSTALL        use specified install [$install]
1275   --python=PYTHON          use specified python [$python]
1276   --smbd=SMBD              use specified smbd [$smbd]
1277   --static                 enable static build [$static]
1278   --mandir=PATH            install man pages in PATH
1279   --datadir=PATH           install firmware in PATH$confsuffix
1280   --docdir=PATH            install documentation in PATH$confsuffix
1281   --bindir=PATH            install binaries in PATH
1282   --libdir=PATH            install libraries in PATH
1283   --sysconfdir=PATH        install config in PATH$confsuffix
1284   --localstatedir=PATH     install local state in PATH (set at runtime on win32)
1285   --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1286   --enable-debug           enable common debug build options
1287   --disable-strip          disable stripping binaries
1288   --disable-werror         disable compilation abort on warning
1289   --disable-stack-protector disable compiler-provided stack protection
1290   --audio-drv-list=LIST    set audio drivers list:
1291                            Available drivers: $audio_possible_drivers
1292   --block-drv-whitelist=L  Same as --block-drv-rw-whitelist=L
1293   --block-drv-rw-whitelist=L
1294                            set block driver read-write whitelist
1295                            (affects only QEMU, not qemu-img)
1296   --block-drv-ro-whitelist=L
1297                            set block driver read-only whitelist
1298                            (affects only QEMU, not qemu-img)
1299   --enable-trace-backends=B Set trace backend
1300                            Available backends: $($python $source_path/scripts/tracetool.py --list-backends)
1301   --with-trace-file=NAME   Full PATH,NAME of file to store traces
1302                            Default:trace-<pid>
1303   --disable-slirp          disable SLIRP userspace network connectivity
1304   --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1305   --oss-lib                path to OSS library
1306   --cpu=CPU                Build for host CPU [$cpu]
1307   --with-coroutine=BACKEND coroutine backend. Supported options:
1308                            gthread, ucontext, sigaltstack, windows
1309   --enable-gcov            enable test coverage analysis with gcov
1310   --gcov=GCOV              use specified gcov [$gcov_tool]
1311   --disable-blobs          disable installing provided firmware blobs
1312   --with-vss-sdk=SDK-path  enable Windows VSS support in QEMU Guest Agent
1313   --with-win-sdk=SDK-path  path to Windows Platform SDK (to build VSS .tlb)
1314
1315 Optional features, enabled with --enable-FEATURE and
1316 disabled with --disable-FEATURE, default is enabled if available:
1317
1318   system          all system emulation targets
1319   user            supported user emulation targets
1320   linux-user      all linux usermode emulation targets
1321   bsd-user        all BSD usermode emulation targets
1322   guest-base      GUEST_BASE support for usermode emulation targets
1323   docs            build documentation
1324   guest-agent     build the QEMU Guest Agent
1325   guest-agent-msi build guest agent Windows MSI installation package
1326   pie             Position Independent Executables
1327   modules         modules support
1328   debug-tcg       TCG debugging (default is disabled)
1329   debug-info      debugging information
1330   sparse          sparse checker
1331
1332   gnutls          GNUTLS cryptography support
1333   sdl             SDL UI
1334   --with-sdlabi     select preferred SDL ABI 1.2 or 2.0
1335   gtk             gtk UI
1336   --with-gtkabi     select preferred GTK ABI 2.0 or 3.0
1337   vte             vte support for the gtk UI
1338   curses          curses UI
1339   vnc             VNC UI support
1340   vnc-tls         TLS encryption for VNC server
1341   vnc-sasl        SASL encryption for VNC server
1342   vnc-jpeg        JPEG lossy compression for VNC server
1343   vnc-png         PNG compression for VNC server
1344   vnc-ws          Websockets support for VNC server
1345   cocoa           Cocoa UI (Mac OS X only)
1346   virtfs          VirtFS
1347   xen             xen backend driver support
1348   xen-pci-passthrough
1349   brlapi          BrlAPI (Braile)
1350   curl            curl connectivity
1351   fdt             fdt device tree
1352   bluez           bluez stack connectivity
1353   kvm             KVM acceleration support
1354   rdma            RDMA-based migration support
1355   uuid            uuid support
1356   vde             support for vde network
1357   netmap          support for netmap network
1358   linux-aio       Linux AIO support
1359   cap-ng          libcap-ng support
1360   attr            attr and xattr support
1361   vhost-net       vhost-net acceleration support
1362   spice           spice
1363   rbd             rados block device (rbd)
1364   libiscsi        iscsi support
1365   libnfs          nfs support
1366   smartcard-nss   smartcard nss support
1367   libusb          libusb (for usb passthrough)
1368   usb-redir       usb network redirection support
1369   lzo             support of lzo compression library
1370   snappy          support of snappy compression library
1371   bzip2           support of bzip2 compression library
1372                   (for reading bzip2-compressed dmg images)
1373   seccomp         seccomp support
1374   coroutine-pool  coroutine freelist (better performance)
1375   glusterfs       GlusterFS backend
1376   archipelago     Archipelago backend
1377   tpm             TPM support
1378   libssh2         ssh block device support
1379   vhdx            support for the Microsoft VHDX image format
1380   numa            libnuma support
1381   tcmalloc        tcmalloc support
1382
1383 NOTE: The object files are built at the place where configure is launched
1384 EOF
1385 exit 0
1386 fi
1387
1388 # Now we have handled --enable-tcg-interpreter and know we're not just
1389 # printing the help message, bail out if the host CPU isn't supported.
1390 if test "$ARCH" = "unknown"; then
1391     if test "$tcg_interpreter" = "yes" ; then
1392         echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1393         ARCH=tci
1394     else
1395         error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1396     fi
1397 fi
1398
1399 # Consult white-list to determine whether to enable werror
1400 # by default.  Only enable by default for git builds
1401 z_version=`cut -f3 -d. $source_path/VERSION`
1402
1403 if test -z "$werror" ; then
1404     if test -d "$source_path/.git" -a \
1405         "$linux" = "yes" ; then
1406         werror="yes"
1407     else
1408         werror="no"
1409     fi
1410 fi
1411
1412 # check that the C compiler works.
1413 write_c_skeleton;
1414 if compile_object ; then
1415   : C compiler works ok
1416 else
1417     error_exit "\"$cc\" either does not exist or does not work"
1418 fi
1419
1420 # Check that the C++ compiler exists and works with the C compiler
1421 if has $cxx; then
1422     cat > $TMPC <<EOF
1423 int c_function(void);
1424 int main(void) { return c_function(); }
1425 EOF
1426
1427     compile_object
1428
1429     cat > $TMPCXX <<EOF
1430 extern "C" {
1431    int c_function(void);
1432 }
1433 int c_function(void) { return 42; }
1434 EOF
1435
1436     update_cxxflags
1437
1438     if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
1439         # C++ compiler $cxx works ok with C compiler $cc
1440         :
1441     else
1442         echo "C++ compiler $cxx does not work with C compiler $cc"
1443         echo "Disabling C++ specific optional code"
1444         cxx=
1445     fi
1446 else
1447     echo "No C++ compiler available; disabling C++ specific optional code"
1448     cxx=
1449 fi
1450
1451 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1452 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1453 gcc_flags="-Wmissing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1454 gcc_flags="-Wendif-labels $gcc_flags"
1455 gcc_flags="-Wno-initializer-overrides $gcc_flags"
1456 gcc_flags="-Wno-string-plus-int $gcc_flags"
1457 # Note that we do not add -Werror to gcc_flags here, because that would
1458 # enable it for all configure tests. If a configure test failed due
1459 # to -Werror this would just silently disable some features,
1460 # so it's too error prone.
1461
1462 cc_has_warning_flag() {
1463     write_c_skeleton;
1464
1465     # Use the positive sense of the flag when testing for -Wno-wombat
1466     # support (gcc will happily accept the -Wno- form of unknown
1467     # warning options).
1468     optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1469     compile_prog "-Werror $optflag" ""
1470 }
1471
1472 for flag in $gcc_flags; do
1473     if cc_has_warning_flag $flag ; then
1474         QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1475     fi
1476 done
1477
1478 if test "$stack_protector" != "no"; then
1479   gcc_flags="-fstack-protector-strong -fstack-protector-all"
1480   sp_on=0
1481   for flag in $gcc_flags; do
1482     # We need to check both a compile and a link, since some compiler
1483     # setups fail only on a .c->.o compile and some only at link time
1484     if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1485        compile_prog "-Werror $flag" ""; then
1486       QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1487       LIBTOOLFLAGS="$LIBTOOLFLAGS -Wc,$flag"
1488       sp_on=1
1489       break
1490     fi
1491   done
1492   if test "$stack_protector" = yes; then
1493     if test $sp_on = 0; then
1494       error_exit "Stack protector not supported"
1495     fi
1496   fi
1497 fi
1498
1499 # Workaround for http://gcc.gnu.org/PR55489.  Happens with -fPIE/-fPIC and
1500 # large functions that use global variables.  The bug is in all releases of
1501 # GCC, but it became particularly acute in 4.6.x and 4.7.x.  It is fixed in
1502 # 4.7.3 and 4.8.0.  We should be able to delete this at the end of 2013.
1503 cat > $TMPC << EOF
1504 #if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1505 int main(void) { return 0; }
1506 #else
1507 #error No bug in this compiler.
1508 #endif
1509 EOF
1510 if compile_prog "-Werror -fno-gcse" "" ; then
1511   TRANSLATE_OPT_CFLAGS=-fno-gcse
1512 fi
1513
1514 if test "$static" = "yes" ; then
1515   if test "$modules" = "yes" ; then
1516     error_exit "static and modules are mutually incompatible"
1517   fi
1518   if test "$pie" = "yes" ; then
1519     error_exit "static and pie are mutually incompatible"
1520   else
1521     pie="no"
1522   fi
1523 fi
1524
1525 # Unconditional check for compiler __thread support
1526   cat > $TMPC << EOF
1527 static __thread int tls_var;
1528 int main(void) { return tls_var; }
1529 EOF
1530
1531 if ! compile_prog "-Werror" "" ; then
1532     error_exit "Your compiler does not support the __thread specifier for " \
1533         "Thread-Local Storage (TLS). Please upgrade to a version that does."
1534 fi
1535
1536 if test "$pie" = ""; then
1537   case "$cpu-$targetos" in
1538     i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
1539       ;;
1540     *)
1541       pie="no"
1542       ;;
1543   esac
1544 fi
1545
1546 if test "$pie" != "no" ; then
1547   cat > $TMPC << EOF
1548
1549 #ifdef __linux__
1550 #  define THREAD __thread
1551 #else
1552 #  define THREAD
1553 #endif
1554
1555 static THREAD int tls_var;
1556
1557 int main(void) { return tls_var; }
1558
1559 EOF
1560   if compile_prog "-fPIE -DPIE" "-pie"; then
1561     QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1562     LDFLAGS="-pie $LDFLAGS"
1563     pie="yes"
1564     if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1565       LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1566     fi
1567   else
1568     if test "$pie" = "yes"; then
1569       error_exit "PIE not available due to missing toolchain support"
1570     else
1571       echo "Disabling PIE due to missing toolchain support"
1572       pie="no"
1573     fi
1574   fi
1575
1576   if compile_prog "-Werror -fno-pie" "-nopie"; then
1577     CFLAGS_NOPIE="-fno-pie"
1578     LDFLAGS_NOPIE="-nopie"
1579   fi
1580 fi
1581
1582 # check for broken gcc and libtool in RHEL5
1583 if test -n "$libtool" -a "$pie" != "no" ; then
1584   cat > $TMPC <<EOF
1585
1586 void *f(unsigned char *buf, int len);
1587 void *g(unsigned char *buf, int len);
1588
1589 void *
1590 f(unsigned char *buf, int len)
1591 {
1592     return (void*)0L;
1593 }
1594
1595 void *
1596 g(unsigned char *buf, int len)
1597 {
1598     return f(buf, len);
1599 }
1600
1601 EOF
1602   if ! libtool_prog; then
1603     echo "Disabling libtool due to broken toolchain support"
1604     libtool=
1605   fi
1606 fi
1607
1608 ##########################################
1609 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
1610 # use i686 as default anyway, but for those that don't, an explicit
1611 # specification is necessary
1612
1613 if test "$cpu" = "i386"; then
1614   cat > $TMPC << EOF
1615 static int sfaa(int *ptr)
1616 {
1617   return __sync_fetch_and_and(ptr, 0);
1618 }
1619
1620 int main(void)
1621 {
1622   int val = 42;
1623   val = __sync_val_compare_and_swap(&val, 0, 1);
1624   sfaa(&val);
1625   return val;
1626 }
1627 EOF
1628   if ! compile_prog "" "" ; then
1629     QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1630   fi
1631 fi
1632
1633 #########################################
1634 # Solaris specific configure tool chain decisions
1635
1636 if test "$solaris" = "yes" ; then
1637   if has $install; then
1638     :
1639   else
1640     error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1641         "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1642         "to get ginstall which is used by default (which lives in /opt/csw/bin)"
1643   fi
1644   if test "`path_of $install`" = "/usr/sbin/install" ; then
1645     error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1646         "try ginstall from the GNU fileutils available from www.blastwave.org" \
1647         "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
1648   fi
1649   if has ar; then
1650     :
1651   else
1652     if test -f /usr/ccs/bin/ar ; then
1653       error_exit "No path includes ar" \
1654           "Add /usr/ccs/bin to your path and rerun configure"
1655     fi
1656     error_exit "No path includes ar"
1657   fi
1658 fi
1659
1660 if test -z "${target_list+xxx}" ; then
1661     target_list="$default_target_list"
1662 else
1663     target_list=`echo "$target_list" | sed -e 's/,/ /g'`
1664 fi
1665
1666 # Check that we recognised the target name; this allows a more
1667 # friendly error message than if we let it fall through.
1668 for target in $target_list; do
1669     case " $default_target_list " in
1670         *" $target "*)
1671             ;;
1672         *)
1673             error_exit "Unknown target name '$target'"
1674             ;;
1675     esac
1676 done
1677
1678 # see if system emulation was really requested
1679 case " $target_list " in
1680   *"-softmmu "*) softmmu=yes
1681   ;;
1682   *) softmmu=no
1683   ;;
1684 esac
1685
1686 feature_not_found() {
1687   feature=$1
1688   remedy=$2
1689
1690   error_exit "User requested feature $feature" \
1691       "configure was not able to find it." \
1692       "$remedy"
1693 }
1694
1695 # ---
1696 # big/little endian test
1697 cat > $TMPC << EOF
1698 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1699 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1700 extern int foo(short *, short *);
1701 int main(int argc, char *argv[]) {
1702     return foo(big_endian, little_endian);
1703 }
1704 EOF
1705
1706 if compile_object ; then
1707     if grep -q BiGeNdIaN $TMPO ; then
1708         bigendian="yes"
1709     elif grep -q LiTtLeEnDiAn $TMPO ; then
1710         bigendian="no"
1711     else
1712         echo big/little test failed
1713     fi
1714 else
1715     echo big/little test failed
1716 fi
1717
1718 ##########################################
1719 # L2TPV3 probe
1720
1721 cat > $TMPC <<EOF
1722 #include <sys/socket.h>
1723 #include <linux/ip.h>
1724 int main(void) { return sizeof(struct mmsghdr); }
1725 EOF
1726 if compile_prog "" "" ; then
1727   l2tpv3=yes
1728 else
1729   l2tpv3=no
1730 fi
1731
1732 ##########################################
1733 # pkg-config probe
1734
1735 if ! has "$pkg_config_exe"; then
1736   error_exit "pkg-config binary '$pkg_config_exe' not found"
1737 fi
1738
1739 ##########################################
1740 # NPTL probe
1741
1742 if test "$linux_user" = "yes"; then
1743   cat > $TMPC <<EOF
1744 #include <sched.h>
1745 #include <linux/futex.h>
1746 int main(void) {
1747 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1748 #error bork
1749 #endif
1750   return 0;
1751 }
1752 EOF
1753   if ! compile_object ; then
1754     feature_not_found "nptl" "Install glibc and linux kernel headers."
1755   fi
1756 fi
1757
1758 ##########################################
1759 # zlib check
1760
1761 if test "$zlib" != "no" ; then
1762     cat > $TMPC << EOF
1763 #include <zlib.h>
1764 int main(void) { zlibVersion(); return 0; }
1765 EOF
1766     if compile_prog "" "-lz" ; then
1767         :
1768     else
1769         error_exit "zlib check failed" \
1770             "Make sure to have the zlib libs and headers installed."
1771     fi
1772 fi
1773 LIBS="$LIBS -lz"
1774
1775 ##########################################
1776 # lzo check
1777
1778 if test "$lzo" != "no" ; then
1779     cat > $TMPC << EOF
1780 #include <lzo/lzo1x.h>
1781 int main(void) { lzo_version(); return 0; }
1782 EOF
1783     if compile_prog "" "-llzo2" ; then
1784         libs_softmmu="$libs_softmmu -llzo2"
1785         lzo="yes"
1786     else
1787         if test "$lzo" = "yes"; then
1788             feature_not_found "liblzo2" "Install liblzo2 devel"
1789         fi
1790         lzo="no"
1791     fi
1792 fi
1793
1794 ##########################################
1795 # snappy check
1796
1797 if test "$snappy" != "no" ; then
1798     cat > $TMPC << EOF
1799 #include <snappy-c.h>
1800 int main(void) { snappy_max_compressed_length(4096); return 0; }
1801 EOF
1802     if compile_prog "" "-lsnappy" ; then
1803         libs_softmmu="$libs_softmmu -lsnappy"
1804         snappy="yes"
1805     else
1806         if test "$snappy" = "yes"; then
1807             feature_not_found "libsnappy" "Install libsnappy devel"
1808         fi
1809         snappy="no"
1810     fi
1811 fi
1812
1813 ##########################################
1814 # bzip2 check
1815
1816 if test "$bzip2" != "no" ; then
1817     cat > $TMPC << EOF
1818 #include <bzlib.h>
1819 int main(void) { BZ2_bzlibVersion(); return 0; }
1820 EOF
1821     if compile_prog "" "-lbz2" ; then
1822         bzip2="yes"
1823     else
1824         if test "$bzip2" = "yes"; then
1825             feature_not_found "libbzip2" "Install libbzip2 devel"
1826         fi
1827         bzip2="no"
1828     fi
1829 fi
1830
1831 ##########################################
1832 # libseccomp check
1833
1834 if test "$seccomp" != "no" ; then
1835     if test "$cpu" = "i386" || test "$cpu" = "x86_64" &&
1836         $pkg_config --atleast-version=2.1.1 libseccomp; then
1837         libs_softmmu="$libs_softmmu `$pkg_config --libs libseccomp`"
1838         QEMU_CFLAGS="$QEMU_CFLAGS `$pkg_config --cflags libseccomp`"
1839         seccomp="yes"
1840     else
1841         if test "$seccomp" = "yes"; then
1842             feature_not_found "libseccomp" "Install libseccomp devel >= 2.1.1"
1843         fi
1844         seccomp="no"
1845     fi
1846 fi
1847 ##########################################
1848 # xen probe
1849
1850 if test "$xen" != "no" ; then
1851   xen_libs="-lxenstore -lxenctrl -lxenguest"
1852
1853   # First we test whether Xen headers and libraries are available.
1854   # If no, we are done and there is no Xen support.
1855   # If yes, more tests are run to detect the Xen version.
1856
1857   # Xen (any)
1858   cat > $TMPC <<EOF
1859 #include <xenctrl.h>
1860 int main(void) {
1861   return 0;
1862 }
1863 EOF
1864   if ! compile_prog "" "$xen_libs" ; then
1865     # Xen not found
1866     if test "$xen" = "yes" ; then
1867       feature_not_found "xen" "Install xen devel"
1868     fi
1869     xen=no
1870
1871   # Xen unstable
1872   elif
1873       cat > $TMPC <<EOF &&
1874 #include <xenctrl.h>
1875 #include <xenstore.h>
1876 #include <stdint.h>
1877 #include <xen/hvm/hvm_info_table.h>
1878 #if !defined(HVM_MAX_VCPUS)
1879 # error HVM_MAX_VCPUS not defined
1880 #endif
1881 int main(void) {
1882   xc_interface *xc;
1883   xs_daemon_open();
1884   xc = xc_interface_open(0, 0, 0);
1885   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1886   xc_gnttab_open(NULL, 0);
1887   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1888   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
1889   xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
1890   return 0;
1891 }
1892 EOF
1893       compile_prog "" "$xen_libs"
1894     then
1895     xen_ctrl_version=450
1896     xen=yes
1897
1898   elif
1899       cat > $TMPC <<EOF &&
1900 #include <xenctrl.h>
1901 #include <xenstore.h>
1902 #include <stdint.h>
1903 #include <xen/hvm/hvm_info_table.h>
1904 #if !defined(HVM_MAX_VCPUS)
1905 # error HVM_MAX_VCPUS not defined
1906 #endif
1907 int main(void) {
1908   xc_interface *xc;
1909   xs_daemon_open();
1910   xc = xc_interface_open(0, 0, 0);
1911   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1912   xc_gnttab_open(NULL, 0);
1913   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1914   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
1915   return 0;
1916 }
1917 EOF
1918       compile_prog "" "$xen_libs"
1919     then
1920     xen_ctrl_version=420
1921     xen=yes
1922
1923   elif
1924       cat > $TMPC <<EOF &&
1925 #include <xenctrl.h>
1926 #include <xs.h>
1927 #include <stdint.h>
1928 #include <xen/hvm/hvm_info_table.h>
1929 #if !defined(HVM_MAX_VCPUS)
1930 # error HVM_MAX_VCPUS not defined
1931 #endif
1932 int main(void) {
1933   xs_daemon_open();
1934   xc_interface_open(0, 0, 0);
1935   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1936   xc_gnttab_open(NULL, 0);
1937   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1938   return 0;
1939 }
1940 EOF
1941       compile_prog "" "$xen_libs"
1942     then
1943     xen_ctrl_version=410
1944     xen=yes
1945
1946   # Xen 4.0.0
1947   elif
1948       cat > $TMPC <<EOF &&
1949 #include <xenctrl.h>
1950 #include <xs.h>
1951 #include <stdint.h>
1952 #include <xen/hvm/hvm_info_table.h>
1953 #if !defined(HVM_MAX_VCPUS)
1954 # error HVM_MAX_VCPUS not defined
1955 #endif
1956 int main(void) {
1957   struct xen_add_to_physmap xatp = {
1958     .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
1959   };
1960   xs_daemon_open();
1961   xc_interface_open();
1962   xc_gnttab_open();
1963   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1964   xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
1965   return 0;
1966 }
1967 EOF
1968       compile_prog "" "$xen_libs"
1969     then
1970     xen_ctrl_version=400
1971     xen=yes
1972
1973   # Xen 3.4.0
1974   elif
1975       cat > $TMPC <<EOF &&
1976 #include <xenctrl.h>
1977 #include <xs.h>
1978 int main(void) {
1979   struct xen_add_to_physmap xatp = {
1980     .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
1981   };
1982   xs_daemon_open();
1983   xc_interface_open();
1984   xc_gnttab_open();
1985   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1986   xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
1987   return 0;
1988 }
1989 EOF
1990       compile_prog "" "$xen_libs"
1991     then
1992     xen_ctrl_version=340
1993     xen=yes
1994
1995   # Xen 3.3.0
1996   elif
1997       cat > $TMPC <<EOF &&
1998 #include <xenctrl.h>
1999 #include <xs.h>
2000 int main(void) {
2001   xs_daemon_open();
2002   xc_interface_open();
2003   xc_gnttab_open();
2004   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2005   return 0;
2006 }
2007 EOF
2008       compile_prog "" "$xen_libs"
2009     then
2010     xen_ctrl_version=330
2011     xen=yes
2012
2013   # Xen version unsupported
2014   else
2015     if test "$xen" = "yes" ; then
2016       feature_not_found "xen (unsupported version)" "Install supported xen (e.g. 4.0, 3.4, 3.3)"
2017     fi
2018     xen=no
2019   fi
2020
2021   if test "$xen" = yes; then
2022     libs_softmmu="$xen_libs $libs_softmmu"
2023   fi
2024 fi
2025
2026 if test "$xen_pci_passthrough" != "no"; then
2027   if test "$xen" = "yes" && test "$linux" = "yes" &&
2028     test "$xen_ctrl_version" -ge 340; then
2029     xen_pci_passthrough=yes
2030   else
2031     if test "$xen_pci_passthrough" = "yes"; then
2032       if test "$xen_ctrl_version" -lt 340; then
2033         error_exit "User requested feature Xen PCI Passthrough" \
2034             "This feature does not work with Xen 3.3"
2035       fi
2036       error_exit "User requested feature Xen PCI Passthrough" \
2037           " but this feature requires /sys from Linux"
2038     fi
2039     xen_pci_passthrough=no
2040   fi
2041 fi
2042
2043 ##########################################
2044 # libtool probe
2045
2046 if ! has $libtool; then
2047     libtool=
2048 fi
2049
2050 # MacOSX ships with a libtool which isn't the GNU one; weed this
2051 # out by checking whether libtool supports the --version switch
2052 if test -n "$libtool"; then
2053   if ! "$libtool" --version >/dev/null 2>&1; then
2054     libtool=
2055   fi
2056 fi
2057
2058 ##########################################
2059 # Sparse probe
2060 if test "$sparse" != "no" ; then
2061   if has cgcc; then
2062     sparse=yes
2063   else
2064     if test "$sparse" = "yes" ; then
2065       feature_not_found "sparse" "Install sparse binary"
2066     fi
2067     sparse=no
2068   fi
2069 fi
2070
2071 ##########################################
2072 # X11 probe
2073 x11_cflags=
2074 x11_libs=-lX11
2075 if $pkg_config --exists "x11"; then
2076     x11_cflags=`$pkg_config --cflags x11`
2077     x11_libs=`$pkg_config --libs x11`
2078 fi
2079
2080 ##########################################
2081 # GTK probe
2082
2083 if test "$gtkabi" = ""; then
2084     # The GTK ABI was not specified explicitly, so try whether 2.0 is available.
2085     # Use 3.0 as a fallback if that is available.
2086     if $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2087         gtkabi=2.0
2088     elif $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2089         gtkabi=3.0
2090     else
2091         gtkabi=2.0
2092     fi
2093 fi
2094
2095 if test "$gtk" != "no"; then
2096     gtkpackage="gtk+-$gtkabi"
2097     gtkx11package="gtk+-x11-$gtkabi"
2098     if test "$gtkabi" = "3.0" ; then
2099       gtkversion="3.0.0"
2100     else
2101       gtkversion="2.18.0"
2102     fi
2103     if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2104         gtk_cflags=`$pkg_config --cflags $gtkpackage`
2105         gtk_libs=`$pkg_config --libs $gtkpackage`
2106         if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2107             gtk_cflags="$gtk_cflags $x11_cflags"
2108             gtk_libs="$gtk_libs $x11_libs"
2109         fi
2110         libs_softmmu="$gtk_libs $libs_softmmu"
2111         gtk="yes"
2112     elif test "$gtk" = "yes"; then
2113         feature_not_found "gtk" "Install gtk2 or gtk3 devel"
2114     else
2115         gtk="no"
2116     fi
2117 fi
2118
2119
2120 ##########################################
2121 # GNUTLS probe
2122
2123 gnutls_gcrypt=no
2124 gnutls_nettle=no
2125 if test "$gnutls" != "no"; then
2126     if $pkg_config --exists "gnutls"; then
2127         gnutls_cflags=`$pkg_config --cflags gnutls`
2128         gnutls_libs=`$pkg_config --libs gnutls`
2129         libs_softmmu="$gnutls_libs $libs_softmmu"
2130         libs_tools="$gnutls_libs $libs_tools"
2131         QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2132         gnutls="yes"
2133
2134         # gnutls_hash_init requires >= 2.9.10
2135         if $pkg_config --exists "gnutls >= 2.9.10"; then
2136             gnutls_hash="yes"
2137         else
2138             gnutls_hash="no"
2139         fi
2140
2141         if $pkg_config --exists 'gnutls >= 3.0'; then
2142             gnutls_gcrypt=no
2143             gnutls_nettle=yes
2144         elif $pkg_config --exists 'gnutls >= 2.12'; then
2145             case `$pkg_config --libs --static gnutls` in
2146                 *gcrypt*)
2147                     gnutls_gcrypt=yes
2148                     gnutls_nettle=no
2149                     ;;
2150                 *nettle*)
2151                     gnutls_gcrypt=no
2152                     gnutls_nettle=yes
2153                     ;;
2154                 *)
2155                     gnutls_gcrypt=yes
2156                     gnutls_nettle=no
2157                     ;;
2158             esac
2159         else
2160             gnutls_gcrypt=yes
2161             gnutls_nettle=no
2162         fi
2163     elif test "$gnutls" = "yes"; then
2164         feature_not_found "gnutls" "Install gnutls devel"
2165     else
2166         gnutls="no"
2167         gnutls_hash="no"
2168     fi
2169 else
2170     gnutls_hash="no"
2171 fi
2172
2173 if test "$gnutls_gcrypt" != "no"; then
2174     if has "libgcrypt-config"; then
2175         gcrypt_cflags=`libgcrypt-config --cflags`
2176         gcrypt_libs=`libgcrypt-config --libs`
2177         libs_softmmu="$gcrypt_libs $libs_softmmu"
2178         libs_tools="$gcrypt_libs $libs_tools"
2179         QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2180     else
2181         feature_not_found "gcrypt" "Install gcrypt devel"
2182     fi
2183 fi
2184
2185
2186 if test "$gnutls_nettle" != "no"; then
2187     if $pkg_config --exists "nettle"; then
2188         nettle_cflags=`$pkg_config --cflags nettle`
2189         nettle_libs=`$pkg_config --libs nettle`
2190         libs_softmmu="$nettle_libs $libs_softmmu"
2191         libs_tools="$nettle_libs $libs_tools"
2192         QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2193     else
2194         feature_not_found "nettle" "Install nettle devel"
2195     fi
2196 fi
2197
2198
2199 ##########################################
2200 # VTE probe
2201
2202 if test "$vte" != "no"; then
2203     if test "$gtkabi" = "3.0"; then
2204       vtepackage="vte-2.90"
2205       vteversion="0.32.0"
2206     else
2207       vtepackage="vte"
2208       vteversion="0.24.0"
2209     fi
2210     if $pkg_config --exists "$vtepackage >= $vteversion"; then
2211         vte_cflags=`$pkg_config --cflags $vtepackage`
2212         vte_libs=`$pkg_config --libs $vtepackage`
2213         libs_softmmu="$vte_libs $libs_softmmu"
2214         vte="yes"
2215     elif test "$vte" = "yes"; then
2216         if test "$gtkabi" = "3.0"; then
2217             feature_not_found "vte" "Install libvte-2.90 devel"
2218         else
2219             feature_not_found "vte" "Install libvte devel"
2220         fi
2221     else
2222         vte="no"
2223     fi
2224 fi
2225
2226 ##########################################
2227 # SDL probe
2228
2229 # Look for sdl configuration program (pkg-config or sdl-config).  Try
2230 # sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2231
2232 if test $sdlabi = "2.0"; then
2233     sdl_config=$sdl2_config
2234     sdlname=sdl2
2235     sdlconfigname=sdl2_config
2236 else
2237     sdlname=sdl
2238     sdlconfigname=sdl_config
2239 fi
2240
2241 if test "`basename $sdl_config`" != $sdlconfigname && ! has ${sdl_config}; then
2242   sdl_config=$sdlconfigname
2243 fi
2244
2245 if $pkg_config $sdlname --exists; then
2246   sdlconfig="$pkg_config $sdlname"
2247   _sdlversion=`$sdlconfig --modversion 2>/dev/null | sed 's/[^0-9]//g'`
2248 elif has ${sdl_config}; then
2249   sdlconfig="$sdl_config"
2250   _sdlversion=`$sdlconfig --version | sed 's/[^0-9]//g'`
2251 else
2252   if test "$sdl" = "yes" ; then
2253     feature_not_found "sdl" "Install SDL devel"
2254   fi
2255   sdl=no
2256 fi
2257 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2258   echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2259 fi
2260
2261 sdl_too_old=no
2262 if test "$sdl" != "no" ; then
2263   cat > $TMPC << EOF
2264 #include <SDL.h>
2265 #undef main /* We don't want SDL to override our main() */
2266 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2267 EOF
2268   sdl_cflags=`$sdlconfig --cflags 2> /dev/null`
2269   if test "$static" = "yes" ; then
2270     sdl_libs=`$sdlconfig --static-libs 2>/dev/null`
2271   else
2272     sdl_libs=`$sdlconfig --libs 2> /dev/null`
2273   fi
2274   if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2275     if test "$_sdlversion" -lt 121 ; then
2276       sdl_too_old=yes
2277     else
2278       if test "$cocoa" = "no" ; then
2279         sdl=yes
2280       fi
2281     fi
2282
2283     # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2284     if test "$sdl" = "yes" -a "$static" = "yes" ; then
2285       if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2286          sdl_libs="$sdl_libs `aalib-config --static-libs 2>/dev/null`"
2287          sdl_cflags="$sdl_cflags `aalib-config --cflags 2>/dev/null`"
2288       fi
2289       if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2290         :
2291       else
2292         sdl=no
2293       fi
2294     fi # static link
2295   else # sdl not found
2296     if test "$sdl" = "yes" ; then
2297       feature_not_found "sdl" "Install SDL devel"
2298     fi
2299     sdl=no
2300   fi # sdl compile test
2301 fi
2302
2303 if test "$sdl" = "yes" ; then
2304   cat > $TMPC <<EOF
2305 #include <SDL.h>
2306 #if defined(SDL_VIDEO_DRIVER_X11)
2307 #include <X11/XKBlib.h>
2308 #else
2309 #error No x11 support
2310 #endif
2311 int main(void) { return 0; }
2312 EOF
2313   if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2314     sdl_cflags="$sdl_cflags $x11_cflags"
2315     sdl_libs="$sdl_libs $x11_libs"
2316   fi
2317   libs_softmmu="$sdl_libs $libs_softmmu"
2318 fi
2319
2320 ##########################################
2321 # RDMA needs OpenFabrics libraries
2322 if test "$rdma" != "no" ; then
2323   cat > $TMPC <<EOF
2324 #include <rdma/rdma_cma.h>
2325 int main(void) { return 0; }
2326 EOF
2327   rdma_libs="-lrdmacm -libverbs"
2328   if compile_prog "" "$rdma_libs" ; then
2329     rdma="yes"
2330     libs_softmmu="$libs_softmmu $rdma_libs"
2331   else
2332     if test "$rdma" = "yes" ; then
2333         error_exit \
2334             " OpenFabrics librdmacm/libibverbs not present." \
2335             " Your options:" \
2336             "  (1) Fast: Install infiniband packages from your distro." \
2337             "  (2) Cleanest: Install libraries from www.openfabrics.org" \
2338             "  (3) Also: Install softiwarp if you don't have RDMA hardware"
2339     fi
2340     rdma="no"
2341   fi
2342 fi
2343
2344 ##########################################
2345 # VNC TLS/WS detection
2346 if test "$vnc" = "yes" -a \( "$vnc_tls" != "no" -o "$vnc_ws" != "no" \) ; then
2347   cat > $TMPC <<EOF
2348 #include <gnutls/gnutls.h>
2349 int main(void) { gnutls_session_t s; gnutls_init(&s, GNUTLS_SERVER); return 0; }
2350 EOF
2351   vnc_tls_cflags=`$pkg_config --cflags gnutls 2> /dev/null`
2352   vnc_tls_libs=`$pkg_config --libs gnutls 2> /dev/null`
2353   if compile_prog "$vnc_tls_cflags" "$vnc_tls_libs" ; then
2354     if test "$vnc_tls" != "no" ; then
2355       vnc_tls=yes
2356     fi
2357     if test "$vnc_ws" != "no" ; then
2358       vnc_ws=yes
2359     fi
2360     libs_softmmu="$vnc_tls_libs $libs_softmmu"
2361     QEMU_CFLAGS="$QEMU_CFLAGS $vnc_tls_cflags"
2362   else
2363     if test "$vnc_tls" = "yes" ; then
2364       feature_not_found "vnc-tls" "Install gnutls devel"
2365     fi
2366     if test "$vnc_ws" = "yes" ; then
2367       feature_not_found "vnc-ws" "Install gnutls devel"
2368     fi
2369     vnc_tls=no
2370     vnc_ws=no
2371   fi
2372 fi
2373
2374 ##########################################
2375 # VNC SASL detection
2376 if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
2377   cat > $TMPC <<EOF
2378 #include <sasl/sasl.h>
2379 #include <stdio.h>
2380 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2381 EOF
2382   # Assuming Cyrus-SASL installed in /usr prefix
2383   vnc_sasl_cflags=""
2384   vnc_sasl_libs="-lsasl2"
2385   if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2386     vnc_sasl=yes
2387     libs_softmmu="$vnc_sasl_libs $libs_softmmu"
2388     QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
2389   else
2390     if test "$vnc_sasl" = "yes" ; then
2391       feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2392     fi
2393     vnc_sasl=no
2394   fi
2395 fi
2396
2397 ##########################################
2398 # VNC JPEG detection
2399 if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2400 cat > $TMPC <<EOF
2401 #include <stdio.h>
2402 #include <jpeglib.h>
2403 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2404 EOF
2405     vnc_jpeg_cflags=""
2406     vnc_jpeg_libs="-ljpeg"
2407   if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2408     vnc_jpeg=yes
2409     libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
2410     QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2411   else
2412     if test "$vnc_jpeg" = "yes" ; then
2413       feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2414     fi
2415     vnc_jpeg=no
2416   fi
2417 fi
2418
2419 ##########################################
2420 # VNC PNG detection
2421 if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
2422 cat > $TMPC <<EOF
2423 //#include <stdio.h>
2424 #include <png.h>
2425 #include <stddef.h>
2426 int main(void) {
2427     png_structp png_ptr;
2428     png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
2429     return png_ptr != 0;
2430 }
2431 EOF
2432   if $pkg_config libpng --exists; then
2433     vnc_png_cflags=`$pkg_config libpng --cflags`
2434     vnc_png_libs=`$pkg_config libpng --libs`
2435   else
2436     vnc_png_cflags=""
2437     vnc_png_libs="-lpng"
2438   fi
2439   if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2440     vnc_png=yes
2441     libs_softmmu="$vnc_png_libs $libs_softmmu"
2442     QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
2443   else
2444     if test "$vnc_png" = "yes" ; then
2445       feature_not_found "vnc-png" "Install libpng devel"
2446     fi
2447     vnc_png=no
2448   fi
2449 fi
2450
2451 ##########################################
2452 # fnmatch() probe, used for ACL routines
2453 fnmatch="no"
2454 cat > $TMPC << EOF
2455 #include <fnmatch.h>
2456 int main(void)
2457 {
2458     fnmatch("foo", "foo", 0);
2459     return 0;
2460 }
2461 EOF
2462 if compile_prog "" "" ; then
2463    fnmatch="yes"
2464 fi
2465
2466 ##########################################
2467 # uuid_generate() probe, used for vdi block driver
2468 # Note that on some systems (notably MacOSX) no extra library
2469 # need be linked to get the uuid functions.
2470 if test "$uuid" != "no" ; then
2471   uuid_libs="-luuid"
2472   cat > $TMPC << EOF
2473 #include <uuid/uuid.h>
2474 int main(void)
2475 {
2476     uuid_t my_uuid;
2477     uuid_generate(my_uuid);
2478     return 0;
2479 }
2480 EOF
2481   if compile_prog "" "" ; then
2482     uuid="yes"
2483   elif compile_prog "" "$uuid_libs" ; then
2484     uuid="yes"
2485     libs_softmmu="$uuid_libs $libs_softmmu"
2486     libs_tools="$uuid_libs $libs_tools"
2487   else
2488     if test "$uuid" = "yes" ; then
2489       feature_not_found "uuid" "Install libuuid devel"
2490     fi
2491     uuid=no
2492   fi
2493 fi
2494
2495 if test "$vhdx" = "yes" ; then
2496     if test "$uuid" = "no" ; then
2497         error_exit "uuid required for VHDX support"
2498     fi
2499 elif test "$vhdx" != "no" ; then
2500     if test "$uuid" = "yes" ; then
2501         vhdx=yes
2502     else
2503         vhdx=no
2504     fi
2505 fi
2506
2507 ##########################################
2508 # xfsctl() probe, used for raw-posix
2509 if test "$xfs" != "no" ; then
2510   cat > $TMPC << EOF
2511 #include <stddef.h>  /* NULL */
2512 #include <xfs/xfs.h>
2513 int main(void)
2514 {
2515     xfsctl(NULL, 0, 0, NULL);
2516     return 0;
2517 }
2518 EOF
2519   if compile_prog "" "" ; then
2520     xfs="yes"
2521   else
2522     if test "$xfs" = "yes" ; then
2523       feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
2524     fi
2525     xfs=no
2526   fi
2527 fi
2528
2529 ##########################################
2530 # vde libraries probe
2531 if test "$vde" != "no" ; then
2532   vde_libs="-lvdeplug"
2533   cat > $TMPC << EOF
2534 #include <libvdeplug.h>
2535 int main(void)
2536 {
2537     struct vde_open_args a = {0, 0, 0};
2538     char s[] = "";
2539     vde_open(s, s, &a);
2540     return 0;
2541 }
2542 EOF
2543   if compile_prog "" "$vde_libs" ; then
2544     vde=yes
2545     libs_softmmu="$vde_libs $libs_softmmu"
2546     libs_tools="$vde_libs $libs_tools"
2547   else
2548     if test "$vde" = "yes" ; then
2549       feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
2550     fi
2551     vde=no
2552   fi
2553 fi
2554
2555 ##########################################
2556 # netmap support probe
2557 # Apart from looking for netmap headers, we make sure that the host API version
2558 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2559 # a minor/major version number. Minor new features will be marked with values up
2560 # to 15, and if something happens that requires a change to the backend we will
2561 # move above 15, submit the backend fixes and modify this two bounds.
2562 if test "$netmap" != "no" ; then
2563   cat > $TMPC << EOF
2564 #include <inttypes.h>
2565 #include <net/if.h>
2566 #include <net/netmap.h>
2567 #include <net/netmap_user.h>
2568 #if (NETMAP_API < 11) || (NETMAP_API > 15)
2569 #error
2570 #endif
2571 int main(void) { return 0; }
2572 EOF
2573   if compile_prog "" "" ; then
2574     netmap=yes
2575   else
2576     if test "$netmap" = "yes" ; then
2577       feature_not_found "netmap"
2578     fi
2579     netmap=no
2580   fi
2581 fi
2582
2583 ##########################################
2584 # libcap-ng library probe
2585 if test "$cap_ng" != "no" ; then
2586   cap_libs="-lcap-ng"
2587   cat > $TMPC << EOF
2588 #include <cap-ng.h>
2589 int main(void)
2590 {
2591     capng_capability_to_name(CAPNG_EFFECTIVE);
2592     return 0;
2593 }
2594 EOF
2595   if compile_prog "" "$cap_libs" ; then
2596     cap_ng=yes
2597     libs_tools="$cap_libs $libs_tools"
2598   else
2599     if test "$cap_ng" = "yes" ; then
2600       feature_not_found "cap_ng" "Install libcap-ng devel"
2601     fi
2602     cap_ng=no
2603   fi
2604 fi
2605
2606 ##########################################
2607 # Sound support libraries probe
2608
2609 audio_drv_probe()
2610 {
2611     drv=$1
2612     hdr=$2
2613     lib=$3
2614     exp=$4
2615     cfl=$5
2616         cat > $TMPC << EOF
2617 #include <$hdr>
2618 int main(void) { $exp }
2619 EOF
2620     if compile_prog "$cfl" "$lib" ; then
2621         :
2622     else
2623         error_exit "$drv check failed" \
2624             "Make sure to have the $drv libs and headers installed."
2625     fi
2626 }
2627
2628 audio_drv_list=`echo "$audio_drv_list" | sed -e 's/,/ /g'`
2629 for drv in $audio_drv_list; do
2630     case $drv in
2631     alsa)
2632     audio_drv_probe $drv alsa/asoundlib.h -lasound \
2633         "return snd_pcm_close((snd_pcm_t *)0);"
2634     libs_softmmu="-lasound $libs_softmmu"
2635     ;;
2636
2637     pa)
2638     audio_drv_probe $drv pulse/mainloop.h "-lpulse" \
2639         "pa_mainloop *m = 0; pa_mainloop_free (m); return 0;"
2640     libs_softmmu="-lpulse $libs_softmmu"
2641     audio_pt_int="yes"
2642     ;;
2643
2644     coreaudio)
2645       libs_softmmu="-framework CoreAudio $libs_softmmu"
2646     ;;
2647
2648     dsound)
2649       libs_softmmu="-lole32 -ldxguid $libs_softmmu"
2650       audio_win_int="yes"
2651     ;;
2652
2653     oss)
2654       libs_softmmu="$oss_lib $libs_softmmu"
2655     ;;
2656
2657     sdl|wav)
2658     # XXX: Probes for CoreAudio, DirectSound, SDL(?)
2659     ;;
2660
2661     *)
2662     echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
2663         error_exit "Unknown driver '$drv' selected" \
2664             "Possible drivers are: $audio_possible_drivers"
2665     }
2666     ;;
2667     esac
2668 done
2669
2670 ##########################################
2671 # BrlAPI probe
2672
2673 if test "$brlapi" != "no" ; then
2674   brlapi_libs="-lbrlapi"
2675   cat > $TMPC << EOF
2676 #include <brlapi.h>
2677 #include <stddef.h>
2678 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
2679 EOF
2680   if compile_prog "" "$brlapi_libs" ; then
2681     brlapi=yes
2682     libs_softmmu="$brlapi_libs $libs_softmmu"
2683   else
2684     if test "$brlapi" = "yes" ; then
2685       feature_not_found "brlapi" "Install brlapi devel"
2686     fi
2687     brlapi=no
2688   fi
2689 fi
2690
2691 ##########################################
2692 # curses probe
2693 if test "$curses" != "no" ; then
2694   if test "$mingw32" = "yes" ; then
2695     curses_list="-lpdcurses"
2696   else
2697     curses_list="$($pkg_config --libs ncurses 2>/dev/null):-lncurses:-lcurses"
2698   fi
2699   curses_found=no
2700   cat > $TMPC << EOF
2701 #include <curses.h>
2702 int main(void) {
2703   const char *s = curses_version();
2704   resize_term(0, 0);
2705   return s != 0;
2706 }
2707 EOF
2708   IFS=:
2709   for curses_lib in $curses_list; do
2710     unset IFS
2711     if compile_prog "" "$curses_lib" ; then
2712       curses_found=yes
2713       libs_softmmu="$curses_lib $libs_softmmu"
2714       break
2715     fi
2716   done
2717   unset IFS
2718   if test "$curses_found" = "yes" ; then
2719     curses=yes
2720   else
2721     if test "$curses" = "yes" ; then
2722       feature_not_found "curses" "Install ncurses devel"
2723     fi
2724     curses=no
2725   fi
2726 fi
2727
2728 ##########################################
2729 # curl probe
2730 if test "$curl" != "no" ; then
2731   if $pkg_config libcurl --exists; then
2732     curlconfig="$pkg_config libcurl"
2733   else
2734     curlconfig=curl-config
2735   fi
2736   cat > $TMPC << EOF
2737 #include <curl/curl.h>
2738 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
2739 EOF
2740   curl_cflags=`$curlconfig --cflags 2>/dev/null`
2741   curl_libs=`$curlconfig --libs 2>/dev/null`
2742   if compile_prog "$curl_cflags" "$curl_libs" ; then
2743     curl=yes
2744   else
2745     if test "$curl" = "yes" ; then
2746       feature_not_found "curl" "Install libcurl devel"
2747     fi
2748     curl=no
2749   fi
2750 fi # test "$curl"
2751
2752 ##########################################
2753 # bluez support probe
2754 if test "$bluez" != "no" ; then
2755   cat > $TMPC << EOF
2756 #include <bluetooth/bluetooth.h>
2757 int main(void) { return bt_error(0); }
2758 EOF
2759   bluez_cflags=`$pkg_config --cflags bluez 2> /dev/null`
2760   bluez_libs=`$pkg_config --libs bluez 2> /dev/null`
2761   if compile_prog "$bluez_cflags" "$bluez_libs" ; then
2762     bluez=yes
2763     libs_softmmu="$bluez_libs $libs_softmmu"
2764   else
2765     if test "$bluez" = "yes" ; then
2766       feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
2767     fi
2768     bluez="no"
2769   fi
2770 fi
2771
2772 ##########################################
2773 # glib support probe
2774
2775 glib_req_ver=2.22
2776 glib_modules=gthread-2.0
2777 if test "$modules" = yes; then
2778     glib_modules="$glib_modules gmodule-2.0"
2779 fi
2780
2781 for i in $glib_modules; do
2782     if $pkg_config --atleast-version=$glib_req_ver $i; then
2783         glib_cflags=`$pkg_config --cflags $i`
2784         glib_libs=`$pkg_config --libs $i`
2785         CFLAGS="$glib_cflags $CFLAGS"
2786         LIBS="$glib_libs $LIBS"
2787         libs_qga="$glib_libs $libs_qga"
2788     else
2789         error_exit "glib-$glib_req_ver $i is required to compile QEMU"
2790     fi
2791 done
2792
2793 # g_test_trap_subprocess added in 2.38. Used by some tests.
2794 glib_subprocess=yes
2795 if ! $pkg_config --atleast-version=2.38 glib-2.0; then
2796     glib_subprocess=no
2797 fi
2798
2799 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
2800 cat > $TMPC << EOF
2801 #include <glib.h>
2802 int main(void) { return 0; }
2803 EOF
2804 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
2805     if cc_has_warning_flag "-Wno-unknown-attributes"; then
2806         glib_cflags="-Wno-unknown-attributes $glib_cflags"
2807         CFLAGS="-Wno-unknown-attributes $CFLAGS"
2808     fi
2809 fi
2810
2811 ##########################################
2812 # SHA command probe for modules
2813 if test "$modules" = yes; then
2814     shacmd_probe="sha1sum sha1 shasum"
2815     for c in $shacmd_probe; do
2816         if has $c; then
2817             shacmd="$c"
2818             break
2819         fi
2820     done
2821     if test "$shacmd" = ""; then
2822         error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
2823     fi
2824 fi
2825
2826 ##########################################
2827 # pixman support probe
2828
2829 if test "$pixman" = ""; then
2830   if test "$want_tools" = "no" -a "$softmmu" = "no"; then
2831     pixman="none"
2832   elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
2833     pixman="system"
2834   else
2835     pixman="internal"
2836   fi
2837 fi
2838 if test "$pixman" = "none"; then
2839   if test "$want_tools" != "no" -o "$softmmu" != "no"; then
2840     error_exit "pixman disabled but system emulation or tools build" \
2841         "enabled.  You can turn off pixman only if you also" \
2842         "disable all system emulation targets and the tools" \
2843         "build with '--disable-tools --disable-system'."
2844   fi
2845   pixman_cflags=
2846   pixman_libs=
2847 elif test "$pixman" = "system"; then
2848   # pixman version has been checked above
2849   pixman_cflags=`$pkg_config --cflags pixman-1`
2850   pixman_libs=`$pkg_config --libs pixman-1`
2851 else
2852   if test ! -d ${source_path}/pixman/pixman; then
2853     error_exit "pixman >= 0.21.8 not present. Your options:" \
2854         "  (1) Preferred: Install the pixman devel package (any recent" \
2855         "      distro should have packages as Xorg needs pixman too)." \
2856         "  (2) Fetch the pixman submodule, using:" \
2857         "      git submodule update --init pixman"
2858   fi
2859   mkdir -p pixman/pixman
2860   pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
2861   pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
2862 fi
2863
2864 ##########################################
2865 # libcap probe
2866
2867 if test "$cap" != "no" ; then
2868   cat > $TMPC <<EOF
2869 #include <stdio.h>
2870 #include <sys/capability.h>
2871 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
2872 EOF
2873   if compile_prog "" "-lcap" ; then
2874     cap=yes
2875   else
2876     cap=no
2877   fi
2878 fi
2879
2880 ##########################################
2881 # pthread probe
2882 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
2883
2884 pthread=no
2885 cat > $TMPC << EOF
2886 #include <pthread.h>
2887 static void *f(void *p) { return NULL; }
2888 int main(void) {
2889   pthread_t thread;
2890   pthread_create(&thread, 0, f, 0);
2891   return 0;
2892 }
2893 EOF
2894 if compile_prog "" "" ; then
2895   pthread=yes
2896 else
2897   for pthread_lib in $PTHREADLIBS_LIST; do
2898     if compile_prog "" "$pthread_lib" ; then
2899       pthread=yes
2900       found=no
2901       for lib_entry in $LIBS; do
2902         if test "$lib_entry" = "$pthread_lib"; then
2903           found=yes
2904           break
2905         fi
2906       done
2907       if test "$found" = "no"; then
2908         LIBS="$pthread_lib $LIBS"
2909       fi
2910       break
2911     fi
2912   done
2913 fi
2914
2915 if test "$mingw32" != yes -a "$pthread" = no; then
2916   error_exit "pthread check failed" \
2917       "Make sure to have the pthread libs and headers installed."
2918 fi
2919
2920 # check for pthread_setname_np
2921 pthread_setname_np=no
2922 cat > $TMPC << EOF
2923 #include <pthread.h>
2924
2925 static void *f(void *p) { return NULL; }
2926 int main(void)
2927 {
2928     pthread_t thread;
2929     pthread_create(&thread, 0, f, 0);
2930     pthread_setname_np(thread, "QEMU");
2931     return 0;
2932 }
2933 EOF
2934 if compile_prog "" "$pthread_lib" ; then
2935   pthread_setname_np=yes
2936 fi
2937
2938 ##########################################
2939 # rbd probe
2940 if test "$rbd" != "no" ; then
2941   cat > $TMPC <<EOF
2942 #include <stdio.h>
2943 #include <rbd/librbd.h>
2944 int main(void) {
2945     rados_t cluster;
2946     rados_create(&cluster, NULL);
2947     return 0;
2948 }
2949 EOF
2950   rbd_libs="-lrbd -lrados"
2951   if compile_prog "" "$rbd_libs" ; then
2952     rbd=yes
2953   else
2954     if test "$rbd" = "yes" ; then
2955       feature_not_found "rados block device" "Install librbd/ceph devel"
2956     fi
2957     rbd=no
2958   fi
2959 fi
2960
2961 ##########################################
2962 # libssh2 probe
2963 min_libssh2_version=1.2.8
2964 if test "$libssh2" != "no" ; then
2965   if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
2966     libssh2_cflags=`$pkg_config libssh2 --cflags`
2967     libssh2_libs=`$pkg_config libssh2 --libs`
2968     libssh2=yes
2969   else
2970     if test "$libssh2" = "yes" ; then
2971       error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
2972     fi
2973     libssh2=no
2974   fi
2975 fi
2976
2977 ##########################################
2978 # libssh2_sftp_fsync probe
2979
2980 if test "$libssh2" = "yes"; then
2981   cat > $TMPC <<EOF
2982 #include <stdio.h>
2983 #include <libssh2.h>
2984 #include <libssh2_sftp.h>
2985 int main(void) {
2986     LIBSSH2_SESSION *session;
2987     LIBSSH2_SFTP *sftp;
2988     LIBSSH2_SFTP_HANDLE *sftp_handle;
2989     session = libssh2_session_init ();
2990     sftp = libssh2_sftp_init (session);
2991     sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
2992     libssh2_sftp_fsync (sftp_handle);
2993     return 0;
2994 }
2995 EOF
2996   # libssh2_cflags/libssh2_libs defined in previous test.
2997   if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
2998     QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
2999   fi
3000 fi
3001
3002 ##########################################
3003 # linux-aio probe
3004
3005 if test "$linux_aio" != "no" ; then
3006   cat > $TMPC <<EOF
3007 #include <libaio.h>
3008 #include <sys/eventfd.h>
3009 #include <stddef.h>
3010 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3011 EOF
3012   if compile_prog "" "-laio" ; then
3013     linux_aio=yes
3014   else
3015     if test "$linux_aio" = "yes" ; then
3016       feature_not_found "linux AIO" "Install libaio devel"
3017     fi
3018     linux_aio=no
3019   fi
3020 fi
3021
3022 ##########################################
3023 # TPM passthrough is only on x86 Linux
3024
3025 if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3026   tpm_passthrough=$tpm
3027 else
3028   tpm_passthrough=no
3029 fi
3030
3031 ##########################################
3032 # attr probe
3033
3034 if test "$attr" != "no" ; then
3035   cat > $TMPC <<EOF
3036 #include <stdio.h>
3037 #include <sys/types.h>
3038 #ifdef CONFIG_LIBATTR
3039 #include <attr/xattr.h>
3040 #else
3041 #include <sys/xattr.h>
3042 #endif
3043 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3044 EOF
3045   if compile_prog "" "" ; then
3046     attr=yes
3047   # Older distros have <attr/xattr.h>, and need -lattr:
3048   elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3049     attr=yes
3050     LIBS="-lattr $LIBS"
3051     libattr=yes
3052   else
3053     if test "$attr" = "yes" ; then
3054       feature_not_found "ATTR" "Install libc6 or libattr devel"
3055     fi
3056     attr=no
3057   fi
3058 fi
3059
3060 ##########################################
3061 # iovec probe
3062 cat > $TMPC <<EOF
3063 #include <sys/types.h>
3064 #include <sys/uio.h>
3065 #include <unistd.h>
3066 int main(void) { return sizeof(struct iovec); }
3067 EOF
3068 iovec=no
3069 if compile_prog "" "" ; then
3070   iovec=yes
3071 fi
3072
3073 ##########################################
3074 # preadv probe
3075 cat > $TMPC <<EOF
3076 #include <sys/types.h>
3077 #include <sys/uio.h>
3078 #include <unistd.h>
3079 int main(void) { return preadv(0, 0, 0, 0); }
3080 EOF
3081 preadv=no
3082 if compile_prog "" "" ; then
3083   preadv=yes
3084 fi
3085
3086 ##########################################
3087 # fdt probe
3088 # fdt support is mandatory for at least some target architectures,
3089 # so insist on it if we're building those system emulators.
3090 fdt_required=no
3091 for target in $target_list; do
3092   case $target in
3093     aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu)
3094       fdt_required=yes
3095     ;;
3096   esac
3097 done
3098
3099 if test "$fdt_required" = "yes"; then
3100   if test "$fdt" = "no"; then
3101     error_exit "fdt disabled but some requested targets require it." \
3102       "You can turn off fdt only if you also disable all the system emulation" \
3103       "targets which need it (by specifying a cut down --target-list)."
3104   fi
3105   fdt=yes
3106 fi
3107
3108 if test "$fdt" != "no" ; then
3109   fdt_libs="-lfdt"
3110   # explicitly check for libfdt_env.h as it is missing in some stable installs
3111   # and test for required functions to make sure we are on a version >= 1.4.0
3112   cat > $TMPC << EOF
3113 #include <libfdt.h>
3114 #include <libfdt_env.h>
3115 int main(void) { fdt_get_property_by_offset(0, 0, 0); return 0; }
3116 EOF
3117   if compile_prog "" "$fdt_libs" ; then
3118     # system DTC is good - use it
3119     fdt=yes
3120   elif test -d ${source_path}/dtc/libfdt ; then
3121     # have submodule DTC - use it
3122     fdt=yes
3123     dtc_internal="yes"
3124     mkdir -p dtc
3125     if [ "$pwd_is_source_path" != "y" ] ; then
3126        symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3127        symlink "$source_path/dtc/scripts" "dtc/scripts"
3128     fi
3129     fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3130     fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3131   elif test "$fdt" = "yes" ; then
3132     # have neither and want - prompt for system/submodule install
3133     error_exit "DTC (libfdt) version >= 1.4.0 not present. Your options:" \
3134         "  (1) Preferred: Install the DTC (libfdt) devel package" \
3135         "  (2) Fetch the DTC submodule, using:" \
3136         "      git submodule update --init dtc"
3137   else
3138     # don't have and don't want
3139     fdt_libs=
3140     fdt=no
3141   fi
3142 fi
3143
3144 libs_softmmu="$libs_softmmu $fdt_libs"
3145
3146 ##########################################
3147 # opengl probe (for sdl2, milkymist-tmu2)
3148
3149 # GLX probe, used by milkymist-tmu2
3150 # this is temporary, code will be switched to egl mid-term.
3151 cat > $TMPC << EOF
3152 #include <X11/Xlib.h>
3153 #include <GL/gl.h>
3154 #include <GL/glx.h>
3155 int main(void) { glBegin(0); glXQueryVersion(0,0,0); return 0; }
3156 EOF
3157 if compile_prog "" "-lGL -lX11" ; then
3158   have_glx=yes
3159 else
3160   have_glx=no
3161 fi
3162
3163 if test "$opengl" != "no" ; then
3164   opengl_pkgs="gl glesv2 epoxy egl"
3165   if $pkg_config $opengl_pkgs x11 && test "$have_glx" = "yes"; then
3166     opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3167     opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
3168     opengl=yes
3169   else
3170     if test "$opengl" = "yes" ; then
3171       feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3172     fi
3173     opengl_cflags=""
3174     opengl_libs=""
3175     opengl=no
3176   fi
3177 fi
3178
3179
3180 ##########################################
3181 # archipelago probe
3182 if test "$archipelago" != "no" ; then
3183     cat > $TMPC <<EOF
3184 #include <stdio.h>
3185 #include <xseg/xseg.h>
3186 #include <xseg/protocol.h>
3187 int main(void) {
3188     xseg_initialize();
3189     return 0;
3190 }
3191 EOF
3192     archipelago_libs=-lxseg
3193     if compile_prog "" "$archipelago_libs"; then
3194         archipelago="yes"
3195         libs_tools="$archipelago_libs $libs_tools"
3196         libs_softmmu="$archipelago_libs $libs_softmmu"
3197
3198         echo "WARNING: Please check the licenses of QEMU and libxseg carefully."
3199         echo "GPLv3 versions of libxseg may not be compatible with QEMU's"
3200         echo "license and therefore prevent redistribution."
3201         echo
3202         echo "To disable Archipelago, use --disable-archipelago"
3203     else
3204       if test "$archipelago" = "yes" ; then
3205         feature_not_found "Archipelago backend support" "Install libxseg devel"
3206       fi
3207       archipelago="no"
3208     fi
3209 fi
3210
3211
3212 ##########################################
3213 # glusterfs probe
3214 if test "$glusterfs" != "no" ; then
3215   if $pkg_config --atleast-version=3 glusterfs-api; then
3216     glusterfs="yes"
3217     glusterfs_cflags=`$pkg_config --cflags glusterfs-api`
3218     glusterfs_libs=`$pkg_config --libs glusterfs-api`
3219     if $pkg_config --atleast-version=5 glusterfs-api; then
3220       glusterfs_discard="yes"
3221     fi
3222     if $pkg_config --atleast-version=6 glusterfs-api; then
3223       glusterfs_zerofill="yes"
3224     fi
3225   else
3226     if test "$glusterfs" = "yes" ; then
3227       feature_not_found "GlusterFS backend support" \
3228           "Install glusterfs-api devel >= 3"
3229     fi
3230     glusterfs="no"
3231   fi
3232 fi
3233
3234 # Check for inotify functions when we are building linux-user
3235 # emulator.  This is done because older glibc versions don't
3236 # have syscall stubs for these implemented.  In that case we
3237 # don't provide them even if kernel supports them.
3238 #
3239 inotify=no
3240 cat > $TMPC << EOF
3241 #include <sys/inotify.h>
3242
3243 int
3244 main(void)
3245 {
3246         /* try to start inotify */
3247         return inotify_init();
3248 }
3249 EOF
3250 if compile_prog "" "" ; then
3251   inotify=yes
3252 fi
3253
3254 inotify1=no
3255 cat > $TMPC << EOF
3256 #include <sys/inotify.h>
3257
3258 int
3259 main(void)
3260 {
3261     /* try to start inotify */
3262     return inotify_init1(0);
3263 }
3264 EOF
3265 if compile_prog "" "" ; then
3266   inotify1=yes
3267 fi
3268
3269 # check if utimensat and futimens are supported
3270 utimens=no
3271 cat > $TMPC << EOF
3272 #define _ATFILE_SOURCE
3273 #include <stddef.h>
3274 #include <fcntl.h>
3275 #include <sys/stat.h>
3276
3277 int main(void)
3278 {
3279     utimensat(AT_FDCWD, "foo", NULL, 0);
3280     futimens(0, NULL);
3281     return 0;
3282 }
3283 EOF
3284 if compile_prog "" "" ; then
3285   utimens=yes
3286 fi
3287
3288 # check if pipe2 is there
3289 pipe2=no
3290 cat > $TMPC << EOF
3291 #include <unistd.h>
3292 #include <fcntl.h>
3293
3294 int main(void)
3295 {
3296     int pipefd[2];
3297     return pipe2(pipefd, O_CLOEXEC);
3298 }
3299 EOF
3300 if compile_prog "" "" ; then
3301   pipe2=yes
3302 fi
3303
3304 # check if accept4 is there
3305 accept4=no
3306 cat > $TMPC << EOF
3307 #include <sys/socket.h>
3308 #include <stddef.h>
3309
3310 int main(void)
3311 {
3312     accept4(0, NULL, NULL, SOCK_CLOEXEC);
3313     return 0;
3314 }
3315 EOF
3316 if compile_prog "" "" ; then
3317   accept4=yes
3318 fi
3319
3320 # check if tee/splice is there. vmsplice was added same time.
3321 splice=no
3322 cat > $TMPC << EOF
3323 #include <unistd.h>
3324 #include <fcntl.h>
3325 #include <limits.h>
3326
3327 int main(void)
3328 {
3329     int len, fd = 0;
3330     len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3331     splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3332     return 0;
3333 }
3334 EOF
3335 if compile_prog "" "" ; then
3336   splice=yes
3337 fi
3338
3339 ##########################################
3340 # libnuma probe
3341
3342 if test "$numa" != "no" ; then
3343   cat > $TMPC << EOF
3344 #include <numa.h>
3345 int main(void) { return numa_available(); }
3346 EOF
3347
3348   if compile_prog "" "-lnuma" ; then
3349     numa=yes
3350     libs_softmmu="-lnuma $libs_softmmu"
3351   else
3352     if test "$numa" = "yes" ; then
3353       feature_not_found "numa" "install numactl devel"
3354     fi
3355     numa=no
3356   fi
3357 fi
3358
3359 ##########################################
3360 # tcmalloc probe
3361
3362 if test "$tcmalloc" = "yes" ; then
3363   cat > $TMPC << EOF
3364 #include <stdlib.h>
3365 int main(void) { malloc(1); return 0; }
3366 EOF
3367
3368   if compile_prog "" "-ltcmalloc" ; then
3369     LIBS="-ltcmalloc $LIBS"
3370   else
3371     feature_not_found "tcmalloc" "install gperftools devel"
3372   fi
3373 fi
3374
3375 ##########################################
3376 # signalfd probe
3377 signalfd="no"
3378 cat > $TMPC << EOF
3379 #include <unistd.h>
3380 #include <sys/syscall.h>
3381 #include <signal.h>
3382 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3383 EOF
3384
3385 if compile_prog "" "" ; then
3386   signalfd=yes
3387 fi
3388
3389 # check if eventfd is supported
3390 eventfd=no
3391 cat > $TMPC << EOF
3392 #include <sys/eventfd.h>
3393
3394 int main(void)
3395 {
3396     return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3397 }
3398 EOF
3399 if compile_prog "" "" ; then
3400   eventfd=yes
3401 fi
3402
3403 # check for fallocate
3404 fallocate=no
3405 cat > $TMPC << EOF
3406 #include <fcntl.h>
3407
3408 int main(void)
3409 {
3410     fallocate(0, 0, 0, 0);
3411     return 0;
3412 }
3413 EOF
3414 if compile_prog "" "" ; then
3415   fallocate=yes
3416 fi
3417
3418 # check for fallocate hole punching
3419 fallocate_punch_hole=no
3420 cat > $TMPC << EOF
3421 #include <fcntl.h>
3422 #include <linux/falloc.h>
3423
3424 int main(void)
3425 {
3426     fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3427     return 0;
3428 }
3429 EOF
3430 if compile_prog "" "" ; then
3431   fallocate_punch_hole=yes
3432 fi
3433
3434 # check that fallocate supports range zeroing inside the file
3435 fallocate_zero_range=no
3436 cat > $TMPC << EOF
3437 #include <fcntl.h>
3438 #include <linux/falloc.h>
3439
3440 int main(void)
3441 {
3442     fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3443     return 0;
3444 }
3445 EOF
3446 if compile_prog "" "" ; then
3447   fallocate_zero_range=yes
3448 fi
3449
3450 # check for posix_fallocate
3451 posix_fallocate=no
3452 cat > $TMPC << EOF
3453 #include <fcntl.h>
3454
3455 int main(void)
3456 {
3457     posix_fallocate(0, 0, 0);
3458     return 0;
3459 }
3460 EOF
3461 if compile_prog "" "" ; then
3462     posix_fallocate=yes
3463 fi
3464
3465 # check for sync_file_range
3466 sync_file_range=no
3467 cat > $TMPC << EOF
3468 #include <fcntl.h>
3469
3470 int main(void)
3471 {
3472     sync_file_range(0, 0, 0, 0);
3473     return 0;
3474 }
3475 EOF
3476 if compile_prog "" "" ; then
3477   sync_file_range=yes
3478 fi
3479
3480 # check for linux/fiemap.h and FS_IOC_FIEMAP
3481 fiemap=no
3482 cat > $TMPC << EOF
3483 #include <sys/ioctl.h>
3484 #include <linux/fs.h>
3485 #include <linux/fiemap.h>
3486
3487 int main(void)
3488 {
3489     ioctl(0, FS_IOC_FIEMAP, 0);
3490     return 0;
3491 }
3492 EOF
3493 if compile_prog "" "" ; then
3494   fiemap=yes
3495 fi
3496
3497 # check for dup3
3498 dup3=no
3499 cat > $TMPC << EOF
3500 #include <unistd.h>
3501
3502 int main(void)
3503 {
3504     dup3(0, 0, 0);
3505     return 0;
3506 }
3507 EOF
3508 if compile_prog "" "" ; then
3509   dup3=yes
3510 fi
3511
3512 # check for ppoll support
3513 ppoll=no
3514 cat > $TMPC << EOF
3515 #include <poll.h>
3516
3517 int main(void)
3518 {
3519     struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3520     ppoll(&pfd, 1, 0, 0);
3521     return 0;
3522 }
3523 EOF
3524 if compile_prog "" "" ; then
3525   ppoll=yes
3526 fi
3527
3528 # check for prctl(PR_SET_TIMERSLACK , ... ) support
3529 prctl_pr_set_timerslack=no
3530 cat > $TMPC << EOF
3531 #include <sys/prctl.h>
3532
3533 int main(void)
3534 {
3535     prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3536     return 0;
3537 }
3538 EOF
3539 if compile_prog "" "" ; then
3540   prctl_pr_set_timerslack=yes
3541 fi
3542
3543 # check for epoll support
3544 epoll=no
3545 cat > $TMPC << EOF
3546 #include <sys/epoll.h>
3547
3548 int main(void)
3549 {
3550     epoll_create(0);
3551     return 0;
3552 }
3553 EOF
3554 if compile_prog "" "" ; then
3555   epoll=yes
3556 fi
3557
3558 # epoll_create1 and epoll_pwait are later additions
3559 # so we must check separately for their presence
3560 epoll_create1=no
3561 cat > $TMPC << EOF
3562 #include <sys/epoll.h>
3563
3564 int main(void)
3565 {
3566     /* Note that we use epoll_create1 as a value, not as
3567      * a function being called. This is necessary so that on
3568      * old SPARC glibc versions where the function was present in
3569      * the library but not declared in the header file we will
3570      * fail the configure check. (Otherwise we will get a compiler
3571      * warning but not an error, and will proceed to fail the
3572      * qemu compile where we compile with -Werror.)
3573      */
3574     return (int)(uintptr_t)&epoll_create1;
3575 }
3576 EOF
3577 if compile_prog "" "" ; then
3578   epoll_create1=yes
3579 fi
3580
3581 epoll_pwait=no
3582 cat > $TMPC << EOF
3583 #include <sys/epoll.h>
3584
3585 int main(void)
3586 {
3587     epoll_pwait(0, 0, 0, 0, 0);
3588     return 0;
3589 }
3590 EOF
3591 if compile_prog "" "" ; then
3592   epoll_pwait=yes
3593 fi
3594
3595 # check for sendfile support
3596 sendfile=no
3597 cat > $TMPC << EOF
3598 #include <sys/sendfile.h>
3599
3600 int main(void)
3601 {
3602     return sendfile(0, 0, 0, 0);
3603 }
3604 EOF
3605 if compile_prog "" "" ; then
3606   sendfile=yes
3607 fi
3608
3609 # check for timerfd support (glibc 2.8 and newer)
3610 timerfd=no
3611 cat > $TMPC << EOF
3612 #include <sys/timerfd.h>
3613
3614 int main(void)
3615 {
3616     return(timerfd_create(CLOCK_REALTIME, 0));
3617 }
3618 EOF
3619 if compile_prog "" "" ; then
3620   timerfd=yes
3621 fi
3622
3623 # check for setns and unshare support
3624 setns=no
3625 cat > $TMPC << EOF
3626 #include <sched.h>
3627
3628 int main(void)
3629 {
3630     int ret;
3631     ret = setns(0, 0);
3632     ret = unshare(0);
3633     return ret;
3634 }
3635 EOF
3636 if compile_prog "" "" ; then
3637   setns=yes
3638 fi
3639
3640 # Check if tools are available to build documentation.
3641 if test "$docs" != "no" ; then
3642   if has makeinfo && has pod2man; then
3643     docs=yes
3644   else
3645     if test "$docs" = "yes" ; then
3646       feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
3647     fi
3648     docs=no
3649   fi
3650 fi
3651
3652 # Search for bswap_32 function
3653 byteswap_h=no
3654 cat > $TMPC << EOF
3655 #include <byteswap.h>
3656 int main(void) { return bswap_32(0); }
3657 EOF
3658 if compile_prog "" "" ; then
3659   byteswap_h=yes
3660 fi
3661
3662 # Search for bswap32 function
3663 bswap_h=no
3664 cat > $TMPC << EOF
3665 #include <sys/endian.h>
3666 #include <sys/types.h>
3667 #include <machine/bswap.h>
3668 int main(void) { return bswap32(0); }
3669 EOF
3670 if compile_prog "" "" ; then
3671   bswap_h=yes
3672 fi
3673
3674 ##########################################
3675 # Do we have libiscsi >= 1.9.0
3676 if test "$libiscsi" != "no" ; then
3677   if $pkg_config --atleast-version=1.9.0 libiscsi; then
3678     libiscsi="yes"
3679     libiscsi_cflags=$($pkg_config --cflags libiscsi)
3680     libiscsi_libs=$($pkg_config --libs libiscsi)
3681   else
3682     if test "$libiscsi" = "yes" ; then
3683       feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
3684     fi
3685     libiscsi="no"
3686   fi
3687 fi
3688
3689 ##########################################
3690 # Do we need libm
3691 cat > $TMPC << EOF
3692 #include <math.h>
3693 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
3694 EOF
3695 if compile_prog "" "" ; then
3696   :
3697 elif compile_prog "" "-lm" ; then
3698   LIBS="-lm $LIBS"
3699   libs_qga="-lm $libs_qga"
3700 else
3701   error_exit "libm check failed"
3702 fi
3703
3704 ##########################################
3705 # Do we need librt
3706 # uClibc provides 2 versions of clock_gettime(), one with realtime
3707 # support and one without. This means that the clock_gettime() don't
3708 # need -lrt. We still need it for timer_create() so we check for this
3709 # function in addition.
3710 cat > $TMPC <<EOF
3711 #include <signal.h>
3712 #include <time.h>
3713 int main(void) {
3714   timer_create(CLOCK_REALTIME, NULL, NULL);
3715   return clock_gettime(CLOCK_REALTIME, NULL);
3716 }
3717 EOF
3718
3719 if compile_prog "" "" ; then
3720   :
3721 # we need pthread for static linking. use previous pthread test result
3722 elif compile_prog "" "$pthread_lib -lrt" ; then
3723   LIBS="$LIBS -lrt"
3724   libs_qga="$libs_qga -lrt"
3725 fi
3726
3727 if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
3728         "$aix" != "yes" -a "$haiku" != "yes" ; then
3729     libs_softmmu="-lutil $libs_softmmu"
3730 fi
3731
3732 ##########################################
3733 # spice probe
3734 if test "$spice" != "no" ; then
3735   cat > $TMPC << EOF
3736 #include <spice.h>
3737 int main(void) { spice_server_new(); return 0; }
3738 EOF
3739   spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
3740   spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
3741   if $pkg_config --atleast-version=0.12.0 spice-server && \
3742      $pkg_config --atleast-version=0.12.3 spice-protocol && \
3743      compile_prog "$spice_cflags" "$spice_libs" ; then
3744     spice="yes"
3745     libs_softmmu="$libs_softmmu $spice_libs"
3746     QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
3747     spice_protocol_version=$($pkg_config --modversion spice-protocol)
3748     spice_server_version=$($pkg_config --modversion spice-server)
3749   else
3750     if test "$spice" = "yes" ; then
3751       feature_not_found "spice" \
3752           "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
3753     fi
3754     spice="no"
3755   fi
3756 fi
3757
3758 # check for libcacard for smartcard support
3759 smartcard_cflags=""
3760 # TODO - what's the minimal nss version we support?
3761 if test "$smartcard_nss" != "no"; then
3762   cat > $TMPC << EOF
3763 #include <pk11pub.h>
3764 int main(void) { PK11_FreeSlot(0); return 0; }
3765 EOF
3766     # FIXME: do not include $glib_* in here
3767     nss_libs="$($pkg_config --libs nss 2>/dev/null) $glib_libs"
3768     nss_cflags="$($pkg_config --cflags nss 2>/dev/null) $glib_cflags"
3769     test_cflags="$nss_cflags"
3770     # The header files in nss < 3.13.3 have a bug which causes them to
3771     # emit a warning. If we're going to compile QEMU with -Werror, then
3772     # test that the headers don't have this bug. Otherwise we would pass
3773     # the configure test but fail to compile QEMU later.
3774     if test "$werror" = "yes"; then
3775         test_cflags="-Werror $test_cflags"
3776     fi
3777     if test -n "$libtool" &&
3778        $pkg_config --atleast-version=3.12.8 nss && \
3779       compile_prog "$test_cflags" "$nss_libs"; then
3780         smartcard_nss="yes"
3781     else
3782         if test "$smartcard_nss" = "yes"; then
3783             feature_not_found "nss" "Install nss devel >= 3.12.8"
3784         fi
3785         smartcard_nss="no"
3786     fi
3787 fi
3788
3789 # check for libusb
3790 if test "$libusb" != "no" ; then
3791     if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
3792         libusb="yes"
3793         libusb_cflags=$($pkg_config --cflags libusb-1.0)
3794         libusb_libs=$($pkg_config --libs libusb-1.0)
3795         QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
3796         libs_softmmu="$libs_softmmu $libusb_libs"
3797     else
3798         if test "$libusb" = "yes"; then
3799             feature_not_found "libusb" "Install libusb devel >= 1.0.13"
3800         fi
3801         libusb="no"
3802     fi
3803 fi
3804
3805 # check for usbredirparser for usb network redirection support
3806 if test "$usb_redir" != "no" ; then
3807     if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
3808         usb_redir="yes"
3809         usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
3810         usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
3811         QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
3812         libs_softmmu="$libs_softmmu $usb_redir_libs"
3813     else
3814         if test "$usb_redir" = "yes"; then
3815             feature_not_found "usb-redir" "Install usbredir devel"
3816         fi
3817         usb_redir="no"
3818     fi
3819 fi
3820
3821 ##########################################
3822 # check if we have VSS SDK headers for win
3823
3824 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
3825   case "$vss_win32_sdk" in
3826     "")   vss_win32_include="-I$source_path" ;;
3827     *\ *) # The SDK is installed in "Program Files" by default, but we cannot
3828           # handle path with spaces. So we symlink the headers into ".sdk/vss".
3829           vss_win32_include="-I$source_path/.sdk/vss"
3830           symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
3831           ;;
3832     *)    vss_win32_include="-I$vss_win32_sdk"
3833   esac
3834   cat > $TMPC << EOF
3835 #define __MIDL_user_allocate_free_DEFINED__
3836 #include <inc/win2003/vss.h>
3837 int main(void) { return VSS_CTX_BACKUP; }
3838 EOF
3839   if compile_prog "$vss_win32_include" "" ; then
3840     guest_agent_with_vss="yes"
3841     QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
3842     libs_qga="-lole32 -loleaut32 -lshlwapi -luuid -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
3843   else
3844     if test "$vss_win32_sdk" != "" ; then
3845       echo "ERROR: Please download and install Microsoft VSS SDK:"
3846       echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
3847       echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
3848       echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
3849       echo "ERROR: The headers are extracted in the directory \`inc'."
3850       feature_not_found "VSS support"
3851     fi
3852     guest_agent_with_vss="no"
3853   fi
3854 fi
3855
3856 ##########################################
3857 # lookup Windows platform SDK (if not specified)
3858 # The SDK is needed only to build .tlb (type library) file of guest agent
3859 # VSS provider from the source. It is usually unnecessary because the
3860 # pre-compiled .tlb file is included.
3861
3862 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
3863   if test -z "$win_sdk"; then
3864     programfiles="$PROGRAMFILES"
3865     test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
3866     if test -n "$programfiles"; then
3867       win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
3868     else
3869       feature_not_found "Windows SDK"
3870     fi
3871   elif test "$win_sdk" = "no"; then
3872     win_sdk=""
3873   fi
3874 fi
3875
3876 ##########################################
3877 # Guest agent Window MSI  package
3878
3879 if test "$guest_agent" != yes; then
3880   if test "$guest_agent_msi" = yes; then
3881     error_exit "MSI guest agent package requires guest agent enabled"
3882   fi
3883   guest_agent_msi=no
3884 elif test "$mingw32" != "yes"; then
3885   if test "$guest_agent_msi" = "yes"; then
3886     error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
3887   fi
3888   guest_agent_msi=no
3889 elif ! has wixl; then
3890   if test "$guest_agent_msi" = "yes"; then
3891     error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
3892   fi
3893   guest_agent_msi=no
3894 fi
3895
3896 if test "$guest_agent_msi" != "no"; then
3897   if test "$guest_agent_with_vss" = "yes"; then
3898     QEMU_GA_MSI_WITH_VSS="-D InstallVss"
3899   fi
3900
3901   if test "$QEMU_GA_MANUFACTURER" = ""; then
3902     QEMU_GA_MANUFACTURER=QEMU
3903   fi
3904
3905   if test "$QEMU_GA_DISTRO" = ""; then
3906     QEMU_GA_DISTRO=Linux
3907   fi
3908
3909   if test "$QEMU_GA_VERSION" = ""; then
3910       QEMU_GA_VERSION=`cat $source_path/VERSION`
3911   fi
3912
3913   QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=`$pkg_config --variable=prefix glib-2.0`/bin"
3914   
3915   case "$cpu" in
3916   x86_64)
3917     QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
3918     ;;
3919   i386)
3920     QEMU_GA_MSI_ARCH="-D Arch=32"
3921     ;;
3922   *)
3923     error_exit "CPU $cpu not supported for building installation package"
3924     ;;
3925   esac
3926 fi
3927
3928 ##########################################
3929 # check if we have fdatasync
3930
3931 fdatasync=no
3932 cat > $TMPC << EOF
3933 #include <unistd.h>
3934 int main(void) {
3935 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
3936 return fdatasync(0);
3937 #else
3938 #error Not supported
3939 #endif
3940 }
3941 EOF
3942 if compile_prog "" "" ; then
3943     fdatasync=yes
3944 fi
3945
3946 ##########################################
3947 # check if we have madvise
3948
3949 madvise=no
3950 cat > $TMPC << EOF
3951 #include <sys/types.h>
3952 #include <sys/mman.h>
3953 #include <stddef.h>
3954 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
3955 EOF
3956 if compile_prog "" "" ; then
3957     madvise=yes
3958 fi
3959
3960 ##########################################
3961 # check if we have posix_madvise
3962
3963 posix_madvise=no
3964 cat > $TMPC << EOF
3965 #include <sys/mman.h>
3966 #include <stddef.h>
3967 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
3968 EOF
3969 if compile_prog "" "" ; then
3970     posix_madvise=yes
3971 fi
3972
3973 ##########################################
3974 # check if we have usable SIGEV_THREAD_ID
3975
3976 sigev_thread_id=no
3977 cat > $TMPC << EOF
3978 #include <signal.h>
3979 int main(void) {
3980   struct sigevent ev;
3981   ev.sigev_notify = SIGEV_THREAD_ID;
3982   ev._sigev_un._tid = 0;
3983   asm volatile("" : : "g"(&ev));
3984   return 0;
3985 }
3986 EOF
3987 if compile_prog "" "" ; then
3988     sigev_thread_id=yes
3989 fi
3990
3991 ##########################################
3992 # check if trace backend exists
3993
3994 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends  > /dev/null 2> /dev/null
3995 if test "$?" -ne 0 ; then
3996   error_exit "invalid trace backends" \
3997       "Please choose supported trace backends."
3998 fi
3999
4000 ##########################################
4001 # For 'ust' backend, test if ust headers are present
4002 if have_backend "ust"; then
4003   cat > $TMPC << EOF
4004 #include <lttng/tracepoint.h>
4005 int main(void) { return 0; }
4006 EOF
4007   if compile_prog "" "" ; then
4008     if $pkg_config lttng-ust --exists; then
4009       lttng_ust_libs=`$pkg_config --libs lttng-ust`
4010     else
4011       lttng_ust_libs="-llttng-ust"
4012     fi
4013     if $pkg_config liburcu-bp --exists; then
4014       urcu_bp_libs=`$pkg_config --libs liburcu-bp`
4015     else
4016       urcu_bp_libs="-lurcu-bp"
4017     fi
4018
4019     LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4020     libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4021   else
4022     error_exit "Trace backend 'ust' missing lttng-ust header files"
4023   fi
4024 fi
4025
4026 ##########################################
4027 # For 'dtrace' backend, test if 'dtrace' command is present
4028 if have_backend "dtrace"; then
4029   if ! has 'dtrace' ; then
4030     error_exit "dtrace command is not found in PATH $PATH"
4031   fi
4032   trace_backend_stap="no"
4033   if has 'stap' ; then
4034     trace_backend_stap="yes"
4035   fi
4036 fi
4037
4038 ##########################################
4039 # check and set a backend for coroutine
4040
4041 # We prefer ucontext, but it's not always possible. The fallback
4042 # is sigcontext. gthread is not selectable except explicitly, because
4043 # it is not functional enough to run QEMU proper. (It is occasionally
4044 # useful for debugging purposes.)  On Windows the only valid backend
4045 # is the Windows-specific one.
4046
4047 ucontext_works=no
4048 if test "$darwin" != "yes"; then
4049   cat > $TMPC << EOF
4050 #include <ucontext.h>
4051 #ifdef __stub_makecontext
4052 #error Ignoring glibc stub makecontext which will always fail
4053 #endif
4054 int main(void) { makecontext(0, 0, 0); return 0; }
4055 EOF
4056   if compile_prog "" "" ; then
4057     ucontext_works=yes
4058   fi
4059 fi
4060
4061 if test "$coroutine" = ""; then
4062   if test "$mingw32" = "yes"; then
4063     coroutine=win32
4064   elif test "$ucontext_works" = "yes"; then
4065     coroutine=ucontext
4066   else
4067     coroutine=sigaltstack
4068   fi
4069 else
4070   case $coroutine in
4071   windows)
4072     if test "$mingw32" != "yes"; then
4073       error_exit "'windows' coroutine backend only valid for Windows"
4074     fi
4075     # Unfortunately the user visible backend name doesn't match the
4076     # coroutine-*.c filename for this case, so we have to adjust it here.
4077     coroutine=win32
4078     ;;
4079   ucontext)
4080     if test "$ucontext_works" != "yes"; then
4081       feature_not_found "ucontext"
4082     fi
4083     ;;
4084   gthread|sigaltstack)
4085     if test "$mingw32" = "yes"; then
4086       error_exit "only the 'windows' coroutine backend is valid for Windows"
4087     fi
4088     ;;
4089   *)
4090     error_exit "unknown coroutine backend $coroutine"
4091     ;;
4092   esac
4093 fi
4094
4095 if test "$coroutine_pool" = ""; then
4096   if test "$coroutine" = "gthread"; then
4097     coroutine_pool=no
4098   else
4099     coroutine_pool=yes
4100   fi
4101 fi
4102 if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
4103   error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
4104 fi
4105
4106 ##########################################
4107 # check if we have open_by_handle_at
4108
4109 open_by_handle_at=no
4110 cat > $TMPC << EOF
4111 #include <fcntl.h>
4112 #if !defined(AT_EMPTY_PATH)
4113 # error missing definition
4114 #else
4115 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4116 #endif
4117 EOF
4118 if compile_prog "" "" ; then
4119     open_by_handle_at=yes
4120 fi
4121
4122 ########################################
4123 # check if we have linux/magic.h
4124
4125 linux_magic_h=no
4126 cat > $TMPC << EOF
4127 #include <linux/magic.h>
4128 int main(void) {
4129   return 0;
4130 }
4131 EOF
4132 if compile_prog "" "" ; then
4133     linux_magic_h=yes
4134 fi
4135
4136 ########################################
4137 # check whether we can disable warning option with a pragma (this is needed
4138 # to silence warnings in the headers of some versions of external libraries).
4139 # This test has to be compiled with -Werror as otherwise an unknown pragma is
4140 # only a warning.
4141 #
4142 # If we can't selectively disable warning in the code, disable -Werror so that
4143 # the build doesn't fail anyway.
4144
4145 pragma_disable_unused_but_set=no
4146 cat > $TMPC << EOF
4147 #pragma GCC diagnostic push
4148 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4149 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
4150 #pragma GCC diagnostic pop
4151
4152 int main(void) {
4153     return 0;
4154 }
4155 EOF
4156 if compile_prog "-Werror" "" ; then
4157     pragma_diagnostic_available=yes
4158 else
4159     werror=no
4160 fi
4161
4162 ########################################
4163 # check if we have valgrind/valgrind.h
4164
4165 valgrind_h=no
4166 cat > $TMPC << EOF
4167 #include <valgrind/valgrind.h>
4168 int main(void) {
4169   return 0;
4170 }
4171 EOF
4172 if compile_prog "" "" ; then
4173     valgrind_h=yes
4174 fi
4175
4176 ########################################
4177 # check if environ is declared
4178
4179 has_environ=no
4180 cat > $TMPC << EOF
4181 #include <unistd.h>
4182 int main(void) {
4183     environ = 0;
4184     return 0;
4185 }
4186 EOF
4187 if compile_prog "" "" ; then
4188     has_environ=yes
4189 fi
4190
4191 ########################################
4192 # check if cpuid.h is usable.
4193
4194 cpuid_h=no
4195 cat > $TMPC << EOF
4196 #include <cpuid.h>
4197 int main(void) {
4198     unsigned a, b, c, d;
4199     int max = __get_cpuid_max(0, 0);
4200
4201     if (max >= 1) {
4202         __cpuid(1, a, b, c, d);
4203     }
4204
4205     if (max >= 7) {
4206         __cpuid_count(7, 0, a, b, c, d);
4207     }
4208
4209     return 0;
4210 }
4211 EOF
4212 if compile_prog "" "" ; then
4213     cpuid_h=yes
4214 fi
4215
4216 ########################################
4217 # check if __[u]int128_t is usable.
4218
4219 int128=no
4220 cat > $TMPC << EOF
4221 #if defined(__clang_major__) && defined(__clang_minor__)
4222 # if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4223 #  error __int128_t does not work in CLANG before 3.2
4224 # endif
4225 #endif
4226 __int128_t a;
4227 __uint128_t b;
4228 int main (void) {
4229   a = a + b;
4230   b = a * b;
4231   a = a * a;
4232   return 0;
4233 }
4234 EOF
4235 if compile_prog "" "" ; then
4236     int128=yes
4237 fi
4238
4239 ########################################
4240 # check if getauxval is available.
4241
4242 getauxval=no
4243 cat > $TMPC << EOF
4244 #include <sys/auxv.h>
4245 int main(void) {
4246   return getauxval(AT_HWCAP) == 0;
4247 }
4248 EOF
4249 if compile_prog "" "" ; then
4250     getauxval=yes
4251 fi
4252
4253 ########################################
4254 # check if ccache is interfering with
4255 # semantic analysis of macros
4256
4257 ccache_cpp2=no
4258 cat > $TMPC << EOF
4259 static const int Z = 1;
4260 #define fn() ({ Z; })
4261 #define TAUT(X) ((X) == Z)
4262 #define PAREN(X, Y) (X == Y)
4263 #define ID(X) (X)
4264 int main(int argc, char *argv[])
4265 {
4266     int x = 0, y = 0;
4267     x = ID(x);
4268     x = fn();
4269     fn();
4270     if (PAREN(x, y)) return 0;
4271     if (TAUT(Z)) return 0;
4272     return 0;
4273 }
4274 EOF
4275
4276 if ! compile_object "-Werror"; then
4277     ccache_cpp2=yes
4278 fi
4279
4280 ##########################################
4281 # End of CC checks
4282 # After here, no more $cc or $ld runs
4283
4284 if test "$gcov" = "yes" ; then
4285   CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4286   LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
4287 elif test "$debug" = "no" ; then
4288   CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
4289 fi
4290
4291 ##########################################
4292 # Do we have libnfs
4293 if test "$libnfs" != "no" ; then
4294   if $pkg_config --atleast-version=1.9.3 libnfs; then
4295     libnfs="yes"
4296     libnfs_libs=$($pkg_config --libs libnfs)
4297     LIBS="$LIBS $libnfs_libs"
4298   else
4299     if test "$libnfs" = "yes" ; then
4300       feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
4301     fi
4302     libnfs="no"
4303   fi
4304 fi
4305
4306 # Disable zero malloc errors for official releases unless explicitly told to
4307 # enable/disable
4308 if test -z "$zero_malloc" ; then
4309     if test "$z_version" = "50" ; then
4310         zero_malloc="no"
4311     else
4312         zero_malloc="yes"
4313     fi
4314 fi
4315
4316 # Now we've finished running tests it's OK to add -Werror to the compiler flags
4317 if test "$werror" = "yes"; then
4318     QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
4319 fi
4320
4321 if test "$solaris" = "no" ; then
4322     if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
4323         LDFLAGS="-Wl,--warn-common $LDFLAGS"
4324     fi
4325 fi
4326
4327 # test if pod2man has --utf8 option
4328 if pod2man --help | grep -q utf8; then
4329     POD2MAN="pod2man --utf8"
4330 else
4331     POD2MAN="pod2man"
4332 fi
4333
4334 # Use ASLR, no-SEH and DEP if available
4335 if test "$mingw32" = "yes" ; then
4336     for flag in --dynamicbase --no-seh --nxcompat; do
4337         if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
4338             LDFLAGS="-Wl,$flag $LDFLAGS"
4339         fi
4340     done
4341 fi
4342
4343 qemu_confdir=$sysconfdir$confsuffix
4344 qemu_moddir=$libdir$confsuffix
4345 qemu_datadir=$datadir$confsuffix
4346 qemu_localedir="$datadir/locale"
4347
4348 tools=""
4349 if test "$want_tools" = "yes" ; then
4350   tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4351   if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
4352     tools="qemu-nbd\$(EXESUF) $tools"
4353   fi
4354 fi
4355 if test "$softmmu" = yes ; then
4356   if test "$virtfs" != no ; then
4357     if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
4358       virtfs=yes
4359       tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
4360     else
4361       if test "$virtfs" = yes; then
4362         error_exit "VirtFS is supported only on Linux and requires libcap-devel and libattr-devel"
4363       fi
4364       virtfs=no
4365     fi
4366   fi
4367 fi
4368 if [ "$guest_agent" != "no" ]; then
4369   if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
4370       tools="qemu-ga\$(EXESUF) $tools"
4371       if [ "$mingw32" = "yes" -a "$guest_agent_with_vss" = "yes" ]; then
4372         tools="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb $tools"
4373       fi
4374       guest_agent=yes
4375   elif [ "$guest_agent" != yes ]; then
4376       guest_agent=no
4377   else
4378       error_exit "Guest agent is not supported on this platform"
4379   fi
4380 fi
4381
4382 # Mac OS X ships with a broken assembler
4383 roms=
4384 if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
4385         "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
4386         "$softmmu" = yes ; then
4387   roms="optionrom"
4388 fi
4389 if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
4390   roms="$roms spapr-rtas"
4391 fi
4392
4393 if test "$cpu" = "s390x" ; then
4394   roms="$roms s390-ccw"
4395 fi
4396
4397 # Probe for the need for relocating the user-only binary.
4398 if test "$pie" = "no" ; then
4399   textseg_addr=
4400   case "$cpu" in
4401     arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
4402       # ??? Rationale for choosing this address
4403       textseg_addr=0x60000000
4404       ;;
4405     mips)
4406       # A 256M aligned address, high in the address space, with enough
4407       # room for the code_gen_buffer above it before the stack.
4408       textseg_addr=0x60000000
4409       ;;
4410   esac
4411   if [ -n "$textseg_addr" ]; then
4412     cat > $TMPC <<EOF
4413     int main(void) { return 0; }
4414 EOF
4415     textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
4416     if ! compile_prog "" "$textseg_ldflags"; then
4417       # In case ld does not support -Ttext-segment, edit the default linker
4418       # script via sed to set the .text start addr.  This is needed on FreeBSD
4419       # at least.
4420       $ld --verbose | sed \
4421         -e '1,/==================================================/d' \
4422         -e '/==================================================/,$d' \
4423         -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
4424         -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
4425       textseg_ldflags="-Wl,-T../config-host.ld"
4426     fi
4427   fi
4428 fi
4429
4430 # prepend pixman and ftd flags after all config tests are done
4431 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
4432 libs_softmmu="$pixman_libs $libs_softmmu"
4433
4434 echo "Install prefix    $prefix"
4435 echo "BIOS directory    `eval echo $qemu_datadir`"
4436 echo "binary directory  `eval echo $bindir`"
4437 echo "library directory `eval echo $libdir`"
4438 echo "module directory  `eval echo $qemu_moddir`"
4439 echo "libexec directory `eval echo $libexecdir`"
4440 echo "include directory `eval echo $includedir`"
4441 echo "config directory  `eval echo $sysconfdir`"
4442 if test "$mingw32" = "no" ; then
4443 echo "local state directory   `eval echo $local_statedir`"
4444 echo "Manual directory  `eval echo $mandir`"
4445 echo "ELF interp prefix $interp_prefix"
4446 else
4447 echo "local state directory   queried at runtime"
4448 echo "Windows SDK       $win_sdk"
4449 fi
4450 echo "Source path       $source_path"
4451 echo "C compiler        $cc"
4452 echo "Host C compiler   $host_cc"
4453 echo "C++ compiler      $cxx"
4454 echo "Objective-C compiler $objcc"
4455 echo "ARFLAGS           $ARFLAGS"
4456 echo "CFLAGS            $CFLAGS"
4457 echo "QEMU_CFLAGS       $QEMU_CFLAGS"
4458 echo "LDFLAGS           $LDFLAGS"
4459 echo "make              $make"
4460 echo "install           $install"
4461 echo "python            $python"
4462 if test "$slirp" = "yes" ; then
4463     echo "smbd              $smbd"
4464 fi
4465 echo "module support    $modules"
4466 echo "host CPU          $cpu"
4467 echo "host big endian   $bigendian"
4468 echo "target list       $target_list"
4469 echo "tcg debug enabled $debug_tcg"
4470 echo "gprof enabled     $gprof"
4471 echo "sparse enabled    $sparse"
4472 echo "strip binaries    $strip_opt"
4473 echo "profiler          $profiler"
4474 echo "static build      $static"
4475 if test "$darwin" = "yes" ; then
4476     echo "Cocoa support     $cocoa"
4477 fi
4478 echo "pixman            $pixman"
4479 echo "SDL support       $sdl"
4480 echo "GTK support       $gtk"
4481 echo "GNUTLS support    $gnutls"
4482 echo "GNUTLS hash       $gnutls_hash"
4483 echo "GNUTLS gcrypt     $gnutls_gcrypt"
4484 echo "GNUTLS nettle     $gnutls_nettle"
4485 echo "VTE support       $vte"
4486 echo "curses support    $curses"
4487 echo "curl support      $curl"
4488 echo "mingw32 support   $mingw32"
4489 echo "Audio drivers     $audio_drv_list"
4490 echo "Block whitelist (rw) $block_drv_rw_whitelist"
4491 echo "Block whitelist (ro) $block_drv_ro_whitelist"
4492 echo "VirtFS support    $virtfs"
4493 echo "VNC support       $vnc"
4494 if test "$vnc" = "yes" ; then
4495     echo "VNC TLS support   $vnc_tls"
4496     echo "VNC SASL support  $vnc_sasl"
4497     echo "VNC JPEG support  $vnc_jpeg"
4498     echo "VNC PNG support   $vnc_png"
4499     echo "VNC WS support    $vnc_ws"
4500 fi
4501 if test -n "$sparc_cpu"; then
4502     echo "Target Sparc Arch $sparc_cpu"
4503 fi
4504 echo "xen support       $xen"
4505 if test "$xen" = "yes" ; then
4506   echo "xen ctrl version  $xen_ctrl_version"
4507 fi
4508 echo "brlapi support    $brlapi"
4509 echo "bluez  support    $bluez"
4510 echo "Documentation     $docs"
4511 echo "GUEST_BASE        $guest_base"
4512 echo "PIE               $pie"
4513 echo "vde support       $vde"
4514 echo "netmap support    $netmap"
4515 echo "Linux AIO support $linux_aio"
4516 echo "ATTR/XATTR support $attr"
4517 echo "Install blobs     $blobs"
4518 echo "KVM support       $kvm"
4519 echo "RDMA support      $rdma"
4520 echo "TCG interpreter   $tcg_interpreter"
4521 echo "fdt support       $fdt"
4522 echo "preadv support    $preadv"
4523 echo "fdatasync         $fdatasync"
4524 echo "madvise           $madvise"
4525 echo "posix_madvise     $posix_madvise"
4526 echo "sigev_thread_id   $sigev_thread_id"
4527 echo "uuid support      $uuid"
4528 echo "libcap-ng support $cap_ng"
4529 echo "vhost-net support $vhost_net"
4530 echo "vhost-scsi support $vhost_scsi"
4531 echo "Trace backends    $trace_backends"
4532 if test "$trace_backend" = "simple"; then
4533 echo "Trace output file $trace_file-<pid>"
4534 fi
4535 if test "$spice" = "yes"; then
4536 echo "spice support     $spice ($spice_protocol_version/$spice_server_version)"
4537 else
4538 echo "spice support     $spice"
4539 fi
4540 echo "rbd support       $rbd"
4541 echo "xfsctl support    $xfs"
4542 echo "nss used          $smartcard_nss"
4543 echo "libusb            $libusb"
4544 echo "usb net redir     $usb_redir"
4545 echo "OpenGL support    $opengl"
4546 echo "libiscsi support  $libiscsi"
4547 echo "libnfs support    $libnfs"
4548 echo "build guest agent $guest_agent"
4549 echo "QGA VSS support   $guest_agent_with_vss"
4550 echo "seccomp support   $seccomp"
4551 echo "coroutine backend $coroutine"
4552 echo "coroutine pool    $coroutine_pool"
4553 echo "GlusterFS support $glusterfs"
4554 echo "Archipelago support $archipelago"
4555 echo "gcov              $gcov_tool"
4556 echo "gcov enabled      $gcov"
4557 echo "TPM support       $tpm"
4558 echo "libssh2 support   $libssh2"
4559 echo "TPM passthrough   $tpm_passthrough"
4560 echo "QOM debugging     $qom_cast_debug"
4561 echo "vhdx              $vhdx"
4562 echo "lzo support       $lzo"
4563 echo "snappy support    $snappy"
4564 echo "bzip2 support     $bzip2"
4565 echo "NUMA host support $numa"
4566 echo "tcmalloc support  $tcmalloc"
4567
4568 if test "$sdl_too_old" = "yes"; then
4569 echo "-> Your SDL version is too old - please upgrade to have SDL support"
4570 fi
4571
4572 config_host_mak="config-host.mak"
4573
4574 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
4575
4576 echo "# Automatically generated by configure - do not modify" > $config_host_mak
4577 echo >> $config_host_mak
4578
4579 echo all: >> $config_host_mak
4580 echo "prefix=$prefix" >> $config_host_mak
4581 echo "bindir=$bindir" >> $config_host_mak
4582 echo "libdir=$libdir" >> $config_host_mak
4583 echo "libexecdir=$libexecdir" >> $config_host_mak
4584 echo "includedir=$includedir" >> $config_host_mak
4585 echo "mandir=$mandir" >> $config_host_mak
4586 echo "sysconfdir=$sysconfdir" >> $config_host_mak
4587 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
4588 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
4589 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
4590 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
4591 if test "$mingw32" = "no" ; then
4592   echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
4593 fi
4594 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
4595 echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
4596 echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
4597 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
4598 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
4599
4600 echo "ARCH=$ARCH" >> $config_host_mak
4601
4602 if test "$debug_tcg" = "yes" ; then
4603   echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
4604 fi
4605 if test "$strip_opt" = "yes" ; then
4606   echo "STRIP=${strip}" >> $config_host_mak
4607 fi
4608 if test "$bigendian" = "yes" ; then
4609   echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
4610 fi
4611 if test "$mingw32" = "yes" ; then
4612   echo "CONFIG_WIN32=y" >> $config_host_mak
4613   rc_version=`cat $source_path/VERSION`
4614   version_major=${rc_version%%.*}
4615   rc_version=${rc_version#*.}
4616   version_minor=${rc_version%%.*}
4617   rc_version=${rc_version#*.}
4618   version_subminor=${rc_version%%.*}
4619   version_micro=0
4620   echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4621   echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4622   if test "$guest_agent_with_vss" = "yes" ; then
4623     echo "CONFIG_QGA_VSS=y" >> $config_host_mak
4624     echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
4625   fi
4626   if test "$guest_agent_msi" != "no"; then
4627     echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak  
4628     echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
4629     echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
4630     echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
4631     echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
4632     echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
4633     echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
4634   fi
4635 else
4636   echo "CONFIG_POSIX=y" >> $config_host_mak
4637 fi
4638
4639 if test "$linux" = "yes" ; then
4640   echo "CONFIG_LINUX=y" >> $config_host_mak
4641 fi
4642
4643 if test "$darwin" = "yes" ; then
4644   echo "CONFIG_DARWIN=y" >> $config_host_mak
4645 fi
4646
4647 if test "$aix" = "yes" ; then
4648   echo "CONFIG_AIX=y" >> $config_host_mak
4649 fi
4650
4651 if test "$solaris" = "yes" ; then
4652   echo "CONFIG_SOLARIS=y" >> $config_host_mak
4653   echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
4654   if test "$needs_libsunmath" = "yes" ; then
4655     echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
4656   fi
4657 fi
4658 if test "$haiku" = "yes" ; then
4659   echo "CONFIG_HAIKU=y" >> $config_host_mak
4660 fi
4661 if test "$static" = "yes" ; then
4662   echo "CONFIG_STATIC=y" >> $config_host_mak
4663 fi
4664 if test "$profiler" = "yes" ; then
4665   echo "CONFIG_PROFILER=y" >> $config_host_mak
4666 fi
4667 if test "$slirp" = "yes" ; then
4668   echo "CONFIG_SLIRP=y" >> $config_host_mak
4669   echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
4670 fi
4671 if test "$vde" = "yes" ; then
4672   echo "CONFIG_VDE=y" >> $config_host_mak
4673 fi
4674 if test "$netmap" = "yes" ; then
4675   echo "CONFIG_NETMAP=y" >> $config_host_mak
4676 fi
4677 if test "$l2tpv3" = "yes" ; then
4678   echo "CONFIG_L2TPV3=y" >> $config_host_mak
4679 fi
4680 if test "$cap_ng" = "yes" ; then
4681   echo "CONFIG_LIBCAP=y" >> $config_host_mak
4682 fi
4683 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
4684 for drv in $audio_drv_list; do
4685     def=CONFIG_`echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]'`
4686     echo "$def=y" >> $config_host_mak
4687 done
4688 if test "$audio_pt_int" = "yes" ; then
4689   echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
4690 fi
4691 if test "$audio_win_int" = "yes" ; then
4692   echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
4693 fi
4694 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
4695 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
4696 if test "$vnc" = "yes" ; then
4697   echo "CONFIG_VNC=y" >> $config_host_mak
4698 fi
4699 if test "$vnc_tls" = "yes" ; then
4700   echo "CONFIG_VNC_TLS=y" >> $config_host_mak
4701 fi
4702 if test "$vnc_sasl" = "yes" ; then
4703   echo "CONFIG_VNC_SASL=y" >> $config_host_mak
4704 fi
4705 if test "$vnc_jpeg" = "yes" ; then
4706   echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
4707 fi
4708 if test "$vnc_png" = "yes" ; then
4709   echo "CONFIG_VNC_PNG=y" >> $config_host_mak
4710 fi
4711 if test "$vnc_ws" = "yes" ; then
4712   echo "CONFIG_VNC_WS=y" >> $config_host_mak
4713   echo "VNC_WS_CFLAGS=$vnc_ws_cflags" >> $config_host_mak
4714 fi
4715 if test "$fnmatch" = "yes" ; then
4716   echo "CONFIG_FNMATCH=y" >> $config_host_mak
4717 fi
4718 if test "$uuid" = "yes" ; then
4719   echo "CONFIG_UUID=y" >> $config_host_mak
4720 fi
4721 if test "$xfs" = "yes" ; then
4722   echo "CONFIG_XFS=y" >> $config_host_mak
4723 fi
4724 qemu_version=`head $source_path/VERSION`
4725 echo "VERSION=$qemu_version" >>$config_host_mak
4726 echo "PKGVERSION=$pkgversion" >>$config_host_mak
4727 echo "SRC_PATH=$source_path" >> $config_host_mak
4728 echo "TARGET_DIRS=$target_list" >> $config_host_mak
4729 if [ "$docs" = "yes" ] ; then
4730   echo "BUILD_DOCS=yes" >> $config_host_mak
4731 fi
4732 if test "$modules" = "yes"; then
4733   # $shacmd can generate a hash started with digit, which the compiler doesn't
4734   # like as an symbol. So prefix it with an underscore
4735   echo "CONFIG_STAMP=_`(echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ `" >> $config_host_mak
4736   echo "CONFIG_MODULES=y" >> $config_host_mak
4737 fi
4738 if test "$sdl" = "yes" ; then
4739   echo "CONFIG_SDL=y" >> $config_host_mak
4740   echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
4741   echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
4742 fi
4743 if test "$cocoa" = "yes" ; then
4744   echo "CONFIG_COCOA=y" >> $config_host_mak
4745 fi
4746 if test "$curses" = "yes" ; then
4747   echo "CONFIG_CURSES=y" >> $config_host_mak
4748 fi
4749 if test "$utimens" = "yes" ; then
4750   echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
4751 fi
4752 if test "$pipe2" = "yes" ; then
4753   echo "CONFIG_PIPE2=y" >> $config_host_mak
4754 fi
4755 if test "$accept4" = "yes" ; then
4756   echo "CONFIG_ACCEPT4=y" >> $config_host_mak
4757 fi
4758 if test "$splice" = "yes" ; then
4759   echo "CONFIG_SPLICE=y" >> $config_host_mak
4760 fi
4761 if test "$eventfd" = "yes" ; then
4762   echo "CONFIG_EVENTFD=y" >> $config_host_mak
4763 fi
4764 if test "$fallocate" = "yes" ; then
4765   echo "CONFIG_FALLOCATE=y" >> $config_host_mak
4766 fi
4767 if test "$fallocate_punch_hole" = "yes" ; then
4768   echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
4769 fi
4770 if test "$fallocate_zero_range" = "yes" ; then
4771   echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
4772 fi
4773 if test "$posix_fallocate" = "yes" ; then
4774   echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
4775 fi
4776 if test "$sync_file_range" = "yes" ; then
4777   echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
4778 fi
4779 if test "$fiemap" = "yes" ; then
4780   echo "CONFIG_FIEMAP=y" >> $config_host_mak
4781 fi
4782 if test "$dup3" = "yes" ; then
4783   echo "CONFIG_DUP3=y" >> $config_host_mak
4784 fi
4785 if test "$ppoll" = "yes" ; then
4786   echo "CONFIG_PPOLL=y" >> $config_host_mak
4787 fi
4788 if test "$prctl_pr_set_timerslack" = "yes" ; then
4789   echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
4790 fi
4791 if test "$epoll" = "yes" ; then
4792   echo "CONFIG_EPOLL=y" >> $config_host_mak
4793 fi
4794 if test "$epoll_create1" = "yes" ; then
4795   echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
4796 fi
4797 if test "$epoll_pwait" = "yes" ; then
4798   echo "CONFIG_EPOLL_PWAIT=y" >> $config_host_mak
4799 fi
4800 if test "$sendfile" = "yes" ; then
4801   echo "CONFIG_SENDFILE=y" >> $config_host_mak
4802 fi
4803 if test "$timerfd" = "yes" ; then
4804   echo "CONFIG_TIMERFD=y" >> $config_host_mak
4805 fi
4806 if test "$setns" = "yes" ; then
4807   echo "CONFIG_SETNS=y" >> $config_host_mak
4808 fi
4809 if test "$inotify" = "yes" ; then
4810   echo "CONFIG_INOTIFY=y" >> $config_host_mak
4811 fi
4812 if test "$inotify1" = "yes" ; then
4813   echo "CONFIG_INOTIFY1=y" >> $config_host_mak
4814 fi
4815 if test "$byteswap_h" = "yes" ; then
4816   echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
4817 fi
4818 if test "$bswap_h" = "yes" ; then
4819   echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
4820 fi
4821 if test "$curl" = "yes" ; then
4822   echo "CONFIG_CURL=m" >> $config_host_mak
4823   echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
4824   echo "CURL_LIBS=$curl_libs" >> $config_host_mak
4825 fi
4826 if test "$brlapi" = "yes" ; then
4827   echo "CONFIG_BRLAPI=y" >> $config_host_mak
4828 fi
4829 if test "$bluez" = "yes" ; then
4830   echo "CONFIG_BLUEZ=y" >> $config_host_mak
4831   echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
4832 fi
4833 if test "$glib_subprocess" = "yes" ; then
4834   echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
4835 fi
4836 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
4837 if test "$gtk" = "yes" ; then
4838   echo "CONFIG_GTK=y" >> $config_host_mak
4839   echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
4840   echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
4841 fi
4842 if test "$gnutls" = "yes" ; then
4843   echo "CONFIG_GNUTLS=y" >> $config_host_mak
4844 fi
4845 if test "$gnutls_hash" = "yes" ; then
4846   echo "CONFIG_GNUTLS_HASH=y" >> $config_host_mak
4847 fi
4848 if test "$gnutls_gcrypt" = "yes" ; then
4849   echo "CONFIG_GNUTLS_GCRYPT=y" >> $config_host_mak
4850 fi
4851 if test "$gnutls_nettle" = "yes" ; then
4852   echo "CONFIG_GNUTLS_NETTLE=y" >> $config_host_mak
4853 fi
4854 if test "$vte" = "yes" ; then
4855   echo "CONFIG_VTE=y" >> $config_host_mak
4856   echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
4857 fi
4858 if test "$xen" = "yes" ; then
4859   echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
4860   echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
4861 fi
4862 if test "$linux_aio" = "yes" ; then
4863   echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
4864 fi
4865 if test "$attr" = "yes" ; then
4866   echo "CONFIG_ATTR=y" >> $config_host_mak
4867 fi
4868 if test "$libattr" = "yes" ; then
4869   echo "CONFIG_LIBATTR=y" >> $config_host_mak
4870 fi
4871 if test "$virtfs" = "yes" ; then
4872   echo "CONFIG_VIRTFS=y" >> $config_host_mak
4873 fi
4874 if test "$vhost_scsi" = "yes" ; then
4875   echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
4876 fi
4877 if test "$vhost_net" = "yes" ; then
4878   echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
4879 fi
4880 if test "$blobs" = "yes" ; then
4881   echo "INSTALL_BLOBS=yes" >> $config_host_mak
4882 fi
4883 if test "$iovec" = "yes" ; then
4884   echo "CONFIG_IOVEC=y" >> $config_host_mak
4885 fi
4886 if test "$preadv" = "yes" ; then
4887   echo "CONFIG_PREADV=y" >> $config_host_mak
4888 fi
4889 if test "$fdt" = "yes" ; then