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