OSDN Git Service

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