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