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