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