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