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