OSDN Git Service

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