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