OSDN Git Service

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