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