]> Git Repo - qemu.git/blob - configure
Merge remote-tracking branch 'remotes/rth/tags/pull-tile-20150915' into staging
[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_sasl=""
246 vnc_jpeg=""
247 vnc_png=""
248 xen=""
249 xen_ctrl_version=""
250 xen_pci_passthrough=""
251 linux_aio=""
252 cap_ng=""
253 attr=""
254 libattr=""
255 xfs=""
256
257 vhost_net="no"
258 vhost_scsi="no"
259 kvm="no"
260 rdma=""
261 gprof="no"
262 debug_tcg="no"
263 debug="no"
264 strip_opt="yes"
265 tcg_interpreter="no"
266 bigendian="no"
267 mingw32="no"
268 gcov="no"
269 gcov_tool="gcov"
270 EXESUF=""
271 DSOSUF=".so"
272 LDFLAGS_SHARED="-shared"
273 modules="no"
274 prefix="/usr/local"
275 mandir="\${prefix}/share/man"
276 datadir="\${prefix}/share"
277 qemu_docdir="\${prefix}/share/doc/qemu"
278 bindir="\${prefix}/bin"
279 libdir="\${prefix}/lib"
280 libexecdir="\${prefix}/libexec"
281 includedir="\${prefix}/include"
282 sysconfdir="\${prefix}/etc"
283 local_statedir="\${prefix}/var"
284 confsuffix="/qemu"
285 slirp="yes"
286 oss_lib=""
287 bsd="no"
288 linux="no"
289 solaris="no"
290 profiler="no"
291 cocoa="no"
292 softmmu="yes"
293 linux_user="no"
294 bsd_user="no"
295 aix="no"
296 blobs="yes"
297 pkgversion=""
298 pie=""
299 zero_malloc=""
300 qom_cast_debug="yes"
301 trace_backends="nop"
302 trace_file="trace"
303 spice=""
304 rbd=""
305 smartcard_nss=""
306 libusb=""
307 usb_redir=""
308 opengl=""
309 zlib="yes"
310 lzo=""
311 snappy=""
312 bzip2=""
313 guest_agent=""
314 guest_agent_with_vss="no"
315 guest_agent_ntddscsi="no"
316 guest_agent_msi=""
317 vss_win32_sdk=""
318 win_sdk="no"
319 want_tools="yes"
320 libiscsi=""
321 libnfs=""
322 coroutine=""
323 coroutine_pool=""
324 seccomp=""
325 glusterfs=""
326 glusterfs_discard="no"
327 glusterfs_zerofill="no"
328 archipelago="no"
329 gtk=""
330 gtkabi=""
331 gnutls=""
332 gnutls_hash=""
333 vte=""
334 tpm="yes"
335 libssh2=""
336 vhdx=""
337 numa=""
338 tcmalloc="no"
339 jemalloc="no"
340
341 # parse CC options first
342 for opt do
343   optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
344   case "$opt" in
345   --cross-prefix=*) cross_prefix="$optarg"
346   ;;
347   --cc=*) CC="$optarg"
348   ;;
349   --cxx=*) CXX="$optarg"
350   ;;
351   --source-path=*) source_path="$optarg"
352   ;;
353   --cpu=*) cpu="$optarg"
354   ;;
355   --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
356                     EXTRA_CFLAGS="$optarg"
357   ;;
358   --extra-ldflags=*) LDFLAGS="$LDFLAGS $optarg"
359                      EXTRA_LDFLAGS="$optarg"
360   ;;
361   --enable-debug-info) debug_info="yes"
362   ;;
363   --disable-debug-info) debug_info="no"
364   ;;
365   esac
366 done
367 # OS specific
368 # Using uname is really, really broken.  Once we have the right set of checks
369 # we can eliminate its usage altogether.
370
371 # Preferred compiler:
372 #  ${CC} (if set)
373 #  ${cross_prefix}gcc (if cross-prefix specified)
374 #  system compiler
375 if test -z "${CC}${cross_prefix}"; then
376   cc="$host_cc"
377 else
378   cc="${CC-${cross_prefix}gcc}"
379 fi
380
381 if test -z "${CXX}${cross_prefix}"; then
382   cxx="c++"
383 else
384   cxx="${CXX-${cross_prefix}g++}"
385 fi
386
387 ar="${AR-${cross_prefix}ar}"
388 as="${AS-${cross_prefix}as}"
389 cpp="${CPP-$cc -E}"
390 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
391 ld="${LD-${cross_prefix}ld}"
392 libtool="${LIBTOOL-${cross_prefix}libtool}"
393 nm="${NM-${cross_prefix}nm}"
394 strip="${STRIP-${cross_prefix}strip}"
395 windres="${WINDRES-${cross_prefix}windres}"
396 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
397 query_pkg_config() {
398     "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
399 }
400 pkg_config=query_pkg_config
401 sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
402 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
403
404 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
405 ARFLAGS="${ARFLAGS-rv}"
406
407 # default flags for all hosts
408 QEMU_CFLAGS="-fno-strict-aliasing -fno-common $QEMU_CFLAGS"
409 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
410 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
411 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
412 QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/include"
413 if test "$debug_info" = "yes"; then
414     CFLAGS="-g $CFLAGS"
415     LDFLAGS="-g $LDFLAGS"
416 fi
417
418 test_cflags=""
419 test_libs=""
420
421 # make source path absolute
422 source_path=`cd "$source_path"; pwd`
423
424 # running configure in the source tree?
425 # we know that's the case if configure is there.
426 if test -f "./configure"; then
427     pwd_is_source_path="y"
428 else
429     pwd_is_source_path="n"
430 fi
431
432 check_define() {
433 cat > $TMPC <<EOF
434 #if !defined($1)
435 #error $1 not defined
436 #endif
437 int main(void) { return 0; }
438 EOF
439   compile_object
440 }
441
442 check_include() {
443 cat > $TMPC <<EOF
444 #include <$1>
445 int main(void) { return 0; }
446 EOF
447   compile_object
448 }
449
450 write_c_skeleton() {
451     cat > $TMPC <<EOF
452 int main(void) { return 0; }
453 EOF
454 }
455
456 if check_define __linux__ ; then
457   targetos="Linux"
458 elif check_define _WIN32 ; then
459   targetos='MINGW32'
460 elif check_define __OpenBSD__ ; then
461   targetos='OpenBSD'
462 elif check_define __sun__ ; then
463   targetos='SunOS'
464 elif check_define __HAIKU__ ; then
465   targetos='Haiku'
466 else
467   targetos=`uname -s`
468 fi
469
470 # Some host OSes need non-standard checks for which CPU to use.
471 # Note that these checks are broken for cross-compilation: if you're
472 # cross-compiling to one of these OSes then you'll need to specify
473 # the correct CPU with the --cpu option.
474 case $targetos in
475 Darwin)
476   # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
477   # run 64-bit userspace code.
478   # If the user didn't specify a CPU explicitly and the kernel says this is
479   # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
480   if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
481     cpu="x86_64"
482   fi
483   ;;
484 SunOS)
485   # `uname -m` returns i86pc even on an x86_64 box, so default based on isainfo
486   if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
487     cpu="x86_64"
488   fi
489 esac
490
491 if test ! -z "$cpu" ; then
492   # command line argument
493   :
494 elif check_define __i386__ ; then
495   cpu="i386"
496 elif check_define __x86_64__ ; then
497   if check_define __ILP32__ ; then
498     cpu="x32"
499   else
500     cpu="x86_64"
501   fi
502 elif check_define __sparc__ ; then
503   if check_define __arch64__ ; then
504     cpu="sparc64"
505   else
506     cpu="sparc"
507   fi
508 elif check_define _ARCH_PPC ; then
509   if check_define _ARCH_PPC64 ; then
510     cpu="ppc64"
511   else
512     cpu="ppc"
513   fi
514 elif check_define __mips__ ; then
515   cpu="mips"
516 elif check_define __ia64__ ; then
517   cpu="ia64"
518 elif check_define __s390__ ; then
519   if check_define __s390x__ ; then
520     cpu="s390x"
521   else
522     cpu="s390"
523   fi
524 elif check_define __arm__ ; then
525   cpu="arm"
526 elif check_define __aarch64__ ; then
527   cpu="aarch64"
528 elif check_define __hppa__ ; then
529   cpu="hppa"
530 else
531   cpu=`uname -m`
532 fi
533
534 ARCH=
535 # Normalise host CPU name and set ARCH.
536 # Note that this case should only have supported host CPUs, not guests.
537 case "$cpu" in
538   ia64|ppc|ppc64|s390|s390x|sparc64|x32)
539     cpu="$cpu"
540   ;;
541   i386|i486|i586|i686|i86pc|BePC)
542     cpu="i386"
543   ;;
544   x86_64|amd64)
545     cpu="x86_64"
546   ;;
547   armv*b|armv*l|arm)
548     cpu="arm"
549   ;;
550   aarch64)
551     cpu="aarch64"
552   ;;
553   mips*)
554     cpu="mips"
555   ;;
556   sparc|sun4[cdmuv])
557     cpu="sparc"
558   ;;
559   *)
560     # This will result in either an error or falling back to TCI later
561     ARCH=unknown
562   ;;
563 esac
564 if test -z "$ARCH"; then
565   ARCH="$cpu"
566 fi
567
568 # OS specific
569
570 # host *BSD for user mode
571 HOST_VARIANT_DIR=""
572
573 case $targetos in
574 CYGWIN*)
575   mingw32="yes"
576   QEMU_CFLAGS="-mno-cygwin $QEMU_CFLAGS"
577   audio_possible_drivers="sdl"
578   audio_drv_list="sdl"
579 ;;
580 MINGW32*)
581   mingw32="yes"
582   audio_possible_drivers="dsound sdl"
583   if check_include dsound.h; then
584     audio_drv_list="dsound"
585   else
586     audio_drv_list=""
587   fi
588 ;;
589 GNU/kFreeBSD)
590   bsd="yes"
591   audio_drv_list="oss"
592   audio_possible_drivers="oss sdl pa"
593 ;;
594 FreeBSD)
595   bsd="yes"
596   make="${MAKE-gmake}"
597   audio_drv_list="oss"
598   audio_possible_drivers="oss sdl pa"
599   # needed for kinfo_getvmmap(3) in libutil.h
600   LIBS="-lutil $LIBS"
601   netmap=""  # enable netmap autodetect
602   HOST_VARIANT_DIR="freebsd"
603 ;;
604 DragonFly)
605   bsd="yes"
606   make="${MAKE-gmake}"
607   audio_drv_list="oss"
608   audio_possible_drivers="oss sdl pa"
609   HOST_VARIANT_DIR="dragonfly"
610 ;;
611 NetBSD)
612   bsd="yes"
613   make="${MAKE-gmake}"
614   audio_drv_list="oss"
615   audio_possible_drivers="oss sdl"
616   oss_lib="-lossaudio"
617   HOST_VARIANT_DIR="netbsd"
618 ;;
619 OpenBSD)
620   bsd="yes"
621   make="${MAKE-gmake}"
622   audio_drv_list="sdl"
623   audio_possible_drivers="sdl"
624   HOST_VARIANT_DIR="openbsd"
625 ;;
626 Darwin)
627   bsd="yes"
628   darwin="yes"
629   LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
630   if [ "$cpu" = "x86_64" ] ; then
631     QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
632     LDFLAGS="-arch x86_64 $LDFLAGS"
633   fi
634   cocoa="yes"
635   audio_drv_list="coreaudio"
636   audio_possible_drivers="coreaudio sdl"
637   LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
638   libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
639   # Disable attempts to use ObjectiveC features in os/object.h since they
640   # won't work when we're compiling with gcc as a C compiler.
641   QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
642   HOST_VARIANT_DIR="darwin"
643 ;;
644 SunOS)
645   solaris="yes"
646   make="${MAKE-gmake}"
647   install="${INSTALL-ginstall}"
648   ld="gld"
649   smbd="${SMBD-/usr/sfw/sbin/smbd}"
650   needs_libsunmath="no"
651   solarisrev=`uname -r | cut -f2 -d.`
652   if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
653     if test "$solarisrev" -le 9 ; then
654       if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then
655         needs_libsunmath="yes"
656         QEMU_CFLAGS="-I/opt/SUNWspro/prod/include/cc $QEMU_CFLAGS"
657         LDFLAGS="-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib $LDFLAGS"
658         LIBS="-lsunmath $LIBS"
659       else
660         error_exit "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without" \
661             "libsunmath from the Sun Studio compilers tools, due to a lack of" \
662             "C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86" \
663             "Studio 11 can be downloaded from www.sun.com."
664       fi
665     fi
666   fi
667   if test -f /usr/include/sys/soundcard.h ; then
668     audio_drv_list="oss"
669   fi
670   audio_possible_drivers="oss sdl"
671 # needed for CMSG_ macros in sys/socket.h
672   QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
673 # needed for TIOCWIN* defines in termios.h
674   QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
675   QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
676   solarisnetlibs="-lsocket -lnsl -lresolv"
677   LIBS="$solarisnetlibs $LIBS"
678   libs_qga="$solarisnetlibs $libs_qga"
679 ;;
680 AIX)
681   aix="yes"
682   make="${MAKE-gmake}"
683 ;;
684 Haiku)
685   haiku="yes"
686   QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
687   LIBS="-lposix_error_mapper -lnetwork $LIBS"
688 ;;
689 *)
690   audio_drv_list="oss"
691   audio_possible_drivers="oss alsa sdl pa"
692   linux="yes"
693   linux_user="yes"
694   kvm="yes"
695   vhost_net="yes"
696   vhost_scsi="yes"
697   QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
698 ;;
699 esac
700
701 if [ "$bsd" = "yes" ] ; then
702   if [ "$darwin" != "yes" ] ; then
703     bsd_user="yes"
704   fi
705 fi
706
707 : ${make=${MAKE-make}}
708 : ${install=${INSTALL-install}}
709 : ${python=${PYTHON-python}}
710 : ${smbd=${SMBD-/usr/sbin/smbd}}
711
712 # Default objcc to clang if available, otherwise use CC
713 if has clang; then
714   objcc=clang
715 else
716   objcc="$cc"
717 fi
718
719 if test "$mingw32" = "yes" ; then
720   EXESUF=".exe"
721   DSOSUF=".dll"
722   QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
723   # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
724   QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
725   LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
726   write_c_skeleton;
727   if compile_prog "" "-liberty" ; then
728     LIBS="-liberty $LIBS"
729   fi
730   prefix="c:/Program Files/QEMU"
731   mandir="\${prefix}"
732   datadir="\${prefix}"
733   qemu_docdir="\${prefix}"
734   bindir="\${prefix}"
735   sysconfdir="\${prefix}"
736   local_statedir=
737   confsuffix=""
738   libs_qga="-lws2_32 -lwinmm -lpowrprof -liphlpapi -lnetapi32 $libs_qga"
739 fi
740
741 werror=""
742
743 for opt do
744   optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
745   case "$opt" in
746   --help|-h) show_help=yes
747   ;;
748   --version|-V) exec cat $source_path/VERSION
749   ;;
750   --prefix=*) prefix="$optarg"
751   ;;
752   --interp-prefix=*) interp_prefix="$optarg"
753   ;;
754   --source-path=*)
755   ;;
756   --cross-prefix=*)
757   ;;
758   --cc=*)
759   ;;
760   --host-cc=*) host_cc="$optarg"
761   ;;
762   --cxx=*)
763   ;;
764   --iasl=*) iasl="$optarg"
765   ;;
766   --objcc=*) objcc="$optarg"
767   ;;
768   --make=*) make="$optarg"
769   ;;
770   --install=*) install="$optarg"
771   ;;
772   --python=*) python="$optarg"
773   ;;
774   --gcov=*) gcov_tool="$optarg"
775   ;;
776   --smbd=*) smbd="$optarg"
777   ;;
778   --extra-cflags=*)
779   ;;
780   --extra-ldflags=*)
781   ;;
782   --enable-debug-info)
783   ;;
784   --disable-debug-info)
785   ;;
786   --enable-modules)
787       modules="yes"
788   ;;
789   --cpu=*)
790   ;;
791   --target-list=*) target_list="$optarg"
792   ;;
793   --enable-trace-backends=*) trace_backends="$optarg"
794   ;;
795   # XXX: backwards compatibility
796   --enable-trace-backend=*) trace_backends="$optarg"
797   ;;
798   --with-trace-file=*) trace_file="$optarg"
799   ;;
800   --enable-gprof) gprof="yes"
801   ;;
802   --enable-gcov) gcov="yes"
803   ;;
804   --static)
805     static="yes"
806     LDFLAGS="-static $LDFLAGS"
807     QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
808   ;;
809   --mandir=*) mandir="$optarg"
810   ;;
811   --bindir=*) bindir="$optarg"
812   ;;
813   --libdir=*) libdir="$optarg"
814   ;;
815   --libexecdir=*) libexecdir="$optarg"
816   ;;
817   --includedir=*) includedir="$optarg"
818   ;;
819   --datadir=*) datadir="$optarg"
820   ;;
821   --with-confsuffix=*) confsuffix="$optarg"
822   ;;
823   --docdir=*) qemu_docdir="$optarg"
824   ;;
825   --sysconfdir=*) sysconfdir="$optarg"
826   ;;
827   --localstatedir=*) local_statedir="$optarg"
828   ;;
829   --sbindir=*|--sharedstatedir=*|\
830   --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
831   --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
832     # These switches are silently ignored, for compatibility with
833     # autoconf-generated configure scripts. This allows QEMU's
834     # configure to be used by RPM and similar macros that set
835     # lots of directory switches by default.
836   ;;
837   --with-system-pixman) pixman="system"
838   ;;
839   --without-system-pixman) pixman="internal"
840   ;;
841   --without-pixman) pixman="none"
842   ;;
843   --disable-sdl) sdl="no"
844   ;;
845   --enable-sdl) sdl="yes"
846   ;;
847   --with-sdlabi=*) sdlabi="$optarg"
848   ;;
849   --disable-qom-cast-debug) qom_cast_debug="no"
850   ;;
851   --enable-qom-cast-debug) qom_cast_debug="yes"
852   ;;
853   --disable-virtfs) virtfs="no"
854   ;;
855   --enable-virtfs) virtfs="yes"
856   ;;
857   --disable-vnc) vnc="no"
858   ;;
859   --enable-vnc) vnc="yes"
860   ;;
861   --oss-lib=*) oss_lib="$optarg"
862   ;;
863   --audio-drv-list=*) audio_drv_list="$optarg"
864   ;;
865   --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=`echo "$optarg" | sed -e 's/,/ /g'`
866   ;;
867   --block-drv-ro-whitelist=*) block_drv_ro_whitelist=`echo "$optarg" | sed -e 's/,/ /g'`
868   ;;
869   --enable-debug-tcg) debug_tcg="yes"
870   ;;
871   --disable-debug-tcg) debug_tcg="no"
872   ;;
873   --enable-debug)
874       # Enable debugging options that aren't excessively noisy
875       debug_tcg="yes"
876       debug="yes"
877       strip_opt="no"
878   ;;
879   --enable-sparse) sparse="yes"
880   ;;
881   --disable-sparse) sparse="no"
882   ;;
883   --disable-strip) strip_opt="no"
884   ;;
885   --disable-vnc-sasl) vnc_sasl="no"
886   ;;
887   --enable-vnc-sasl) vnc_sasl="yes"
888   ;;
889   --disable-vnc-jpeg) vnc_jpeg="no"
890   ;;
891   --enable-vnc-jpeg) vnc_jpeg="yes"
892   ;;
893   --disable-vnc-png) vnc_png="no"
894   ;;
895   --enable-vnc-png) vnc_png="yes"
896   ;;
897   --disable-slirp) slirp="no"
898   ;;
899   --disable-uuid) uuid="no"
900   ;;
901   --enable-uuid) uuid="yes"
902   ;;
903   --disable-vde) vde="no"
904   ;;
905   --enable-vde) vde="yes"
906   ;;
907   --disable-netmap) netmap="no"
908   ;;
909   --enable-netmap) netmap="yes"
910   ;;
911   --disable-xen) xen="no"
912   ;;
913   --enable-xen) xen="yes"
914   ;;
915   --disable-xen-pci-passthrough) xen_pci_passthrough="no"
916   ;;
917   --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
918   ;;
919   --disable-brlapi) brlapi="no"
920   ;;
921   --enable-brlapi) brlapi="yes"
922   ;;
923   --disable-bluez) bluez="no"
924   ;;
925   --enable-bluez) bluez="yes"
926   ;;
927   --disable-kvm) kvm="no"
928   ;;
929   --enable-kvm) kvm="yes"
930   ;;
931   --disable-tcg-interpreter) tcg_interpreter="no"
932   ;;
933   --enable-tcg-interpreter) tcg_interpreter="yes"
934   ;;
935   --disable-cap-ng)  cap_ng="no"
936   ;;
937   --enable-cap-ng) cap_ng="yes"
938   ;;
939   --disable-spice) spice="no"
940   ;;
941   --enable-spice) spice="yes"
942   ;;
943   --disable-libiscsi) libiscsi="no"
944   ;;
945   --enable-libiscsi) libiscsi="yes"
946   ;;
947   --disable-libnfs) libnfs="no"
948   ;;
949   --enable-libnfs) libnfs="yes"
950   ;;
951   --enable-profiler) profiler="yes"
952   ;;
953   --disable-cocoa) cocoa="no"
954   ;;
955   --enable-cocoa)
956       cocoa="yes" ;
957       audio_drv_list="coreaudio `echo $audio_drv_list | sed s,coreaudio,,g`"
958   ;;
959   --disable-system) softmmu="no"
960   ;;
961   --enable-system) softmmu="yes"
962   ;;
963   --disable-user)
964       linux_user="no" ;
965       bsd_user="no" ;
966   ;;
967   --enable-user) ;;
968   --disable-linux-user) linux_user="no"
969   ;;
970   --enable-linux-user) linux_user="yes"
971   ;;
972   --disable-bsd-user) bsd_user="no"
973   ;;
974   --enable-bsd-user) bsd_user="yes"
975   ;;
976   --enable-pie) pie="yes"
977   ;;
978   --disable-pie) pie="no"
979   ;;
980   --enable-werror) werror="yes"
981   ;;
982   --disable-werror) werror="no"
983   ;;
984   --enable-stack-protector) stack_protector="yes"
985   ;;
986   --disable-stack-protector) stack_protector="no"
987   ;;
988   --disable-curses) curses="no"
989   ;;
990   --enable-curses) curses="yes"
991   ;;
992   --disable-curl) curl="no"
993   ;;
994   --enable-curl) curl="yes"
995   ;;
996   --disable-fdt) fdt="no"
997   ;;
998   --enable-fdt) fdt="yes"
999   ;;
1000   --disable-linux-aio) linux_aio="no"
1001   ;;
1002   --enable-linux-aio) linux_aio="yes"
1003   ;;
1004   --disable-attr) attr="no"
1005   ;;
1006   --enable-attr) attr="yes"
1007   ;;
1008   --disable-blobs) blobs="no"
1009   ;;
1010   --with-pkgversion=*) pkgversion=" ($optarg)"
1011   ;;
1012   --with-coroutine=*) coroutine="$optarg"
1013   ;;
1014   --disable-coroutine-pool) coroutine_pool="no"
1015   ;;
1016   --enable-coroutine-pool) coroutine_pool="yes"
1017   ;;
1018   --disable-docs) docs="no"
1019   ;;
1020   --enable-docs) docs="yes"
1021   ;;
1022   --disable-vhost-net) vhost_net="no"
1023   ;;
1024   --enable-vhost-net) vhost_net="yes"
1025   ;;
1026   --disable-vhost-scsi) vhost_scsi="no"
1027   ;;
1028   --enable-vhost-scsi) vhost_scsi="yes"
1029   ;;
1030   --disable-opengl) opengl="no"
1031   ;;
1032   --enable-opengl) opengl="yes"
1033   ;;
1034   --disable-rbd) rbd="no"
1035   ;;
1036   --enable-rbd) rbd="yes"
1037   ;;
1038   --disable-xfsctl) xfs="no"
1039   ;;
1040   --enable-xfsctl) xfs="yes"
1041   ;;
1042   --disable-smartcard-nss) smartcard_nss="no"
1043   ;;
1044   --enable-smartcard-nss) smartcard_nss="yes"
1045   ;;
1046   --disable-libusb) libusb="no"
1047   ;;
1048   --enable-libusb) libusb="yes"
1049   ;;
1050   --disable-usb-redir) usb_redir="no"
1051   ;;
1052   --enable-usb-redir) usb_redir="yes"
1053   ;;
1054   --disable-zlib-test) zlib="no"
1055   ;;
1056   --disable-lzo) lzo="no"
1057   ;;
1058   --enable-lzo) lzo="yes"
1059   ;;
1060   --disable-snappy) snappy="no"
1061   ;;
1062   --enable-snappy) snappy="yes"
1063   ;;
1064   --disable-bzip2) bzip2="no"
1065   ;;
1066   --enable-bzip2) bzip2="yes"
1067   ;;
1068   --enable-guest-agent) guest_agent="yes"
1069   ;;
1070   --disable-guest-agent) guest_agent="no"
1071   ;;
1072   --enable-guest-agent-msi) guest_agent_msi="yes"
1073   ;;
1074   --disable-guest-agent-msi) guest_agent_msi="no"
1075   ;;
1076   --with-vss-sdk) vss_win32_sdk=""
1077   ;;
1078   --with-vss-sdk=*) vss_win32_sdk="$optarg"
1079   ;;
1080   --without-vss-sdk) vss_win32_sdk="no"
1081   ;;
1082   --with-win-sdk) win_sdk=""
1083   ;;
1084   --with-win-sdk=*) win_sdk="$optarg"
1085   ;;
1086   --without-win-sdk) win_sdk="no"
1087   ;;
1088   --enable-tools) want_tools="yes"
1089   ;;
1090   --disable-tools) want_tools="no"
1091   ;;
1092   --enable-seccomp) seccomp="yes"
1093   ;;
1094   --disable-seccomp) seccomp="no"
1095   ;;
1096   --disable-glusterfs) glusterfs="no"
1097   ;;
1098   --enable-glusterfs) glusterfs="yes"
1099   ;;
1100   --disable-archipelago) archipelago="no"
1101   ;;
1102   --enable-archipelago) archipelago="yes"
1103   ;;
1104   --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1105       echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1106   ;;
1107   --disable-gtk) gtk="no"
1108   ;;
1109   --enable-gtk) gtk="yes"
1110   ;;
1111   --disable-gnutls) gnutls="no"
1112   ;;
1113   --enable-gnutls) gnutls="yes"
1114   ;;
1115   --enable-rdma) rdma="yes"
1116   ;;
1117   --disable-rdma) rdma="no"
1118   ;;
1119   --with-gtkabi=*) gtkabi="$optarg"
1120   ;;
1121   --disable-vte) vte="no"
1122   ;;
1123   --enable-vte) vte="yes"
1124   ;;
1125   --disable-tpm) tpm="no"
1126   ;;
1127   --enable-tpm) tpm="yes"
1128   ;;
1129   --disable-libssh2) libssh2="no"
1130   ;;
1131   --enable-libssh2) libssh2="yes"
1132   ;;
1133   --enable-vhdx) vhdx="yes"
1134   ;;
1135   --disable-vhdx) vhdx="no"
1136   ;;
1137   --disable-numa) numa="no"
1138   ;;
1139   --enable-numa) numa="yes"
1140   ;;
1141   --disable-tcmalloc) tcmalloc="no"
1142   ;;
1143   --enable-tcmalloc) tcmalloc="yes"
1144   ;;
1145   --disable-jemalloc) jemalloc="no"
1146   ;;
1147   --enable-jemalloc) jemalloc="yes"
1148   ;;
1149   *)
1150       echo "ERROR: unknown option $opt"
1151       echo "Try '$0 --help' for more information"
1152       exit 1
1153   ;;
1154   esac
1155 done
1156
1157 if ! has $python; then
1158   error_exit "Python not found. Use --python=/path/to/python"
1159 fi
1160
1161 # Note that if the Python conditional here evaluates True we will exit
1162 # with status 1 which is a shell 'false' value.
1163 if ! $python -c 'import sys; sys.exit(sys.version_info < (2,4) or sys.version_info >= (3,))'; then
1164   error_exit "Cannot use '$python', Python 2.4 or later is required." \
1165       "Note that Python 3 or later is not yet supported." \
1166       "Use --python=/path/to/python to specify a supported Python."
1167 fi
1168
1169 # The -B switch was added in Python 2.6.
1170 # If it is supplied, compiled files are not written.
1171 # Use it for Python versions which support it.
1172 if $python -B -c 'import sys; sys.exit(0)' 2>/dev/null; then
1173   python="$python -B"
1174 fi
1175
1176 case "$cpu" in
1177     ppc)
1178            CPU_CFLAGS="-m32"
1179            LDFLAGS="-m32 $LDFLAGS"
1180            ;;
1181     ppc64)
1182            CPU_CFLAGS="-m64"
1183            LDFLAGS="-m64 $LDFLAGS"
1184            ;;
1185     sparc)
1186            LDFLAGS="-m32 $LDFLAGS"
1187            CPU_CFLAGS="-m32 -mcpu=ultrasparc"
1188            ;;
1189     sparc64)
1190            LDFLAGS="-m64 $LDFLAGS"
1191            CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1192            ;;
1193     s390)
1194            CPU_CFLAGS="-m31"
1195            LDFLAGS="-m31 $LDFLAGS"
1196            ;;
1197     s390x)
1198            CPU_CFLAGS="-m64"
1199            LDFLAGS="-m64 $LDFLAGS"
1200            ;;
1201     i386)
1202            CPU_CFLAGS="-m32"
1203            LDFLAGS="-m32 $LDFLAGS"
1204            cc_i386='$(CC) -m32'
1205            ;;
1206     x86_64)
1207            CPU_CFLAGS="-m64"
1208            LDFLAGS="-m64 $LDFLAGS"
1209            cc_i386='$(CC) -m32'
1210            ;;
1211     x32)
1212            CPU_CFLAGS="-mx32"
1213            LDFLAGS="-mx32 $LDFLAGS"
1214            cc_i386='$(CC) -m32'
1215            ;;
1216     # No special flags required for other host CPUs
1217 esac
1218
1219 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1220 EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"
1221
1222 default_target_list=""
1223
1224 mak_wilds=""
1225
1226 if [ "$softmmu" = "yes" ]; then
1227     mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1228 fi
1229 if [ "$linux_user" = "yes" ]; then
1230     mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1231 fi
1232 if [ "$bsd_user" = "yes" ]; then
1233     mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1234 fi
1235
1236 for config in $mak_wilds; do
1237     default_target_list="${default_target_list} $(basename "$config" .mak)"
1238 done
1239
1240 if test x"$show_help" = x"yes" ; then
1241 cat << EOF
1242
1243 Usage: configure [options]
1244 Options: [defaults in brackets after descriptions]
1245
1246 Standard options:
1247   --help                   print this message
1248   --prefix=PREFIX          install in PREFIX [$prefix]
1249   --interp-prefix=PREFIX   where to find shared libraries, etc.
1250                            use %M for cpu name [$interp_prefix]
1251   --target-list=LIST       set target list (default: build everything)
1252 $(echo Available targets: $default_target_list | \
1253   fold -s -w 53 | sed -e 's/^/                           /')
1254
1255 Advanced options (experts only):
1256   --source-path=PATH       path of source code [$source_path]
1257   --cross-prefix=PREFIX    use PREFIX for compile tools [$cross_prefix]
1258   --cc=CC                  use C compiler CC [$cc]
1259   --iasl=IASL              use ACPI compiler IASL [$iasl]
1260   --host-cc=CC             use C compiler CC [$host_cc] for code run at
1261                            build time
1262   --cxx=CXX                use C++ compiler CXX [$cxx]
1263   --objcc=OBJCC            use Objective-C compiler OBJCC [$objcc]
1264   --extra-cflags=CFLAGS    append extra C compiler flags QEMU_CFLAGS
1265   --extra-ldflags=LDFLAGS  append extra linker flags LDFLAGS
1266   --make=MAKE              use specified make [$make]
1267   --install=INSTALL        use specified install [$install]
1268   --python=PYTHON          use specified python [$python]
1269   --smbd=SMBD              use specified smbd [$smbd]
1270   --static                 enable static build [$static]
1271   --mandir=PATH            install man pages in PATH
1272   --datadir=PATH           install firmware in PATH$confsuffix
1273   --docdir=PATH            install documentation in PATH$confsuffix
1274   --bindir=PATH            install binaries in PATH
1275   --libdir=PATH            install libraries in PATH
1276   --sysconfdir=PATH        install config in PATH$confsuffix
1277   --localstatedir=PATH     install local state in PATH (set at runtime on win32)
1278   --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1279   --enable-debug           enable common debug build options
1280   --disable-strip          disable stripping binaries
1281   --disable-werror         disable compilation abort on warning
1282   --disable-stack-protector disable compiler-provided stack protection
1283   --audio-drv-list=LIST    set audio drivers list:
1284                            Available drivers: $audio_possible_drivers
1285   --block-drv-whitelist=L  Same as --block-drv-rw-whitelist=L
1286   --block-drv-rw-whitelist=L
1287                            set block driver read-write whitelist
1288                            (affects only QEMU, not qemu-img)
1289   --block-drv-ro-whitelist=L
1290                            set block driver read-only whitelist
1291                            (affects only QEMU, not qemu-img)
1292   --enable-trace-backends=B Set trace backend
1293                            Available backends: $($python $source_path/scripts/tracetool.py --list-backends)
1294   --with-trace-file=NAME   Full PATH,NAME of file to store traces
1295                            Default:trace-<pid>
1296   --disable-slirp          disable SLIRP userspace network connectivity
1297   --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1298   --oss-lib                path to OSS library
1299   --cpu=CPU                Build for host CPU [$cpu]
1300   --with-coroutine=BACKEND coroutine backend. Supported options:
1301                            gthread, ucontext, sigaltstack, windows
1302   --enable-gcov            enable test coverage analysis with gcov
1303   --gcov=GCOV              use specified gcov [$gcov_tool]
1304   --disable-blobs          disable installing provided firmware blobs
1305   --with-vss-sdk=SDK-path  enable Windows VSS support in QEMU Guest Agent
1306   --with-win-sdk=SDK-path  path to Windows Platform SDK (to build VSS .tlb)
1307
1308 Optional features, enabled with --enable-FEATURE and
1309 disabled with --disable-FEATURE, default is enabled if available:
1310
1311   system          all system emulation targets
1312   user            supported user emulation targets
1313   linux-user      all linux usermode emulation targets
1314   bsd-user        all BSD usermode emulation targets
1315   docs            build documentation
1316   guest-agent     build the QEMU Guest Agent
1317   guest-agent-msi build guest agent Windows MSI installation package
1318   pie             Position Independent Executables
1319   modules         modules support
1320   debug-tcg       TCG debugging (default is disabled)
1321   debug-info      debugging information
1322   sparse          sparse checker
1323
1324   gnutls          GNUTLS cryptography support
1325   sdl             SDL UI
1326   --with-sdlabi     select preferred SDL ABI 1.2 or 2.0
1327   gtk             gtk UI
1328   --with-gtkabi     select preferred GTK ABI 2.0 or 3.0
1329   vte             vte support for the gtk UI
1330   curses          curses UI
1331   vnc             VNC UI support
1332   vnc-tls         TLS encryption for VNC server
1333   vnc-sasl        SASL encryption for VNC server
1334   vnc-jpeg        JPEG lossy compression for VNC server
1335   vnc-png         PNG compression for VNC server
1336   cocoa           Cocoa UI (Mac OS X only)
1337   virtfs          VirtFS
1338   xen             xen backend driver support
1339   xen-pci-passthrough
1340   brlapi          BrlAPI (Braile)
1341   curl            curl connectivity
1342   fdt             fdt device tree
1343   bluez           bluez stack connectivity
1344   kvm             KVM acceleration support
1345   rdma            RDMA-based migration support
1346   uuid            uuid support
1347   vde             support for vde network
1348   netmap          support for netmap network
1349   linux-aio       Linux AIO support
1350   cap-ng          libcap-ng support
1351   attr            attr and xattr support
1352   vhost-net       vhost-net acceleration support
1353   spice           spice
1354   rbd             rados block device (rbd)
1355   libiscsi        iscsi support
1356   libnfs          nfs support
1357   smartcard-nss   smartcard nss support
1358   libusb          libusb (for usb passthrough)
1359   usb-redir       usb network redirection support
1360   lzo             support of lzo compression library
1361   snappy          support of snappy compression library
1362   bzip2           support of bzip2 compression library
1363                   (for reading bzip2-compressed dmg images)
1364   seccomp         seccomp support
1365   coroutine-pool  coroutine freelist (better performance)
1366   glusterfs       GlusterFS backend
1367   archipelago     Archipelago backend
1368   tpm             TPM support
1369   libssh2         ssh block device support
1370   vhdx            support for the Microsoft VHDX image format
1371   numa            libnuma support
1372   tcmalloc        tcmalloc support
1373   jemalloc        jemalloc support
1374
1375 NOTE: The object files are built at the place where configure is launched
1376 EOF
1377 exit 0
1378 fi
1379
1380 # Now we have handled --enable-tcg-interpreter and know we're not just
1381 # printing the help message, bail out if the host CPU isn't supported.
1382 if test "$ARCH" = "unknown"; then
1383     if test "$tcg_interpreter" = "yes" ; then
1384         echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1385         ARCH=tci
1386     else
1387         error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1388     fi
1389 fi
1390
1391 # Consult white-list to determine whether to enable werror
1392 # by default.  Only enable by default for git builds
1393 z_version=`cut -f3 -d. $source_path/VERSION`
1394
1395 if test -z "$werror" ; then
1396     if test -d "$source_path/.git" -a \
1397         "$linux" = "yes" ; then
1398         werror="yes"
1399     else
1400         werror="no"
1401     fi
1402 fi
1403
1404 # check that the C compiler works.
1405 write_c_skeleton;
1406 if compile_object ; then
1407   : C compiler works ok
1408 else
1409     error_exit "\"$cc\" either does not exist or does not work"
1410 fi
1411
1412 # Check that the C++ compiler exists and works with the C compiler
1413 if has $cxx; then
1414     cat > $TMPC <<EOF
1415 int c_function(void);
1416 int main(void) { return c_function(); }
1417 EOF
1418
1419     compile_object
1420
1421     cat > $TMPCXX <<EOF
1422 extern "C" {
1423    int c_function(void);
1424 }
1425 int c_function(void) { return 42; }
1426 EOF
1427
1428     update_cxxflags
1429
1430     if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
1431         # C++ compiler $cxx works ok with C compiler $cc
1432         :
1433     else
1434         echo "C++ compiler $cxx does not work with C compiler $cc"
1435         echo "Disabling C++ specific optional code"
1436         cxx=
1437     fi
1438 else
1439     echo "No C++ compiler available; disabling C++ specific optional code"
1440     cxx=
1441 fi
1442
1443 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1444 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1445 gcc_flags="-Wmissing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1446 gcc_flags="-Wendif-labels $gcc_flags"
1447 gcc_flags="-Wno-initializer-overrides $gcc_flags"
1448 gcc_flags="-Wno-string-plus-int $gcc_flags"
1449 # Note that we do not add -Werror to gcc_flags here, because that would
1450 # enable it for all configure tests. If a configure test failed due
1451 # to -Werror this would just silently disable some features,
1452 # so it's too error prone.
1453
1454 cc_has_warning_flag() {
1455     write_c_skeleton;
1456
1457     # Use the positive sense of the flag when testing for -Wno-wombat
1458     # support (gcc will happily accept the -Wno- form of unknown
1459     # warning options).
1460     optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1461     compile_prog "-Werror $optflag" ""
1462 }
1463
1464 for flag in $gcc_flags; do
1465     if cc_has_warning_flag $flag ; then
1466         QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1467     fi
1468 done
1469
1470 if test "$stack_protector" != "no"; then
1471   gcc_flags="-fstack-protector-strong -fstack-protector-all"
1472   sp_on=0
1473   for flag in $gcc_flags; do
1474     # We need to check both a compile and a link, since some compiler
1475     # setups fail only on a .c->.o compile and some only at link time
1476     if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
1477        compile_prog "-Werror $flag" ""; then
1478       QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1479       LIBTOOLFLAGS="$LIBTOOLFLAGS -Wc,$flag"
1480       sp_on=1
1481       break
1482     fi
1483   done
1484   if test "$stack_protector" = yes; then
1485     if test $sp_on = 0; then
1486       error_exit "Stack protector not supported"
1487     fi
1488   fi
1489 fi
1490
1491 # Workaround for http://gcc.gnu.org/PR55489.  Happens with -fPIE/-fPIC and
1492 # large functions that use global variables.  The bug is in all releases of
1493 # GCC, but it became particularly acute in 4.6.x and 4.7.x.  It is fixed in
1494 # 4.7.3 and 4.8.0.  We should be able to delete this at the end of 2013.
1495 cat > $TMPC << EOF
1496 #if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
1497 int main(void) { return 0; }
1498 #else
1499 #error No bug in this compiler.
1500 #endif
1501 EOF
1502 if compile_prog "-Werror -fno-gcse" "" ; then
1503   TRANSLATE_OPT_CFLAGS=-fno-gcse
1504 fi
1505
1506 if test "$static" = "yes" ; then
1507   if test "$modules" = "yes" ; then
1508     error_exit "static and modules are mutually incompatible"
1509   fi
1510   if test "$pie" = "yes" ; then
1511     error_exit "static and pie are mutually incompatible"
1512   else
1513     pie="no"
1514   fi
1515 fi
1516
1517 # Unconditional check for compiler __thread support
1518   cat > $TMPC << EOF
1519 static __thread int tls_var;
1520 int main(void) { return tls_var; }
1521 EOF
1522
1523 if ! compile_prog "-Werror" "" ; then
1524     error_exit "Your compiler does not support the __thread specifier for " \
1525         "Thread-Local Storage (TLS). Please upgrade to a version that does."
1526 fi
1527
1528 if test "$pie" = ""; then
1529   case "$cpu-$targetos" in
1530     i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
1531       ;;
1532     *)
1533       pie="no"
1534       ;;
1535   esac
1536 fi
1537
1538 if test "$pie" != "no" ; then
1539   cat > $TMPC << EOF
1540
1541 #ifdef __linux__
1542 #  define THREAD __thread
1543 #else
1544 #  define THREAD
1545 #endif
1546
1547 static THREAD int tls_var;
1548
1549 int main(void) { return tls_var; }
1550
1551 EOF
1552   if compile_prog "-fPIE -DPIE" "-pie"; then
1553     QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
1554     LDFLAGS="-pie $LDFLAGS"
1555     pie="yes"
1556     if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
1557       LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
1558     fi
1559   else
1560     if test "$pie" = "yes"; then
1561       error_exit "PIE not available due to missing toolchain support"
1562     else
1563       echo "Disabling PIE due to missing toolchain support"
1564       pie="no"
1565     fi
1566   fi
1567
1568   if compile_prog "-Werror -fno-pie" "-nopie"; then
1569     CFLAGS_NOPIE="-fno-pie"
1570     LDFLAGS_NOPIE="-nopie"
1571   fi
1572 fi
1573
1574 # check for broken gcc and libtool in RHEL5
1575 if test -n "$libtool" -a "$pie" != "no" ; then
1576   cat > $TMPC <<EOF
1577
1578 void *f(unsigned char *buf, int len);
1579 void *g(unsigned char *buf, int len);
1580
1581 void *
1582 f(unsigned char *buf, int len)
1583 {
1584     return (void*)0L;
1585 }
1586
1587 void *
1588 g(unsigned char *buf, int len)
1589 {
1590     return f(buf, len);
1591 }
1592
1593 EOF
1594   if ! libtool_prog; then
1595     echo "Disabling libtool due to broken toolchain support"
1596     libtool=
1597   fi
1598 fi
1599
1600 ##########################################
1601 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
1602 # use i686 as default anyway, but for those that don't, an explicit
1603 # specification is necessary
1604
1605 if test "$cpu" = "i386"; then
1606   cat > $TMPC << EOF
1607 static int sfaa(int *ptr)
1608 {
1609   return __sync_fetch_and_and(ptr, 0);
1610 }
1611
1612 int main(void)
1613 {
1614   int val = 42;
1615   val = __sync_val_compare_and_swap(&val, 0, 1);
1616   sfaa(&val);
1617   return val;
1618 }
1619 EOF
1620   if ! compile_prog "" "" ; then
1621     QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
1622   fi
1623 fi
1624
1625 #########################################
1626 # Solaris specific configure tool chain decisions
1627
1628 if test "$solaris" = "yes" ; then
1629   if has $install; then
1630     :
1631   else
1632     error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
1633         "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
1634         "to get ginstall which is used by default (which lives in /opt/csw/bin)"
1635   fi
1636   if test "`path_of $install`" = "/usr/sbin/install" ; then
1637     error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
1638         "try ginstall from the GNU fileutils available from www.blastwave.org" \
1639         "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
1640   fi
1641   if has ar; then
1642     :
1643   else
1644     if test -f /usr/ccs/bin/ar ; then
1645       error_exit "No path includes ar" \
1646           "Add /usr/ccs/bin to your path and rerun configure"
1647     fi
1648     error_exit "No path includes ar"
1649   fi
1650 fi
1651
1652 if test -z "${target_list+xxx}" ; then
1653     target_list="$default_target_list"
1654 else
1655     target_list=`echo "$target_list" | sed -e 's/,/ /g'`
1656 fi
1657
1658 # Check that we recognised the target name; this allows a more
1659 # friendly error message than if we let it fall through.
1660 for target in $target_list; do
1661     case " $default_target_list " in
1662         *" $target "*)
1663             ;;
1664         *)
1665             error_exit "Unknown target name '$target'"
1666             ;;
1667     esac
1668 done
1669
1670 # see if system emulation was really requested
1671 case " $target_list " in
1672   *"-softmmu "*) softmmu=yes
1673   ;;
1674   *) softmmu=no
1675   ;;
1676 esac
1677
1678 feature_not_found() {
1679   feature=$1
1680   remedy=$2
1681
1682   error_exit "User requested feature $feature" \
1683       "configure was not able to find it." \
1684       "$remedy"
1685 }
1686
1687 # ---
1688 # big/little endian test
1689 cat > $TMPC << EOF
1690 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
1691 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
1692 extern int foo(short *, short *);
1693 int main(int argc, char *argv[]) {
1694     return foo(big_endian, little_endian);
1695 }
1696 EOF
1697
1698 if compile_object ; then
1699     if grep -q BiGeNdIaN $TMPO ; then
1700         bigendian="yes"
1701     elif grep -q LiTtLeEnDiAn $TMPO ; then
1702         bigendian="no"
1703     else
1704         echo big/little test failed
1705     fi
1706 else
1707     echo big/little test failed
1708 fi
1709
1710 ##########################################
1711 # cocoa implies not SDL or GTK
1712 # (the cocoa UI code currently assumes it is always the active UI
1713 # and doesn't interact well with other UI frontend code)
1714 if test "$cocoa" = "yes"; then
1715     if test "$sdl" = "yes"; then
1716         error_exit "Cocoa and SDL UIs cannot both be enabled at once"
1717     fi
1718     if test "$gtk" = "yes"; then
1719         error_exit "Cocoa and GTK UIs cannot both be enabled at once"
1720     fi
1721     gtk=no
1722     sdl=no
1723 fi
1724
1725 ##########################################
1726 # L2TPV3 probe
1727
1728 cat > $TMPC <<EOF
1729 #include <sys/socket.h>
1730 #include <linux/ip.h>
1731 int main(void) { return sizeof(struct mmsghdr); }
1732 EOF
1733 if compile_prog "" "" ; then
1734   l2tpv3=yes
1735 else
1736   l2tpv3=no
1737 fi
1738
1739 ##########################################
1740 # pkg-config probe
1741
1742 if ! has "$pkg_config_exe"; then
1743   error_exit "pkg-config binary '$pkg_config_exe' not found"
1744 fi
1745
1746 ##########################################
1747 # NPTL probe
1748
1749 if test "$linux_user" = "yes"; then
1750   cat > $TMPC <<EOF
1751 #include <sched.h>
1752 #include <linux/futex.h>
1753 int main(void) {
1754 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
1755 #error bork
1756 #endif
1757   return 0;
1758 }
1759 EOF
1760   if ! compile_object ; then
1761     feature_not_found "nptl" "Install glibc and linux kernel headers."
1762   fi
1763 fi
1764
1765 ##########################################
1766 # zlib check
1767
1768 if test "$zlib" != "no" ; then
1769     cat > $TMPC << EOF
1770 #include <zlib.h>
1771 int main(void) { zlibVersion(); return 0; }
1772 EOF
1773     if compile_prog "" "-lz" ; then
1774         :
1775     else
1776         error_exit "zlib check failed" \
1777             "Make sure to have the zlib libs and headers installed."
1778     fi
1779 fi
1780 LIBS="$LIBS -lz"
1781
1782 ##########################################
1783 # lzo check
1784
1785 if test "$lzo" != "no" ; then
1786     cat > $TMPC << EOF
1787 #include <lzo/lzo1x.h>
1788 int main(void) { lzo_version(); return 0; }
1789 EOF
1790     if compile_prog "" "-llzo2" ; then
1791         libs_softmmu="$libs_softmmu -llzo2"
1792         lzo="yes"
1793     else
1794         if test "$lzo" = "yes"; then
1795             feature_not_found "liblzo2" "Install liblzo2 devel"
1796         fi
1797         lzo="no"
1798     fi
1799 fi
1800
1801 ##########################################
1802 # snappy check
1803
1804 if test "$snappy" != "no" ; then
1805     cat > $TMPC << EOF
1806 #include <snappy-c.h>
1807 int main(void) { snappy_max_compressed_length(4096); return 0; }
1808 EOF
1809     if compile_prog "" "-lsnappy" ; then
1810         libs_softmmu="$libs_softmmu -lsnappy"
1811         snappy="yes"
1812     else
1813         if test "$snappy" = "yes"; then
1814             feature_not_found "libsnappy" "Install libsnappy devel"
1815         fi
1816         snappy="no"
1817     fi
1818 fi
1819
1820 ##########################################
1821 # bzip2 check
1822
1823 if test "$bzip2" != "no" ; then
1824     cat > $TMPC << EOF
1825 #include <bzlib.h>
1826 int main(void) { BZ2_bzlibVersion(); return 0; }
1827 EOF
1828     if compile_prog "" "-lbz2" ; then
1829         bzip2="yes"
1830     else
1831         if test "$bzip2" = "yes"; then
1832             feature_not_found "libbzip2" "Install libbzip2 devel"
1833         fi
1834         bzip2="no"
1835     fi
1836 fi
1837
1838 ##########################################
1839 # libseccomp check
1840
1841 if test "$seccomp" != "no" ; then
1842     if test "$cpu" = "i386" || test "$cpu" = "x86_64" &&
1843         $pkg_config --atleast-version=2.1.1 libseccomp; then
1844         libs_softmmu="$libs_softmmu `$pkg_config --libs libseccomp`"
1845         QEMU_CFLAGS="$QEMU_CFLAGS `$pkg_config --cflags libseccomp`"
1846         seccomp="yes"
1847     else
1848         if test "$seccomp" = "yes"; then
1849             feature_not_found "libseccomp" "Install libseccomp devel >= 2.1.1"
1850         fi
1851         seccomp="no"
1852     fi
1853 fi
1854 ##########################################
1855 # xen probe
1856
1857 if test "$xen" != "no" ; then
1858   xen_libs="-lxenstore -lxenctrl -lxenguest"
1859
1860   # First we test whether Xen headers and libraries are available.
1861   # If no, we are done and there is no Xen support.
1862   # If yes, more tests are run to detect the Xen version.
1863
1864   # Xen (any)
1865   cat > $TMPC <<EOF
1866 #include <xenctrl.h>
1867 int main(void) {
1868   return 0;
1869 }
1870 EOF
1871   if ! compile_prog "" "$xen_libs" ; then
1872     # Xen not found
1873     if test "$xen" = "yes" ; then
1874       feature_not_found "xen" "Install xen devel"
1875     fi
1876     xen=no
1877
1878   # Xen unstable
1879   elif
1880       cat > $TMPC <<EOF &&
1881 #include <xenctrl.h>
1882 #include <xenstore.h>
1883 #include <stdint.h>
1884 #include <xen/hvm/hvm_info_table.h>
1885 #if !defined(HVM_MAX_VCPUS)
1886 # error HVM_MAX_VCPUS not defined
1887 #endif
1888 int main(void) {
1889   xc_interface *xc;
1890   xs_daemon_open();
1891   xc = xc_interface_open(0, 0, 0);
1892   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1893   xc_gnttab_open(NULL, 0);
1894   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1895   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
1896   xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
1897   xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
1898   return 0;
1899 }
1900 EOF
1901       compile_prog "" "$xen_libs"
1902     then
1903     xen_ctrl_version=460
1904     xen=yes
1905
1906   # Xen 4.5
1907   elif
1908       cat > $TMPC <<EOF &&
1909 #include <xenctrl.h>
1910 #include <xenstore.h>
1911 #include <stdint.h>
1912 #include <xen/hvm/hvm_info_table.h>
1913 #if !defined(HVM_MAX_VCPUS)
1914 # error HVM_MAX_VCPUS not defined
1915 #endif
1916 int main(void) {
1917   xc_interface *xc;
1918   xs_daemon_open();
1919   xc = xc_interface_open(0, 0, 0);
1920   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1921   xc_gnttab_open(NULL, 0);
1922   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1923   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
1924   xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
1925   return 0;
1926 }
1927 EOF
1928       compile_prog "" "$xen_libs"
1929     then
1930     xen_ctrl_version=450
1931     xen=yes
1932
1933   elif
1934       cat > $TMPC <<EOF &&
1935 #include <xenctrl.h>
1936 #include <xenstore.h>
1937 #include <stdint.h>
1938 #include <xen/hvm/hvm_info_table.h>
1939 #if !defined(HVM_MAX_VCPUS)
1940 # error HVM_MAX_VCPUS not defined
1941 #endif
1942 int main(void) {
1943   xc_interface *xc;
1944   xs_daemon_open();
1945   xc = xc_interface_open(0, 0, 0);
1946   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1947   xc_gnttab_open(NULL, 0);
1948   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1949   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
1950   return 0;
1951 }
1952 EOF
1953       compile_prog "" "$xen_libs"
1954     then
1955     xen_ctrl_version=420
1956     xen=yes
1957
1958   elif
1959       cat > $TMPC <<EOF &&
1960 #include <xenctrl.h>
1961 #include <xs.h>
1962 #include <stdint.h>
1963 #include <xen/hvm/hvm_info_table.h>
1964 #if !defined(HVM_MAX_VCPUS)
1965 # error HVM_MAX_VCPUS not defined
1966 #endif
1967 int main(void) {
1968   xs_daemon_open();
1969   xc_interface_open(0, 0, 0);
1970   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1971   xc_gnttab_open(NULL, 0);
1972   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1973   return 0;
1974 }
1975 EOF
1976       compile_prog "" "$xen_libs"
1977     then
1978     xen_ctrl_version=410
1979     xen=yes
1980
1981   # Xen 4.0.0
1982   elif
1983       cat > $TMPC <<EOF &&
1984 #include <xenctrl.h>
1985 #include <xs.h>
1986 #include <stdint.h>
1987 #include <xen/hvm/hvm_info_table.h>
1988 #if !defined(HVM_MAX_VCPUS)
1989 # error HVM_MAX_VCPUS not defined
1990 #endif
1991 int main(void) {
1992   struct xen_add_to_physmap xatp = {
1993     .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
1994   };
1995   xs_daemon_open();
1996   xc_interface_open();
1997   xc_gnttab_open();
1998   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1999   xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
2000   return 0;
2001 }
2002 EOF
2003       compile_prog "" "$xen_libs"
2004     then
2005     xen_ctrl_version=400
2006     xen=yes
2007
2008   # Xen 3.4.0
2009   elif
2010       cat > $TMPC <<EOF &&
2011 #include <xenctrl.h>
2012 #include <xs.h>
2013 int main(void) {
2014   struct xen_add_to_physmap xatp = {
2015     .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
2016   };
2017   xs_daemon_open();
2018   xc_interface_open();
2019   xc_gnttab_open();
2020   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2021   xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
2022   return 0;
2023 }
2024 EOF
2025       compile_prog "" "$xen_libs"
2026     then
2027     xen_ctrl_version=340
2028     xen=yes
2029
2030   # Xen 3.3.0
2031   elif
2032       cat > $TMPC <<EOF &&
2033 #include <xenctrl.h>
2034 #include <xs.h>
2035 int main(void) {
2036   xs_daemon_open();
2037   xc_interface_open();
2038   xc_gnttab_open();
2039   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2040   return 0;
2041 }
2042 EOF
2043       compile_prog "" "$xen_libs"
2044     then
2045     xen_ctrl_version=330
2046     xen=yes
2047
2048   # Xen version unsupported
2049   else
2050     if test "$xen" = "yes" ; then
2051       feature_not_found "xen (unsupported version)" "Install supported xen (e.g. 4.0, 3.4, 3.3)"
2052     fi
2053     xen=no
2054   fi
2055
2056   if test "$xen" = yes; then
2057     libs_softmmu="$xen_libs $libs_softmmu"
2058   fi
2059 fi
2060
2061 if test "$xen_pci_passthrough" != "no"; then
2062   if test "$xen" = "yes" && test "$linux" = "yes" &&
2063     test "$xen_ctrl_version" -ge 340; then
2064     xen_pci_passthrough=yes
2065   else
2066     if test "$xen_pci_passthrough" = "yes"; then
2067       if test "$xen_ctrl_version" -lt 340; then
2068         error_exit "User requested feature Xen PCI Passthrough" \
2069             "This feature does not work with Xen 3.3"
2070       fi
2071       error_exit "User requested feature Xen PCI Passthrough" \
2072           " but this feature requires /sys from Linux"
2073     fi
2074     xen_pci_passthrough=no
2075   fi
2076 fi
2077
2078 ##########################################
2079 # libtool probe
2080
2081 if ! has $libtool; then
2082     libtool=
2083 fi
2084
2085 # MacOSX ships with a libtool which isn't the GNU one; weed this
2086 # out by checking whether libtool supports the --version switch
2087 if test -n "$libtool"; then
2088   if ! "$libtool" --version >/dev/null 2>&1; then
2089     libtool=
2090   fi
2091 fi
2092
2093 ##########################################
2094 # Sparse probe
2095 if test "$sparse" != "no" ; then
2096   if has cgcc; then
2097     sparse=yes
2098   else
2099     if test "$sparse" = "yes" ; then
2100       feature_not_found "sparse" "Install sparse binary"
2101     fi
2102     sparse=no
2103   fi
2104 fi
2105
2106 ##########################################
2107 # X11 probe
2108 x11_cflags=
2109 x11_libs=-lX11
2110 if $pkg_config --exists "x11"; then
2111     x11_cflags=`$pkg_config --cflags x11`
2112     x11_libs=`$pkg_config --libs x11`
2113 fi
2114
2115 ##########################################
2116 # GTK probe
2117
2118 if test "$gtkabi" = ""; then
2119     # The GTK ABI was not specified explicitly, so try whether 2.0 is available.
2120     # Use 3.0 as a fallback if that is available.
2121     if $pkg_config --exists "gtk+-2.0 >= 2.18.0"; then
2122         gtkabi=2.0
2123     elif $pkg_config --exists "gtk+-3.0 >= 3.0.0"; then
2124         gtkabi=3.0
2125     else
2126         gtkabi=2.0
2127     fi
2128 fi
2129
2130 if test "$gtk" != "no"; then
2131     gtkpackage="gtk+-$gtkabi"
2132     gtkx11package="gtk+-x11-$gtkabi"
2133     if test "$gtkabi" = "3.0" ; then
2134       gtkversion="3.0.0"
2135     else
2136       gtkversion="2.18.0"
2137     fi
2138     if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2139         gtk_cflags=`$pkg_config --cflags $gtkpackage`
2140         gtk_libs=`$pkg_config --libs $gtkpackage`
2141         if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2142             gtk_cflags="$gtk_cflags $x11_cflags"
2143             gtk_libs="$gtk_libs $x11_libs"
2144         fi
2145         libs_softmmu="$gtk_libs $libs_softmmu"
2146         gtk="yes"
2147     elif test "$gtk" = "yes"; then
2148         feature_not_found "gtk" "Install gtk2 or gtk3 devel"
2149     else
2150         gtk="no"
2151     fi
2152 fi
2153
2154
2155 ##########################################
2156 # GNUTLS probe
2157
2158 gnutls_works() {
2159     # Unfortunately some distros have bad pkg-config information for gnutls
2160     # such that it claims to exist but you get a compiler error if you try
2161     # to use the options returned by --libs. Specifically, Ubuntu for --static
2162     # builds doesn't work:
2163     # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2164     #
2165     # So sanity check the cflags/libs before assuming gnutls can be used.
2166     if ! $pkg_config --exists "gnutls"; then
2167         return 1
2168     fi
2169
2170     write_c_skeleton
2171     compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2172 }
2173
2174 gnutls_gcrypt=no
2175 gnutls_nettle=no
2176 if test "$gnutls" != "no"; then
2177     if gnutls_works; then
2178         gnutls_cflags=`$pkg_config --cflags gnutls`
2179         gnutls_libs=`$pkg_config --libs gnutls`
2180         libs_softmmu="$gnutls_libs $libs_softmmu"
2181         libs_tools="$gnutls_libs $libs_tools"
2182         QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2183         gnutls="yes"
2184
2185         # gnutls_hash_init requires >= 2.9.10
2186         if $pkg_config --exists "gnutls >= 2.9.10"; then
2187             gnutls_hash="yes"
2188         else
2189             gnutls_hash="no"
2190         fi
2191
2192         if $pkg_config --exists 'gnutls >= 3.0'; then
2193             gnutls_gcrypt=no
2194             gnutls_nettle=yes
2195         elif $pkg_config --exists 'gnutls >= 2.12'; then
2196             case `$pkg_config --libs --static gnutls` in
2197                 *gcrypt*)
2198                     gnutls_gcrypt=yes
2199                     gnutls_nettle=no
2200                     ;;
2201                 *nettle*)
2202                     gnutls_gcrypt=no
2203                     gnutls_nettle=yes
2204                     ;;
2205                 *)
2206                     gnutls_gcrypt=yes
2207                     gnutls_nettle=no
2208                     ;;
2209             esac
2210         else
2211             gnutls_gcrypt=yes
2212             gnutls_nettle=no
2213         fi
2214     elif test "$gnutls" = "yes"; then
2215         feature_not_found "gnutls" "Install gnutls devel"
2216     else
2217         gnutls="no"
2218         gnutls_hash="no"
2219     fi
2220 else
2221     gnutls_hash="no"
2222 fi
2223
2224 if test "$gnutls_gcrypt" != "no"; then
2225     if has "libgcrypt-config"; then
2226         gcrypt_cflags=`libgcrypt-config --cflags`
2227         gcrypt_libs=`libgcrypt-config --libs`
2228         libs_softmmu="$gcrypt_libs $libs_softmmu"
2229         libs_tools="$gcrypt_libs $libs_tools"
2230         QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2231     else
2232         feature_not_found "gcrypt" "Install gcrypt devel"
2233     fi
2234 fi
2235
2236
2237 if test "$gnutls_nettle" != "no"; then
2238     if $pkg_config --exists "nettle"; then
2239         nettle_cflags=`$pkg_config --cflags nettle`
2240         nettle_libs=`$pkg_config --libs nettle`
2241         nettle_version=`$pkg_config --modversion nettle`
2242         libs_softmmu="$nettle_libs $libs_softmmu"
2243         libs_tools="$nettle_libs $libs_tools"
2244         QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2245     else
2246         feature_not_found "nettle" "Install nettle devel"
2247     fi
2248 fi
2249
2250 ##########################################
2251 # libtasn1 - only for the TLS creds/session test suite
2252
2253 tasn1=yes
2254 if $pkg_config --exists "libtasn1"; then
2255     tasn1_cflags=`$pkg_config --cflags libtasn1`
2256     tasn1_libs=`$pkg_config --libs libtasn1`
2257     test_cflags="$test_cflags $tasn1_cflags"
2258     test_libs="$test_libs $tasn1_libs"
2259 else
2260     tasn1=no
2261 fi
2262
2263
2264 ##########################################
2265 # VTE probe
2266
2267 if test "$vte" != "no"; then
2268     if test "$gtkabi" = "3.0"; then
2269       vtepackage="vte-2.90"
2270       vteversion="0.32.0"
2271     else
2272       vtepackage="vte"
2273       vteversion="0.24.0"
2274     fi
2275     if $pkg_config --exists "$vtepackage >= $vteversion"; then
2276         vte_cflags=`$pkg_config --cflags $vtepackage`
2277         vte_libs=`$pkg_config --libs $vtepackage`
2278         libs_softmmu="$vte_libs $libs_softmmu"
2279         vte="yes"
2280     elif test "$vte" = "yes"; then
2281         if test "$gtkabi" = "3.0"; then
2282             feature_not_found "vte" "Install libvte-2.90 devel"
2283         else
2284             feature_not_found "vte" "Install libvte devel"
2285         fi
2286     else
2287         vte="no"
2288     fi
2289 fi
2290
2291 ##########################################
2292 # SDL probe
2293
2294 # Look for sdl configuration program (pkg-config or sdl-config).  Try
2295 # sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2296
2297 if test $sdlabi = "2.0"; then
2298     sdl_config=$sdl2_config
2299     sdlname=sdl2
2300     sdlconfigname=sdl2_config
2301 else
2302     sdlname=sdl
2303     sdlconfigname=sdl_config
2304 fi
2305
2306 if test "`basename $sdl_config`" != $sdlconfigname && ! has ${sdl_config}; then
2307   sdl_config=$sdlconfigname
2308 fi
2309
2310 if $pkg_config $sdlname --exists; then
2311   sdlconfig="$pkg_config $sdlname"
2312   _sdlversion=`$sdlconfig --modversion 2>/dev/null | sed 's/[^0-9]//g'`
2313 elif has ${sdl_config}; then
2314   sdlconfig="$sdl_config"
2315   _sdlversion=`$sdlconfig --version | sed 's/[^0-9]//g'`
2316 else
2317   if test "$sdl" = "yes" ; then
2318     feature_not_found "sdl" "Install SDL devel"
2319   fi
2320   sdl=no
2321 fi
2322 if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2323   echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2324 fi
2325
2326 sdl_too_old=no
2327 if test "$sdl" != "no" ; then
2328   cat > $TMPC << EOF
2329 #include <SDL.h>
2330 #undef main /* We don't want SDL to override our main() */
2331 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2332 EOF
2333   sdl_cflags=`$sdlconfig --cflags 2> /dev/null`
2334   if test "$static" = "yes" ; then
2335     sdl_libs=`$sdlconfig --static-libs 2>/dev/null`
2336   else
2337     sdl_libs=`$sdlconfig --libs 2> /dev/null`
2338   fi
2339   if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2340     if test "$_sdlversion" -lt 121 ; then
2341       sdl_too_old=yes
2342     else
2343       sdl=yes
2344     fi
2345
2346     # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2347     if test "$sdl" = "yes" -a "$static" = "yes" ; then
2348       if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2349          sdl_libs="$sdl_libs `aalib-config --static-libs 2>/dev/null`"
2350          sdl_cflags="$sdl_cflags `aalib-config --cflags 2>/dev/null`"
2351       fi
2352       if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2353         :
2354       else
2355         sdl=no
2356       fi
2357     fi # static link
2358   else # sdl not found
2359     if test "$sdl" = "yes" ; then
2360       feature_not_found "sdl" "Install SDL devel"
2361     fi
2362     sdl=no
2363   fi # sdl compile test
2364 fi
2365
2366 if test "$sdl" = "yes" ; then
2367   cat > $TMPC <<EOF
2368 #include <SDL.h>
2369 #if defined(SDL_VIDEO_DRIVER_X11)
2370 #include <X11/XKBlib.h>
2371 #else
2372 #error No x11 support
2373 #endif
2374 int main(void) { return 0; }
2375 EOF
2376   if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2377     sdl_cflags="$sdl_cflags $x11_cflags"
2378     sdl_libs="$sdl_libs $x11_libs"
2379   fi
2380   libs_softmmu="$sdl_libs $libs_softmmu"
2381 fi
2382
2383 ##########################################
2384 # RDMA needs OpenFabrics libraries
2385 if test "$rdma" != "no" ; then
2386   cat > $TMPC <<EOF
2387 #include <rdma/rdma_cma.h>
2388 int main(void) { return 0; }
2389 EOF
2390   rdma_libs="-lrdmacm -libverbs"
2391   if compile_prog "" "$rdma_libs" ; then
2392     rdma="yes"
2393     libs_softmmu="$libs_softmmu $rdma_libs"
2394   else
2395     if test "$rdma" = "yes" ; then
2396         error_exit \
2397             " OpenFabrics librdmacm/libibverbs not present." \
2398             " Your options:" \
2399             "  (1) Fast: Install infiniband packages from your distro." \
2400             "  (2) Cleanest: Install libraries from www.openfabrics.org" \
2401             "  (3) Also: Install softiwarp if you don't have RDMA hardware"
2402     fi
2403     rdma="no"
2404   fi
2405 fi
2406
2407
2408 ##########################################
2409 # VNC SASL detection
2410 if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
2411   cat > $TMPC <<EOF
2412 #include <sasl/sasl.h>
2413 #include <stdio.h>
2414 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2415 EOF
2416   # Assuming Cyrus-SASL installed in /usr prefix
2417   vnc_sasl_cflags=""
2418   vnc_sasl_libs="-lsasl2"
2419   if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2420     vnc_sasl=yes
2421     libs_softmmu="$vnc_sasl_libs $libs_softmmu"
2422     QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
2423   else
2424     if test "$vnc_sasl" = "yes" ; then
2425       feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2426     fi
2427     vnc_sasl=no
2428   fi
2429 fi
2430
2431 ##########################################
2432 # VNC JPEG detection
2433 if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2434 cat > $TMPC <<EOF
2435 #include <stdio.h>
2436 #include <jpeglib.h>
2437 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2438 EOF
2439     vnc_jpeg_cflags=""
2440     vnc_jpeg_libs="-ljpeg"
2441   if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2442     vnc_jpeg=yes
2443     libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
2444     QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2445   else
2446     if test "$vnc_jpeg" = "yes" ; then
2447       feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2448     fi
2449     vnc_jpeg=no
2450   fi
2451 fi
2452
2453 ##########################################
2454 # VNC PNG detection
2455 if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
2456 cat > $TMPC <<EOF
2457 //#include <stdio.h>
2458 #include <png.h>
2459 #include <stddef.h>
2460 int main(void) {
2461     png_structp png_ptr;
2462     png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
2463     return png_ptr != 0;
2464 }
2465 EOF
2466   if $pkg_config libpng --exists; then
2467     vnc_png_cflags=`$pkg_config libpng --cflags`
2468     vnc_png_libs=`$pkg_config libpng --libs`
2469   else
2470     vnc_png_cflags=""
2471     vnc_png_libs="-lpng"
2472   fi
2473   if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2474     vnc_png=yes
2475     libs_softmmu="$vnc_png_libs $libs_softmmu"
2476     QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
2477   else
2478     if test "$vnc_png" = "yes" ; then
2479       feature_not_found "vnc-png" "Install libpng devel"
2480     fi
2481     vnc_png=no
2482   fi
2483 fi
2484
2485 ##########################################
2486 # fnmatch() probe, used for ACL routines
2487 fnmatch="no"
2488 cat > $TMPC << EOF
2489 #include <fnmatch.h>
2490 int main(void)
2491 {
2492     fnmatch("foo", "foo", 0);
2493     return 0;
2494 }
2495 EOF
2496 if compile_prog "" "" ; then
2497    fnmatch="yes"
2498 fi
2499
2500 ##########################################
2501 # uuid_generate() probe, used for vdi block driver
2502 # Note that on some systems (notably MacOSX) no extra library
2503 # need be linked to get the uuid functions.
2504 if test "$uuid" != "no" ; then
2505   uuid_libs="-luuid"
2506   cat > $TMPC << EOF
2507 #include <uuid/uuid.h>
2508 int main(void)
2509 {
2510     uuid_t my_uuid;
2511     uuid_generate(my_uuid);
2512     return 0;
2513 }
2514 EOF
2515   if compile_prog "" "" ; then
2516     uuid="yes"
2517   elif compile_prog "" "$uuid_libs" ; then
2518     uuid="yes"
2519     libs_softmmu="$uuid_libs $libs_softmmu"
2520     libs_tools="$uuid_libs $libs_tools"
2521   else
2522     if test "$uuid" = "yes" ; then
2523       feature_not_found "uuid" "Install libuuid devel"
2524     fi
2525     uuid=no
2526   fi
2527 fi
2528
2529 if test "$vhdx" = "yes" ; then
2530     if test "$uuid" = "no" ; then
2531         error_exit "uuid required for VHDX support"
2532     fi
2533 elif test "$vhdx" != "no" ; then
2534     if test "$uuid" = "yes" ; then
2535         vhdx=yes
2536     else
2537         vhdx=no
2538     fi
2539 fi
2540
2541 ##########################################
2542 # xfsctl() probe, used for raw-posix
2543 if test "$xfs" != "no" ; then
2544   cat > $TMPC << EOF
2545 #include <stddef.h>  /* NULL */
2546 #include <xfs/xfs.h>
2547 int main(void)
2548 {
2549     xfsctl(NULL, 0, 0, NULL);
2550     return 0;
2551 }
2552 EOF
2553   if compile_prog "" "" ; then
2554     xfs="yes"
2555   else
2556     if test "$xfs" = "yes" ; then
2557       feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
2558     fi
2559     xfs=no
2560   fi
2561 fi
2562
2563 ##########################################
2564 # vde libraries probe
2565 if test "$vde" != "no" ; then
2566   vde_libs="-lvdeplug"
2567   cat > $TMPC << EOF
2568 #include <libvdeplug.h>
2569 int main(void)
2570 {
2571     struct vde_open_args a = {0, 0, 0};
2572     char s[] = "";
2573     vde_open(s, s, &a);
2574     return 0;
2575 }
2576 EOF
2577   if compile_prog "" "$vde_libs" ; then
2578     vde=yes
2579     libs_softmmu="$vde_libs $libs_softmmu"
2580     libs_tools="$vde_libs $libs_tools"
2581   else
2582     if test "$vde" = "yes" ; then
2583       feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
2584     fi
2585     vde=no
2586   fi
2587 fi
2588
2589 ##########################################
2590 # netmap support probe
2591 # Apart from looking for netmap headers, we make sure that the host API version
2592 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2593 # a minor/major version number. Minor new features will be marked with values up
2594 # to 15, and if something happens that requires a change to the backend we will
2595 # move above 15, submit the backend fixes and modify this two bounds.
2596 if test "$netmap" != "no" ; then
2597   cat > $TMPC << EOF
2598 #include <inttypes.h>
2599 #include <net/if.h>
2600 #include <net/netmap.h>
2601 #include <net/netmap_user.h>
2602 #if (NETMAP_API < 11) || (NETMAP_API > 15)
2603 #error
2604 #endif
2605 int main(void) { return 0; }
2606 EOF
2607   if compile_prog "" "" ; then
2608     netmap=yes
2609   else
2610     if test "$netmap" = "yes" ; then
2611       feature_not_found "netmap"
2612     fi
2613     netmap=no
2614   fi
2615 fi
2616
2617 ##########################################
2618 # libcap-ng library probe
2619 if test "$cap_ng" != "no" ; then
2620   cap_libs="-lcap-ng"
2621   cat > $TMPC << EOF
2622 #include <cap-ng.h>
2623 int main(void)
2624 {
2625     capng_capability_to_name(CAPNG_EFFECTIVE);
2626     return 0;
2627 }
2628 EOF
2629   if compile_prog "" "$cap_libs" ; then
2630     cap_ng=yes
2631     libs_tools="$cap_libs $libs_tools"
2632   else
2633     if test "$cap_ng" = "yes" ; then
2634       feature_not_found "cap_ng" "Install libcap-ng devel"
2635     fi
2636     cap_ng=no
2637   fi
2638 fi
2639
2640 ##########################################
2641 # Sound support libraries probe
2642
2643 audio_drv_probe()
2644 {
2645     drv=$1
2646     hdr=$2
2647     lib=$3
2648     exp=$4
2649     cfl=$5
2650         cat > $TMPC << EOF
2651 #include <$hdr>
2652 int main(void) { $exp }
2653 EOF
2654     if compile_prog "$cfl" "$lib" ; then
2655         :
2656     else
2657         error_exit "$drv check failed" \
2658             "Make sure to have the $drv libs and headers installed."
2659     fi
2660 }
2661
2662 audio_drv_list=`echo "$audio_drv_list" | sed -e 's/,/ /g'`
2663 for drv in $audio_drv_list; do
2664     case $drv in
2665     alsa)
2666     audio_drv_probe $drv alsa/asoundlib.h -lasound \
2667         "return snd_pcm_close((snd_pcm_t *)0);"
2668     libs_softmmu="-lasound $libs_softmmu"
2669     ;;
2670
2671     pa)
2672     audio_drv_probe $drv pulse/mainloop.h "-lpulse" \
2673         "pa_mainloop *m = 0; pa_mainloop_free (m); return 0;"
2674     libs_softmmu="-lpulse $libs_softmmu"
2675     audio_pt_int="yes"
2676     ;;
2677
2678     coreaudio)
2679       libs_softmmu="-framework CoreAudio $libs_softmmu"
2680     ;;
2681
2682     dsound)
2683       libs_softmmu="-lole32 -ldxguid $libs_softmmu"
2684       audio_win_int="yes"
2685     ;;
2686
2687     oss)
2688       libs_softmmu="$oss_lib $libs_softmmu"
2689     ;;
2690
2691     sdl|wav)
2692     # XXX: Probes for CoreAudio, DirectSound, SDL(?)
2693     ;;
2694
2695     *)
2696     echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
2697         error_exit "Unknown driver '$drv' selected" \
2698             "Possible drivers are: $audio_possible_drivers"
2699     }
2700     ;;
2701     esac
2702 done
2703
2704 ##########################################
2705 # BrlAPI probe
2706
2707 if test "$brlapi" != "no" ; then
2708   brlapi_libs="-lbrlapi"
2709   cat > $TMPC << EOF
2710 #include <brlapi.h>
2711 #include <stddef.h>
2712 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
2713 EOF
2714   if compile_prog "" "$brlapi_libs" ; then
2715     brlapi=yes
2716     libs_softmmu="$brlapi_libs $libs_softmmu"
2717   else
2718     if test "$brlapi" = "yes" ; then
2719       feature_not_found "brlapi" "Install brlapi devel"
2720     fi
2721     brlapi=no
2722   fi
2723 fi
2724
2725 ##########################################
2726 # curses probe
2727 if test "$curses" != "no" ; then
2728   if test "$mingw32" = "yes" ; then
2729     curses_list="-lpdcurses"
2730   else
2731     curses_list="$($pkg_config --libs ncurses 2>/dev/null):-lncurses:-lcurses"
2732   fi
2733   curses_found=no
2734   cat > $TMPC << EOF
2735 #include <curses.h>
2736 int main(void) {
2737   const char *s = curses_version();
2738   resize_term(0, 0);
2739   return s != 0;
2740 }
2741 EOF
2742   IFS=:
2743   for curses_lib in $curses_list; do
2744     unset IFS
2745     if compile_prog "" "$curses_lib" ; then
2746       curses_found=yes
2747       libs_softmmu="$curses_lib $libs_softmmu"
2748       break
2749     fi
2750   done
2751   unset IFS
2752   if test "$curses_found" = "yes" ; then
2753     curses=yes
2754   else
2755     if test "$curses" = "yes" ; then
2756       feature_not_found "curses" "Install ncurses devel"
2757     fi
2758     curses=no
2759   fi
2760 fi
2761
2762 ##########################################
2763 # curl probe
2764 if test "$curl" != "no" ; then
2765   if $pkg_config libcurl --exists; then
2766     curlconfig="$pkg_config libcurl"
2767   else
2768     curlconfig=curl-config
2769   fi
2770   cat > $TMPC << EOF
2771 #include <curl/curl.h>
2772 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
2773 EOF
2774   curl_cflags=`$curlconfig --cflags 2>/dev/null`
2775   curl_libs=`$curlconfig --libs 2>/dev/null`
2776   if compile_prog "$curl_cflags" "$curl_libs" ; then
2777     curl=yes
2778   else
2779     if test "$curl" = "yes" ; then
2780       feature_not_found "curl" "Install libcurl devel"
2781     fi
2782     curl=no
2783   fi
2784 fi # test "$curl"
2785
2786 ##########################################
2787 # bluez support probe
2788 if test "$bluez" != "no" ; then
2789   cat > $TMPC << EOF
2790 #include <bluetooth/bluetooth.h>
2791 int main(void) { return bt_error(0); }
2792 EOF
2793   bluez_cflags=`$pkg_config --cflags bluez 2> /dev/null`
2794   bluez_libs=`$pkg_config --libs bluez 2> /dev/null`
2795   if compile_prog "$bluez_cflags" "$bluez_libs" ; then
2796     bluez=yes
2797     libs_softmmu="$bluez_libs $libs_softmmu"
2798   else
2799     if test "$bluez" = "yes" ; then
2800       feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
2801     fi
2802     bluez="no"
2803   fi
2804 fi
2805
2806 ##########################################
2807 # glib support probe
2808
2809 glib_req_ver=2.22
2810 glib_modules=gthread-2.0
2811 if test "$modules" = yes; then
2812     glib_modules="$glib_modules gmodule-2.0"
2813 fi
2814
2815 for i in $glib_modules; do
2816     if $pkg_config --atleast-version=$glib_req_ver $i; then
2817         glib_cflags=`$pkg_config --cflags $i`
2818         glib_libs=`$pkg_config --libs $i`
2819         CFLAGS="$glib_cflags $CFLAGS"
2820         LIBS="$glib_libs $LIBS"
2821         libs_qga="$glib_libs $libs_qga"
2822     else
2823         error_exit "glib-$glib_req_ver $i is required to compile QEMU"
2824     fi
2825 done
2826
2827 # g_test_trap_subprocess added in 2.38. Used by some tests.
2828 glib_subprocess=yes
2829 if ! $pkg_config --atleast-version=2.38 glib-2.0; then
2830     glib_subprocess=no
2831 fi
2832
2833 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
2834 cat > $TMPC << EOF
2835 #include <glib.h>
2836 int main(void) { return 0; }
2837 EOF
2838 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
2839     if cc_has_warning_flag "-Wno-unknown-attributes"; then
2840         glib_cflags="-Wno-unknown-attributes $glib_cflags"
2841         CFLAGS="-Wno-unknown-attributes $CFLAGS"
2842     fi
2843 fi
2844
2845 ##########################################
2846 # SHA command probe for modules
2847 if test "$modules" = yes; then
2848     shacmd_probe="sha1sum sha1 shasum"
2849     for c in $shacmd_probe; do
2850         if has $c; then
2851             shacmd="$c"
2852             break
2853         fi
2854     done
2855     if test "$shacmd" = ""; then
2856         error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
2857     fi
2858 fi
2859
2860 ##########################################
2861 # pixman support probe
2862
2863 if test "$pixman" = ""; then
2864   if test "$want_tools" = "no" -a "$softmmu" = "no"; then
2865     pixman="none"
2866   elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
2867     pixman="system"
2868   else
2869     pixman="internal"
2870   fi
2871 fi
2872 if test "$pixman" = "none"; then
2873   if test "$want_tools" != "no" -o "$softmmu" != "no"; then
2874     error_exit "pixman disabled but system emulation or tools build" \
2875         "enabled.  You can turn off pixman only if you also" \
2876         "disable all system emulation targets and the tools" \
2877         "build with '--disable-tools --disable-system'."
2878   fi
2879   pixman_cflags=
2880   pixman_libs=
2881 elif test "$pixman" = "system"; then
2882   # pixman version has been checked above
2883   pixman_cflags=`$pkg_config --cflags pixman-1`
2884   pixman_libs=`$pkg_config --libs pixman-1`
2885 else
2886   if test ! -d ${source_path}/pixman/pixman; then
2887     error_exit "pixman >= 0.21.8 not present. Your options:" \
2888         "  (1) Preferred: Install the pixman devel package (any recent" \
2889         "      distro should have packages as Xorg needs pixman too)." \
2890         "  (2) Fetch the pixman submodule, using:" \
2891         "      git submodule update --init pixman"
2892   fi
2893   mkdir -p pixman/pixman
2894   pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
2895   pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
2896 fi
2897
2898 ##########################################
2899 # libcap probe
2900
2901 if test "$cap" != "no" ; then
2902   cat > $TMPC <<EOF
2903 #include <stdio.h>
2904 #include <sys/capability.h>
2905 int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
2906 EOF
2907   if compile_prog "" "-lcap" ; then
2908     cap=yes
2909   else
2910     cap=no
2911   fi
2912 fi
2913
2914 ##########################################
2915 # pthread probe
2916 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
2917
2918 pthread=no
2919 cat > $TMPC << EOF
2920 #include <pthread.h>
2921 static void *f(void *p) { return NULL; }
2922 int main(void) {
2923   pthread_t thread;
2924   pthread_create(&thread, 0, f, 0);
2925   return 0;
2926 }
2927 EOF
2928 if compile_prog "" "" ; then
2929   pthread=yes
2930 else
2931   for pthread_lib in $PTHREADLIBS_LIST; do
2932     if compile_prog "" "$pthread_lib" ; then
2933       pthread=yes
2934       found=no
2935       for lib_entry in $LIBS; do
2936         if test "$lib_entry" = "$pthread_lib"; then
2937           found=yes
2938           break
2939         fi
2940       done
2941       if test "$found" = "no"; then
2942         LIBS="$pthread_lib $LIBS"
2943       fi
2944       break
2945     fi
2946   done
2947 fi
2948
2949 if test "$mingw32" != yes -a "$pthread" = no; then
2950   error_exit "pthread check failed" \
2951       "Make sure to have the pthread libs and headers installed."
2952 fi
2953
2954 # check for pthread_setname_np
2955 pthread_setname_np=no
2956 cat > $TMPC << EOF
2957 #include <pthread.h>
2958
2959 static void *f(void *p) { return NULL; }
2960 int main(void)
2961 {
2962     pthread_t thread;
2963     pthread_create(&thread, 0, f, 0);
2964     pthread_setname_np(thread, "QEMU");
2965     return 0;
2966 }
2967 EOF
2968 if compile_prog "" "$pthread_lib" ; then
2969   pthread_setname_np=yes
2970 fi
2971
2972 ##########################################
2973 # rbd probe
2974 if test "$rbd" != "no" ; then
2975   cat > $TMPC <<EOF
2976 #include <stdio.h>
2977 #include <rbd/librbd.h>
2978 int main(void) {
2979     rados_t cluster;
2980     rados_create(&cluster, NULL);
2981     return 0;
2982 }
2983 EOF
2984   rbd_libs="-lrbd -lrados"
2985   if compile_prog "" "$rbd_libs" ; then
2986     rbd=yes
2987   else
2988     if test "$rbd" = "yes" ; then
2989       feature_not_found "rados block device" "Install librbd/ceph devel"
2990     fi
2991     rbd=no
2992   fi
2993 fi
2994
2995 ##########################################
2996 # libssh2 probe
2997 min_libssh2_version=1.2.8
2998 if test "$libssh2" != "no" ; then
2999   if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
3000     libssh2_cflags=`$pkg_config libssh2 --cflags`
3001     libssh2_libs=`$pkg_config libssh2 --libs`
3002     libssh2=yes
3003   else
3004     if test "$libssh2" = "yes" ; then
3005       error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
3006     fi
3007     libssh2=no
3008   fi
3009 fi
3010
3011 ##########################################
3012 # libssh2_sftp_fsync probe
3013
3014 if test "$libssh2" = "yes"; then
3015   cat > $TMPC <<EOF
3016 #include <stdio.h>
3017 #include <libssh2.h>
3018 #include <libssh2_sftp.h>
3019 int main(void) {
3020     LIBSSH2_SESSION *session;
3021     LIBSSH2_SFTP *sftp;
3022     LIBSSH2_SFTP_HANDLE *sftp_handle;
3023     session = libssh2_session_init ();
3024     sftp = libssh2_sftp_init (session);
3025     sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3026     libssh2_sftp_fsync (sftp_handle);
3027     return 0;
3028 }
3029 EOF
3030   # libssh2_cflags/libssh2_libs defined in previous test.
3031   if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3032     QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3033   fi
3034 fi
3035
3036 ##########################################
3037 # linux-aio probe
3038
3039 if test "$linux_aio" != "no" ; then
3040   cat > $TMPC <<EOF
3041 #include <libaio.h>
3042 #include <sys/eventfd.h>
3043 #include <stddef.h>
3044 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3045 EOF
3046   if compile_prog "" "-laio" ; then
3047     linux_aio=yes
3048   else
3049     if test "$linux_aio" = "yes" ; then
3050       feature_not_found "linux AIO" "Install libaio devel"
3051     fi
3052     linux_aio=no
3053   fi
3054 fi
3055
3056 ##########################################
3057 # TPM passthrough is only on x86 Linux
3058
3059 if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3060   tpm_passthrough=$tpm
3061 else
3062   tpm_passthrough=no
3063 fi
3064
3065 ##########################################
3066 # attr probe
3067
3068 if test "$attr" != "no" ; then
3069   cat > $TMPC <<EOF
3070 #include <stdio.h>
3071 #include <sys/types.h>
3072 #ifdef CONFIG_LIBATTR
3073 #include <attr/xattr.h>
3074 #else
3075 #include <sys/xattr.h>
3076 #endif
3077 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3078 EOF
3079   if compile_prog "" "" ; then
3080     attr=yes
3081   # Older distros have <attr/xattr.h>, and need -lattr:
3082   elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3083     attr=yes
3084     LIBS="-lattr $LIBS"
3085     libattr=yes
3086   else
3087     if test "$attr" = "yes" ; then
3088       feature_not_found "ATTR" "Install libc6 or libattr devel"
3089     fi
3090     attr=no
3091   fi
3092 fi
3093
3094 ##########################################
3095 # iovec probe
3096 cat > $TMPC <<EOF
3097 #include <sys/types.h>
3098 #include <sys/uio.h>
3099 #include <unistd.h>
3100 int main(void) { return sizeof(struct iovec); }
3101 EOF
3102 iovec=no
3103 if compile_prog "" "" ; then
3104   iovec=yes
3105 fi
3106
3107 ##########################################
3108 # preadv probe
3109 cat > $TMPC <<EOF
3110 #include <sys/types.h>
3111 #include <sys/uio.h>
3112 #include <unistd.h>
3113 int main(void) { return preadv(0, 0, 0, 0); }
3114 EOF
3115 preadv=no
3116 if compile_prog "" "" ; then
3117   preadv=yes
3118 fi
3119
3120 ##########################################
3121 # fdt probe
3122 # fdt support is mandatory for at least some target architectures,
3123 # so insist on it if we're building those system emulators.
3124 fdt_required=no
3125 for target in $target_list; do
3126   case $target in
3127     aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu)
3128       fdt_required=yes
3129     ;;
3130   esac
3131 done
3132
3133 if test "$fdt_required" = "yes"; then
3134   if test "$fdt" = "no"; then
3135     error_exit "fdt disabled but some requested targets require it." \
3136       "You can turn off fdt only if you also disable all the system emulation" \
3137       "targets which need it (by specifying a cut down --target-list)."
3138   fi
3139   fdt=yes
3140 fi
3141
3142 if test "$fdt" != "no" ; then
3143   fdt_libs="-lfdt"
3144   # explicitly check for libfdt_env.h as it is missing in some stable installs
3145   # and test for required functions to make sure we are on a version >= 1.4.0
3146   cat > $TMPC << EOF
3147 #include <libfdt.h>
3148 #include <libfdt_env.h>
3149 int main(void) { fdt_get_property_by_offset(0, 0, 0); return 0; }
3150 EOF
3151   if compile_prog "" "$fdt_libs" ; then
3152     # system DTC is good - use it
3153     fdt=yes
3154   elif test -d ${source_path}/dtc/libfdt ; then
3155     # have submodule DTC - use it
3156     fdt=yes
3157     dtc_internal="yes"
3158     mkdir -p dtc
3159     if [ "$pwd_is_source_path" != "y" ] ; then
3160        symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3161        symlink "$source_path/dtc/scripts" "dtc/scripts"
3162     fi
3163     fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3164     fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3165   elif test "$fdt" = "yes" ; then
3166     # have neither and want - prompt for system/submodule install
3167     error_exit "DTC (libfdt) version >= 1.4.0 not present. Your options:" \
3168         "  (1) Preferred: Install the DTC (libfdt) devel package" \
3169         "  (2) Fetch the DTC submodule, using:" \
3170         "      git submodule update --init dtc"
3171   else
3172     # don't have and don't want
3173     fdt_libs=
3174     fdt=no
3175   fi
3176 fi
3177
3178 libs_softmmu="$libs_softmmu $fdt_libs"
3179
3180 ##########################################
3181 # opengl probe (for sdl2, milkymist-tmu2)
3182
3183 # GLX probe, used by milkymist-tmu2
3184 # this is temporary, code will be switched to egl mid-term.
3185 cat > $TMPC << EOF
3186 #include <X11/Xlib.h>
3187 #include <GL/gl.h>
3188 #include <GL/glx.h>
3189 int main(void) { glBegin(0); glXQueryVersion(0,0,0); return 0; }
3190 EOF
3191 if compile_prog "" "-lGL -lX11" ; then
3192   have_glx=yes
3193 else
3194   have_glx=no
3195 fi
3196
3197 if test "$opengl" != "no" ; then
3198   opengl_pkgs="gl glesv2 epoxy egl"
3199   if $pkg_config $opengl_pkgs x11 && test "$have_glx" = "yes"; then
3200     opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3201     opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
3202     opengl=yes
3203   else
3204     if test "$opengl" = "yes" ; then
3205       feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3206     fi
3207     opengl_cflags=""
3208     opengl_libs=""
3209     opengl=no
3210   fi
3211 fi
3212
3213
3214 ##########################################
3215 # archipelago probe
3216 if test "$archipelago" != "no" ; then
3217     cat > $TMPC <<EOF
3218 #include <stdio.h>
3219 #include <xseg/xseg.h>
3220 #include <xseg/protocol.h>
3221 int main(void) {
3222     xseg_initialize();
3223     return 0;
3224 }
3225 EOF
3226     archipelago_libs=-lxseg
3227     if compile_prog "" "$archipelago_libs"; then
3228         archipelago="yes"
3229         libs_tools="$archipelago_libs $libs_tools"
3230         libs_softmmu="$archipelago_libs $libs_softmmu"
3231
3232         echo "WARNING: Please check the licenses of QEMU and libxseg carefully."
3233         echo "GPLv3 versions of libxseg may not be compatible with QEMU's"
3234         echo "license and therefore prevent redistribution."
3235         echo
3236         echo "To disable Archipelago, use --disable-archipelago"
3237     else
3238       if test "$archipelago" = "yes" ; then
3239         feature_not_found "Archipelago backend support" "Install libxseg devel"
3240       fi
3241       archipelago="no"
3242     fi
3243 fi
3244
3245
3246 ##########################################
3247 # glusterfs probe
3248 if test "$glusterfs" != "no" ; then
3249   if $pkg_config --atleast-version=3 glusterfs-api; then
3250     glusterfs="yes"
3251     glusterfs_cflags=`$pkg_config --cflags glusterfs-api`
3252     glusterfs_libs=`$pkg_config --libs glusterfs-api`
3253     if $pkg_config --atleast-version=5 glusterfs-api; then
3254       glusterfs_discard="yes"
3255     fi
3256     if $pkg_config --atleast-version=6 glusterfs-api; then
3257       glusterfs_zerofill="yes"
3258     fi
3259   else
3260     if test "$glusterfs" = "yes" ; then
3261       feature_not_found "GlusterFS backend support" \
3262           "Install glusterfs-api devel >= 3"
3263     fi
3264     glusterfs="no"
3265   fi
3266 fi
3267
3268 # Check for inotify functions when we are building linux-user
3269 # emulator.  This is done because older glibc versions don't
3270 # have syscall stubs for these implemented.  In that case we
3271 # don't provide them even if kernel supports them.
3272 #
3273 inotify=no
3274 cat > $TMPC << EOF
3275 #include <sys/inotify.h>
3276
3277 int
3278 main(void)
3279 {
3280         /* try to start inotify */
3281         return inotify_init();
3282 }
3283 EOF
3284 if compile_prog "" "" ; then
3285   inotify=yes
3286 fi
3287
3288 inotify1=no
3289 cat > $TMPC << EOF
3290 #include <sys/inotify.h>
3291
3292 int
3293 main(void)
3294 {
3295     /* try to start inotify */
3296     return inotify_init1(0);
3297 }
3298 EOF
3299 if compile_prog "" "" ; then
3300   inotify1=yes
3301 fi
3302
3303 # check if utimensat and futimens are supported
3304 utimens=no
3305 cat > $TMPC << EOF
3306 #define _ATFILE_SOURCE
3307 #include <stddef.h>
3308 #include <fcntl.h>
3309 #include <sys/stat.h>
3310
3311 int main(void)
3312 {
3313     utimensat(AT_FDCWD, "foo", NULL, 0);
3314     futimens(0, NULL);
3315     return 0;
3316 }
3317 EOF
3318 if compile_prog "" "" ; then
3319   utimens=yes
3320 fi
3321
3322 # check if pipe2 is there
3323 pipe2=no
3324 cat > $TMPC << EOF
3325 #include <unistd.h>
3326 #include <fcntl.h>
3327
3328 int main(void)
3329 {
3330     int pipefd[2];
3331     return pipe2(pipefd, O_CLOEXEC);
3332 }
3333 EOF
3334 if compile_prog "" "" ; then
3335   pipe2=yes
3336 fi
3337
3338 # check if accept4 is there
3339 accept4=no
3340 cat > $TMPC << EOF
3341 #include <sys/socket.h>
3342 #include <stddef.h>
3343
3344 int main(void)
3345 {
3346     accept4(0, NULL, NULL, SOCK_CLOEXEC);
3347     return 0;
3348 }
3349 EOF
3350 if compile_prog "" "" ; then
3351   accept4=yes
3352 fi
3353
3354 # check if tee/splice is there. vmsplice was added same time.
3355 splice=no
3356 cat > $TMPC << EOF
3357 #include <unistd.h>
3358 #include <fcntl.h>
3359 #include <limits.h>
3360
3361 int main(void)
3362 {
3363     int len, fd = 0;
3364     len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3365     splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3366     return 0;
3367 }
3368 EOF
3369 if compile_prog "" "" ; then
3370   splice=yes
3371 fi
3372
3373 ##########################################
3374 # libnuma probe
3375
3376 if test "$numa" != "no" ; then
3377   cat > $TMPC << EOF
3378 #include <numa.h>
3379 int main(void) { return numa_available(); }
3380 EOF
3381
3382   if compile_prog "" "-lnuma" ; then
3383     numa=yes
3384     libs_softmmu="-lnuma $libs_softmmu"
3385   else
3386     if test "$numa" = "yes" ; then
3387       feature_not_found "numa" "install numactl devel"
3388     fi
3389     numa=no
3390   fi
3391 fi
3392
3393 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3394     echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3395     exit 1
3396 fi
3397
3398 ##########################################
3399 # tcmalloc probe
3400
3401 if test "$tcmalloc" = "yes" ; then
3402   cat > $TMPC << EOF
3403 #include <stdlib.h>
3404 int main(void) { malloc(1); return 0; }
3405 EOF
3406
3407   if compile_prog "" "-ltcmalloc" ; then
3408     LIBS="-ltcmalloc $LIBS"
3409   else
3410     feature_not_found "tcmalloc" "install gperftools devel"
3411   fi
3412 fi
3413
3414 ##########################################
3415 # jemalloc probe
3416
3417 if test "$jemalloc" = "yes" ; then
3418   cat > $TMPC << EOF
3419 #include <stdlib.h>
3420 int main(void) { malloc(1); return 0; }
3421 EOF
3422
3423   if compile_prog "" "-ljemalloc" ; then
3424     LIBS="-ljemalloc $LIBS"
3425   else
3426     feature_not_found "jemalloc" "install jemalloc devel"
3427   fi
3428 fi
3429
3430 ##########################################
3431 # signalfd probe
3432 signalfd="no"
3433 cat > $TMPC << EOF
3434 #include <unistd.h>
3435 #include <sys/syscall.h>
3436 #include <signal.h>
3437 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3438 EOF
3439
3440 if compile_prog "" "" ; then
3441   signalfd=yes
3442 fi
3443
3444 # check if eventfd is supported
3445 eventfd=no
3446 cat > $TMPC << EOF
3447 #include <sys/eventfd.h>
3448
3449 int main(void)
3450 {
3451     return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3452 }
3453 EOF
3454 if compile_prog "" "" ; then
3455   eventfd=yes
3456 fi
3457
3458 # check for fallocate
3459 fallocate=no
3460 cat > $TMPC << EOF
3461 #include <fcntl.h>
3462
3463 int main(void)
3464 {
3465     fallocate(0, 0, 0, 0);
3466     return 0;
3467 }
3468 EOF
3469 if compile_prog "" "" ; then
3470   fallocate=yes
3471 fi
3472
3473 # check for fallocate hole punching
3474 fallocate_punch_hole=no
3475 cat > $TMPC << EOF
3476 #include <fcntl.h>
3477 #include <linux/falloc.h>
3478
3479 int main(void)
3480 {
3481     fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3482     return 0;
3483 }
3484 EOF
3485 if compile_prog "" "" ; then
3486   fallocate_punch_hole=yes
3487 fi
3488
3489 # check that fallocate supports range zeroing inside the file
3490 fallocate_zero_range=no
3491 cat > $TMPC << EOF
3492 #include <fcntl.h>
3493 #include <linux/falloc.h>
3494
3495 int main(void)
3496 {
3497     fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3498     return 0;
3499 }
3500 EOF
3501 if compile_prog "" "" ; then
3502   fallocate_zero_range=yes
3503 fi
3504
3505 # check for posix_fallocate
3506 posix_fallocate=no
3507 cat > $TMPC << EOF
3508 #include <fcntl.h>
3509
3510 int main(void)
3511 {
3512     posix_fallocate(0, 0, 0);
3513     return 0;
3514 }
3515 EOF
3516 if compile_prog "" "" ; then
3517     posix_fallocate=yes
3518 fi
3519
3520 # check for sync_file_range
3521 sync_file_range=no
3522 cat > $TMPC << EOF
3523 #include <fcntl.h>
3524
3525 int main(void)
3526 {
3527     sync_file_range(0, 0, 0, 0);
3528     return 0;
3529 }
3530 EOF
3531 if compile_prog "" "" ; then
3532   sync_file_range=yes
3533 fi
3534
3535 # check for linux/fiemap.h and FS_IOC_FIEMAP
3536 fiemap=no
3537 cat > $TMPC << EOF
3538 #include <sys/ioctl.h>
3539 #include <linux/fs.h>
3540 #include <linux/fiemap.h>
3541
3542 int main(void)
3543 {
3544     ioctl(0, FS_IOC_FIEMAP, 0);
3545     return 0;
3546 }
3547 EOF
3548 if compile_prog "" "" ; then
3549   fiemap=yes
3550 fi
3551
3552 # check for dup3
3553 dup3=no
3554 cat > $TMPC << EOF
3555 #include <unistd.h>
3556
3557 int main(void)
3558 {
3559     dup3(0, 0, 0);
3560     return 0;
3561 }
3562 EOF
3563 if compile_prog "" "" ; then
3564   dup3=yes
3565 fi
3566
3567 # check for ppoll support
3568 ppoll=no
3569 cat > $TMPC << EOF
3570 #include <poll.h>
3571
3572 int main(void)
3573 {
3574     struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3575     ppoll(&pfd, 1, 0, 0);
3576     return 0;
3577 }
3578 EOF
3579 if compile_prog "" "" ; then
3580   ppoll=yes
3581 fi
3582
3583 # check for prctl(PR_SET_TIMERSLACK , ... ) support
3584 prctl_pr_set_timerslack=no
3585 cat > $TMPC << EOF
3586 #include <sys/prctl.h>
3587
3588 int main(void)
3589 {
3590     prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3591     return 0;
3592 }
3593 EOF
3594 if compile_prog "" "" ; then
3595   prctl_pr_set_timerslack=yes
3596 fi
3597
3598 # check for epoll support
3599 epoll=no
3600 cat > $TMPC << EOF
3601 #include <sys/epoll.h>
3602
3603 int main(void)
3604 {
3605     epoll_create(0);
3606     return 0;
3607 }
3608 EOF
3609 if compile_prog "" "" ; then
3610   epoll=yes
3611 fi
3612
3613 # epoll_create1 and epoll_pwait are later additions
3614 # so we must check separately for their presence
3615 epoll_create1=no
3616 cat > $TMPC << EOF
3617 #include <sys/epoll.h>
3618
3619 int main(void)
3620 {
3621     /* Note that we use epoll_create1 as a value, not as
3622      * a function being called. This is necessary so that on
3623      * old SPARC glibc versions where the function was present in
3624      * the library but not declared in the header file we will
3625      * fail the configure check. (Otherwise we will get a compiler
3626      * warning but not an error, and will proceed to fail the
3627      * qemu compile where we compile with -Werror.)
3628      */
3629     return (int)(uintptr_t)&epoll_create1;
3630 }
3631 EOF
3632 if compile_prog "" "" ; then
3633   epoll_create1=yes
3634 fi
3635
3636 epoll_pwait=no
3637 cat > $TMPC << EOF
3638 #include <sys/epoll.h>
3639
3640 int main(void)
3641 {
3642     epoll_pwait(0, 0, 0, 0, 0);
3643     return 0;
3644 }
3645 EOF
3646 if compile_prog "" "" ; then
3647   epoll_pwait=yes
3648 fi
3649
3650 # check for sendfile support
3651 sendfile=no
3652 cat > $TMPC << EOF
3653 #include <sys/sendfile.h>
3654
3655 int main(void)
3656 {
3657     return sendfile(0, 0, 0, 0);
3658 }
3659 EOF
3660 if compile_prog "" "" ; then
3661   sendfile=yes
3662 fi
3663
3664 # check for timerfd support (glibc 2.8 and newer)
3665 timerfd=no
3666 cat > $TMPC << EOF
3667 #include <sys/timerfd.h>
3668
3669 int main(void)
3670 {
3671     return(timerfd_create(CLOCK_REALTIME, 0));
3672 }
3673 EOF
3674 if compile_prog "" "" ; then
3675   timerfd=yes
3676 fi
3677
3678 # check for setns and unshare support
3679 setns=no
3680 cat > $TMPC << EOF
3681 #include <sched.h>
3682
3683 int main(void)
3684 {
3685     int ret;
3686     ret = setns(0, 0);
3687     ret = unshare(0);
3688     return ret;
3689 }
3690 EOF
3691 if compile_prog "" "" ; then
3692   setns=yes
3693 fi
3694
3695 # Check if tools are available to build documentation.
3696 if test "$docs" != "no" ; then
3697   if has makeinfo && has pod2man; then
3698     docs=yes
3699   else
3700     if test "$docs" = "yes" ; then
3701       feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
3702     fi
3703     docs=no
3704   fi
3705 fi
3706
3707 # Search for bswap_32 function
3708 byteswap_h=no
3709 cat > $TMPC << EOF
3710 #include <byteswap.h>
3711 int main(void) { return bswap_32(0); }
3712 EOF
3713 if compile_prog "" "" ; then
3714   byteswap_h=yes
3715 fi
3716
3717 # Search for bswap32 function
3718 bswap_h=no
3719 cat > $TMPC << EOF
3720 #include <sys/endian.h>
3721 #include <sys/types.h>
3722 #include <machine/bswap.h>
3723 int main(void) { return bswap32(0); }
3724 EOF
3725 if compile_prog "" "" ; then
3726   bswap_h=yes
3727 fi
3728
3729 ##########################################
3730 # Do we have libiscsi >= 1.9.0
3731 if test "$libiscsi" != "no" ; then
3732   if $pkg_config --atleast-version=1.9.0 libiscsi; then
3733     libiscsi="yes"
3734     libiscsi_cflags=$($pkg_config --cflags libiscsi)
3735     libiscsi_libs=$($pkg_config --libs libiscsi)
3736   else
3737     if test "$libiscsi" = "yes" ; then
3738       feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
3739     fi
3740     libiscsi="no"
3741   fi
3742 fi
3743
3744 ##########################################
3745 # Do we need libm
3746 cat > $TMPC << EOF
3747 #include <math.h>
3748 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
3749 EOF
3750 if compile_prog "" "" ; then
3751   :
3752 elif compile_prog "" "-lm" ; then
3753   LIBS="-lm $LIBS"
3754   libs_qga="-lm $libs_qga"
3755 else
3756   error_exit "libm check failed"
3757 fi
3758
3759 ##########################################
3760 # Do we need librt
3761 # uClibc provides 2 versions of clock_gettime(), one with realtime
3762 # support and one without. This means that the clock_gettime() don't
3763 # need -lrt. We still need it for timer_create() so we check for this
3764 # function in addition.
3765 cat > $TMPC <<EOF
3766 #include <signal.h>
3767 #include <time.h>
3768 int main(void) {
3769   timer_create(CLOCK_REALTIME, NULL, NULL);
3770   return clock_gettime(CLOCK_REALTIME, NULL);
3771 }
3772 EOF
3773
3774 if compile_prog "" "" ; then
3775   :
3776 # we need pthread for static linking. use previous pthread test result
3777 elif compile_prog "" "$pthread_lib -lrt" ; then
3778   LIBS="$LIBS -lrt"
3779   libs_qga="$libs_qga -lrt"
3780 fi
3781
3782 if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
3783         "$aix" != "yes" -a "$haiku" != "yes" ; then
3784     libs_softmmu="-lutil $libs_softmmu"
3785 fi
3786
3787 ##########################################
3788 # spice probe
3789 if test "$spice" != "no" ; then
3790   cat > $TMPC << EOF
3791 #include <spice.h>
3792 int main(void) { spice_server_new(); return 0; }
3793 EOF
3794   spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
3795   spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
3796   if $pkg_config --atleast-version=0.12.0 spice-server && \
3797      $pkg_config --atleast-version=0.12.3 spice-protocol && \
3798      compile_prog "$spice_cflags" "$spice_libs" ; then
3799     spice="yes"
3800     libs_softmmu="$libs_softmmu $spice_libs"
3801     QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
3802     spice_protocol_version=$($pkg_config --modversion spice-protocol)
3803     spice_server_version=$($pkg_config --modversion spice-server)
3804   else
3805     if test "$spice" = "yes" ; then
3806       feature_not_found "spice" \
3807           "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
3808     fi
3809     spice="no"
3810   fi
3811 fi
3812
3813 # check for libcacard for smartcard support
3814 smartcard_cflags=""
3815 # TODO - what's the minimal nss version we support?
3816 if test "$smartcard_nss" != "no"; then
3817   cat > $TMPC << EOF
3818 #include <pk11pub.h>
3819 int main(void) { PK11_FreeSlot(0); return 0; }
3820 EOF
3821     # FIXME: do not include $glib_* in here
3822     nss_libs="$($pkg_config --libs nss 2>/dev/null) $glib_libs"
3823     nss_cflags="$($pkg_config --cflags nss 2>/dev/null) $glib_cflags"
3824     test_cflags="$nss_cflags"
3825     # The header files in nss < 3.13.3 have a bug which causes them to
3826     # emit a warning. If we're going to compile QEMU with -Werror, then
3827     # test that the headers don't have this bug. Otherwise we would pass
3828     # the configure test but fail to compile QEMU later.
3829     if test "$werror" = "yes"; then
3830         test_cflags="-Werror $test_cflags"
3831     fi
3832     if test -n "$libtool" &&
3833        $pkg_config --atleast-version=3.12.8 nss && \
3834       compile_prog "$test_cflags" "$nss_libs"; then
3835         smartcard_nss="yes"
3836     else
3837         if test "$smartcard_nss" = "yes"; then
3838             feature_not_found "nss" "Install nss devel >= 3.12.8"
3839         fi
3840         smartcard_nss="no"
3841     fi
3842 fi
3843
3844 # check for libusb
3845 if test "$libusb" != "no" ; then
3846     if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
3847         libusb="yes"
3848         libusb_cflags=$($pkg_config --cflags libusb-1.0)
3849         libusb_libs=$($pkg_config --libs libusb-1.0)
3850         QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
3851         libs_softmmu="$libs_softmmu $libusb_libs"
3852     else
3853         if test "$libusb" = "yes"; then
3854             feature_not_found "libusb" "Install libusb devel >= 1.0.13"
3855         fi
3856         libusb="no"
3857     fi
3858 fi
3859
3860 # check for usbredirparser for usb network redirection support
3861 if test "$usb_redir" != "no" ; then
3862     if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
3863         usb_redir="yes"
3864         usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
3865         usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
3866         QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
3867         libs_softmmu="$libs_softmmu $usb_redir_libs"
3868     else
3869         if test "$usb_redir" = "yes"; then
3870             feature_not_found "usb-redir" "Install usbredir devel"
3871         fi
3872         usb_redir="no"
3873     fi
3874 fi
3875
3876 ##########################################
3877 # check if we have VSS SDK headers for win
3878
3879 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
3880   case "$vss_win32_sdk" in
3881     "")   vss_win32_include="-I$source_path" ;;
3882     *\ *) # The SDK is installed in "Program Files" by default, but we cannot
3883           # handle path with spaces. So we symlink the headers into ".sdk/vss".
3884           vss_win32_include="-I$source_path/.sdk/vss"
3885           symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
3886           ;;
3887     *)    vss_win32_include="-I$vss_win32_sdk"
3888   esac
3889   cat > $TMPC << EOF
3890 #define __MIDL_user_allocate_free_DEFINED__
3891 #include <inc/win2003/vss.h>
3892 int main(void) { return VSS_CTX_BACKUP; }
3893 EOF
3894   if compile_prog "$vss_win32_include" "" ; then
3895     guest_agent_with_vss="yes"
3896     QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
3897     libs_qga="-lole32 -loleaut32 -lshlwapi -luuid -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
3898     qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
3899   else
3900     if test "$vss_win32_sdk" != "" ; then
3901       echo "ERROR: Please download and install Microsoft VSS SDK:"
3902       echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
3903       echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
3904       echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
3905       echo "ERROR: The headers are extracted in the directory \`inc'."
3906       feature_not_found "VSS support"
3907     fi
3908     guest_agent_with_vss="no"
3909   fi
3910 fi
3911
3912 ##########################################
3913 # lookup Windows platform SDK (if not specified)
3914 # The SDK is needed only to build .tlb (type library) file of guest agent
3915 # VSS provider from the source. It is usually unnecessary because the
3916 # pre-compiled .tlb file is included.
3917
3918 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
3919   if test -z "$win_sdk"; then
3920     programfiles="$PROGRAMFILES"
3921     test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
3922     if test -n "$programfiles"; then
3923       win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
3924     else
3925       feature_not_found "Windows SDK"
3926     fi
3927   elif test "$win_sdk" = "no"; then
3928     win_sdk=""
3929   fi
3930 fi
3931
3932 ##########################################
3933 # check if mingw environment provides a recent ntddscsi.h
3934 if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
3935   cat > $TMPC << EOF
3936 #include <windows.h>
3937 #include <ntddscsi.h>
3938 int main(void) {
3939 #if !defined(IOCTL_SCSI_GET_ADDRESS)
3940 #error Missing required ioctl definitions
3941 #endif
3942   SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
3943   return addr.Lun;
3944 }
3945 EOF
3946   if compile_prog "" "" ; then
3947     guest_agent_ntddscsi=yes
3948     libs_qga="-lsetupapi $libs_qga"
3949   fi
3950 fi
3951
3952 ##########################################
3953 # check if we have fdatasync
3954
3955 fdatasync=no
3956 cat > $TMPC << EOF
3957 #include <unistd.h>
3958 int main(void) {
3959 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
3960 return fdatasync(0);
3961 #else
3962 #error Not supported
3963 #endif
3964 }
3965 EOF
3966 if compile_prog "" "" ; then
3967     fdatasync=yes
3968 fi
3969
3970 ##########################################
3971 # check if we have madvise
3972
3973 madvise=no
3974 cat > $TMPC << EOF
3975 #include <sys/types.h>
3976 #include <sys/mman.h>
3977 #include <stddef.h>
3978 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
3979 EOF
3980 if compile_prog "" "" ; then
3981     madvise=yes
3982 fi
3983
3984 ##########################################
3985 # check if we have posix_madvise
3986
3987 posix_madvise=no
3988 cat > $TMPC << EOF
3989 #include <sys/mman.h>
3990 #include <stddef.h>
3991 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
3992 EOF
3993 if compile_prog "" "" ; then
3994     posix_madvise=yes
3995 fi
3996
3997 ##########################################
3998 # check if we have usable SIGEV_THREAD_ID
3999
4000 sigev_thread_id=no
4001 cat > $TMPC << EOF
4002 #include <signal.h>
4003 int main(void) {
4004   struct sigevent ev;
4005   ev.sigev_notify = SIGEV_THREAD_ID;
4006   ev._sigev_un._tid = 0;
4007   asm volatile("" : : "g"(&ev));
4008   return 0;
4009 }
4010 EOF
4011 if compile_prog "" "" ; then
4012     sigev_thread_id=yes
4013 fi
4014
4015 ##########################################
4016 # check if trace backend exists
4017
4018 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends  > /dev/null 2> /dev/null
4019 if test "$?" -ne 0 ; then
4020   error_exit "invalid trace backends" \
4021       "Please choose supported trace backends."
4022 fi
4023
4024 ##########################################
4025 # For 'ust' backend, test if ust headers are present
4026 if have_backend "ust"; then
4027   cat > $TMPC << EOF
4028 #include <lttng/tracepoint.h>
4029 int main(void) { return 0; }
4030 EOF
4031   if compile_prog "" "" ; then
4032     if $pkg_config lttng-ust --exists; then
4033       lttng_ust_libs=`$pkg_config --libs lttng-ust`
4034     else
4035       lttng_ust_libs="-llttng-ust"
4036     fi
4037     if $pkg_config liburcu-bp --exists; then
4038       urcu_bp_libs=`$pkg_config --libs liburcu-bp`
4039     else
4040       urcu_bp_libs="-lurcu-bp"
4041     fi
4042
4043     LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4044     libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4045   else
4046     error_exit "Trace backend 'ust' missing lttng-ust header files"
4047   fi
4048 fi
4049
4050 ##########################################
4051 # For 'dtrace' backend, test if 'dtrace' command is present
4052 if have_backend "dtrace"; then
4053   if ! has 'dtrace' ; then
4054     error_exit "dtrace command is not found in PATH $PATH"
4055   fi
4056   trace_backend_stap="no"
4057   if has 'stap' ; then
4058     trace_backend_stap="yes"
4059   fi
4060 fi
4061
4062 ##########################################
4063 # check and set a backend for coroutine
4064
4065 # We prefer ucontext, but it's not always possible. The fallback
4066 # is sigcontext. gthread is not selectable except explicitly, because
4067 # it is not functional enough to run QEMU proper. (It is occasionally
4068 # useful for debugging purposes.)  On Windows the only valid backend
4069 # is the Windows-specific one.
4070
4071 ucontext_works=no
4072 if test "$darwin" != "yes"; then
4073   cat > $TMPC << EOF
4074 #include <ucontext.h>
4075 #ifdef __stub_makecontext
4076 #error Ignoring glibc stub makecontext which will always fail
4077 #endif
4078 int main(void) { makecontext(0, 0, 0); return 0; }
4079 EOF
4080   if compile_prog "" "" ; then
4081     ucontext_works=yes
4082   fi
4083 fi
4084
4085 if test "$coroutine" = ""; then
4086   if test "$mingw32" = "yes"; then
4087     coroutine=win32
4088   elif test "$ucontext_works" = "yes"; then
4089     coroutine=ucontext
4090   else
4091     coroutine=sigaltstack
4092   fi
4093 else
4094   case $coroutine in
4095   windows)
4096     if test "$mingw32" != "yes"; then
4097       error_exit "'windows' coroutine backend only valid for Windows"
4098     fi
4099     # Unfortunately the user visible backend name doesn't match the
4100     # coroutine-*.c filename for this case, so we have to adjust it here.
4101     coroutine=win32
4102     ;;
4103   ucontext)
4104     if test "$ucontext_works" != "yes"; then
4105       feature_not_found "ucontext"
4106     fi
4107     ;;
4108   gthread|sigaltstack)
4109     if test "$mingw32" = "yes"; then
4110       error_exit "only the 'windows' coroutine backend is valid for Windows"
4111     fi
4112     ;;
4113   *)
4114     error_exit "unknown coroutine backend $coroutine"
4115     ;;
4116   esac
4117 fi
4118
4119 if test "$coroutine_pool" = ""; then
4120   if test "$coroutine" = "gthread"; then
4121     coroutine_pool=no
4122   else
4123     coroutine_pool=yes
4124   fi
4125 fi
4126 if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
4127   error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
4128 fi
4129
4130 ##########################################
4131 # check if we have open_by_handle_at
4132
4133 open_by_handle_at=no
4134 cat > $TMPC << EOF
4135 #include <fcntl.h>
4136 #if !defined(AT_EMPTY_PATH)
4137 # error missing definition
4138 #else
4139 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4140 #endif
4141 EOF
4142 if compile_prog "" "" ; then
4143     open_by_handle_at=yes
4144 fi
4145
4146 ########################################
4147 # check if we have linux/magic.h
4148
4149 linux_magic_h=no
4150 cat > $TMPC << EOF
4151 #include <linux/magic.h>
4152 int main(void) {
4153   return 0;
4154 }
4155 EOF
4156 if compile_prog "" "" ; then
4157     linux_magic_h=yes
4158 fi
4159
4160 ########################################
4161 # check whether we can disable warning option with a pragma (this is needed
4162 # to silence warnings in the headers of some versions of external libraries).
4163 # This test has to be compiled with -Werror as otherwise an unknown pragma is
4164 # only a warning.
4165 #
4166 # If we can't selectively disable warning in the code, disable -Werror so that
4167 # the build doesn't fail anyway.
4168
4169 pragma_disable_unused_but_set=no
4170 cat > $TMPC << EOF
4171 #pragma GCC diagnostic push
4172 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4173 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
4174 #pragma GCC diagnostic pop
4175
4176 int main(void) {
4177     return 0;
4178 }
4179 EOF
4180 if compile_prog "-Werror" "" ; then
4181     pragma_diagnostic_available=yes
4182 else
4183     werror=no
4184 fi
4185
4186 ########################################
4187 # check if we have valgrind/valgrind.h
4188
4189 valgrind_h=no
4190 cat > $TMPC << EOF
4191 #include <valgrind/valgrind.h>
4192 int main(void) {
4193   return 0;
4194 }
4195 EOF
4196 if compile_prog "" "" ; then
4197     valgrind_h=yes
4198 fi
4199
4200 ########################################
4201 # check if environ is declared
4202
4203 has_environ=no
4204 cat > $TMPC << EOF
4205 #include <unistd.h>
4206 int main(void) {
4207     environ = 0;
4208     return 0;
4209 }
4210 EOF
4211 if compile_prog "" "" ; then
4212     has_environ=yes
4213 fi
4214
4215 ########################################
4216 # check if cpuid.h is usable.
4217
4218 cpuid_h=no
4219 cat > $TMPC << EOF
4220 #include <cpuid.h>
4221 int main(void) {
4222     unsigned a, b, c, d;
4223     int max = __get_cpuid_max(0, 0);
4224
4225     if (max >= 1) {
4226         __cpuid(1, a, b, c, d);
4227     }
4228
4229     if (max >= 7) {
4230         __cpuid_count(7, 0, a, b, c, d);
4231     }
4232
4233     return 0;
4234 }
4235 EOF
4236 if compile_prog "" "" ; then
4237     cpuid_h=yes
4238 fi
4239
4240 ########################################
4241 # check if __[u]int128_t is usable.
4242
4243 int128=no
4244 cat > $TMPC << EOF
4245 #if defined(__clang_major__) && defined(__clang_minor__)
4246 # if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4247 #  error __int128_t does not work in CLANG before 3.2
4248 # endif
4249 #endif
4250 __int128_t a;
4251 __uint128_t b;
4252 int main (void) {
4253   a = a + b;
4254   b = a * b;
4255   a = a * a;
4256   return 0;
4257 }
4258 EOF
4259 if compile_prog "" "" ; then
4260     int128=yes
4261 fi
4262
4263 ########################################
4264 # check if getauxval is available.
4265
4266 getauxval=no
4267 cat > $TMPC << EOF
4268 #include <sys/auxv.h>
4269 int main(void) {
4270   return getauxval(AT_HWCAP) == 0;
4271 }
4272 EOF
4273 if compile_prog "" "" ; then
4274     getauxval=yes
4275 fi
4276
4277 ########################################
4278 # check if ccache is interfering with
4279 # semantic analysis of macros
4280
4281 ccache_cpp2=no
4282 cat > $TMPC << EOF
4283 static const int Z = 1;
4284 #define fn() ({ Z; })
4285 #define TAUT(X) ((X) == Z)
4286 #define PAREN(X, Y) (X == Y)
4287 #define ID(X) (X)
4288 int main(int argc, char *argv[])
4289 {
4290     int x = 0, y = 0;
4291     x = ID(x);
4292     x = fn();
4293     fn();
4294     if (PAREN(x, y)) return 0;
4295     if (TAUT(Z)) return 0;
4296     return 0;
4297 }
4298 EOF
4299
4300 if ! compile_object "-Werror"; then
4301     ccache_cpp2=yes
4302 fi
4303
4304 ##########################################
4305 # End of CC checks
4306 # After here, no more $cc or $ld runs
4307
4308 if test "$gcov" = "yes" ; then
4309   CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4310   LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
4311 elif test "$debug" = "no" ; then
4312   CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
4313 fi
4314
4315 ##########################################
4316 # Do we have libnfs
4317 if test "$libnfs" != "no" ; then
4318   if $pkg_config --atleast-version=1.9.3 libnfs; then
4319     libnfs="yes"
4320     libnfs_libs=$($pkg_config --libs libnfs)
4321     LIBS="$LIBS $libnfs_libs"
4322   else
4323     if test "$libnfs" = "yes" ; then
4324       feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
4325     fi
4326     libnfs="no"
4327   fi
4328 fi
4329
4330 # Disable zero malloc errors for official releases unless explicitly told to
4331 # enable/disable
4332 if test -z "$zero_malloc" ; then
4333     if test "$z_version" = "50" ; then
4334         zero_malloc="no"
4335     else
4336         zero_malloc="yes"
4337     fi
4338 fi
4339
4340 # Now we've finished running tests it's OK to add -Werror to the compiler flags
4341 if test "$werror" = "yes"; then
4342     QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
4343 fi
4344
4345 if test "$solaris" = "no" ; then
4346     if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
4347         LDFLAGS="-Wl,--warn-common $LDFLAGS"
4348     fi
4349 fi
4350
4351 # test if pod2man has --utf8 option
4352 if pod2man --help | grep -q utf8; then
4353     POD2MAN="pod2man --utf8"
4354 else
4355     POD2MAN="pod2man"
4356 fi
4357
4358 # Use ASLR, no-SEH and DEP if available
4359 if test "$mingw32" = "yes" ; then
4360     for flag in --dynamicbase --no-seh --nxcompat; do
4361         if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
4362             LDFLAGS="-Wl,$flag $LDFLAGS"
4363         fi
4364     done
4365 fi
4366
4367 qemu_confdir=$sysconfdir$confsuffix
4368 qemu_moddir=$libdir$confsuffix
4369 qemu_datadir=$datadir$confsuffix
4370 qemu_localedir="$datadir/locale"
4371
4372 tools=""
4373 if test "$want_tools" = "yes" ; then
4374   tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4375   if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
4376     tools="qemu-nbd\$(EXESUF) $tools"
4377   fi
4378 fi
4379 if test "$softmmu" = yes ; then
4380   if test "$virtfs" != no ; then
4381     if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
4382       virtfs=yes
4383       tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
4384     else
4385       if test "$virtfs" = yes; then
4386         error_exit "VirtFS is supported only on Linux and requires libcap-devel and libattr-devel"
4387       fi
4388       virtfs=no
4389     fi
4390   fi
4391 fi
4392
4393 # Probe for guest agent support/options
4394
4395 if [ "$guest_agent" != "no" ]; then
4396   if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
4397       tools="qemu-ga\$(EXESUF) $tools"
4398       guest_agent=yes
4399   elif [ "$guest_agent" != yes ]; then
4400       guest_agent=no
4401   else
4402       error_exit "Guest agent is not supported on this platform"
4403   fi
4404 fi
4405
4406 # Guest agent Window MSI  package
4407
4408 if test "$guest_agent" != yes; then
4409   if test "$guest_agent_msi" = yes; then
4410     error_exit "MSI guest agent package requires guest agent enabled"
4411   fi
4412   guest_agent_msi=no
4413 elif test "$mingw32" != "yes"; then
4414   if test "$guest_agent_msi" = "yes"; then
4415     error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
4416   fi
4417   guest_agent_msi=no
4418 elif ! has wixl; then
4419   if test "$guest_agent_msi" = "yes"; then
4420     error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
4421   fi
4422   guest_agent_msi=no
4423 else
4424   # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
4425   # disabled explicitly
4426   if test "$guest_agent_msi" != "no"; then
4427     guest_agent_msi=yes
4428   fi
4429 fi
4430
4431 if test "$guest_agent_msi" = "yes"; then
4432   if test "$guest_agent_with_vss" = "yes"; then
4433     QEMU_GA_MSI_WITH_VSS="-D InstallVss"
4434   fi
4435
4436   if test "$QEMU_GA_MANUFACTURER" = ""; then
4437     QEMU_GA_MANUFACTURER=QEMU
4438   fi
4439
4440   if test "$QEMU_GA_DISTRO" = ""; then
4441     QEMU_GA_DISTRO=Linux
4442   fi
4443
4444   if test "$QEMU_GA_VERSION" = ""; then
4445       QEMU_GA_VERSION=`cat $source_path/VERSION`
4446   fi
4447
4448   QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=`$pkg_config --variable=prefix glib-2.0`/bin"
4449
4450   case "$cpu" in
4451   x86_64)
4452     QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
4453     ;;
4454   i386)
4455     QEMU_GA_MSI_ARCH="-D Arch=32"
4456     ;;
4457   *)
4458     error_exit "CPU $cpu not supported for building installation package"
4459     ;;
4460   esac
4461 fi
4462
4463 # Mac OS X ships with a broken assembler
4464 roms=
4465 if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
4466         "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
4467         "$softmmu" = yes ; then
4468   roms="optionrom"
4469 fi
4470 if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
4471   roms="$roms spapr-rtas"
4472 fi
4473
4474 if test "$cpu" = "s390x" ; then
4475   roms="$roms s390-ccw"
4476 fi
4477
4478 # Probe for the need for relocating the user-only binary.
4479 if test "$pie" = "no" ; then
4480   textseg_addr=
4481   case "$cpu" in
4482     arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
4483       # ??? Rationale for choosing this address
4484       textseg_addr=0x60000000
4485       ;;
4486     mips)
4487       # A 256M aligned address, high in the address space, with enough
4488       # room for the code_gen_buffer above it before the stack.
4489       textseg_addr=0x60000000
4490       ;;
4491   esac
4492   if [ -n "$textseg_addr" ]; then
4493     cat > $TMPC <<EOF
4494     int main(void) { return 0; }
4495 EOF
4496     textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
4497     if ! compile_prog "" "$textseg_ldflags"; then
4498       # In case ld does not support -Ttext-segment, edit the default linker
4499       # script via sed to set the .text start addr.  This is needed on FreeBSD
4500       # at least.
4501       $ld --verbose | sed \
4502         -e '1,/==================================================/d' \
4503         -e '/==================================================/,$d' \
4504         -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
4505         -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
4506       textseg_ldflags="-Wl,-T../config-host.ld"
4507     fi
4508   fi
4509 fi
4510
4511 # prepend pixman and ftd flags after all config tests are done
4512 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
4513 libs_softmmu="$pixman_libs $libs_softmmu"
4514
4515 echo "Install prefix    $prefix"
4516 echo "BIOS directory    `eval echo $qemu_datadir`"
4517 echo "binary directory  `eval echo $bindir`"
4518 echo "library directory `eval echo $libdir`"
4519 echo "module directory  `eval echo $qemu_moddir`"
4520 echo "libexec directory `eval echo $libexecdir`"
4521 echo "include directory `eval echo $includedir`"
4522 echo "config directory  `eval echo $sysconfdir`"
4523 if test "$mingw32" = "no" ; then
4524 echo "local state directory   `eval echo $local_statedir`"
4525 echo "Manual directory  `eval echo $mandir`"
4526 echo "ELF interp prefix $interp_prefix"
4527 else
4528 echo "local state directory   queried at runtime"
4529 echo "Windows SDK       $win_sdk"
4530 fi
4531 echo "Source path       $source_path"
4532 echo "C compiler        $cc"
4533 echo "Host C compiler   $host_cc"
4534 echo "C++ compiler      $cxx"
4535 echo "Objective-C compiler $objcc"
4536 echo "ARFLAGS           $ARFLAGS"
4537 echo "CFLAGS            $CFLAGS"
4538 echo "QEMU_CFLAGS       $QEMU_CFLAGS"
4539 echo "LDFLAGS           $LDFLAGS"
4540 echo "make              $make"
4541 echo "install           $install"
4542 echo "python            $python"
4543 if test "$slirp" = "yes" ; then
4544     echo "smbd              $smbd"
4545 fi
4546 echo "module support    $modules"
4547 echo "host CPU          $cpu"
4548 echo "host big endian   $bigendian"
4549 echo "target list       $target_list"
4550 echo "tcg debug enabled $debug_tcg"
4551 echo "gprof enabled     $gprof"
4552 echo "sparse enabled    $sparse"
4553 echo "strip binaries    $strip_opt"
4554 echo "profiler          $profiler"
4555 echo "static build      $static"
4556 if test "$darwin" = "yes" ; then
4557     echo "Cocoa support     $cocoa"
4558 fi
4559 echo "pixman            $pixman"
4560 echo "SDL support       $sdl"
4561 echo "GTK support       $gtk"
4562 echo "GNUTLS support    $gnutls"
4563 echo "GNUTLS hash       $gnutls_hash"
4564 echo "GNUTLS gcrypt     $gnutls_gcrypt"
4565 echo "GNUTLS nettle     $gnutls_nettle ${gnutls_nettle+($nettle_version)}"
4566 echo "libtasn1          $tasn1"
4567 echo "VTE support       $vte"
4568 echo "curses support    $curses"
4569 echo "curl support      $curl"
4570 echo "mingw32 support   $mingw32"
4571 echo "Audio drivers     $audio_drv_list"
4572 echo "Block whitelist (rw) $block_drv_rw_whitelist"
4573 echo "Block whitelist (ro) $block_drv_ro_whitelist"
4574 echo "VirtFS support    $virtfs"
4575 echo "VNC support       $vnc"
4576 if test "$vnc" = "yes" ; then
4577     echo "VNC SASL support  $vnc_sasl"
4578     echo "VNC JPEG support  $vnc_jpeg"
4579     echo "VNC PNG support   $vnc_png"
4580 fi
4581 if test -n "$sparc_cpu"; then
4582     echo "Target Sparc Arch $sparc_cpu"
4583 fi
4584 echo "xen support       $xen"
4585 if test "$xen" = "yes" ; then
4586   echo "xen ctrl version  $xen_ctrl_version"
4587 fi
4588 echo "brlapi support    $brlapi"
4589 echo "bluez  support    $bluez"
4590 echo "Documentation     $docs"
4591 echo "PIE               $pie"
4592 echo "vde support       $vde"
4593 echo "netmap support    $netmap"
4594 echo "Linux AIO support $linux_aio"
4595 echo "ATTR/XATTR support $attr"
4596 echo "Install blobs     $blobs"
4597 echo "KVM support       $kvm"
4598 echo "RDMA support      $rdma"
4599 echo "TCG interpreter   $tcg_interpreter"
4600 echo "fdt support       $fdt"
4601 echo "preadv support    $preadv"
4602 echo "fdatasync         $fdatasync"
4603 echo "madvise           $madvise"
4604 echo "posix_madvise     $posix_madvise"
4605 echo "sigev_thread_id   $sigev_thread_id"
4606 echo "uuid support      $uuid"
4607 echo "libcap-ng support $cap_ng"
4608 echo "vhost-net support $vhost_net"
4609 echo "vhost-scsi support $vhost_scsi"
4610 echo "Trace backends    $trace_backends"
4611 if test "$trace_backend" = "simple"; then
4612 echo "Trace output file $trace_file-<pid>"
4613 fi
4614 if test "$spice" = "yes"; then
4615 echo "spice support     $spice ($spice_protocol_version/$spice_server_version)"
4616 else
4617 echo "spice support     $spice"
4618 fi
4619 echo "rbd support       $rbd"
4620 echo "xfsctl support    $xfs"
4621 echo "nss used          $smartcard_nss"
4622 echo "libusb            $libusb"
4623 echo "usb net redir     $usb_redir"
4624 echo "OpenGL support    $opengl"
4625 echo "libiscsi support  $libiscsi"
4626 echo "libnfs support    $libnfs"
4627 echo "build guest agent $guest_agent"
4628 echo "QGA VSS support   $guest_agent_with_vss"
4629 echo "QGA w32 disk info $guest_agent_ntddscsi"
4630 echo "QGA MSI support   $guest_agent_msi"
4631 echo "seccomp support   $seccomp"
4632 echo "coroutine backend $coroutine"
4633 echo "coroutine pool    $coroutine_pool"
4634 echo "GlusterFS support $glusterfs"
4635 echo "Archipelago support $archipelago"
4636 echo "gcov              $gcov_tool"
4637 echo "gcov enabled      $gcov"
4638 echo "TPM support       $tpm"
4639 echo "libssh2 support   $libssh2"
4640 echo "TPM passthrough   $tpm_passthrough"
4641 echo "QOM debugging     $qom_cast_debug"
4642 echo "vhdx              $vhdx"
4643 echo "lzo support       $lzo"
4644 echo "snappy support    $snappy"
4645 echo "bzip2 support     $bzip2"
4646 echo "NUMA host support $numa"
4647 echo "tcmalloc support  $tcmalloc"
4648 echo "jemalloc support  $jemalloc"
4649
4650 if test "$sdl_too_old" = "yes"; then
4651 echo "-> Your SDL version is too old - please upgrade to have SDL support"
4652 fi
4653
4654 config_host_mak="config-host.mak"
4655
4656 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
4657
4658 echo "# Automatically generated by configure - do not modify" > $config_host_mak
4659 echo >> $config_host_mak
4660
4661 echo all: >> $config_host_mak
4662 echo "prefix=$prefix" >> $config_host_mak
4663 echo "bindir=$bindir" >> $config_host_mak
4664 echo "libdir=$libdir" >> $config_host_mak
4665 echo "libexecdir=$libexecdir" >> $config_host_mak
4666 echo "includedir=$includedir" >> $config_host_mak
4667 echo "mandir=$mandir" >> $config_host_mak
4668 echo "sysconfdir=$sysconfdir" >> $config_host_mak
4669 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
4670 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
4671 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
4672 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
4673 if test "$mingw32" = "no" ; then
4674   echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
4675 fi
4676 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
4677 echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
4678 echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
4679 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
4680 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
4681
4682 echo "ARCH=$ARCH" >> $config_host_mak
4683
4684 if test "$debug_tcg" = "yes" ; then
4685   echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
4686 fi
4687 if test "$strip_opt" = "yes" ; then
4688   echo "STRIP=${strip}" >> $config_host_mak
4689 fi
4690 if test "$bigendian" = "yes" ; then
4691   echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
4692 fi
4693 if test "$mingw32" = "yes" ; then
4694   echo "CONFIG_WIN32=y" >> $config_host_mak
4695   rc_version=`cat $source_path/VERSION`
4696   version_major=${rc_version%%.*}
4697   rc_version=${rc_version#*.}
4698   version_minor=${rc_version%%.*}
4699   rc_version=${rc_version#*.}
4700   version_subminor=${rc_version%%.*}
4701   version_micro=0
4702   echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4703   echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4704   if test "$guest_agent_with_vss" = "yes" ; then
4705     echo "CONFIG_QGA_VSS=y" >> $config_host_mak
4706     echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
4707     echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
4708   fi
4709   if test "$guest_agent_ntddscsi" = "yes" ; then
4710     echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
4711   fi
4712   if test "$guest_agent_msi" = "yes"; then
4713     echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak  
4714     echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
4715     echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
4716     echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
4717     echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
4718     echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
4719     echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
4720   fi
4721 else
4722   echo "CONFIG_POSIX=y" >> $config_host_mak
4723 fi
4724
4725 if test "$linux" = "yes" ; then
4726   echo "CONFIG_LINUX=y" >> $config_host_mak
4727 fi
4728
4729 if test "$darwin" = "yes" ; then
4730   echo "CONFIG_DARWIN=y" >> $config_host_mak
4731 fi
4732
4733 if test "$aix" = "yes" ; then
4734   echo "CONFIG_AIX=y" >> $config_host_mak
4735 fi
4736
4737 if test "$solaris" = "yes" ; then
4738   echo "CONFIG_SOLARIS=y" >> $config_host_mak
4739   echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
4740   if test "$needs_libsunmath" = "yes" ; then
4741     echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
4742   fi
4743 fi
4744 if test "$haiku" = "yes" ; then
4745   echo "CONFIG_HAIKU=y" >> $config_host_mak
4746 fi
4747 if test "$static" = "yes" ; then
4748   echo "CONFIG_STATIC=y" >> $config_host_mak
4749 fi
4750 if test "$profiler" = "yes" ; then
4751   echo "CONFIG_PROFILER=y" >> $config_host_mak
4752 fi
4753 if test "$slirp" = "yes" ; then
4754   echo "CONFIG_SLIRP=y" >> $config_host_mak
4755   echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
4756 fi
4757 if test "$vde" = "yes" ; then
4758   echo "CONFIG_VDE=y" >> $config_host_mak
4759 fi
4760 if test "$netmap" = "yes" ; then
4761   echo "CONFIG_NETMAP=y" >> $config_host_mak
4762 fi
4763 if test "$l2tpv3" = "yes" ; then
4764   echo "CONFIG_L2TPV3=y" >> $config_host_mak
4765 fi
4766 if test "$cap_ng" = "yes" ; then
4767   echo "CONFIG_LIBCAP=y" >> $config_host_mak
4768 fi
4769 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
4770 for drv in $audio_drv_list; do
4771     def=CONFIG_`echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]'`
4772     echo "$def=y" >> $config_host_mak
4773 done
4774 if test "$audio_pt_int" = "yes" ; then
4775   echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
4776 fi
4777 if test "$audio_win_int" = "yes" ; then
4778   echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
4779 fi
4780 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
4781 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
4782 if test "$vnc" = "yes" ; then
4783   echo "CONFIG_VNC=y" >> $config_host_mak
4784 fi
4785 if test "$vnc_sasl" = "yes" ; then
4786   echo "CONFIG_VNC_SASL=y" >> $config_host_mak
4787 fi
4788 if test "$vnc_jpeg" = "yes" ; then
4789   echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
4790 fi
4791 if test "$vnc_png" = "yes" ; then
4792   echo "CONFIG_VNC_PNG=y" >> $config_host_mak
4793 fi
4794 if test "$fnmatch" = "yes" ; then
4795   echo "CONFIG_FNMATCH=y" >> $config_host_mak
4796 fi
4797 if test "$uuid" = "yes" ; then
4798   echo "CONFIG_UUID=y" >> $config_host_mak
4799 fi
4800 if test "$xfs" = "yes" ; then
4801   echo "CONFIG_XFS=y" >> $config_host_mak
4802 fi
4803 qemu_version=`head $source_path/VERSION`
4804 echo "VERSION=$qemu_version" >>$config_host_mak
4805 echo "PKGVERSION=$pkgversion" >>$config_host_mak
4806 echo "SRC_PATH=$source_path" >> $config_host_mak
4807 echo "TARGET_DIRS=$target_list" >> $config_host_mak
4808 if [ "$docs" = "yes" ] ; then
4809   echo "BUILD_DOCS=yes" >> $config_host_mak
4810 fi
4811 if test "$modules" = "yes"; then
4812   # $shacmd can generate a hash started with digit, which the compiler doesn't
4813   # like as an symbol. So prefix it with an underscore
4814   echo "CONFIG_STAMP=_`(echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ `" >> $config_host_mak
4815   echo "CONFIG_MODULES=y" >> $config_host_mak
4816 fi
4817 if test "$sdl" = "yes" ; then
4818   echo "CONFIG_SDL=y" >> $config_host_mak
4819   echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
4820   echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
4821 fi
4822 if test "$cocoa" = "yes" ; then
4823   echo "CONFIG_COCOA=y" >> $config_host_mak
4824 fi
4825 if test "$curses" = "yes" ; then
4826   echo "CONFIG_CURSES=y" >> $config_host_mak
4827 fi
4828 if test "$utimens" = "yes" ; then
4829   echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
4830 fi
4831 if test "$pipe2" = "yes" ; then
4832   echo "CONFIG_PIPE2=y" >> $config_host_mak
4833 fi
4834 if test "$accept4" = "yes" ; then
4835   echo "CONFIG_ACCEPT4=y" >> $config_host_mak
4836 fi
4837 if test "$splice" = "yes" ; then
4838   echo "CONFIG_SPLICE=y" >> $config_host_mak
4839 fi
4840 if test "$eventfd" = "yes" ; then
4841   echo "CONFIG_EVENTFD=y" >> $config_host_mak
4842 fi
4843 if test "$fallocate" = "yes" ; then
4844   echo "CONFIG_FALLOCATE=y" >> $config_host_mak
4845 fi
4846 if test "$fallocate_punch_hole" = "yes" ; then
4847   echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
4848 fi
4849 if test "$fallocate_zero_range" = "yes" ; then
4850   echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
4851 fi
4852 if test "$posix_fallocate" = "yes" ; then
4853   echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
4854 fi
4855 if test "$sync_file_range" = "yes" ; then
4856   echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
4857 fi
4858 if test "$fiemap" = "yes" ; then
4859   echo "CONFIG_FIEMAP=y" >> $config_host_mak
4860 fi
4861 if test "$dup3" = "yes" ; then
4862   echo "CONFIG_DUP3=y" >> $config_host_mak
4863 fi
4864 if test "$ppoll" = "yes" ; then
4865   echo "CONFIG_PPOLL=y" >> $config_host_mak
4866 fi
4867 if test "$prctl_pr_set_timerslack" = "yes" ; then
4868   echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
4869 fi
4870 if test "$epoll" = "yes" ; then
4871   echo "CONFIG_EPOLL=y" >> $config_host_mak
4872 fi
4873 if test "$epoll_create1" = "yes" ; then
4874   echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
4875 fi
4876 if test "$epoll_pwait" = "yes" ; then
4877   echo "CONFIG_EPOLL_PWAIT=y" >> $config_host_mak
4878 fi
4879 if test "$sendfile" = "yes" ; then
4880   echo "CONFIG_SENDFILE=y" >> $config_host_mak
4881 fi
4882 if test "$timerfd" = "yes" ; then
4883   echo "CONFIG_TIMERFD=y" >> $config_host_mak
4884 fi
4885 if test "$setns" = "yes" ; then
4886   echo "CONFIG_SETNS=y" >> $config_host_mak
4887 fi
4888 if test "$inotify" = "yes" ; then
4889   echo "CONFIG_INOTIFY=y" >> $config_host_mak
4890 fi
4891 if test "$inotify1" = "yes" ; then
4892   echo "CONFIG_INOTIFY1=y" >> $config_host_mak
4893 fi
4894 if test "$byteswap_h" = "yes" ; then
4895   echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
4896 fi
4897 if test "$bswap_h" = "yes" ; then
4898   echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
4899 fi
4900 if test "$curl" = "yes" ; then
4901   echo "CONFIG_CURL=m" >> $config_host_mak
4902   echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
4903   echo "CURL_LIBS=$curl_libs" >> $config_host_mak
4904 fi
4905 if test "$brlapi" = "yes" ; then
4906   echo "CONFIG_BRLAPI=y" >> $config_host_mak
4907 fi
4908 if test "$bluez" = "yes" ; then
4909   echo "CONFIG_BLUEZ=y" >> $config_host_mak
4910   echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
4911 fi
4912 if test "$glib_subprocess" = "yes" ; then
4913   echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
4914 fi
4915 echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
4916 if test "$gtk" = "yes" ; then
4917   echo "CONFIG_GTK=y" >> $config_host_mak
4918   echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
4919   echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
4920 fi
4921 if test "$gnutls" = "yes" ; then
4922   echo "CONFIG_GNUTLS=y" >> $config_host_mak
4923 fi
4924 if test "$gnutls_hash" = "yes" ; then
4925   echo "CONFIG_GNUTLS_HASH=y" >> $config_host_mak
4926 fi
4927 if test "$gnutls_gcrypt" = "yes" ; then
4928   echo "CONFIG_GNUTLS_GCRYPT=y" >> $config_host_mak
4929 fi
4930 if test "$gnutls_nettle" = "yes" ; then
4931   echo "CONFIG_GNUTLS_NETTLE=y" >> $config_host_mak
4932   echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
4933 fi
4934 if test "$tasn1" = "yes" ; then
4935   echo "CONFIG_TASN1=y" >> $config_host_mak
4936 fi
4937 if test "$vte" = "yes" ; then
4938   echo "CONFIG_VTE=y" >> $config_host_mak
4939   echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
4940 fi
4941 if test "$xen" = "yes" ; then
4942   echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
4943   echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
4944 fi
4945 if test "$linux_aio" = "yes" ; then
4946   echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
4947 fi
4948 if test "$attr" = "yes" ; then
4949   echo "CONFIG_ATTR=y" >> $config_host_mak
4950 fi
4951 if test "$libattr" = "yes" ; then
4952   echo "CONFIG_LIBATTR=y" >> $config_host_mak
4953 fi
4954 if test "$virtfs" = "yes" ; then
4955   echo "CONFIG_VIRTFS=y" >> $config_host_mak
4956 fi
4957 if test "$vhost_scsi" = "yes" ; then
4958   echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
4959 fi
4960 if test "$vhost_net" = "yes" ; then
4961   echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
4962 fi
4963 if test "$blobs" = "yes" ; then
4964   echo "INSTALL_BLOBS=yes" >> $config_host_mak
4965 fi
4966 if test "$iovec" = "yes" ; then
4967   echo "CONFIG_IOVEC=y" >> $config_host_mak
4968 fi
4969 if test "$preadv" = "yes" ; then
4970   echo "CONFIG_PREADV=y" >> $config_host_mak
4971 fi
4972 if test "$fdt" = "yes" ; then
4973   echo "CONFIG_FDT=y" >> $config_host_mak
4974 fi
4975 if test "$signalfd" = "yes" ; then
4976   echo "CONFIG_SIGNALFD=y" >> $config_host_mak
4977 fi
4978 if test "$tcg_interpreter" = "yes" ; then
4979   echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
4980 fi
4981 if test "$fdatasync" = "yes" ; then
4982   echo "CONFIG_FDATASYNC=y" >> $config_host_mak
4983 fi
4984 if test "$madvise" = "yes" ; then
4985   echo "CONFIG_MADVISE=y" >> $config_host_mak
4986 fi
4987 if test "$posix_madvise" = "yes" ; then
4988   echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
4989 fi
4990 if test "$sigev_thread_id" = "yes" ; then
4991   echo "CONFIG_SIGEV_THREAD_ID=y" >> $config_host_mak
4992 fi
4993
4994 if test "$spice" = "yes" ; then
4995   echo "CONFIG_SPICE=y" >> $config_host_mak
4996 fi
4997
4998 if test "$smartcard_nss" = "yes" ; then
4999   echo "CONFIG_SMARTCARD_NSS=y" >> $config_host_mak
5000   echo "NSS_LIBS=$nss_libs" >> $config_host_mak
5001   echo "NSS_CFLAGS=$nss_cflags" >> $config_host_mak
5002 fi
5003
5004 if test "$libusb" = "yes" ; then
5005   echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5006 fi
5007
5008 if test "$usb_redir" = "yes" ; then
5009   echo "CONFIG_USB_REDIR=y" >> $config_host_mak
5010 fi
5011
5012 if test "$opengl" = "yes" ; then
5013   echo "CONFIG_OPENGL=y" >> $config_host_mak
5014   echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
5015   echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
5016 fi
5017
5018 if test "$lzo" = "yes" ; then
5019   echo "CONFIG_LZO=y" >> $config_host_mak
5020 fi
5021
5022 if test "$snappy" = "yes" ; then
5023   echo "CONFIG_SNAPPY=y" >> $config_host_mak
5024 fi
5025
5026 if test "$bzip2" = "yes" ; then
5027   echo "CONFIG_BZIP2=y" >> $config_host_mak
5028   echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
5029 fi
5030
5031 if test "$libiscsi" = "yes" ; then
5032   echo "CONFIG_LIBISCSI=m" >> $config_host_mak
5033   echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
5034   echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
5035 fi
5036
5037 if test "$libnfs" = "yes" ; then
5038   echo "CONFIG_LIBNFS=y" >> $config_host_mak
5039 fi
5040
5041 if test "$seccomp" = "yes"; then
5042   echo "CONFIG_SECCOMP=y" >> $config_host_mak
5043 fi
5044
5045 # XXX: suppress that
5046 if [ "$bsd" = "yes" ] ; then
5047   echo "CONFIG_BSD=y" >> $config_host_mak
5048 fi
5049
5050 if test "$zero_malloc" = "yes" ; then
5051   echo "CONFIG_ZERO_MALLOC=y" >> $config_host_mak
5052 fi
5053 if test "$qom_cast_debug" = "yes" ; then
5054   echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
5055 fi
5056 if test "$rbd" = "yes" ; then
5057   echo "CONFIG_RBD=m" >> $config_host_mak
5058   echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
5059   echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
5060 fi
5061
5062 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
5063 if test "$coroutine_pool" = "yes" ; then
5064   echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
5065 else
5066   echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
5067 fi
5068
5069 if test "$open_by_handle_at" = "yes" ; then
5070   echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
5071 fi
5072
5073 if test "$linux_magic_h" = "yes" ; then
5074   echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
5075 fi
5076
5077 if test "$pragma_diagnostic_available" = "yes" ; then
5078   echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
5079 fi
5080
5081 if test "$valgrind_h" = "yes" ; then
5082   echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
5083 fi
5084
5085 if test "$has_environ" = "yes" ; then
5086   echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
5087 fi
5088
5089 if test "$cpuid_h" = "yes" ; then
5090   echo "CONFIG_CPUID_H=y" >> $config_host_mak
5091 fi
5092
5093 if test "$int128" = "yes" ; then
5094   echo "CONFIG_INT128=y" >> $config_host_mak
5095 fi
5096
5097 if test "$getauxval" = "yes" ; then
5098   echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
5099 fi
5100
5101 if test "$glusterfs" = "yes" ; then
5102   echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
5103   echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
5104   echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
5105 fi
5106
5107 if test "$glusterfs_discard" = "yes" ; then
5108   echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
5109 fi
5110
5111 if test "$glusterfs_zerofill" = "yes" ; then
5112   echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
5113 fi
5114
5115 if test "$archipelago" = "yes" ; then
5116   echo "CONFIG_ARCHIPELAGO=m" >> $config_host_mak
5117   echo "ARCHIPELAGO_LIBS=$archipelago_libs" >> $config_host_mak
5118 fi
5119
5120 if test "$libssh2" = "yes" ; then
5121   echo "CONFIG_LIBSSH2=m" >> $config_host_mak
5122   echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
5123   echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
5124 fi
5125
5126 if test "$vhdx" = "yes" ; then
5127   echo "CONFIG_VHDX=y" >> $config_host_mak
5128 fi
5129
5130 # USB host support
5131 if test "$libusb" = "yes"; then
5132   echo "HOST_USB=libusb legacy" >> $config_host_mak
5133 else
5134   echo "HOST_USB=stub" >> $config_host_mak
5135 fi
5136
5137 # TPM passthrough support?
5138 if test "$tpm" = "yes"; then
5139   echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
5140   if test "$tpm_passthrough" = "yes"; then
5141     echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
5142   fi
5143 fi
5144
5145 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5146 if have_backend "nop"; then
5147   echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
5148 fi
5149 if have_backend "simple"; then
5150   echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5151   # Set the appropriate trace file.
5152   trace_file="\"$trace_file-\" FMT_pid"
5153 fi
5154 if have_backend "stderr"; then
5155   echo "CONFIG_TRACE_STDERR=y" >> $config_host_mak
5156 fi
5157 if have_backend "ust"; then
5158   echo "CONFIG_TRACE_UST=y" >> $config_host_mak
5159 fi
5160 if have_backend "dtrace"; then
5161   echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
5162   if test "$trace_backend_stap" = "yes" ; then
5163     echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
5164   fi
5165 fi
5166 if have_backend "ftrace"; then
5167   if test "$linux" = "yes" ; then
5168     echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
5169   else
5170     feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
5171   fi
5172 fi
5173 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
5174
5175 if test "$rdma" = "yes" ; then
5176   echo "CONFIG_RDMA=y" >> $config_host_mak
5177 fi
5178
5179 # Hold two types of flag:
5180 #   CONFIG_THREAD_SETNAME_BYTHREAD  - we've got a way of setting the name on
5181 #                                     a thread we have a handle to
5182 #   CONFIG_PTHREAD_SETNAME_NP       - A way of doing it on a particular
5183 #                                     platform
5184 if test "$pthread_setname_np" = "yes" ; then
5185   echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
5186   echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
5187 fi
5188
5189 if test "$tcg_interpreter" = "yes"; then
5190   QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5191 elif test "$ARCH" = "sparc64" ; then
5192   QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5193 elif test "$ARCH" = "s390x" ; then
5194   QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
5195 elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
5196   QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
5197 elif test "$ARCH" = "ppc64" ; then
5198   QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5199 else
5200   QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5201 fi
5202 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
5203
5204 echo "TOOLS=$tools" >> $config_host_mak
5205 echo "ROMS=$roms" >> $config_host_mak
5206 echo "MAKE=$make" >> $config_host_mak
5207 echo "INSTALL=$install" >> $config_host_mak
5208 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
5209 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
5210 if test -n "$libtool"; then
5211   echo "INSTALL_PROG=\$(LIBTOOL) --mode=install $install -c -m 0755" >> $config_host_mak
5212   echo "INSTALL_LIB=\$(LIBTOOL) --mode=install $install -c -m 0644" >> $config_host_mak
5213 else
5214   echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
5215   echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
5216 fi
5217 echo "PYTHON=$python" >> $config_host_mak
5218 echo "CC=$cc" >> $config_host_mak
5219 if $iasl -h > /dev/null 2>&1; then
5220   echo "IASL=$iasl" >> $config_host_mak
5221 fi
5222 echo "CC_I386=$cc_i386" >> $config_host_mak
5223 echo "HOST_CC=$host_cc" >> $config_host_mak
5224 echo "CXX=$cxx" >> $config_host_mak
5225 echo "OBJCC=$objcc" >> $config_host_mak
5226 echo "AR=$ar" >> $config_host_mak
5227 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
5228 echo "AS=$as" >> $config_host_mak
5229 echo "CPP=$cpp" >> $config_host_mak
5230 echo "OBJCOPY=$objcopy" >> $config_host_mak
5231 echo "LD=$ld" >> $config_host_mak
5232 echo "NM=$nm" >> $config_host_mak
5233 echo "WINDRES=$windres" >> $config_host_mak
5234 echo "LIBTOOL=$libtool" >> $config_host_mak
5235 echo "CFLAGS=$CFLAGS" >> $config_host_mak
5236 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
5237 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
5238 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
5239 if test "$sparse" = "yes" ; then
5240   echo "CC           := REAL_CC=\"\$(CC)\" cgcc"       >> $config_host_mak
5241   echo "CPP          := REAL_CC=\"\$(CPP)\" cgcc"      >> $config_host_mak
5242   echo "CXX          := REAL_CC=\"\$(CXX)\" cgcc"      >> $config_host_mak
5243   echo "HOST_CC      := REAL_CC=\"\$(HOST_CC)\" cgcc"  >> $config_host_mak
5244   echo "QEMU_CFLAGS  += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
5245 fi
5246 if test "$cross_prefix" != ""; then
5247   echo "AUTOCONF_HOST := --host=${cross_prefix%-}"     >> $config_host_mak
5248 else
5249   echo "AUTOCONF_HOST := "                             >> $config_host_mak
5250 fi
5251 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
5252 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
5253 echo "LIBTOOLFLAGS=$LIBTOOLFLAGS" >> $config_host_mak
5254 echo "LIBS+=$LIBS" >> $config_host_mak
5255 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
5256 echo "EXESUF=$EXESUF" >> $config_host_mak
5257 echo "DSOSUF=$DSOSUF" >> $config_host_mak
5258 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
5259 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
5260 echo "TEST_LIBS=$test_libs" >> $config_host_mak
5261 echo "TEST_CFLAGS=$test_cflags" >> $config_host_mak
5262 echo "POD2MAN=$POD2MAN" >> $config_host_mak
5263 echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
5264 if test "$gcov" = "yes" ; then
5265   echo "CONFIG_GCOV=y" >> $config_host_mak
5266   echo "GCOV=$gcov_tool" >> $config_host_mak
5267 fi
5268
5269 # use included Linux headers
5270 if test "$linux" = "yes" ; then
5271   mkdir -p linux-headers
5272   case "$cpu" in
5273   i386|x86_64|x32)
5274     linux_arch=x86
5275     ;;
5276   ppcemb|ppc|ppc64)
5277     linux_arch=powerpc
5278     ;;
5279   s390x)
5280     linux_arch=s390
5281     ;;
5282   aarch64)
5283     linux_arch=arm64
5284     ;;
5285   mips64)
5286     linux_arch=mips
5287     ;;
5288   *)
5289     # For most CPUs the kernel architecture name and QEMU CPU name match.
5290     linux_arch="$cpu"
5291     ;;
5292   esac
5293     # For non-KVM architectures we will not have asm headers
5294     if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
5295       symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
5296     fi
5297 fi
5298
5299 for target in $target_list; do
5300 target_dir="$target"
5301 config_target_mak=$target_dir/config-target.mak
5302 target_name=`echo $target | cut -d '-' -f 1`
5303 target_bigendian="no"
5304
5305 case "$target_name" in
5306   armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
5307   target_bigendian=yes
5308   ;;
5309 esac
5310 target_softmmu="no"
5311 target_user_only="no"
5312 target_linux_user="no"
5313 target_bsd_user="no"
5314 case "$target" in
5315   ${target_name}-softmmu)
5316     target_softmmu="yes"
5317     ;;
5318   ${target_name}-linux-user)
5319     if test "$linux" != "yes" ; then
5320       error_exit "Target '$target' is only available on a Linux host"
5321     fi
5322     target_user_only="yes"
5323     target_linux_user="yes"
5324     ;;
5325   ${target_name}-bsd-user)
5326     if test "$bsd" != "yes" ; then
5327       error_exit "Target '$target' is only available on a BSD host"
5328     fi
5329     target_user_only="yes"
5330     target_bsd_user="yes"
5331     ;;
5332   *)
5333     error_exit "Target '$target' not recognised"
5334     exit 1
5335     ;;
5336 esac
5337
5338 mkdir -p $target_dir
5339 echo "# Automatically generated by configure - do not modify" > $config_target_mak
5340
5341 bflt="no"
5342 interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_name/g"`
5343 gdb_xml_files=""
5344
5345 TARGET_ARCH="$target_name"
5346 TARGET_BASE_ARCH=""
5347 TARGET_ABI_DIR=""
5348
5349 case "$target_name" in
5350   i386)
5351   ;;
5352   x86_64)
5353     TARGET_BASE_ARCH=i386
5354   ;;
5355   alpha)
5356   ;;
5357   arm|armeb)
5358     TARGET_ARCH=arm
5359     bflt="yes"
5360     gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5361   ;;
5362   aarch64)
5363     TARGET_BASE_ARCH=arm
5364     bflt="yes"
5365     gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5366   ;;
5367   cris)
5368   ;;
5369   lm32)
5370   ;;
5371   m68k)
5372     bflt="yes"
5373     gdb_xml_files="cf-core.xml cf-fp.xml"
5374   ;;
5375   microblaze|microblazeel)
5376     TARGET_ARCH=microblaze
5377     bflt="yes"
5378   ;;
5379   mips|mipsel)
5380     TARGET_ARCH=mips
5381     echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
5382   ;;
5383   mipsn32|mipsn32el)
5384     TARGET_ARCH=mips64
5385     TARGET_BASE_ARCH=mips
5386     echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
5387     echo "TARGET_ABI32=y" >> $config_target_mak
5388   ;;
5389   mips64|mips64el)
5390     TARGET_ARCH=mips64
5391     TARGET_BASE_ARCH=mips
5392     echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
5393   ;;
5394   moxie)
5395   ;;
5396   or32)
5397     TARGET_ARCH=openrisc
5398     TARGET_BASE_ARCH=openrisc
5399   ;;
5400   ppc)
5401     gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5402   ;;
5403   ppcemb)
5404     TARGET_BASE_ARCH=ppc
5405     TARGET_ABI_DIR=ppc
5406     gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5407   ;;
5408   ppc64)
5409     TARGET_BASE_ARCH=ppc
5410     TARGET_ABI_DIR=ppc
5411     gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5412   ;;
5413   ppc64le)
5414     TARGET_ARCH=ppc64
5415     TARGET_BASE_ARCH=ppc
5416     TARGET_ABI_DIR=ppc
5417     gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5418   ;;
5419   ppc64abi32)
5420     TARGET_ARCH=ppc64
5421     TARGET_BASE_ARCH=ppc
5422     TARGET_ABI_DIR=ppc
5423     echo "TARGET_ABI32=y" >> $config_target_mak
5424     gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5425   ;;
5426   sh4|sh4eb)
5427     TARGET_ARCH=sh4
5428     bflt="yes"
5429   ;;
5430   sparc)
5431   ;;
5432   sparc64)
5433     TARGET_BASE_ARCH=sparc
5434   ;;
5435   sparc32plus)
5436     TARGET_ARCH=sparc64
5437     TARGET_BASE_ARCH=sparc
5438     TARGET_ABI_DIR=sparc
5439     echo "TARGET_ABI32=y" >> $config_target_mak
5440   ;;
5441   s390x)
5442     gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml"
5443   ;;
5444   tilegx)
5445   ;;
5446   tricore)
5447   ;;
5448   unicore32)
5449   ;;
5450   xtensa|xtensaeb)
5451     TARGET_ARCH=xtensa
5452   ;;
5453   *)
5454     error_exit "Unsupported target CPU"
5455   ;;
5456 esac
5457 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
5458 if [ "$TARGET_BASE_ARCH" = "" ]; then
5459   TARGET_BASE_ARCH=$TARGET_ARCH
5460 fi
5461
5462 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
5463
5464 upper() {
5465     echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
5466 }
5467
5468 target_arch_name="`upper $TARGET_ARCH`"
5469 echo "TARGET_$target_arch_name=y" >> $config_target_mak
5470 echo "TARGET_NAME=$target_name" >> $config_target_mak
5471 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
5472 if [ "$TARGET_ABI_DIR" = "" ]; then
5473   TARGET_ABI_DIR=$TARGET_ARCH
5474 fi
5475 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
5476 if [ "$HOST_VARIANT_DIR" != "" ]; then
5477     echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
5478 fi
5479 case "$target_name" in
5480   i386|x86_64)
5481     if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
5482       echo "CONFIG_XEN=y" >> $config_target_mak
5483       if test "$xen_pci_passthrough" = yes; then
5484         echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
5485       fi
5486     fi
5487     ;;
5488   *)
5489 esac
5490 case "$target_name" in
5491   aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
5492     # Make sure the target and host cpus are compatible
5493     if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
5494       \( "$target_name" = "$cpu" -o \
5495       \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
5496       \( "$target_name" = "ppc64"  -a "$cpu" = "ppc" \) -o \
5497       \( "$target_name" = "ppc"    -a "$cpu" = "ppc64" \) -o \
5498       \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
5499       \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
5500       \( "$target_name" = "x86_64" -a "$cpu" = "i386"   \) -o \
5501       \( "$target_name" = "i386"   -a "$cpu" = "x86_64" \) -o \
5502       \( "$target_name" = "x86_64" -a "$cpu" = "x32"   \) -o \
5503       \( "$target_name" = "i386"   -a "$cpu" = "x32" \) \) ; then
5504       echo "CONFIG_KVM=y" >> $config_target_mak
5505       if test "$vhost_net" = "yes" ; then
5506         echo "CONFIG_VHOST_NET=y" >> $config_target_mak
5507       fi
5508     fi
5509 esac
5510 if test "$target_bigendian" = "yes" ; then
5511   echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
5512 fi
5513 if test "$target_softmmu" = "yes" ; then
5514   echo "CONFIG_SOFTMMU=y" >> $config_target_mak
5515 fi
5516 if test "$target_user_only" = "yes" ; then
5517   echo "CONFIG_USER_ONLY=y" >> $config_target_mak
5518   echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
5519 fi
5520 if test "$target_linux_user" = "yes" ; then
5521   echo "CONFIG_LINUX_USER=y" >> $config_target_mak
5522 fi
5523 list=""
5524 if test ! -z "$gdb_xml_files" ; then
5525   for x in $gdb_xml_files; do
5526     list="$list $source_path/gdb-xml/$x"
5527   done
5528   echo "TARGET_XML_FILES=$list" >> $config_target_mak
5529 fi
5530
5531 if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
5532   echo "TARGET_HAS_BFLT=y" >> $config_target_mak
5533 fi
5534 if test "$target_bsd_user" = "yes" ; then
5535   echo "CONFIG_BSD_USER=y" >> $config_target_mak
5536 fi
5537
5538 # generate QEMU_CFLAGS/LDFLAGS for targets
5539
5540 cflags=""
5541 ldflags=""
5542
5543 disas_config() {
5544   echo "CONFIG_${1}_DIS=y" >> $config_target_mak
5545   echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
5546 }
5547
5548 for i in $ARCH $TARGET_BASE_ARCH ; do
5549   case "$i" in
5550   alpha)
5551     disas_config "ALPHA"
5552   ;;
5553   aarch64)
5554     if test -n "${cxx}"; then
5555       disas_config "ARM_A64"
5556     fi
5557   ;;
5558   arm)
5559     disas_config "ARM"
5560     if test -n "${cxx}"; then
5561       disas_config "ARM_A64"
5562     fi
5563   ;;
5564   cris)
5565     disas_config "CRIS"
5566   ;;
5567   hppa)
5568     disas_config "HPPA"
5569   ;;
5570   i386|x86_64|x32)
5571     disas_config "I386"
5572   ;;
5573   ia64*)
5574     disas_config "IA64"
5575   ;;
5576   lm32)
5577     disas_config "LM32"
5578   ;;
5579   m68k)
5580     disas_config "M68K"
5581   ;;
5582   microblaze*)
5583     disas_config "MICROBLAZE"
5584   ;;
5585   mips*)
5586     disas_config "MIPS"
5587   ;;
5588   moxie*)
5589     disas_config "MOXIE"
5590   ;;
5591   or32)
5592     disas_config "OPENRISC"
5593   ;;
5594   ppc*)
5595     disas_config "PPC"
5596   ;;
5597   s390*)
5598     disas_config "S390"
5599   ;;
5600   sh4)
5601     disas_config "SH4"
5602   ;;
5603   sparc*)
5604     disas_config "SPARC"
5605   ;;
5606   xtensa*)
5607     disas_config "XTENSA"
5608   ;;
5609   esac
5610 done
5611 if test "$tcg_interpreter" = "yes" ; then
5612   disas_config "TCI"
5613 fi
5614
5615 case "$ARCH" in
5616 alpha)
5617   # Ensure there's only a single GP
5618   cflags="-msmall-data $cflags"
5619 ;;
5620 esac
5621
5622 if test "$gprof" = "yes" ; then
5623   echo "TARGET_GPROF=yes" >> $config_target_mak
5624   if test "$target_linux_user" = "yes" ; then
5625     cflags="-p $cflags"
5626     ldflags="-p $ldflags"
5627   fi
5628   if test "$target_softmmu" = "yes" ; then
5629     ldflags="-p $ldflags"
5630     echo "GPROF_CFLAGS=-p" >> $config_target_mak
5631   fi
5632 fi
5633
5634 if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
5635   ldflags="$ldflags $textseg_ldflags"
5636 fi
5637
5638 echo "LDFLAGS+=$ldflags" >> $config_target_mak
5639 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
5640
5641 done # for target in $targets
5642
5643 if [ "$pixman" = "internal" ]; then
5644   echo "config-host.h: subdir-pixman" >> $config_host_mak
5645 fi
5646
5647 if [ "$dtc_internal" = "yes" ]; then
5648   echo "config-host.h: subdir-dtc" >> $config_host_mak
5649 fi
5650
5651 if test "$numa" = "yes"; then
5652   echo "CONFIG_NUMA=y" >> $config_host_mak
5653 fi
5654
5655 if test "$ccache_cpp2" = "yes"; then
5656   echo "export CCACHE_CPP2=y" >> $config_host_mak
5657 fi
5658
5659 # build tree in object directory in case the source is not in the current directory
5660 DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
5661 DIRS="$DIRS fsdev"
5662 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
5663 DIRS="$DIRS roms/seabios roms/vgabios"
5664 DIRS="$DIRS qapi-generated"
5665 FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
5666 FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
5667 FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
5668 FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
5669 FILES="$FILES pc-bios/spapr-rtas/Makefile"
5670 FILES="$FILES pc-bios/s390-ccw/Makefile"
5671 FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
5672 FILES="$FILES pc-bios/qemu-icon.bmp"
5673 for bios_file in \
5674     $source_path/pc-bios/*.bin \
5675     $source_path/pc-bios/*.aml \
5676     $source_path/pc-bios/*.rom \
5677     $source_path/pc-bios/*.dtb \
5678     $source_path/pc-bios/*.img \
5679     $source_path/pc-bios/openbios-* \
5680     $source_path/pc-bios/u-boot.* \
5681     $source_path/pc-bios/palcode-*
5682 do
5683     FILES="$FILES pc-bios/`basename $bios_file`"
5684 done
5685 for test_file in `find $source_path/tests/acpi-test-data -type f`
5686 do
5687     FILES="$FILES tests/acpi-test-data`echo $test_file | sed -e 's/.*acpi-test-data//'`"
5688 done
5689 mkdir -p $DIRS
5690 for f in $FILES ; do
5691     if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
5692         symlink "$source_path/$f" "$f"
5693     fi
5694 done
5695
5696 # temporary config to build submodules
5697 for rom in seabios vgabios ; do
5698     config_mak=roms/$rom/config.mak
5699     echo "# Automatically generated by configure - do not modify" > $config_mak
5700     echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
5701     echo "AS=$as" >> $config_mak
5702     echo "CC=$cc" >> $config_mak
5703     echo "BCC=bcc" >> $config_mak
5704     echo "CPP=$cpp" >> $config_mak
5705     echo "OBJCOPY=objcopy" >> $config_mak
5706     echo "IASL=$iasl" >> $config_mak
5707     echo "LD=$ld" >> $config_mak
5708 done
5709
5710 # set up qemu-iotests in this build directory
5711 iotests_common_env="tests/qemu-iotests/common.env"
5712 iotests_check="tests/qemu-iotests/check"
5713
5714 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
5715 echo >> "$iotests_common_env"
5716 echo "export PYTHON='$python'" >> "$iotests_common_env"
5717
5718 if [ ! -e "$iotests_check" ]; then
5719     symlink "$source_path/$iotests_check" "$iotests_check"
5720 fi
5721
5722 # Save the configure command line for later reuse.
5723 cat <<EOD >config.status
5724 #!/bin/sh
5725 # Generated by configure.
5726 # Run this file to recreate the current configuration.
5727 # Compiler output produced by configure, useful for debugging
5728 # configure, is in config.log if it exists.
5729 EOD
5730 printf "exec" >>config.status
5731 printf " '%s'" "$0" "$@" >>config.status
5732 echo >>config.status
5733 chmod +x config.status
5734
5735 rm -r "$TMPDIR1"
This page took 0.33189 seconds and 4 git commands to generate.