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