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