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