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