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