OSDN Git Service

Merge remote-tracking branch 'remotes/aurel/tags/pull-target-sh4-20170530' 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 pipe2 is there
3633 pipe2=no
3634 cat > $TMPC << EOF
3635 #include <unistd.h>
3636 #include <fcntl.h>
3637
3638 int main(void)
3639 {
3640     int pipefd[2];
3641     return pipe2(pipefd, O_CLOEXEC);
3642 }
3643 EOF
3644 if compile_prog "" "" ; then
3645   pipe2=yes
3646 fi
3647
3648 # check if accept4 is there
3649 accept4=no
3650 cat > $TMPC << EOF
3651 #include <sys/socket.h>
3652 #include <stddef.h>
3653
3654 int main(void)
3655 {
3656     accept4(0, NULL, NULL, SOCK_CLOEXEC);
3657     return 0;
3658 }
3659 EOF
3660 if compile_prog "" "" ; then
3661   accept4=yes
3662 fi
3663
3664 # check if tee/splice is there. vmsplice was added same time.
3665 splice=no
3666 cat > $TMPC << EOF
3667 #include <unistd.h>
3668 #include <fcntl.h>
3669 #include <limits.h>
3670
3671 int main(void)
3672 {
3673     int len, fd = 0;
3674     len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3675     splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3676     return 0;
3677 }
3678 EOF
3679 if compile_prog "" "" ; then
3680   splice=yes
3681 fi
3682
3683 ##########################################
3684 # libnuma probe
3685
3686 if test "$numa" != "no" ; then
3687   cat > $TMPC << EOF
3688 #include <numa.h>
3689 int main(void) { return numa_available(); }
3690 EOF
3691
3692   if compile_prog "" "-lnuma" ; then
3693     numa=yes
3694     libs_softmmu="-lnuma $libs_softmmu"
3695   else
3696     if test "$numa" = "yes" ; then
3697       feature_not_found "numa" "install numactl devel"
3698     fi
3699     numa=no
3700   fi
3701 fi
3702
3703 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3704     echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3705     exit 1
3706 fi
3707
3708 ##########################################
3709 # tcmalloc probe
3710
3711 if test "$tcmalloc" = "yes" ; then
3712   cat > $TMPC << EOF
3713 #include <stdlib.h>
3714 int main(void) { malloc(1); return 0; }
3715 EOF
3716
3717   if compile_prog "" "-ltcmalloc" ; then
3718     LIBS="-ltcmalloc $LIBS"
3719   else
3720     feature_not_found "tcmalloc" "install gperftools devel"
3721   fi
3722 fi
3723
3724 ##########################################
3725 # jemalloc probe
3726
3727 if test "$jemalloc" = "yes" ; then
3728   cat > $TMPC << EOF
3729 #include <stdlib.h>
3730 int main(void) { malloc(1); return 0; }
3731 EOF
3732
3733   if compile_prog "" "-ljemalloc" ; then
3734     LIBS="-ljemalloc $LIBS"
3735   else
3736     feature_not_found "jemalloc" "install jemalloc devel"
3737   fi
3738 fi
3739
3740 ##########################################
3741 # signalfd probe
3742 signalfd="no"
3743 cat > $TMPC << EOF
3744 #include <unistd.h>
3745 #include <sys/syscall.h>
3746 #include <signal.h>
3747 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3748 EOF
3749
3750 if compile_prog "" "" ; then
3751   signalfd=yes
3752 fi
3753
3754 # check if eventfd is supported
3755 eventfd=no
3756 cat > $TMPC << EOF
3757 #include <sys/eventfd.h>
3758
3759 int main(void)
3760 {
3761     return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3762 }
3763 EOF
3764 if compile_prog "" "" ; then
3765   eventfd=yes
3766 fi
3767
3768 # check if memfd is supported
3769 memfd=no
3770 cat > $TMPC << EOF
3771 #include <sys/memfd.h>
3772
3773 int main(void)
3774 {
3775     return memfd_create("foo", MFD_ALLOW_SEALING);
3776 }
3777 EOF
3778 if compile_prog "" "" ; then
3779   memfd=yes
3780 fi
3781
3782
3783
3784 # check for fallocate
3785 fallocate=no
3786 cat > $TMPC << EOF
3787 #include <fcntl.h>
3788
3789 int main(void)
3790 {
3791     fallocate(0, 0, 0, 0);
3792     return 0;
3793 }
3794 EOF
3795 if compile_prog "" "" ; then
3796   fallocate=yes
3797 fi
3798
3799 # check for fallocate hole punching
3800 fallocate_punch_hole=no
3801 cat > $TMPC << EOF
3802 #include <fcntl.h>
3803 #include <linux/falloc.h>
3804
3805 int main(void)
3806 {
3807     fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3808     return 0;
3809 }
3810 EOF
3811 if compile_prog "" "" ; then
3812   fallocate_punch_hole=yes
3813 fi
3814
3815 # check that fallocate supports range zeroing inside the file
3816 fallocate_zero_range=no
3817 cat > $TMPC << EOF
3818 #include <fcntl.h>
3819 #include <linux/falloc.h>
3820
3821 int main(void)
3822 {
3823     fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3824     return 0;
3825 }
3826 EOF
3827 if compile_prog "" "" ; then
3828   fallocate_zero_range=yes
3829 fi
3830
3831 # check for posix_fallocate
3832 posix_fallocate=no
3833 cat > $TMPC << EOF
3834 #include <fcntl.h>
3835
3836 int main(void)
3837 {
3838     posix_fallocate(0, 0, 0);
3839     return 0;
3840 }
3841 EOF
3842 if compile_prog "" "" ; then
3843     posix_fallocate=yes
3844 fi
3845
3846 # check for sync_file_range
3847 sync_file_range=no
3848 cat > $TMPC << EOF
3849 #include <fcntl.h>
3850
3851 int main(void)
3852 {
3853     sync_file_range(0, 0, 0, 0);
3854     return 0;
3855 }
3856 EOF
3857 if compile_prog "" "" ; then
3858   sync_file_range=yes
3859 fi
3860
3861 # check for linux/fiemap.h and FS_IOC_FIEMAP
3862 fiemap=no
3863 cat > $TMPC << EOF
3864 #include <sys/ioctl.h>
3865 #include <linux/fs.h>
3866 #include <linux/fiemap.h>
3867
3868 int main(void)
3869 {
3870     ioctl(0, FS_IOC_FIEMAP, 0);
3871     return 0;
3872 }
3873 EOF
3874 if compile_prog "" "" ; then
3875   fiemap=yes
3876 fi
3877
3878 # check for dup3
3879 dup3=no
3880 cat > $TMPC << EOF
3881 #include <unistd.h>
3882
3883 int main(void)
3884 {
3885     dup3(0, 0, 0);
3886     return 0;
3887 }
3888 EOF
3889 if compile_prog "" "" ; then
3890   dup3=yes
3891 fi
3892
3893 # check for ppoll support
3894 ppoll=no
3895 cat > $TMPC << EOF
3896 #include <poll.h>
3897
3898 int main(void)
3899 {
3900     struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3901     ppoll(&pfd, 1, 0, 0);
3902     return 0;
3903 }
3904 EOF
3905 if compile_prog "" "" ; then
3906   ppoll=yes
3907 fi
3908
3909 # check for prctl(PR_SET_TIMERSLACK , ... ) support
3910 prctl_pr_set_timerslack=no
3911 cat > $TMPC << EOF
3912 #include <sys/prctl.h>
3913
3914 int main(void)
3915 {
3916     prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3917     return 0;
3918 }
3919 EOF
3920 if compile_prog "" "" ; then
3921   prctl_pr_set_timerslack=yes
3922 fi
3923
3924 # check for epoll support
3925 epoll=no
3926 cat > $TMPC << EOF
3927 #include <sys/epoll.h>
3928
3929 int main(void)
3930 {
3931     epoll_create(0);
3932     return 0;
3933 }
3934 EOF
3935 if compile_prog "" "" ; then
3936   epoll=yes
3937 fi
3938
3939 # epoll_create1 is a later addition
3940 # so we must check separately for its presence
3941 epoll_create1=no
3942 cat > $TMPC << EOF
3943 #include <sys/epoll.h>
3944
3945 int main(void)
3946 {
3947     /* Note that we use epoll_create1 as a value, not as
3948      * a function being called. This is necessary so that on
3949      * old SPARC glibc versions where the function was present in
3950      * the library but not declared in the header file we will
3951      * fail the configure check. (Otherwise we will get a compiler
3952      * warning but not an error, and will proceed to fail the
3953      * qemu compile where we compile with -Werror.)
3954      */
3955     return (int)(uintptr_t)&epoll_create1;
3956 }
3957 EOF
3958 if compile_prog "" "" ; then
3959   epoll_create1=yes
3960 fi
3961
3962 # check for sendfile support
3963 sendfile=no
3964 cat > $TMPC << EOF
3965 #include <sys/sendfile.h>
3966
3967 int main(void)
3968 {
3969     return sendfile(0, 0, 0, 0);
3970 }
3971 EOF
3972 if compile_prog "" "" ; then
3973   sendfile=yes
3974 fi
3975
3976 # check for timerfd support (glibc 2.8 and newer)
3977 timerfd=no
3978 cat > $TMPC << EOF
3979 #include <sys/timerfd.h>
3980
3981 int main(void)
3982 {
3983     return(timerfd_create(CLOCK_REALTIME, 0));
3984 }
3985 EOF
3986 if compile_prog "" "" ; then
3987   timerfd=yes
3988 fi
3989
3990 # check for setns and unshare support
3991 setns=no
3992 cat > $TMPC << EOF
3993 #include <sched.h>
3994
3995 int main(void)
3996 {
3997     int ret;
3998     ret = setns(0, 0);
3999     ret = unshare(0);
4000     return ret;
4001 }
4002 EOF
4003 if compile_prog "" "" ; then
4004   setns=yes
4005 fi
4006
4007 # clock_adjtime probe
4008 clock_adjtime=no
4009 cat > $TMPC <<EOF
4010 #include <time.h>
4011
4012 int main(void)
4013 {
4014     return clock_adjtime(0, 0);
4015 }
4016 EOF
4017 clock_adjtime=no
4018 if compile_prog "" "" ; then
4019   clock_adjtime=yes
4020 fi
4021
4022 # syncfs probe
4023 syncfs=no
4024 cat > $TMPC <<EOF
4025 #include <unistd.h>
4026
4027 int main(void)
4028 {
4029     return syncfs(0);
4030 }
4031 EOF
4032 syncfs=no
4033 if compile_prog "" "" ; then
4034   syncfs=yes
4035 fi
4036
4037 # Check if tools are available to build documentation.
4038 if test "$docs" != "no" ; then
4039   if has makeinfo && has pod2man; then
4040     docs=yes
4041   else
4042     if test "$docs" = "yes" ; then
4043       feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
4044     fi
4045     docs=no
4046   fi
4047 fi
4048
4049 # Search for bswap_32 function
4050 byteswap_h=no
4051 cat > $TMPC << EOF
4052 #include <byteswap.h>
4053 int main(void) { return bswap_32(0); }
4054 EOF
4055 if compile_prog "" "" ; then
4056   byteswap_h=yes
4057 fi
4058
4059 # Search for bswap32 function
4060 bswap_h=no
4061 cat > $TMPC << EOF
4062 #include <sys/endian.h>
4063 #include <sys/types.h>
4064 #include <machine/bswap.h>
4065 int main(void) { return bswap32(0); }
4066 EOF
4067 if compile_prog "" "" ; then
4068   bswap_h=yes
4069 fi
4070
4071 ##########################################
4072 # Do we have libiscsi >= 1.9.0
4073 if test "$libiscsi" != "no" ; then
4074   if $pkg_config --atleast-version=1.9.0 libiscsi; then
4075     libiscsi="yes"
4076     libiscsi_cflags=$($pkg_config --cflags libiscsi)
4077     libiscsi_libs=$($pkg_config --libs libiscsi)
4078   else
4079     if test "$libiscsi" = "yes" ; then
4080       feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
4081     fi
4082     libiscsi="no"
4083   fi
4084 fi
4085
4086 ##########################################
4087 # Do we need libm
4088 cat > $TMPC << EOF
4089 #include <math.h>
4090 int main(int argc, char **argv) { return isnan(sin((double)argc)); }
4091 EOF
4092 if compile_prog "" "" ; then
4093   :
4094 elif compile_prog "" "-lm" ; then
4095   LIBS="-lm $LIBS"
4096   libs_qga="-lm $libs_qga"
4097 else
4098   error_exit "libm check failed"
4099 fi
4100
4101 ##########################################
4102 # Do we need librt
4103 # uClibc provides 2 versions of clock_gettime(), one with realtime
4104 # support and one without. This means that the clock_gettime() don't
4105 # need -lrt. We still need it for timer_create() so we check for this
4106 # function in addition.
4107 cat > $TMPC <<EOF
4108 #include <signal.h>
4109 #include <time.h>
4110 int main(void) {
4111   timer_create(CLOCK_REALTIME, NULL, NULL);
4112   return clock_gettime(CLOCK_REALTIME, NULL);
4113 }
4114 EOF
4115
4116 if compile_prog "" "" ; then
4117   :
4118 # we need pthread for static linking. use previous pthread test result
4119 elif compile_prog "" "$pthread_lib -lrt" ; then
4120   LIBS="$LIBS -lrt"
4121   libs_qga="$libs_qga -lrt"
4122 fi
4123
4124 if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
4125         "$aix" != "yes" -a "$haiku" != "yes" ; then
4126     libs_softmmu="-lutil $libs_softmmu"
4127 fi
4128
4129 ##########################################
4130 # spice probe
4131 if test "$spice" != "no" ; then
4132   cat > $TMPC << EOF
4133 #include <spice.h>
4134 int main(void) { spice_server_new(); return 0; }
4135 EOF
4136   spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
4137   spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
4138   if $pkg_config --atleast-version=0.12.0 spice-server && \
4139      $pkg_config --atleast-version=0.12.3 spice-protocol && \
4140      compile_prog "$spice_cflags" "$spice_libs" ; then
4141     spice="yes"
4142     libs_softmmu="$libs_softmmu $spice_libs"
4143     QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
4144     spice_protocol_version=$($pkg_config --modversion spice-protocol)
4145     spice_server_version=$($pkg_config --modversion spice-server)
4146   else
4147     if test "$spice" = "yes" ; then
4148       feature_not_found "spice" \
4149           "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
4150     fi
4151     spice="no"
4152   fi
4153 fi
4154
4155 # check for smartcard support
4156 smartcard_cflags=""
4157 if test "$smartcard" != "no"; then
4158     if $pkg_config libcacard; then
4159         libcacard_cflags=$($pkg_config --cflags libcacard)
4160         libcacard_libs=$($pkg_config --libs libcacard)
4161         QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags"
4162         libs_softmmu="$libs_softmmu $libcacard_libs"
4163         smartcard="yes"
4164     else
4165         if test "$smartcard" = "yes"; then
4166             feature_not_found "smartcard" "Install libcacard devel"
4167         fi
4168         smartcard="no"
4169     fi
4170 fi
4171
4172 # check for libusb
4173 if test "$libusb" != "no" ; then
4174     if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4175         libusb="yes"
4176         libusb_cflags=$($pkg_config --cflags libusb-1.0)
4177         libusb_libs=$($pkg_config --libs libusb-1.0)
4178         QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
4179         libs_softmmu="$libs_softmmu $libusb_libs"
4180     else
4181         if test "$libusb" = "yes"; then
4182             feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4183         fi
4184         libusb="no"
4185     fi
4186 fi
4187
4188 # check for usbredirparser for usb network redirection support
4189 if test "$usb_redir" != "no" ; then
4190     if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4191         usb_redir="yes"
4192         usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4193         usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4194         QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
4195         libs_softmmu="$libs_softmmu $usb_redir_libs"
4196     else
4197         if test "$usb_redir" = "yes"; then
4198             feature_not_found "usb-redir" "Install usbredir devel"
4199         fi
4200         usb_redir="no"
4201     fi
4202 fi
4203
4204 ##########################################
4205 # check if we have VSS SDK headers for win
4206
4207 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4208   case "$vss_win32_sdk" in
4209     "")   vss_win32_include="-isystem $source_path" ;;
4210     *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4211           # handle path with spaces. So we symlink the headers into ".sdk/vss".
4212           vss_win32_include="-isystem $source_path/.sdk/vss"
4213           symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4214           ;;
4215     *)    vss_win32_include="-isystem $vss_win32_sdk"
4216   esac
4217   cat > $TMPC << EOF
4218 #define __MIDL_user_allocate_free_DEFINED__
4219 #include <inc/win2003/vss.h>
4220 int main(void) { return VSS_CTX_BACKUP; }
4221 EOF
4222   if compile_prog "$vss_win32_include" "" ; then
4223     guest_agent_with_vss="yes"
4224     QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4225     libs_qga="-lole32 -loleaut32 -lshlwapi -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4226     qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4227   else
4228     if test "$vss_win32_sdk" != "" ; then
4229       echo "ERROR: Please download and install Microsoft VSS SDK:"
4230       echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4231       echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4232       echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
4233       echo "ERROR: The headers are extracted in the directory \`inc'."
4234       feature_not_found "VSS support"
4235     fi
4236     guest_agent_with_vss="no"
4237   fi
4238 fi
4239
4240 ##########################################
4241 # lookup Windows platform SDK (if not specified)
4242 # The SDK is needed only to build .tlb (type library) file of guest agent
4243 # VSS provider from the source. It is usually unnecessary because the
4244 # pre-compiled .tlb file is included.
4245
4246 if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4247   if test -z "$win_sdk"; then
4248     programfiles="$PROGRAMFILES"
4249     test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4250     if test -n "$programfiles"; then
4251       win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4252     else
4253       feature_not_found "Windows SDK"
4254     fi
4255   elif test "$win_sdk" = "no"; then
4256     win_sdk=""
4257   fi
4258 fi
4259
4260 ##########################################
4261 # check if mingw environment provides a recent ntddscsi.h
4262 if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4263   cat > $TMPC << EOF
4264 #include <windows.h>
4265 #include <ntddscsi.h>
4266 int main(void) {
4267 #if !defined(IOCTL_SCSI_GET_ADDRESS)
4268 #error Missing required ioctl definitions
4269 #endif
4270   SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4271   return addr.Lun;
4272 }
4273 EOF
4274   if compile_prog "" "" ; then
4275     guest_agent_ntddscsi=yes
4276     libs_qga="-lsetupapi $libs_qga"
4277   fi
4278 fi
4279
4280 ##########################################
4281 # virgl renderer probe
4282
4283 if test "$virglrenderer" != "no" ; then
4284   cat > $TMPC << EOF
4285 #include <virglrenderer.h>
4286 int main(void) { virgl_renderer_poll(); return 0; }
4287 EOF
4288   virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4289   virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4290   if $pkg_config virglrenderer >/dev/null 2>&1 && \
4291      compile_prog "$virgl_cflags" "$virgl_libs" ; then
4292     virglrenderer="yes"
4293   else
4294     if test "$virglrenderer" = "yes" ; then
4295       feature_not_found "virglrenderer"
4296     fi
4297     virglrenderer="no"
4298   fi
4299 fi
4300
4301 ##########################################
4302 # check if we have fdatasync
4303
4304 fdatasync=no
4305 cat > $TMPC << EOF
4306 #include <unistd.h>
4307 int main(void) {
4308 #if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4309 return fdatasync(0);
4310 #else
4311 #error Not supported
4312 #endif
4313 }
4314 EOF
4315 if compile_prog "" "" ; then
4316     fdatasync=yes
4317 fi
4318
4319 ##########################################
4320 # check if we have madvise
4321
4322 madvise=no
4323 cat > $TMPC << EOF
4324 #include <sys/types.h>
4325 #include <sys/mman.h>
4326 #include <stddef.h>
4327 int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4328 EOF
4329 if compile_prog "" "" ; then
4330     madvise=yes
4331 fi
4332
4333 ##########################################
4334 # check if we have posix_madvise
4335
4336 posix_madvise=no
4337 cat > $TMPC << EOF
4338 #include <sys/mman.h>
4339 #include <stddef.h>
4340 int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4341 EOF
4342 if compile_prog "" "" ; then
4343     posix_madvise=yes
4344 fi
4345
4346 ##########################################
4347 # check if we have posix_syslog
4348
4349 posix_syslog=no
4350 cat > $TMPC << EOF
4351 #include <syslog.h>
4352 int main(void) { openlog("qemu", LOG_PID, LOG_DAEMON); syslog(LOG_INFO, "configure"); return 0; }
4353 EOF
4354 if compile_prog "" "" ; then
4355     posix_syslog=yes
4356 fi
4357
4358 ##########################################
4359 # check if trace backend exists
4360
4361 $python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends  > /dev/null 2> /dev/null
4362 if test "$?" -ne 0 ; then
4363   error_exit "invalid trace backends" \
4364       "Please choose supported trace backends."
4365 fi
4366
4367 ##########################################
4368 # For 'ust' backend, test if ust headers are present
4369 if have_backend "ust"; then
4370   cat > $TMPC << EOF
4371 #include <lttng/tracepoint.h>
4372 int main(void) { return 0; }
4373 EOF
4374   if compile_prog "" "-Wl,--no-as-needed -ldl" ; then
4375     if $pkg_config lttng-ust --exists; then
4376       lttng_ust_libs=$($pkg_config --libs lttng-ust)
4377     else
4378       lttng_ust_libs="-llttng-ust -ldl"
4379     fi
4380     if $pkg_config liburcu-bp --exists; then
4381       urcu_bp_libs=$($pkg_config --libs liburcu-bp)
4382     else
4383       urcu_bp_libs="-lurcu-bp"
4384     fi
4385
4386     LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4387     libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4388   else
4389     error_exit "Trace backend 'ust' missing lttng-ust header files"
4390   fi
4391 fi
4392
4393 ##########################################
4394 # For 'dtrace' backend, test if 'dtrace' command is present
4395 if have_backend "dtrace"; then
4396   if ! has 'dtrace' ; then
4397     error_exit "dtrace command is not found in PATH $PATH"
4398   fi
4399   trace_backend_stap="no"
4400   if has 'stap' ; then
4401     trace_backend_stap="yes"
4402   fi
4403 fi
4404
4405 ##########################################
4406 # check and set a backend for coroutine
4407
4408 # We prefer ucontext, but it's not always possible. The fallback
4409 # is sigcontext. On Windows the only valid backend is the Windows
4410 # specific one.
4411
4412 ucontext_works=no
4413 if test "$darwin" != "yes"; then
4414   cat > $TMPC << EOF
4415 #include <ucontext.h>
4416 #ifdef __stub_makecontext
4417 #error Ignoring glibc stub makecontext which will always fail
4418 #endif
4419 int main(void) { makecontext(0, 0, 0); return 0; }
4420 EOF
4421   if compile_prog "" "" ; then
4422     ucontext_works=yes
4423   fi
4424 fi
4425
4426 if test "$coroutine" = ""; then
4427   if test "$mingw32" = "yes"; then
4428     coroutine=win32
4429   elif test "$ucontext_works" = "yes"; then
4430     coroutine=ucontext
4431   else
4432     coroutine=sigaltstack
4433   fi
4434 else
4435   case $coroutine in
4436   windows)
4437     if test "$mingw32" != "yes"; then
4438       error_exit "'windows' coroutine backend only valid for Windows"
4439     fi
4440     # Unfortunately the user visible backend name doesn't match the
4441     # coroutine-*.c filename for this case, so we have to adjust it here.
4442     coroutine=win32
4443     ;;
4444   ucontext)
4445     if test "$ucontext_works" != "yes"; then
4446       feature_not_found "ucontext"
4447     fi
4448     ;;
4449   sigaltstack)
4450     if test "$mingw32" = "yes"; then
4451       error_exit "only the 'windows' coroutine backend is valid for Windows"
4452     fi
4453     ;;
4454   *)
4455     error_exit "unknown coroutine backend $coroutine"
4456     ;;
4457   esac
4458 fi
4459
4460 if test "$coroutine_pool" = ""; then
4461   coroutine_pool=yes
4462 fi
4463
4464 if test "$debug_stack_usage" = "yes"; then
4465   if test "$cpu" = "ia64" -o "$cpu" = "hppa"; then
4466     error_exit "stack usage debugging is not supported for $cpu"
4467   fi
4468   if test "$coroutine_pool" = "yes"; then
4469     echo "WARN: disabling coroutine pool for stack usage debugging"
4470     coroutine_pool=no
4471   fi
4472 fi
4473
4474
4475 ##########################################
4476 # check if we have open_by_handle_at
4477
4478 open_by_handle_at=no
4479 cat > $TMPC << EOF
4480 #include <fcntl.h>
4481 #if !defined(AT_EMPTY_PATH)
4482 # error missing definition
4483 #else
4484 int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4485 #endif
4486 EOF
4487 if compile_prog "" "" ; then
4488     open_by_handle_at=yes
4489 fi
4490
4491 ########################################
4492 # check if we have linux/magic.h
4493
4494 linux_magic_h=no
4495 cat > $TMPC << EOF
4496 #include <linux/magic.h>
4497 int main(void) {
4498   return 0;
4499 }
4500 EOF
4501 if compile_prog "" "" ; then
4502     linux_magic_h=yes
4503 fi
4504
4505 ########################################
4506 # check whether we can disable warning option with a pragma (this is needed
4507 # to silence warnings in the headers of some versions of external libraries).
4508 # This test has to be compiled with -Werror as otherwise an unknown pragma is
4509 # only a warning.
4510 #
4511 # If we can't selectively disable warning in the code, disable -Werror so that
4512 # the build doesn't fail anyway.
4513
4514 pragma_disable_unused_but_set=no
4515 cat > $TMPC << EOF
4516 #pragma GCC diagnostic push
4517 #pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4518 #pragma GCC diagnostic ignored "-Wstrict-prototypes"
4519 #pragma GCC diagnostic pop
4520
4521 int main(void) {
4522     return 0;
4523 }
4524 EOF
4525 if compile_prog "-Werror" "" ; then
4526     pragma_diagnostic_available=yes
4527 else
4528     werror=no
4529 fi
4530
4531 ########################################
4532 # check if we have valgrind/valgrind.h
4533
4534 valgrind_h=no
4535 cat > $TMPC << EOF
4536 #include <valgrind/valgrind.h>
4537 int main(void) {
4538   return 0;
4539 }
4540 EOF
4541 if compile_prog "" "" ; then
4542     valgrind_h=yes
4543 fi
4544
4545 ########################################
4546 # check if environ is declared
4547
4548 has_environ=no
4549 cat > $TMPC << EOF
4550 #include <unistd.h>
4551 int main(void) {
4552     environ = 0;
4553     return 0;
4554 }
4555 EOF
4556 if compile_prog "" "" ; then
4557     has_environ=yes
4558 fi
4559
4560 ########################################
4561 # check if cpuid.h is usable.
4562
4563 cpuid_h=no
4564 cat > $TMPC << EOF
4565 #include <cpuid.h>
4566 int main(void) {
4567     unsigned a, b, c, d;
4568     int max = __get_cpuid_max(0, 0);
4569
4570     if (max >= 1) {
4571         __cpuid(1, a, b, c, d);
4572     }
4573
4574     if (max >= 7) {
4575         __cpuid_count(7, 0, a, b, c, d);
4576     }
4577
4578     return 0;
4579 }
4580 EOF
4581 if compile_prog "" "" ; then
4582     cpuid_h=yes
4583 fi
4584
4585 ########################################
4586 # check if __[u]int128_t is usable.
4587
4588 int128=no
4589 cat > $TMPC << EOF
4590 #if defined(__clang_major__) && defined(__clang_minor__)
4591 # if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4592 #  error __int128_t does not work in CLANG before 3.2
4593 # endif
4594 #endif
4595 __int128_t a;
4596 __uint128_t b;
4597 int main (void) {
4598   a = a + b;
4599   b = a * b;
4600   a = a * a;
4601   return 0;
4602 }
4603 EOF
4604 if compile_prog "" "" ; then
4605     int128=yes
4606 fi
4607
4608 #########################################
4609 # See if 128-bit atomic operations are supported.
4610
4611 atomic128=no
4612 if test "$int128" = "yes"; then
4613   cat > $TMPC << EOF
4614 int main(void)
4615 {
4616   unsigned __int128 x = 0, y = 0;
4617   y = __atomic_load_16(&x, 0);
4618   __atomic_store_16(&x, y, 0);
4619   __atomic_compare_exchange_16(&x, &y, x, 0, 0, 0);
4620   return 0;
4621 }
4622 EOF
4623   if compile_prog "" "" ; then
4624     atomic128=yes
4625   fi
4626 fi
4627
4628 #########################################
4629 # See if 64-bit atomic operations are supported.
4630 # Note that without __atomic builtins, we can only
4631 # assume atomic loads/stores max at pointer size.
4632
4633 cat > $TMPC << EOF
4634 #include <stdint.h>
4635 int main(void)
4636 {
4637   uint64_t x = 0, y = 0;
4638 #ifdef __ATOMIC_RELAXED
4639   y = __atomic_load_8(&x, 0);
4640   __atomic_store_8(&x, y, 0);
4641   __atomic_compare_exchange_8(&x, &y, x, 0, 0, 0);
4642   __atomic_exchange_8(&x, y, 0);
4643   __atomic_fetch_add_8(&x, y, 0);
4644 #else
4645   typedef char is_host64[sizeof(void *) >= sizeof(uint64_t) ? 1 : -1];
4646   __sync_lock_test_and_set(&x, y);
4647   __sync_val_compare_and_swap(&x, y, 0);
4648   __sync_fetch_and_add(&x, y);
4649 #endif
4650   return 0;
4651 }
4652 EOF
4653 if compile_prog "" "" ; then
4654   atomic64=yes
4655 fi
4656
4657 ########################################
4658 # check if getauxval is available.
4659
4660 getauxval=no
4661 cat > $TMPC << EOF
4662 #include <sys/auxv.h>
4663 int main(void) {
4664   return getauxval(AT_HWCAP) == 0;
4665 }
4666 EOF
4667 if compile_prog "" "" ; then
4668     getauxval=yes
4669 fi
4670
4671 ########################################
4672 # check if ccache is interfering with
4673 # semantic analysis of macros
4674
4675 unset CCACHE_CPP2
4676 ccache_cpp2=no
4677 cat > $TMPC << EOF
4678 static const int Z = 1;
4679 #define fn() ({ Z; })
4680 #define TAUT(X) ((X) == Z)
4681 #define PAREN(X, Y) (X == Y)
4682 #define ID(X) (X)
4683 int main(int argc, char *argv[])
4684 {
4685     int x = 0, y = 0;
4686     x = ID(x);
4687     x = fn();
4688     fn();
4689     if (PAREN(x, y)) return 0;
4690     if (TAUT(Z)) return 0;
4691     return 0;
4692 }
4693 EOF
4694
4695 if ! compile_object "-Werror"; then
4696     ccache_cpp2=yes
4697 fi
4698
4699 #################################################
4700 # clang does not support glibc + FORTIFY_SOURCE.
4701
4702 if test "$fortify_source" != "no"; then
4703   if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4704     fortify_source="no";
4705   elif test -n "$cxx" &&
4706        echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
4707     fortify_source="no";
4708   else
4709     fortify_source="yes"
4710   fi
4711 fi
4712
4713 ##########################################
4714 # check if struct fsxattr is available via linux/fs.h
4715
4716 have_fsxattr=no
4717 cat > $TMPC << EOF
4718 #include <linux/fs.h>
4719 struct fsxattr foo;
4720 int main(void) {
4721   return 0;
4722 }
4723 EOF
4724 if compile_prog "" "" ; then
4725     have_fsxattr=yes
4726 fi
4727
4728 ##########################################
4729 # check if rtnetlink.h exists and is useful
4730 have_rtnetlink=no
4731 cat > $TMPC << EOF
4732 #include <linux/rtnetlink.h>
4733 int main(void) {
4734   return IFLA_PROTO_DOWN;
4735 }
4736 EOF
4737 if compile_prog "" "" ; then
4738     have_rtnetlink=yes
4739 fi
4740
4741 ##########################################
4742 # check for usable AF_VSOCK environment
4743 have_af_vsock=no
4744 cat > $TMPC << EOF
4745 #include <errno.h>
4746 #include <sys/types.h>
4747 #include <sys/socket.h>
4748 #if !defined(AF_VSOCK)
4749 # error missing AF_VSOCK flag
4750 #endif
4751 #include <linux/vm_sockets.h>
4752 int main(void) {
4753     int sock, ret;
4754     struct sockaddr_vm svm;
4755     socklen_t len = sizeof(svm);
4756     sock = socket(AF_VSOCK, SOCK_STREAM, 0);
4757     ret = getpeername(sock, (struct sockaddr *)&svm, &len);
4758     if ((ret == -1) && (errno == ENOTCONN)) {
4759         return 0;
4760     }
4761     return -1;
4762 }
4763 EOF
4764 if compile_prog "" "" ; then
4765     have_af_vsock=yes
4766 fi
4767
4768 #################################################
4769 # Sparc implicitly links with --relax, which is
4770 # incompatible with -r, so --no-relax should be
4771 # given. It does no harm to give it on other
4772 # platforms too.
4773
4774 # Note: the prototype is needed since QEMU_CFLAGS
4775 #       contains -Wmissing-prototypes
4776 cat > $TMPC << EOF
4777 extern int foo(void);
4778 int foo(void) { return 0; }
4779 EOF
4780 if ! compile_object ""; then
4781   error_exit "Failed to compile object file for LD_REL_FLAGS test"
4782 fi
4783 for i in '-Wl,-r -Wl,--no-relax' -Wl,-r -r; do
4784   if do_cc -nostdlib $i -o $TMPMO $TMPO; then
4785     LD_REL_FLAGS=$i
4786     break
4787   fi
4788 done
4789 if test "$modules" = "yes" && test "$LD_REL_FLAGS" = ""; then
4790   feature_not_found "modules" "Cannot find how to build relocatable objects"
4791 fi
4792
4793 ##########################################
4794 # check for sysmacros.h
4795
4796 have_sysmacros=no
4797 cat > $TMPC << EOF
4798 #include <sys/sysmacros.h>
4799 int main(void) {
4800     return makedev(0, 0);
4801 }
4802 EOF
4803 if compile_prog "" "" ; then
4804     have_sysmacros=yes
4805 fi
4806
4807 ##########################################
4808 # Veritas HyperScale block driver VxHS
4809 # Check if libvxhs is installed
4810
4811 if test "$vxhs" != "no" ; then
4812   cat > $TMPC <<EOF
4813 #include <stdint.h>
4814 #include <qnio/qnio_api.h>
4815
4816 void *vxhs_callback;
4817
4818 int main(void) {
4819     iio_init(QNIO_VERSION, vxhs_callback);
4820     return 0;
4821 }
4822 EOF
4823   vxhs_libs="-lvxhs -lssl"
4824   if compile_prog "" "$vxhs_libs" ; then
4825     vxhs=yes
4826   else
4827     if test "$vxhs" = "yes" ; then
4828       feature_not_found "vxhs block device" "Install libvxhs See github"
4829     fi
4830     vxhs=no
4831   fi
4832 fi
4833
4834 ##########################################
4835 # check for _Static_assert()
4836
4837 have_static_assert=no
4838 cat > $TMPC << EOF
4839 _Static_assert(1, "success");
4840 int main(void) {
4841     return 0;
4842 }
4843 EOF
4844 if compile_prog "" "" ; then
4845     have_static_assert=yes
4846 fi
4847
4848 ##########################################
4849 # End of CC checks
4850 # After here, no more $cc or $ld runs
4851
4852 if test "$gcov" = "yes" ; then
4853   CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4854   LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
4855 elif test "$fortify_source" = "yes" ; then
4856   CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
4857 elif test "$debug" = "no"; then
4858   CFLAGS="-O2 $CFLAGS"
4859 fi
4860
4861 ##########################################
4862 # Do we have libnfs
4863 if test "$libnfs" != "no" ; then
4864   if $pkg_config --atleast-version=1.9.3 libnfs; then
4865     libnfs="yes"
4866     libnfs_libs=$($pkg_config --libs libnfs)
4867   else
4868     if test "$libnfs" = "yes" ; then
4869       feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
4870     fi
4871     libnfs="no"
4872   fi
4873 fi
4874
4875 # Now we've finished running tests it's OK to add -Werror to the compiler flags
4876 if test "$werror" = "yes"; then
4877     QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
4878 fi
4879
4880 if test "$solaris" = "no" ; then
4881     if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
4882         LDFLAGS="-Wl,--warn-common $LDFLAGS"
4883     fi
4884 fi
4885
4886 # test if pod2man has --utf8 option
4887 if pod2man --help | grep -q utf8; then
4888     POD2MAN="pod2man --utf8"
4889 else
4890     POD2MAN="pod2man"
4891 fi
4892
4893 # Use ASLR, no-SEH and DEP if available
4894 if test "$mingw32" = "yes" ; then
4895     for flag in --dynamicbase --no-seh --nxcompat; do
4896         if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
4897             LDFLAGS="-Wl,$flag $LDFLAGS"
4898         fi
4899     done
4900 fi
4901
4902 qemu_confdir=$sysconfdir$confsuffix
4903 qemu_moddir=$libdir$confsuffix
4904 qemu_datadir=$datadir$confsuffix
4905 qemu_localedir="$datadir/locale"
4906
4907 tools=""
4908 if test "$want_tools" = "yes" ; then
4909   tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4910   if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
4911     tools="qemu-nbd\$(EXESUF) $tools"
4912     tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
4913   fi
4914 fi
4915 if test "$softmmu" = yes ; then
4916   if test "$virtfs" != no ; then
4917     if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
4918       virtfs=yes
4919       tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
4920     else
4921       if test "$virtfs" = yes; then
4922         error_exit "VirtFS is supported only on Linux and requires libcap devel and libattr devel"
4923       fi
4924       virtfs=no
4925     fi
4926   fi
4927 fi
4928
4929 # Probe for guest agent support/options
4930
4931 if [ "$guest_agent" != "no" ]; then
4932   if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
4933       tools="qemu-ga $tools"
4934       guest_agent=yes
4935   elif [ "$guest_agent" != yes ]; then
4936       guest_agent=no
4937   else
4938       error_exit "Guest agent is not supported on this platform"
4939   fi
4940 fi
4941
4942 # Guest agent Window MSI  package
4943
4944 if test "$guest_agent" != yes; then
4945   if test "$guest_agent_msi" = yes; then
4946     error_exit "MSI guest agent package requires guest agent enabled"
4947   fi
4948   guest_agent_msi=no
4949 elif test "$mingw32" != "yes"; then
4950   if test "$guest_agent_msi" = "yes"; then
4951     error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
4952   fi
4953   guest_agent_msi=no
4954 elif ! has wixl; then
4955   if test "$guest_agent_msi" = "yes"; then
4956     error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
4957   fi
4958   guest_agent_msi=no
4959 else
4960   # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
4961   # disabled explicitly
4962   if test "$guest_agent_msi" != "no"; then
4963     guest_agent_msi=yes
4964   fi
4965 fi
4966
4967 if test "$guest_agent_msi" = "yes"; then
4968   if test "$guest_agent_with_vss" = "yes"; then
4969     QEMU_GA_MSI_WITH_VSS="-D InstallVss"
4970   fi
4971
4972   if test "$QEMU_GA_MANUFACTURER" = ""; then
4973     QEMU_GA_MANUFACTURER=QEMU
4974   fi
4975
4976   if test "$QEMU_GA_DISTRO" = ""; then
4977     QEMU_GA_DISTRO=Linux
4978   fi
4979
4980   if test "$QEMU_GA_VERSION" = ""; then
4981       QEMU_GA_VERSION=$(cat $source_path/VERSION)
4982   fi
4983
4984   QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=$($pkg_config --variable=prefix glib-2.0)/bin"
4985
4986   case "$cpu" in
4987   x86_64)
4988     QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
4989     ;;
4990   i386)
4991     QEMU_GA_MSI_ARCH="-D Arch=32"
4992     ;;
4993   *)
4994     error_exit "CPU $cpu not supported for building installation package"
4995     ;;
4996   esac
4997 fi
4998
4999 # Mac OS X ships with a broken assembler
5000 roms=
5001 if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
5002         "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
5003         "$softmmu" = yes ; then
5004     # Different host OS linkers have different ideas about the name of the ELF
5005     # emulation. Linux and OpenBSD use 'elf_i386'; FreeBSD uses the _fbsd
5006     # variant; and Windows uses i386pe.
5007     for emu in elf_i386 elf_i386_fbsd i386pe; do
5008         if "$ld" -verbose 2>&1 | grep -q "^[[:space:]]*$emu[[:space:]]*$"; then
5009             ld_i386_emulation="$emu"
5010             roms="optionrom"
5011             break
5012         fi
5013     done
5014 fi
5015 if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
5016   roms="$roms spapr-rtas"
5017 fi
5018
5019 if test "$cpu" = "s390x" ; then
5020   roms="$roms s390-ccw"
5021 fi
5022
5023 # Probe for the need for relocating the user-only binary.
5024 if ( [ "$linux_user" = yes ] || [ "$bsd_user" = yes ] ) && [ "$pie" = no ]; then
5025   textseg_addr=
5026   case "$cpu" in
5027     arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
5028       # ??? Rationale for choosing this address
5029       textseg_addr=0x60000000
5030       ;;
5031     mips)
5032       # A 256M aligned address, high in the address space, with enough
5033       # room for the code_gen_buffer above it before the stack.
5034       textseg_addr=0x60000000
5035       ;;
5036   esac
5037   if [ -n "$textseg_addr" ]; then
5038     cat > $TMPC <<EOF
5039     int main(void) { return 0; }
5040 EOF
5041     textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
5042     if ! compile_prog "" "$textseg_ldflags"; then
5043       # In case ld does not support -Ttext-segment, edit the default linker
5044       # script via sed to set the .text start addr.  This is needed on FreeBSD
5045       # at least.
5046       if ! $ld --verbose >/dev/null 2>&1; then
5047         error_exit \
5048             "We need to link the QEMU user mode binaries at a" \
5049             "specific text address. Unfortunately your linker" \
5050             "doesn't support either the -Ttext-segment option or" \
5051             "printing the default linker script with --verbose." \
5052             "If you don't want the user mode binaries, pass the" \
5053             "--disable-user option to configure."
5054       fi
5055
5056       $ld --verbose | sed \
5057         -e '1,/==================================================/d' \
5058         -e '/==================================================/,$d' \
5059         -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
5060         -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
5061       textseg_ldflags="-Wl,-T../config-host.ld"
5062     fi
5063   fi
5064 fi
5065
5066 echo_version() {
5067     if test "$1" = "yes" ; then
5068         echo "($2)"
5069     fi
5070 }
5071
5072 # prepend pixman and ftd flags after all config tests are done
5073 QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
5074 libs_softmmu="$pixman_libs $libs_softmmu"
5075
5076 echo "Install prefix    $prefix"
5077 echo "BIOS directory    $(eval echo $qemu_datadir)"
5078 echo "binary directory  $(eval echo $bindir)"
5079 echo "library directory $(eval echo $libdir)"
5080 echo "module directory  $(eval echo $qemu_moddir)"
5081 echo "libexec directory $(eval echo $libexecdir)"
5082 echo "include directory $(eval echo $includedir)"
5083 echo "config directory  $(eval echo $sysconfdir)"
5084 if test "$mingw32" = "no" ; then
5085 echo "local state directory   $(eval echo $local_statedir)"
5086 echo "Manual directory  $(eval echo $mandir)"
5087 echo "ELF interp prefix $interp_prefix"
5088 else
5089 echo "local state directory   queried at runtime"
5090 echo "Windows SDK       $win_sdk"
5091 fi
5092 echo "Source path       $source_path"
5093 echo "C compiler        $cc"
5094 echo "Host C compiler   $host_cc"
5095 echo "C++ compiler      $cxx"
5096 echo "Objective-C compiler $objcc"
5097 echo "ARFLAGS           $ARFLAGS"
5098 echo "CFLAGS            $CFLAGS"
5099 echo "QEMU_CFLAGS       $QEMU_CFLAGS"
5100 echo "LDFLAGS           $LDFLAGS"
5101 echo "make              $make"
5102 echo "install           $install"
5103 echo "python            $python"
5104 if test "$slirp" = "yes" ; then
5105     echo "smbd              $smbd"
5106 fi
5107 echo "module support    $modules"
5108 echo "host CPU          $cpu"
5109 echo "host big endian   $bigendian"
5110 echo "target list       $target_list"
5111 echo "tcg debug enabled $debug_tcg"
5112 echo "gprof enabled     $gprof"
5113 echo "sparse enabled    $sparse"
5114 echo "strip binaries    $strip_opt"
5115 echo "profiler          $profiler"
5116 echo "static build      $static"
5117 if test "$darwin" = "yes" ; then
5118     echo "Cocoa support     $cocoa"
5119 fi
5120 echo "pixman            $pixman"
5121 echo "SDL support       $sdl $(echo_version $sdl $sdlversion)"
5122 echo "GTK support       $gtk $(echo_version $gtk $gtk_version)"
5123 echo "GTK GL support    $gtk_gl"
5124 echo "VTE support       $vte $(echo_version $vte $vteversion)"
5125 echo "TLS priority      $tls_priority"
5126 echo "GNUTLS support    $gnutls"
5127 echo "GNUTLS rnd        $gnutls_rnd"
5128 echo "libgcrypt         $gcrypt"
5129 echo "libgcrypt kdf     $gcrypt_kdf"
5130 echo "nettle            $nettle $(echo_version $nettle $nettle_version)"
5131 echo "nettle kdf        $nettle_kdf"
5132 echo "libtasn1          $tasn1"
5133 echo "curses support    $curses"
5134 echo "virgl support     $virglrenderer"
5135 echo "curl support      $curl"
5136 echo "mingw32 support   $mingw32"
5137 echo "Audio drivers     $audio_drv_list"
5138 echo "Block whitelist (rw) $block_drv_rw_whitelist"
5139 echo "Block whitelist (ro) $block_drv_ro_whitelist"
5140 echo "VirtFS support    $virtfs"
5141 echo "VNC support       $vnc"
5142 if test "$vnc" = "yes" ; then
5143     echo "VNC SASL support  $vnc_sasl"
5144     echo "VNC JPEG support  $vnc_jpeg"
5145     echo "VNC PNG support   $vnc_png"
5146 fi
5147 if test -n "$sparc_cpu"; then
5148     echo "Target Sparc Arch $sparc_cpu"
5149 fi
5150 echo "xen support       $xen"
5151 if test "$xen" = "yes" ; then
5152   echo "xen ctrl version  $xen_ctrl_version"
5153   echo "pv dom build      $xen_pv_domain_build"
5154 fi
5155 echo "brlapi support    $brlapi"
5156 echo "bluez  support    $bluez"
5157 echo "Documentation     $docs"
5158 echo "PIE               $pie"
5159 echo "vde support       $vde"
5160 echo "netmap support    $netmap"
5161 echo "Linux AIO support $linux_aio"
5162 echo "ATTR/XATTR support $attr"
5163 echo "Install blobs     $blobs"
5164 echo "KVM support       $kvm"
5165 echo "HAX support       $hax"
5166 echo "RDMA support      $rdma"
5167 echo "TCG interpreter   $tcg_interpreter"
5168 echo "fdt support       $fdt"
5169 echo "preadv support    $preadv"
5170 echo "fdatasync         $fdatasync"
5171 echo "madvise           $madvise"
5172 echo "posix_madvise     $posix_madvise"
5173 echo "libcap-ng support $cap_ng"
5174 echo "vhost-net support $vhost_net"
5175 echo "vhost-scsi support $vhost_scsi"
5176 echo "vhost-vsock support $vhost_vsock"
5177 echo "Trace backends    $trace_backends"
5178 if have_backend "simple"; then
5179 echo "Trace output file $trace_file-<pid>"
5180 fi
5181 echo "spice support     $spice $(echo_version $spice $spice_protocol_version/$spice_server_version)"
5182 echo "rbd support       $rbd"
5183 echo "xfsctl support    $xfs"
5184 echo "smartcard support $smartcard"
5185 echo "libusb            $libusb"
5186 echo "usb net redir     $usb_redir"
5187 echo "OpenGL support    $opengl"
5188 echo "OpenGL dmabufs    $opengl_dmabuf"
5189 echo "libiscsi support  $libiscsi"
5190 echo "libnfs support    $libnfs"
5191 echo "build guest agent $guest_agent"
5192 echo "QGA VSS support   $guest_agent_with_vss"
5193 echo "QGA w32 disk info $guest_agent_ntddscsi"
5194 echo "QGA MSI support   $guest_agent_msi"
5195 echo "seccomp support   $seccomp"
5196 echo "coroutine backend $coroutine"
5197 echo "coroutine pool    $coroutine_pool"
5198 echo "debug stack usage $debug_stack_usage"
5199 echo "GlusterFS support $glusterfs"
5200 echo "gcov              $gcov_tool"
5201 echo "gcov enabled      $gcov"
5202 echo "TPM support       $tpm"
5203 echo "libssh2 support   $libssh2"
5204 echo "TPM passthrough   $tpm_passthrough"
5205 echo "QOM debugging     $qom_cast_debug"
5206 echo "Live block migration $live_block_migration"
5207 echo "lzo support       $lzo"
5208 echo "snappy support    $snappy"
5209 echo "bzip2 support     $bzip2"
5210 echo "NUMA host support $numa"
5211 echo "tcmalloc support  $tcmalloc"
5212 echo "jemalloc support  $jemalloc"
5213 echo "avx2 optimization $avx2_opt"
5214 echo "replication support $replication"
5215 echo "VxHS block device $vxhs"
5216
5217 if test "$sdl_too_old" = "yes"; then
5218 echo "-> Your SDL version is too old - please upgrade to have SDL support"
5219 fi
5220
5221 if test "$supported_cpu" = "no"; then
5222     echo
5223     echo "WARNING: SUPPORT FOR THIS HOST CPU WILL GO AWAY IN FUTURE RELEASES!"
5224     echo
5225     echo "CPU host architecture $cpu support is not currently maintained."
5226     echo "The QEMU project intends to remove support for this host CPU in"
5227     echo "a future release if nobody volunteers to maintain it and to"
5228     echo "provide a build host for our continuous integration setup."
5229     echo "configure has succeeded and you can continue to build, but"
5230     echo "if you care about QEMU on this platform you should contact"
5231     echo "us upstream at qemu-devel@nongnu.org."
5232 fi
5233
5234 if test "$supported_os" = "no"; then
5235     echo
5236     echo "WARNING: SUPPORT FOR THIS HOST OS WILL GO AWAY IN FUTURE RELEASES!"
5237     echo
5238     echo "Host OS $targetos support is not currently maintained."
5239     echo "The QEMU project intends to remove support for this host OS in"
5240     echo "a future release if nobody volunteers to maintain it and to"
5241     echo "provide a build host for our continuous integration setup."
5242     echo "configure has succeeded and you can continue to build, but"
5243     echo "if you care about QEMU on this platform you should contact"
5244     echo "us upstream at qemu-devel@nongnu.org."
5245 fi
5246
5247 config_host_mak="config-host.mak"
5248
5249 echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
5250
5251 echo "# Automatically generated by configure - do not modify" > $config_host_mak
5252 echo >> $config_host_mak
5253
5254 echo all: >> $config_host_mak
5255 echo "prefix=$prefix" >> $config_host_mak
5256 echo "bindir=$bindir" >> $config_host_mak
5257 echo "libdir=$libdir" >> $config_host_mak
5258 echo "libexecdir=$libexecdir" >> $config_host_mak
5259 echo "includedir=$includedir" >> $config_host_mak
5260 echo "mandir=$mandir" >> $config_host_mak
5261 echo "sysconfdir=$sysconfdir" >> $config_host_mak
5262 echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
5263 echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
5264 echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
5265 echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
5266 if test "$mingw32" = "no" ; then
5267   echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
5268 fi
5269 echo "qemu_helperdir=$libexecdir" >> $config_host_mak
5270 echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
5271 echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
5272 echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
5273 echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
5274
5275 echo "ARCH=$ARCH" >> $config_host_mak
5276
5277 if test "$debug_tcg" = "yes" ; then
5278   echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
5279 fi
5280 if test "$strip_opt" = "yes" ; then
5281   echo "STRIP=${strip}" >> $config_host_mak
5282 fi
5283 if test "$bigendian" = "yes" ; then
5284   echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
5285 fi
5286 if test "$mingw32" = "yes" ; then
5287   echo "CONFIG_WIN32=y" >> $config_host_mak
5288   rc_version=$(cat $source_path/VERSION)
5289   version_major=${rc_version%%.*}
5290   rc_version=${rc_version#*.}
5291   version_minor=${rc_version%%.*}
5292   rc_version=${rc_version#*.}
5293   version_subminor=${rc_version%%.*}
5294   version_micro=0
5295   echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5296   echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
5297   if test "$guest_agent_with_vss" = "yes" ; then
5298     echo "CONFIG_QGA_VSS=y" >> $config_host_mak
5299     echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
5300     echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
5301   fi
5302   if test "$guest_agent_ntddscsi" = "yes" ; then
5303     echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
5304   fi
5305   if test "$guest_agent_msi" = "yes"; then
5306     echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak  
5307     echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
5308     echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
5309     echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
5310     echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
5311     echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
5312     echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
5313   fi
5314 else
5315   echo "CONFIG_POSIX=y" >> $config_host_mak
5316 fi
5317
5318 if test "$linux" = "yes" ; then
5319   echo "CONFIG_LINUX=y" >> $config_host_mak
5320 fi
5321
5322 if test "$darwin" = "yes" ; then
5323   echo "CONFIG_DARWIN=y" >> $config_host_mak
5324 fi
5325
5326 if test "$aix" = "yes" ; then
5327   echo "CONFIG_AIX=y" >> $config_host_mak
5328 fi
5329
5330 if test "$solaris" = "yes" ; then
5331   echo "CONFIG_SOLARIS=y" >> $config_host_mak
5332   echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
5333   if test "$needs_libsunmath" = "yes" ; then
5334     echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
5335   fi
5336 fi
5337 if test "$haiku" = "yes" ; then
5338   echo "CONFIG_HAIKU=y" >> $config_host_mak
5339 fi
5340 if test "$static" = "yes" ; then
5341   echo "CONFIG_STATIC=y" >> $config_host_mak
5342 fi
5343 if test "$profiler" = "yes" ; then
5344   echo "CONFIG_PROFILER=y" >> $config_host_mak
5345 fi
5346 if test "$slirp" = "yes" ; then
5347   echo "CONFIG_SLIRP=y" >> $config_host_mak
5348   echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
5349 fi
5350 if test "$vde" = "yes" ; then
5351   echo "CONFIG_VDE=y" >> $config_host_mak
5352 fi
5353 if test "$netmap" = "yes" ; then
5354   echo "CONFIG_NETMAP=y" >> $config_host_mak
5355 fi
5356 if test "$l2tpv3" = "yes" ; then
5357   echo "CONFIG_L2TPV3=y" >> $config_host_mak
5358 fi
5359 if test "$cap_ng" = "yes" ; then
5360   echo "CONFIG_LIBCAP=y" >> $config_host_mak
5361 fi
5362 echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
5363 for drv in $audio_drv_list; do
5364     def=CONFIG_$(echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]')
5365     echo "$def=y" >> $config_host_mak
5366 done
5367 if test "$audio_pt_int" = "yes" ; then
5368   echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
5369 fi
5370 if test "$audio_win_int" = "yes" ; then
5371   echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5372 fi
5373 echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5374 echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
5375 if test "$vnc" = "yes" ; then
5376   echo "CONFIG_VNC=y" >> $config_host_mak
5377 fi
5378 if test "$vnc_sasl" = "yes" ; then
5379   echo "CONFIG_VNC_SASL=y" >> $config_host_mak
5380 fi
5381 if test "$vnc_jpeg" = "yes" ; then
5382   echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
5383 fi
5384 if test "$vnc_png" = "yes" ; then
5385   echo "CONFIG_VNC_PNG=y" >> $config_host_mak
5386 fi
5387 if test "$fnmatch" = "yes" ; then
5388   echo "CONFIG_FNMATCH=y" >> $config_host_mak
5389 fi
5390 if test "$xfs" = "yes" ; then
5391   echo "CONFIG_XFS=y" >> $config_host_mak
5392 fi
5393 qemu_version=$(head $source_path/VERSION)
5394 echo "VERSION=$qemu_version" >>$config_host_mak
5395 echo "PKGVERSION=$pkgversion" >>$config_host_mak
5396 echo "SRC_PATH=$source_path" >> $config_host_mak
5397 echo "TARGET_DIRS=$target_list" >> $config_host_mak
5398 if [ "$docs" = "yes" ] ; then
5399   echo "BUILD_DOCS=yes" >> $config_host_mak
5400 fi
5401 if test "$modules" = "yes"; then
5402   # $shacmd can generate a hash started with digit, which the compiler doesn't
5403   # like as an symbol. So prefix it with an underscore
5404   echo "CONFIG_STAMP=_$( (echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ )" >> $config_host_mak
5405   echo "CONFIG_MODULES=y" >> $config_host_mak
5406 fi
5407 if test "$sdl" = "yes" ; then
5408   echo "CONFIG_SDL=y" >> $config_host_mak
5409   echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
5410   echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
5411 fi
5412 if test "$cocoa" = "yes" ; then
5413   echo "CONFIG_COCOA=y" >> $config_host_mak
5414 fi
5415 if test "$curses" = "yes" ; then
5416   echo "CONFIG_CURSES=y" >> $config_host_mak
5417 fi
5418 if test "$pipe2" = "yes" ; then
5419   echo "CONFIG_PIPE2=y" >> $config_host_mak
5420 fi
5421 if test "$accept4" = "yes" ; then
5422   echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5423 fi
5424 if test "$splice" = "yes" ; then
5425   echo "CONFIG_SPLICE=y" >> $config_host_mak
5426 fi
5427 if test "$eventfd" = "yes" ; then
5428   echo "CONFIG_EVENTFD=y" >> $config_host_mak
5429 fi
5430 if test "$memfd" = "yes" ; then
5431   echo "CONFIG_MEMFD=y" >> $config_host_mak
5432 fi
5433 if test "$fallocate" = "yes" ; then
5434   echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5435 fi
5436 if test "$fallocate_punch_hole" = "yes" ; then
5437   echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5438 fi
5439 if test "$fallocate_zero_range" = "yes" ; then
5440   echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5441 fi
5442 if test "$posix_fallocate" = "yes" ; then
5443   echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5444 fi
5445 if test "$sync_file_range" = "yes" ; then
5446   echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5447 fi
5448 if test "$fiemap" = "yes" ; then
5449   echo "CONFIG_FIEMAP=y" >> $config_host_mak
5450 fi
5451 if test "$dup3" = "yes" ; then
5452   echo "CONFIG_DUP3=y" >> $config_host_mak
5453 fi
5454 if test "$ppoll" = "yes" ; then
5455   echo "CONFIG_PPOLL=y" >> $config_host_mak
5456 fi
5457 if test "$prctl_pr_set_timerslack" = "yes" ; then
5458   echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5459 fi
5460 if test "$epoll" = "yes" ; then
5461   echo "CONFIG_EPOLL=y" >> $config_host_mak
5462 fi
5463 if test "$epoll_create1" = "yes" ; then
5464   echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5465 fi
5466 if test "$sendfile" = "yes" ; then
5467   echo "CONFIG_SENDFILE=y" >> $config_host_mak
5468 fi
5469 if test "$timerfd" = "yes" ; then
5470   echo "CONFIG_TIMERFD=y" >> $config_host_mak
5471 fi
5472 if test "$setns" = "yes" ; then
5473   echo "CONFIG_SETNS=y" >> $config_host_mak
5474 fi
5475 if test "$clock_adjtime" = "yes" ; then
5476   echo "CONFIG_CLOCK_ADJTIME=y" >> $config_host_mak
5477 fi
5478 if test "$syncfs" = "yes" ; then
5479   echo "CONFIG_SYNCFS=y" >> $config_host_mak
5480 fi
5481 if test "$inotify" = "yes" ; then
5482   echo "CONFIG_INOTIFY=y" >> $config_host_mak
5483 fi
5484 if test "$inotify1" = "yes" ; then
5485   echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5486 fi
5487 if test "$byteswap_h" = "yes" ; then
5488   echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5489 fi
5490 if test "$bswap_h" = "yes" ; then
5491   echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5492 fi
5493 if test "$curl" = "yes" ; then
5494   echo "CONFIG_CURL=m" >> $config_host_mak
5495   echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
5496   echo "CURL_LIBS=$curl_libs" >> $config_host_mak
5497 fi
5498 if test "$brlapi" = "yes" ; then
5499   echo "CONFIG_BRLAPI=y" >> $config_host_mak
5500 fi
5501 if test "$bluez" = "yes" ; then
5502   echo "CONFIG_BLUEZ=y" >> $config_host_mak
5503   echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
5504 fi
5505 if test "$glib_subprocess" = "yes" ; then
5506   echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
5507 fi
5508 if test "$gtk" = "yes" ; then
5509   echo "CONFIG_GTK=y" >> $config_host_mak
5510   echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
5511   echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
5512   echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
5513   if test "$gtk_gl" = "yes" ; then
5514     echo "CONFIG_GTK_GL=y" >> $config_host_mak
5515   fi
5516 fi
5517 echo "CONFIG_TLS_PRIORITY=\"$tls_priority\"" >> $config_host_mak
5518 if test "$gnutls" = "yes" ; then
5519   echo "CONFIG_GNUTLS=y" >> $config_host_mak
5520 fi
5521 if test "$gnutls_rnd" = "yes" ; then
5522   echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
5523 fi
5524 if test "$gcrypt" = "yes" ; then
5525   echo "CONFIG_GCRYPT=y" >> $config_host_mak
5526   if test "$gcrypt_hmac" = "yes" ; then
5527     echo "CONFIG_GCRYPT_HMAC=y" >> $config_host_mak
5528   fi
5529   if test "$gcrypt_kdf" = "yes" ; then
5530     echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
5531   fi
5532 fi
5533 if test "$nettle" = "yes" ; then
5534   echo "CONFIG_NETTLE=y" >> $config_host_mak
5535   echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
5536   if test "$nettle_kdf" = "yes" ; then
5537     echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
5538   fi
5539 fi
5540 if test "$tasn1" = "yes" ; then
5541   echo "CONFIG_TASN1=y" >> $config_host_mak
5542 fi
5543 if test "$have_ifaddrs_h" = "yes" ; then
5544     echo "HAVE_IFADDRS_H=y" >> $config_host_mak
5545 fi
5546 if test "$have_broken_size_max" = "yes" ; then
5547     echo "HAVE_BROKEN_SIZE_MAX=y" >> $config_host_mak
5548 fi
5549
5550 # Work around a system header bug with some kernel/XFS header
5551 # versions where they both try to define 'struct fsxattr':
5552 # xfs headers will not try to redefine structs from linux headers
5553 # if this macro is set.
5554 if test "$have_fsxattr" = "yes" ; then
5555     echo "HAVE_FSXATTR=y" >> $config_host_mak
5556 fi
5557 if test "$vte" = "yes" ; then
5558   echo "CONFIG_VTE=y" >> $config_host_mak
5559   echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5560 fi
5561 if test "$virglrenderer" = "yes" ; then
5562   echo "CONFIG_VIRGL=y" >> $config_host_mak
5563   echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5564   echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5565 fi
5566 if test "$xen" = "yes" ; then
5567   echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
5568   echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
5569   if test "$xen_pv_domain_build" = "yes" ; then
5570     echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
5571   fi
5572 fi
5573 if test "$linux_aio" = "yes" ; then
5574   echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5575 fi
5576 if test "$attr" = "yes" ; then
5577   echo "CONFIG_ATTR=y" >> $config_host_mak
5578 fi
5579 if test "$libattr" = "yes" ; then
5580   echo "CONFIG_LIBATTR=y" >> $config_host_mak
5581 fi
5582 if test "$virtfs" = "yes" ; then
5583   echo "CONFIG_VIRTFS=y" >> $config_host_mak
5584 fi
5585 if test "$vhost_scsi" = "yes" ; then
5586   echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5587 fi
5588 if test "$vhost_net" = "yes" ; then
5589   echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
5590 fi
5591 if test "$vhost_vsock" = "yes" ; then
5592   echo "CONFIG_VHOST_VSOCK=y" >> $config_host_mak
5593 fi
5594 if test "$blobs" = "yes" ; then
5595   echo "INSTALL_BLOBS=yes" >> $config_host_mak
5596 fi
5597 if test "$iovec" = "yes" ; then
5598   echo "CONFIG_IOVEC=y" >> $config_host_mak
5599 fi
5600 if test "$preadv" = "yes" ; then
5601   echo "CONFIG_PREADV=y" >> $config_host_mak
5602 fi
5603 if test "$fdt" = "yes" ; then
5604   echo "CONFIG_FDT=y" >> $config_host_mak
5605 fi
5606 if test "$signalfd" = "yes" ; then
5607   echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5608 fi
5609 if test "$tcg_interpreter" = "yes" ; then
5610   echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
5611 fi
5612 if test "$fdatasync" = "yes" ; then
5613   echo "CONFIG_FDATASYNC=y" >> $config_host_mak
5614 fi
5615 if test "$madvise" = "yes" ; then
5616   echo "CONFIG_MADVISE=y" >> $config_host_mak
5617 fi
5618 if test "$posix_madvise" = "yes" ; then
5619   echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5620 fi
5621
5622 if test "$spice" = "yes" ; then
5623   echo "CONFIG_SPICE=y" >> $config_host_mak
5624 fi
5625
5626 if test "$smartcard" = "yes" ; then
5627   echo "CONFIG_SMARTCARD=y" >> $config_host_mak
5628 fi
5629
5630 if test "$libusb" = "yes" ; then
5631   echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5632 fi
5633
5634 if test "$usb_redir" = "yes" ; then
5635   echo "CONFIG_USB_REDIR=y" >> $config_host_mak
5636 fi
5637
5638 if test "$opengl" = "yes" ; then
5639   echo "CONFIG_OPENGL=y" >> $config_host_mak
5640   echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
5641   if test "$opengl_dmabuf" = "yes" ; then
5642     echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
5643   fi
5644 fi
5645
5646 if test "$avx2_opt" = "yes" ; then
5647   echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
5648 fi
5649
5650 if test "$lzo" = "yes" ; then
5651   echo "CONFIG_LZO=y" >> $config_host_mak
5652 fi
5653
5654 if test "$snappy" = "yes" ; then
5655   echo "CONFIG_SNAPPY=y" >> $config_host_mak
5656 fi
5657
5658 if test "$bzip2" = "yes" ; then
5659   echo "CONFIG_BZIP2=y" >> $config_host_mak
5660   echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
5661 fi
5662
5663 if test "$libiscsi" = "yes" ; then
5664   echo "CONFIG_LIBISCSI=m" >> $config_host_mak
5665   echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
5666   echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
5667 fi
5668
5669 if test "$libnfs" = "yes" ; then
5670   echo "CONFIG_LIBNFS=m" >> $config_host_mak
5671   echo "LIBNFS_LIBS=$libnfs_libs" >> $config_host_mak
5672 fi
5673
5674 if test "$seccomp" = "yes"; then
5675   echo "CONFIG_SECCOMP=y" >> $config_host_mak
5676 fi
5677
5678 # XXX: suppress that
5679 if [ "$bsd" = "yes" ] ; then
5680   echo "CONFIG_BSD=y" >> $config_host_mak
5681 fi
5682
5683 if test "$localtime_r" = "yes" ; then
5684   echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
5685 fi
5686 if test "$qom_cast_debug" = "yes" ; then
5687   echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
5688 fi
5689 if test "$rbd" = "yes" ; then
5690   echo "CONFIG_RBD=m" >> $config_host_mak
5691   echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
5692   echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
5693 fi
5694
5695 echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
5696 if test "$coroutine_pool" = "yes" ; then
5697   echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
5698 else
5699   echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
5700 fi
5701
5702 if test "$debug_stack_usage" = "yes" ; then
5703   echo "CONFIG_DEBUG_STACK_USAGE=y" >> $config_host_mak
5704 fi
5705
5706 if test "$open_by_handle_at" = "yes" ; then
5707   echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
5708 fi
5709
5710 if test "$linux_magic_h" = "yes" ; then
5711   echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
5712 fi
5713
5714 if test "$pragma_diagnostic_available" = "yes" ; then
5715   echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
5716 fi
5717
5718 if test "$valgrind_h" = "yes" ; then
5719   echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
5720 fi
5721
5722 if test "$has_environ" = "yes" ; then
5723   echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
5724 fi
5725
5726 if test "$cpuid_h" = "yes" ; then
5727   echo "CONFIG_CPUID_H=y" >> $config_host_mak
5728 fi
5729
5730 if test "$int128" = "yes" ; then
5731   echo "CONFIG_INT128=y" >> $config_host_mak
5732 fi
5733
5734 if test "$atomic128" = "yes" ; then
5735   echo "CONFIG_ATOMIC128=y" >> $config_host_mak
5736 fi
5737
5738 if test "$atomic64" = "yes" ; then
5739   echo "CONFIG_ATOMIC64=y" >> $config_host_mak
5740 fi
5741
5742 if test "$getauxval" = "yes" ; then
5743   echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
5744 fi
5745
5746 if test "$glusterfs" = "yes" ; then
5747   echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
5748   echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
5749   echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
5750 fi
5751
5752 if test "$glusterfs_xlator_opt" = "yes" ; then
5753   echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
5754 fi
5755
5756 if test "$glusterfs_discard" = "yes" ; then
5757   echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
5758 fi
5759
5760 if test "$glusterfs_zerofill" = "yes" ; then
5761   echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
5762 fi
5763
5764 if test "$libssh2" = "yes" ; then
5765   echo "CONFIG_LIBSSH2=m" >> $config_host_mak
5766   echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
5767   echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
5768 fi
5769
5770 if test "$live_block_migration" = "yes" ; then
5771   echo "CONFIG_LIVE_BLOCK_MIGRATION=y" >> $config_host_mak
5772 fi
5773
5774 # USB host support
5775 if test "$libusb" = "yes"; then
5776   echo "HOST_USB=libusb legacy" >> $config_host_mak
5777 else
5778   echo "HOST_USB=stub" >> $config_host_mak
5779 fi
5780
5781 # TPM passthrough support?
5782 if test "$tpm" = "yes"; then
5783   echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
5784   if test "$tpm_passthrough" = "yes"; then
5785     echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
5786   fi
5787 fi
5788
5789 echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5790 if have_backend "nop"; then
5791   echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
5792 fi
5793 if have_backend "simple"; then
5794   echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5795   # Set the appropriate trace file.
5796   trace_file="\"$trace_file-\" FMT_pid"
5797 fi
5798 if have_backend "log"; then
5799   echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
5800 fi
5801 if have_backend "ust"; then
5802   echo "CONFIG_TRACE_UST=y" >> $config_host_mak
5803 fi
5804 if have_backend "dtrace"; then
5805   echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
5806   if test "$trace_backend_stap" = "yes" ; then
5807     echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
5808   fi
5809 fi
5810 if have_backend "ftrace"; then
5811   if test "$linux" = "yes" ; then
5812     echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
5813   else
5814     feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
5815   fi
5816 fi
5817 if have_backend "syslog"; then
5818   if test "$posix_syslog" = "yes" ; then
5819     echo "CONFIG_TRACE_SYSLOG=y" >> $config_host_mak
5820   else
5821     feature_not_found "syslog(trace backend)" "syslog not available"
5822   fi
5823 fi
5824 echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
5825
5826 if test "$rdma" = "yes" ; then
5827   echo "CONFIG_RDMA=y" >> $config_host_mak
5828 fi
5829
5830 if test "$have_rtnetlink" = "yes" ; then
5831   echo "CONFIG_RTNETLINK=y" >> $config_host_mak
5832 fi
5833
5834 if test "$replication" = "yes" ; then
5835   echo "CONFIG_REPLICATION=y" >> $config_host_mak
5836 fi
5837
5838 if test "$have_af_vsock" = "yes" ; then
5839   echo "CONFIG_AF_VSOCK=y" >> $config_host_mak
5840 fi
5841
5842 if test "$have_sysmacros" = "yes" ; then
5843   echo "CONFIG_SYSMACROS=y" >> $config_host_mak
5844 fi
5845
5846 if test "$have_static_assert" = "yes" ; then
5847   echo "CONFIG_STATIC_ASSERT=y" >> $config_host_mak
5848 fi
5849
5850 # Hold two types of flag:
5851 #   CONFIG_THREAD_SETNAME_BYTHREAD  - we've got a way of setting the name on
5852 #                                     a thread we have a handle to
5853 #   CONFIG_PTHREAD_SETNAME_NP       - A way of doing it on a particular
5854 #                                     platform
5855 if test "$pthread_setname_np" = "yes" ; then
5856   echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
5857   echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
5858 fi
5859
5860 if test "$vxhs" = "yes" ; then
5861   echo "CONFIG_VXHS=y" >> $config_host_mak
5862   echo "VXHS_LIBS=$vxhs_libs" >> $config_host_mak
5863 fi
5864
5865 if test "$tcg_interpreter" = "yes"; then
5866   QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5867 elif test "$ARCH" = "sparc64" ; then
5868   QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5869 elif test "$ARCH" = "s390x" ; then
5870   QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
5871 elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
5872   QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
5873 elif test "$ARCH" = "ppc64" ; then
5874   QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5875 else
5876   QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5877 fi
5878 QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
5879
5880 echo "TOOLS=$tools" >> $config_host_mak
5881 echo "ROMS=$roms" >> $config_host_mak
5882 echo "MAKE=$make" >> $config_host_mak
5883 echo "INSTALL=$install" >> $config_host_mak
5884 echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
5885 echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
5886 echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
5887 echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
5888 echo "PYTHON=$python" >> $config_host_mak
5889 echo "CC=$cc" >> $config_host_mak
5890 if $iasl -h > /dev/null 2>&1; then
5891   echo "IASL=$iasl" >> $config_host_mak
5892 fi
5893 echo "CC_I386=$cc_i386" >> $config_host_mak
5894 echo "HOST_CC=$host_cc" >> $config_host_mak
5895 echo "CXX=$cxx" >> $config_host_mak
5896 echo "OBJCC=$objcc" >> $config_host_mak
5897 echo "AR=$ar" >> $config_host_mak
5898 echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
5899 echo "AS=$as" >> $config_host_mak
5900 echo "CCAS=$ccas" >> $config_host_mak
5901 echo "CPP=$cpp" >> $config_host_mak
5902 echo "OBJCOPY=$objcopy" >> $config_host_mak
5903 echo "LD=$ld" >> $config_host_mak
5904 echo "NM=$nm" >> $config_host_mak
5905 echo "WINDRES=$windres" >> $config_host_mak
5906 echo "CFLAGS=$CFLAGS" >> $config_host_mak
5907 echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
5908 echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
5909 echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
5910 if test "$sparse" = "yes" ; then
5911   echo "CC           := REAL_CC=\"\$(CC)\" cgcc"       >> $config_host_mak
5912   echo "CPP          := REAL_CC=\"\$(CPP)\" cgcc"      >> $config_host_mak
5913   echo "CXX          := REAL_CC=\"\$(CXX)\" cgcc"      >> $config_host_mak
5914   echo "HOST_CC      := REAL_CC=\"\$(HOST_CC)\" cgcc"  >> $config_host_mak
5915   echo "QEMU_CFLAGS  += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
5916 fi
5917 if test "$cross_prefix" != ""; then
5918   echo "AUTOCONF_HOST := --host=${cross_prefix%-}"     >> $config_host_mak
5919 else
5920   echo "AUTOCONF_HOST := "                             >> $config_host_mak
5921 fi
5922 echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
5923 echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
5924 echo "LD_REL_FLAGS=$LD_REL_FLAGS" >> $config_host_mak
5925 echo "LD_I386_EMULATION=$ld_i386_emulation" >> $config_host_mak
5926 echo "LIBS+=$LIBS" >> $config_host_mak
5927 echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
5928 echo "PTHREAD_LIB=$PTHREAD_LIB" >> $config_host_mak
5929 echo "EXESUF=$EXESUF" >> $config_host_mak
5930 echo "DSOSUF=$DSOSUF" >> $config_host_mak
5931 echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
5932 echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
5933 echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
5934 echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
5935 echo "POD2MAN=$POD2MAN" >> $config_host_mak
5936 echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
5937 if test "$gcov" = "yes" ; then
5938   echo "CONFIG_GCOV=y" >> $config_host_mak
5939   echo "GCOV=$gcov_tool" >> $config_host_mak
5940 fi
5941
5942 # use included Linux headers
5943 if test "$linux" = "yes" ; then
5944   mkdir -p linux-headers
5945   case "$cpu" in
5946   i386|x86_64|x32)
5947     linux_arch=x86
5948     ;;
5949   ppcemb|ppc|ppc64)
5950     linux_arch=powerpc
5951     ;;
5952   s390x)
5953     linux_arch=s390
5954     ;;
5955   aarch64)
5956     linux_arch=arm64
5957     ;;
5958   mips64)
5959     linux_arch=mips
5960     ;;
5961   *)
5962     # For most CPUs the kernel architecture name and QEMU CPU name match.
5963     linux_arch="$cpu"
5964     ;;
5965   esac
5966     # For non-KVM architectures we will not have asm headers
5967     if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
5968       symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
5969     fi
5970 fi
5971
5972 for target in $target_list; do
5973 target_dir="$target"
5974 config_target_mak=$target_dir/config-target.mak
5975 target_name=$(echo $target | cut -d '-' -f 1)
5976 target_bigendian="no"
5977
5978 case "$target_name" in
5979   armeb|hppa|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or1k|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
5980   target_bigendian=yes
5981   ;;
5982 esac
5983 target_softmmu="no"
5984 target_user_only="no"
5985 target_linux_user="no"
5986 target_bsd_user="no"
5987 case "$target" in
5988   ${target_name}-softmmu)
5989     target_softmmu="yes"
5990     ;;
5991   ${target_name}-linux-user)
5992     if test "$linux" != "yes" ; then
5993       error_exit "Target '$target' is only available on a Linux host"
5994     fi
5995     target_user_only="yes"
5996     target_linux_user="yes"
5997     ;;
5998   ${target_name}-bsd-user)
5999     if test "$bsd" != "yes" ; then
6000       error_exit "Target '$target' is only available on a BSD host"
6001     fi
6002     target_user_only="yes"
6003     target_bsd_user="yes"
6004     ;;
6005   *)
6006     error_exit "Target '$target' not recognised"
6007     exit 1
6008     ;;
6009 esac
6010
6011 mkdir -p $target_dir
6012 echo "# Automatically generated by configure - do not modify" > $config_target_mak
6013
6014 bflt="no"
6015 mttcg="no"
6016 interp_prefix1=$(echo "$interp_prefix" | sed "s/%M/$target_name/g")
6017 gdb_xml_files=""
6018
6019 TARGET_ARCH="$target_name"
6020 TARGET_BASE_ARCH=""
6021 TARGET_ABI_DIR=""
6022
6023 case "$target_name" in
6024   i386)
6025     gdb_xml_files="i386-32bit-core.xml"
6026   ;;
6027   x86_64)
6028     TARGET_BASE_ARCH=i386
6029     gdb_xml_files="i386-64bit-core.xml"
6030   ;;
6031   alpha)
6032     mttcg="yes"
6033   ;;
6034   arm|armeb)
6035     TARGET_ARCH=arm
6036     bflt="yes"
6037     mttcg="yes"
6038     gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6039   ;;
6040   aarch64)
6041     TARGET_BASE_ARCH=arm
6042     bflt="yes"
6043     mttcg="yes"
6044     gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
6045   ;;
6046   cris)
6047   ;;
6048   hppa)
6049   ;;
6050   lm32)
6051   ;;
6052   m68k)
6053     bflt="yes"
6054     gdb_xml_files="cf-core.xml cf-fp.xml"
6055   ;;
6056   microblaze|microblazeel)
6057     TARGET_ARCH=microblaze
6058     bflt="yes"
6059   ;;
6060   mips|mipsel)
6061     TARGET_ARCH=mips
6062     echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
6063   ;;
6064   mipsn32|mipsn32el)
6065     TARGET_ARCH=mips64
6066     TARGET_BASE_ARCH=mips
6067     echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
6068     echo "TARGET_ABI32=y" >> $config_target_mak
6069   ;;
6070   mips64|mips64el)
6071     TARGET_ARCH=mips64
6072     TARGET_BASE_ARCH=mips
6073     echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
6074   ;;
6075   moxie)
6076   ;;
6077   nios2)
6078   ;;
6079   or1k)
6080     TARGET_ARCH=openrisc
6081     TARGET_BASE_ARCH=openrisc
6082   ;;
6083   ppc)
6084     gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
6085   ;;
6086   ppcemb)
6087     TARGET_BASE_ARCH=ppc
6088     TARGET_ABI_DIR=ppc
6089     gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
6090   ;;
6091   ppc64)
6092     TARGET_BASE_ARCH=ppc
6093     TARGET_ABI_DIR=ppc
6094     mttcg=yes
6095     gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6096   ;;
6097   ppc64le)
6098     TARGET_ARCH=ppc64
6099     TARGET_BASE_ARCH=ppc
6100     TARGET_ABI_DIR=ppc
6101     mttcg=yes
6102     gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6103   ;;
6104   ppc64abi32)
6105     TARGET_ARCH=ppc64
6106     TARGET_BASE_ARCH=ppc
6107     TARGET_ABI_DIR=ppc
6108     echo "TARGET_ABI32=y" >> $config_target_mak
6109     gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
6110   ;;
6111   sh4|sh4eb)
6112     TARGET_ARCH=sh4
6113     bflt="yes"
6114   ;;
6115   sparc)
6116   ;;
6117   sparc64)
6118     TARGET_BASE_ARCH=sparc
6119   ;;
6120   sparc32plus)
6121     TARGET_ARCH=sparc64
6122     TARGET_BASE_ARCH=sparc
6123     TARGET_ABI_DIR=sparc
6124     echo "TARGET_ABI32=y" >> $config_target_mak
6125   ;;
6126   s390x)
6127     gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml"
6128   ;;
6129   tilegx)
6130   ;;
6131   tricore)
6132   ;;
6133   unicore32)
6134   ;;
6135   xtensa|xtensaeb)
6136     TARGET_ARCH=xtensa
6137   ;;
6138   *)
6139     error_exit "Unsupported target CPU"
6140   ;;
6141 esac
6142 # TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
6143 if [ "$TARGET_BASE_ARCH" = "" ]; then
6144   TARGET_BASE_ARCH=$TARGET_ARCH
6145 fi
6146
6147 symlink "$source_path/Makefile.target" "$target_dir/Makefile"
6148
6149 upper() {
6150     echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
6151 }
6152
6153 target_arch_name="$(upper $TARGET_ARCH)"
6154 echo "TARGET_$target_arch_name=y" >> $config_target_mak
6155 echo "TARGET_NAME=$target_name" >> $config_target_mak
6156 echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
6157 if [ "$TARGET_ABI_DIR" = "" ]; then
6158   TARGET_ABI_DIR=$TARGET_ARCH
6159 fi
6160 echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
6161 if [ "$HOST_VARIANT_DIR" != "" ]; then
6162     echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
6163 fi
6164 case "$target_name" in
6165   i386|x86_64)
6166     if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
6167       echo "CONFIG_XEN=y" >> $config_target_mak
6168       if test "$xen_pci_passthrough" = yes; then
6169         echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
6170       fi
6171     fi
6172     ;;
6173   *)
6174 esac
6175 case "$target_name" in
6176   aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
6177     # Make sure the target and host cpus are compatible
6178     if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
6179       \( "$target_name" = "$cpu" -o \
6180       \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
6181       \( "$target_name" = "ppc64"  -a "$cpu" = "ppc" \) -o \
6182       \( "$target_name" = "ppc"    -a "$cpu" = "ppc64" \) -o \
6183       \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
6184       \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
6185       \( "$target_name" = "x86_64" -a "$cpu" = "i386"   \) -o \
6186       \( "$target_name" = "i386"   -a "$cpu" = "x86_64" \) -o \
6187       \( "$target_name" = "x86_64" -a "$cpu" = "x32"   \) -o \
6188       \( "$target_name" = "i386"   -a "$cpu" = "x32" \) \) ; then
6189       echo "CONFIG_KVM=y" >> $config_target_mak
6190       if test "$vhost_net" = "yes" ; then
6191         echo "CONFIG_VHOST_NET=y" >> $config_target_mak
6192         echo "CONFIG_VHOST_NET_TEST_$target_name=y" >> $config_host_mak
6193       fi
6194     fi
6195 esac
6196 if test "$hax" = "yes" ; then
6197   if test "$target_softmmu" = "yes" ; then
6198     case "$target_name" in
6199     i386|x86_64)
6200       echo "CONFIG_HAX=y" >> $config_target_mak
6201     ;;
6202     esac
6203   fi
6204 fi
6205 if test "$target_bigendian" = "yes" ; then
6206   echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
6207 fi
6208 if test "$target_softmmu" = "yes" ; then
6209   echo "CONFIG_SOFTMMU=y" >> $config_target_mak
6210   if test "$mttcg" = "yes" ; then
6211     echo "TARGET_SUPPORTS_MTTCG=y" >> $config_target_mak
6212   fi
6213 fi
6214 if test "$target_user_only" = "yes" ; then
6215   echo "CONFIG_USER_ONLY=y" >> $config_target_mak
6216   echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
6217 fi
6218 if test "$target_linux_user" = "yes" ; then
6219   echo "CONFIG_LINUX_USER=y" >> $config_target_mak
6220 fi
6221 list=""
6222 if test ! -z "$gdb_xml_files" ; then
6223   for x in $gdb_xml_files; do
6224     list="$list $source_path/gdb-xml/$x"
6225   done
6226   echo "TARGET_XML_FILES=$list" >> $config_target_mak
6227 fi
6228
6229 if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
6230   echo "TARGET_HAS_BFLT=y" >> $config_target_mak
6231 fi
6232 if test "$target_bsd_user" = "yes" ; then
6233   echo "CONFIG_BSD_USER=y" >> $config_target_mak
6234 fi
6235
6236 # generate QEMU_CFLAGS/LDFLAGS for targets
6237
6238 cflags=""
6239 ldflags=""
6240
6241 disas_config() {
6242   echo "CONFIG_${1}_DIS=y" >> $config_target_mak
6243   echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
6244 }
6245
6246 for i in $ARCH $TARGET_BASE_ARCH ; do
6247   case "$i" in
6248   alpha)
6249     disas_config "ALPHA"
6250   ;;
6251   aarch64)
6252     if test -n "${cxx}"; then
6253       disas_config "ARM_A64"
6254     fi
6255   ;;
6256   arm)
6257     disas_config "ARM"
6258     if test -n "${cxx}"; then
6259       disas_config "ARM_A64"
6260     fi
6261   ;;
6262   cris)
6263     disas_config "CRIS"
6264   ;;
6265   hppa)
6266     disas_config "HPPA"
6267   ;;
6268   i386|x86_64|x32)
6269     disas_config "I386"
6270   ;;
6271   ia64*)
6272     disas_config "IA64"
6273   ;;
6274   lm32)
6275     disas_config "LM32"
6276   ;;
6277   m68k)
6278     disas_config "M68K"
6279   ;;
6280   microblaze*)
6281     disas_config "MICROBLAZE"
6282   ;;
6283   mips*)
6284     disas_config "MIPS"
6285   ;;
6286   moxie*)
6287     disas_config "MOXIE"
6288   ;;
6289   nios2)
6290     disas_config "NIOS2"
6291   ;;
6292   or1k)
6293     disas_config "OPENRISC"
6294   ;;
6295   ppc*)
6296     disas_config "PPC"
6297   ;;
6298   s390*)
6299     disas_config "S390"
6300   ;;
6301   sh4)
6302     disas_config "SH4"
6303   ;;
6304   sparc*)
6305     disas_config "SPARC"
6306   ;;
6307   xtensa*)
6308     disas_config "XTENSA"
6309   ;;
6310   esac
6311 done
6312 if test "$tcg_interpreter" = "yes" ; then
6313   disas_config "TCI"
6314 fi
6315
6316 case "$ARCH" in
6317 alpha)
6318   # Ensure there's only a single GP
6319   cflags="-msmall-data $cflags"
6320 ;;
6321 esac
6322
6323 if test "$gprof" = "yes" ; then
6324   echo "TARGET_GPROF=yes" >> $config_target_mak
6325   if test "$target_linux_user" = "yes" ; then
6326     cflags="-p $cflags"
6327     ldflags="-p $ldflags"
6328   fi
6329   if test "$target_softmmu" = "yes" ; then
6330     ldflags="-p $ldflags"
6331     echo "GPROF_CFLAGS=-p" >> $config_target_mak
6332   fi
6333 fi
6334
6335 if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
6336   ldflags="$ldflags $textseg_ldflags"
6337 fi
6338
6339 echo "LDFLAGS+=$ldflags" >> $config_target_mak
6340 echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
6341
6342 done # for target in $targets
6343
6344 if [ "$pixman" = "internal" ]; then
6345   echo "config-host.h: subdir-pixman" >> $config_host_mak
6346 fi
6347
6348 if [ "$dtc_internal" = "yes" ]; then
6349   echo "config-host.h: subdir-dtc" >> $config_host_mak
6350 fi
6351
6352 if test "$numa" = "yes"; then
6353   echo "CONFIG_NUMA=y" >> $config_host_mak
6354 fi
6355
6356 if test "$ccache_cpp2" = "yes"; then
6357   echo "export CCACHE_CPP2=y" >> $config_host_mak
6358 fi
6359
6360 # build tree in object directory in case the source is not in the current directory
6361 DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
6362 DIRS="$DIRS docs fsdev"
6363 DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
6364 DIRS="$DIRS roms/seabios roms/vgabios"
6365 DIRS="$DIRS qapi-generated"
6366 FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
6367 FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
6368 FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
6369 FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
6370 FILES="$FILES pc-bios/spapr-rtas/Makefile"
6371 FILES="$FILES pc-bios/s390-ccw/Makefile"
6372 FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
6373 FILES="$FILES pc-bios/qemu-icon.bmp"
6374 for bios_file in \
6375     $source_path/pc-bios/*.bin \
6376     $source_path/pc-bios/*.lid \
6377     $source_path/pc-bios/*.aml \
6378     $source_path/pc-bios/*.rom \
6379     $source_path/pc-bios/*.dtb \
6380     $source_path/pc-bios/*.img \
6381     $source_path/pc-bios/openbios-* \
6382     $source_path/pc-bios/u-boot.* \
6383     $source_path/pc-bios/palcode-*
6384 do
6385     FILES="$FILES pc-bios/$(basename $bios_file)"
6386 done
6387 for test_file in $(find $source_path/tests/acpi-test-data -type f)
6388 do
6389     FILES="$FILES tests/acpi-test-data$(echo $test_file | sed -e 's/.*acpi-test-data//')"
6390 done
6391 mkdir -p $DIRS
6392 for f in $FILES ; do
6393     if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
6394         symlink "$source_path/$f" "$f"
6395     fi
6396 done
6397
6398 # temporary config to build submodules
6399 for rom in seabios vgabios ; do
6400     config_mak=roms/$rom/config.mak
6401     echo "# Automatically generated by configure - do not modify" > $config_mak
6402     echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
6403     echo "AS=$as" >> $config_mak
6404     echo "CCAS=$ccas" >> $config_mak
6405     echo "CC=$cc" >> $config_mak
6406     echo "BCC=bcc" >> $config_mak
6407     echo "CPP=$cpp" >> $config_mak
6408     echo "OBJCOPY=objcopy" >> $config_mak
6409     echo "IASL=$iasl" >> $config_mak
6410     echo "LD=$ld" >> $config_mak
6411 done
6412
6413 # set up tests data directory
6414 if [ ! -e tests/data ]; then
6415     symlink "$source_path/tests/data" tests/data
6416 fi
6417
6418 # set up qemu-iotests in this build directory
6419 iotests_common_env="tests/qemu-iotests/common.env"
6420 iotests_check="tests/qemu-iotests/check"
6421
6422 echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
6423 echo >> "$iotests_common_env"
6424 echo "export PYTHON='$python'" >> "$iotests_common_env"
6425
6426 if [ ! -e "$iotests_check" ]; then
6427     symlink "$source_path/$iotests_check" "$iotests_check"
6428 fi
6429
6430 # Save the configure command line for later reuse.
6431 cat <<EOD >config.status
6432 #!/bin/sh
6433 # Generated by configure.
6434 # Run this file to recreate the current configuration.
6435 # Compiler output produced by configure, useful for debugging
6436 # configure, is in config.log if it exists.
6437 EOD
6438 printf "exec" >>config.status
6439 printf " '%s'" "$0" "$@" >>config.status
6440 echo ' "$@"' >>config.status
6441 chmod +x config.status
6442
6443 rm -r "$TMPDIR1"