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