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