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