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