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