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