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