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