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