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