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