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