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