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