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