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