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