OSDN Git Service

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