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