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