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