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