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##########################################
2175# GNUTLS probe
2176
2177gnutls_works() {
2178    # Unfortunately some distros have bad pkg-config information for gnutls
2179    # such that it claims to exist but you get a compiler error if you try
2180    # to use the options returned by --libs. Specifically, Ubuntu for --static
2181    # builds doesn't work:
2182    # https://bugs.launchpad.net/ubuntu/+source/gnutls26/+bug/1478035
2183    #
2184    # So sanity check the cflags/libs before assuming gnutls can be used.
2185    if ! $pkg_config --exists "gnutls"; then
2186        return 1
2187    fi
2188
2189    write_c_skeleton
2190    compile_prog "$($pkg_config --cflags gnutls)" "$($pkg_config --libs gnutls)"
2191}
2192
2193gnutls_gcrypt=no
2194gnutls_nettle=no
2195if test "$gnutls" != "no"; then
2196    if gnutls_works; then
2197        gnutls_cflags=`$pkg_config --cflags gnutls`
2198        gnutls_libs=`$pkg_config --libs gnutls`
2199        libs_softmmu="$gnutls_libs $libs_softmmu"
2200        libs_tools="$gnutls_libs $libs_tools"
2201        QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2202        gnutls="yes"
2203
2204        # gnutls_hash_init requires >= 2.9.10
2205        if $pkg_config --exists "gnutls >= 2.9.10"; then
2206            gnutls_hash="yes"
2207        else
2208            gnutls_hash="no"
2209        fi
2210
2211        # gnutls_rnd requires >= 2.11.0
2212        if $pkg_config --exists "gnutls >= 2.11.0"; then
2213            gnutls_rnd="yes"
2214        else
2215            gnutls_rnd="no"
2216        fi
2217
2218        if $pkg_config --exists 'gnutls >= 3.0'; then
2219            gnutls_gcrypt=no
2220            gnutls_nettle=yes
2221        elif $pkg_config --exists 'gnutls >= 2.12'; then
2222            case `$pkg_config --libs --static gnutls` in
2223                *gcrypt*)
2224                    gnutls_gcrypt=yes
2225                    gnutls_nettle=no
2226                    ;;
2227                *nettle*)
2228                    gnutls_gcrypt=no
2229                    gnutls_nettle=yes
2230                    ;;
2231                *)
2232                    gnutls_gcrypt=yes
2233                    gnutls_nettle=no
2234                    ;;
2235            esac
2236        else
2237            gnutls_gcrypt=yes
2238            gnutls_nettle=no
2239        fi
2240    elif test "$gnutls" = "yes"; then
2241        feature_not_found "gnutls" "Install gnutls devel"
2242    else
2243        gnutls="no"
2244        gnutls_hash="no"
2245        gnutls_rnd="no"
2246    fi
2247else
2248    gnutls_hash="no"
2249    gnutls_rnd="no"
2250fi
2251
2252
2253# If user didn't give a --disable/enable-gcrypt flag,
2254# then mark as disabled if user requested nettle
2255# explicitly, or if gnutls links to nettle
2256if test -z "$gcrypt"
2257then
2258    if test "$nettle" = "yes" || test "$gnutls_nettle" = "yes"
2259    then
2260        gcrypt="no"
2261    fi
2262fi
2263
2264# If user didn't give a --disable/enable-nettle flag,
2265# then mark as disabled if user requested gcrypt
2266# explicitly, or if gnutls links to gcrypt
2267if test -z "$nettle"
2268then
2269    if test "$gcrypt" = "yes" || test "$gnutls_gcrypt" = "yes"
2270    then
2271        nettle="no"
2272    fi
2273fi
2274
2275has_libgcrypt_config() {
2276    if ! has "libgcrypt-config"
2277    then
2278        return 1
2279    fi
2280
2281    if test -n "$cross_prefix"
2282    then
2283        host=`libgcrypt-config --host`
2284        if test "$host-" != $cross_prefix
2285        then
2286            return 1
2287        fi
2288    fi
2289
2290    return 0
2291}
2292
2293if test "$gcrypt" != "no"; then
2294    if has_libgcrypt_config; then
2295        gcrypt_cflags=`libgcrypt-config --cflags`
2296        gcrypt_libs=`libgcrypt-config --libs`
2297        # Debian has remove -lgpg-error from libgcrypt-config
2298        # as it "spreads unnecessary dependencies" which in
2299        # turn breaks static builds...
2300        if test "$static" = "yes"
2301        then
2302            gcrypt_libs="$gcrypt_libs -lgpg-error"
2303        fi
2304        libs_softmmu="$gcrypt_libs $libs_softmmu"
2305        libs_tools="$gcrypt_libs $libs_tools"
2306        QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2307        gcrypt="yes"
2308        if test -z "$nettle"; then
2309           nettle="no"
2310        fi
2311
2312        cat > $TMPC << EOF
2313#include <gcrypt.h>
2314int main(void) {
2315  gcry_kdf_derive(NULL, 0, GCRY_KDF_PBKDF2,
2316                  GCRY_MD_SHA256,
2317                  NULL, 0, 0, 0, NULL);
2318 return 0;
2319}
2320EOF
2321        if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
2322            gcrypt_kdf=yes
2323        fi
2324    else
2325        if test "$gcrypt" = "yes"; then
2326            feature_not_found "gcrypt" "Install gcrypt devel"
2327        else
2328            gcrypt="no"
2329        fi
2330    fi
2331fi
2332
2333
2334if test "$nettle" != "no"; then
2335    if $pkg_config --exists "nettle"; then
2336        nettle_cflags=`$pkg_config --cflags nettle`
2337        nettle_libs=`$pkg_config --libs nettle`
2338        nettle_version=`$pkg_config --modversion nettle`
2339        libs_softmmu="$nettle_libs $libs_softmmu"
2340        libs_tools="$nettle_libs $libs_tools"
2341        QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2342        nettle="yes"
2343
2344        cat > $TMPC << EOF
2345#include <nettle/pbkdf2.h>
2346int main(void) {
2347     pbkdf2_hmac_sha256(8, NULL, 1000, 8, NULL, 8, NULL);
2348     return 0;
2349}
2350EOF
2351        if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2352            nettle_kdf=yes
2353        fi
2354    else
2355        if test "$nettle" = "yes"; then
2356            feature_not_found "nettle" "Install nettle devel"
2357        else
2358            nettle="no"
2359        fi
2360    fi
2361fi
2362
2363if test "$gcrypt" = "yes" && test "$nettle" = "yes"
2364then
2365    error_exit "Only one of gcrypt & nettle can be enabled"
2366fi
2367
2368##########################################
2369# libtasn1 - only for the TLS creds/session test suite
2370
2371tasn1=yes
2372tasn1_cflags=""
2373tasn1_libs=""
2374if $pkg_config --exists "libtasn1"; then
2375    tasn1_cflags=`$pkg_config --cflags libtasn1`
2376    tasn1_libs=`$pkg_config --libs libtasn1`
2377else
2378    tasn1=no
2379fi
2380
2381
2382##########################################
2383# getifaddrs (for tests/test-io-channel-socket )
2384
2385have_ifaddrs_h=yes
2386if ! check_include "ifaddrs.h" ; then
2387  have_ifaddrs_h=no
2388fi
2389
2390##########################################
2391# VTE probe
2392
2393if test "$vte" != "no"; then
2394    if test "$gtkabi" = "3.0"; then
2395      vtepackage="vte-2.90"
2396      vteversion="0.32.0"
2397    else
2398      vtepackage="vte"
2399      vteversion="0.24.0"
2400    fi
2401    if $pkg_config --exists "$vtepackage >= $vteversion"; then
2402        vte_cflags=`$pkg_config --cflags $vtepackage`
2403        vte_libs=`$pkg_config --libs $vtepackage`
2404        libs_softmmu="$vte_libs $libs_softmmu"
2405        vte="yes"
2406    elif test "$vte" = "yes"; then
2407        if test "$gtkabi" = "3.0"; then
2408            feature_not_found "vte" "Install libvte-2.90 devel"
2409        else
2410            feature_not_found "vte" "Install libvte devel"
2411        fi
2412    else
2413        vte="no"
2414    fi
2415fi
2416
2417##########################################
2418# SDL probe
2419
2420# Look for sdl configuration program (pkg-config or sdl-config).  Try
2421# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2422
2423if test $sdlabi = "2.0"; then
2424    sdl_config=$sdl2_config
2425    sdlname=sdl2
2426    sdlconfigname=sdl2_config
2427else
2428    sdlname=sdl
2429    sdlconfigname=sdl_config
2430fi
2431
2432if test "`basename $sdl_config`" != $sdlconfigname && ! has ${sdl_config}; then
2433  sdl_config=$sdlconfigname
2434fi
2435
2436if $pkg_config $sdlname --exists; then
2437  sdlconfig="$pkg_config $sdlname"
2438  _sdlversion=`$sdlconfig --modversion 2>/dev/null | sed 's/[^0-9]//g'`
2439elif has ${sdl_config}; then
2440  sdlconfig="$sdl_config"
2441  _sdlversion=`$sdlconfig --version | sed 's/[^0-9]//g'`
2442else
2443  if test "$sdl" = "yes" ; then
2444    feature_not_found "sdl" "Install SDL devel"
2445  fi
2446  sdl=no
2447fi
2448if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2449  echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2450fi
2451
2452sdl_too_old=no
2453if test "$sdl" != "no" ; then
2454  cat > $TMPC << EOF
2455#include <SDL.h>
2456#undef main /* We don't want SDL to override our main() */
2457int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2458EOF
2459  sdl_cflags=`$sdlconfig --cflags 2> /dev/null`
2460  if test "$static" = "yes" ; then
2461    sdl_libs=`$sdlconfig --static-libs 2>/dev/null`
2462  else
2463    sdl_libs=`$sdlconfig --libs 2> /dev/null`
2464  fi
2465  if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2466    if test "$_sdlversion" -lt 121 ; then
2467      sdl_too_old=yes
2468    else
2469      sdl=yes
2470    fi
2471
2472    # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2473    if test "$sdl" = "yes" -a "$static" = "yes" ; then
2474      if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2475         sdl_libs="$sdl_libs `aalib-config --static-libs 2>/dev/null`"
2476         sdl_cflags="$sdl_cflags `aalib-config --cflags 2>/dev/null`"
2477      fi
2478      if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2479        :
2480      else
2481        sdl=no
2482      fi
2483    fi # static link
2484  else # sdl not found
2485    if test "$sdl" = "yes" ; then
2486      feature_not_found "sdl" "Install SDL devel"
2487    fi
2488    sdl=no
2489  fi # sdl compile test
2490fi
2491
2492if test "$sdl" = "yes" ; then
2493  cat > $TMPC <<EOF
2494#include <SDL.h>
2495#if defined(SDL_VIDEO_DRIVER_X11)
2496#include <X11/XKBlib.h>
2497#else
2498#error No x11 support
2499#endif
2500int main(void) { return 0; }
2501EOF
2502  if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2503    sdl_cflags="$sdl_cflags $x11_cflags"
2504    sdl_libs="$sdl_libs $x11_libs"
2505  fi
2506  libs_softmmu="$sdl_libs $libs_softmmu"
2507fi
2508
2509##########################################
2510# RDMA needs OpenFabrics libraries
2511if test "$rdma" != "no" ; then
2512  cat > $TMPC <<EOF
2513#include <rdma/rdma_cma.h>
2514int main(void) { return 0; }
2515EOF
2516  rdma_libs="-lrdmacm -libverbs"
2517  if compile_prog "" "$rdma_libs" ; then
2518    rdma="yes"
2519    libs_softmmu="$libs_softmmu $rdma_libs"
2520  else
2521    if test "$rdma" = "yes" ; then
2522        error_exit \
2523            " OpenFabrics librdmacm/libibverbs not present." \
2524            " Your options:" \
2525            "  (1) Fast: Install infiniband packages from your distro." \
2526            "  (2) Cleanest: Install libraries from www.openfabrics.org" \
2527            "  (3) Also: Install softiwarp if you don't have RDMA hardware"
2528    fi
2529    rdma="no"
2530  fi
2531fi
2532
2533
2534##########################################
2535# VNC SASL detection
2536if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
2537  cat > $TMPC <<EOF
2538#include <sasl/sasl.h>
2539#include <stdio.h>
2540int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2541EOF
2542  # Assuming Cyrus-SASL installed in /usr prefix
2543  vnc_sasl_cflags=""
2544  vnc_sasl_libs="-lsasl2"
2545  if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2546    vnc_sasl=yes
2547    libs_softmmu="$vnc_sasl_libs $libs_softmmu"
2548    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
2549  else
2550    if test "$vnc_sasl" = "yes" ; then
2551      feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2552    fi
2553    vnc_sasl=no
2554  fi
2555fi
2556
2557##########################################
2558# VNC JPEG detection
2559if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2560cat > $TMPC <<EOF
2561#include <stdio.h>
2562#include <jpeglib.h>
2563int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2564EOF
2565    vnc_jpeg_cflags=""
2566    vnc_jpeg_libs="-ljpeg"
2567  if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2568    vnc_jpeg=yes
2569    libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
2570    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2571  else
2572    if test "$vnc_jpeg" = "yes" ; then
2573      feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2574    fi
2575    vnc_jpeg=no
2576  fi
2577fi
2578
2579##########################################
2580# VNC PNG detection
2581if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
2582cat > $TMPC <<EOF
2583//#include <stdio.h>
2584#include <png.h>
2585#include <stddef.h>
2586int main(void) {
2587    png_structp png_ptr;
2588    png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
2589    return png_ptr != 0;
2590}
2591EOF
2592  if $pkg_config libpng --exists; then
2593    vnc_png_cflags=`$pkg_config libpng --cflags`
2594    vnc_png_libs=`$pkg_config libpng --libs`
2595  else
2596    vnc_png_cflags=""
2597    vnc_png_libs="-lpng"
2598  fi
2599  if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2600    vnc_png=yes
2601    libs_softmmu="$vnc_png_libs $libs_softmmu"
2602    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
2603  else
2604    if test "$vnc_png" = "yes" ; then
2605      feature_not_found "vnc-png" "Install libpng devel"
2606    fi
2607    vnc_png=no
2608  fi
2609fi
2610
2611##########################################
2612# fnmatch() probe, used for ACL routines
2613fnmatch="no"
2614cat > $TMPC << EOF
2615#include <fnmatch.h>
2616int main(void)
2617{
2618    fnmatch("foo", "foo", 0);
2619    return 0;
2620}
2621EOF
2622if compile_prog "" "" ; then
2623   fnmatch="yes"
2624fi
2625
2626##########################################
2627# uuid_generate() probe, used for vdi block driver
2628# Note that on some systems (notably MacOSX) no extra library
2629# need be linked to get the uuid functions.
2630if test "$uuid" != "no" ; then
2631  uuid_libs="-luuid"
2632  cat > $TMPC << EOF
2633#include <uuid/uuid.h>
2634int main(void)
2635{
2636    uuid_t my_uuid;
2637    uuid_generate(my_uuid);
2638    return 0;
2639}
2640EOF
2641  if compile_prog "" "" ; then
2642    uuid="yes"
2643  elif compile_prog "" "$uuid_libs" ; then
2644    uuid="yes"
2645    libs_softmmu="$uuid_libs $libs_softmmu"
2646    libs_tools="$uuid_libs $libs_tools"
2647  else
2648    if test "$uuid" = "yes" ; then
2649      feature_not_found "uuid" "Install libuuid devel"
2650    fi
2651    uuid=no
2652  fi
2653fi
2654
2655if test "$vhdx" = "yes" ; then
2656    if test "$uuid" = "no" ; then
2657        error_exit "uuid required for VHDX support"
2658    fi
2659elif test "$vhdx" != "no" ; then
2660    if test "$uuid" = "yes" ; then
2661        vhdx=yes
2662    else
2663        vhdx=no
2664    fi
2665fi
2666
2667##########################################
2668# xfsctl() probe, used for raw-posix
2669if test "$xfs" != "no" ; then
2670  cat > $TMPC << EOF
2671#include <stddef.h>  /* NULL */
2672#include <xfs/xfs.h>
2673int main(void)
2674{
2675    xfsctl(NULL, 0, 0, NULL);
2676    return 0;
2677}
2678EOF
2679  if compile_prog "" "" ; then
2680    xfs="yes"
2681  else
2682    if test "$xfs" = "yes" ; then
2683      feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
2684    fi
2685    xfs=no
2686  fi
2687fi
2688
2689##########################################
2690# vde libraries probe
2691if test "$vde" != "no" ; then
2692  vde_libs="-lvdeplug"
2693  cat > $TMPC << EOF
2694#include <libvdeplug.h>
2695int main(void)
2696{
2697    struct vde_open_args a = {0, 0, 0};
2698    char s[] = "";
2699    vde_open(s, s, &a);
2700    return 0;
2701}
2702EOF
2703  if compile_prog "" "$vde_libs" ; then
2704    vde=yes
2705    libs_softmmu="$vde_libs $libs_softmmu"
2706    libs_tools="$vde_libs $libs_tools"
2707  else
2708    if test "$vde" = "yes" ; then
2709      feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
2710    fi
2711    vde=no
2712  fi
2713fi
2714
2715##########################################
2716# netmap support probe
2717# Apart from looking for netmap headers, we make sure that the host API version
2718# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2719# a minor/major version number. Minor new features will be marked with values up
2720# to 15, and if something happens that requires a change to the backend we will
2721# move above 15, submit the backend fixes and modify this two bounds.
2722if test "$netmap" != "no" ; then
2723  cat > $TMPC << EOF
2724#include <inttypes.h>
2725#include <net/if.h>
2726#include <net/netmap.h>
2727#include <net/netmap_user.h>
2728#if (NETMAP_API < 11) || (NETMAP_API > 15)
2729#error
2730#endif
2731int main(void) { return 0; }
2732EOF
2733  if compile_prog "" "" ; then
2734    netmap=yes
2735  else
2736    if test "$netmap" = "yes" ; then
2737      feature_not_found "netmap"
2738    fi
2739    netmap=no
2740  fi
2741fi
2742
2743##########################################
2744# libcap-ng library probe
2745if test "$cap_ng" != "no" ; then
2746  cap_libs="-lcap-ng"
2747  cat > $TMPC << EOF
2748#include <cap-ng.h>
2749int main(void)
2750{
2751    capng_capability_to_name(CAPNG_EFFECTIVE);
2752    return 0;
2753}
2754EOF
2755  if compile_prog "" "$cap_libs" ; then
2756    cap_ng=yes
2757    libs_tools="$cap_libs $libs_tools"
2758  else
2759    if test "$cap_ng" = "yes" ; then
2760      feature_not_found "cap_ng" "Install libcap-ng devel"
2761    fi
2762    cap_ng=no
2763  fi
2764fi
2765
2766##########################################
2767# Sound support libraries probe
2768
2769audio_drv_probe()
2770{
2771    drv=$1
2772    hdr=$2
2773    lib=$3
2774    exp=$4
2775    cfl=$5
2776        cat > $TMPC << EOF
2777#include <$hdr>
2778int main(void) { $exp }
2779EOF
2780    if compile_prog "$cfl" "$lib" ; then
2781        :
2782    else
2783        error_exit "$drv check failed" \
2784            "Make sure to have the $drv libs and headers installed."
2785    fi
2786}
2787
2788audio_drv_list=`echo "$audio_drv_list" | sed -e 's/,/ /g'`
2789for drv in $audio_drv_list; do
2790    case $drv in
2791    alsa)
2792    audio_drv_probe $drv alsa/asoundlib.h -lasound \
2793        "return snd_pcm_close((snd_pcm_t *)0);"
2794    libs_softmmu="-lasound $libs_softmmu"
2795    ;;
2796
2797    pa)
2798    audio_drv_probe $drv pulse/mainloop.h "-lpulse" \
2799        "pa_mainloop *m = 0; pa_mainloop_free (m); return 0;"
2800    libs_softmmu="-lpulse $libs_softmmu"
2801    audio_pt_int="yes"
2802    ;;
2803
2804    coreaudio)
2805      libs_softmmu="-framework CoreAudio $libs_softmmu"
2806    ;;
2807
2808    dsound)
2809      libs_softmmu="-lole32 -ldxguid $libs_softmmu"
2810      audio_win_int="yes"
2811    ;;
2812
2813    oss)
2814      libs_softmmu="$oss_lib $libs_softmmu"
2815    ;;
2816
2817    sdl|wav)
2818    # XXX: Probes for CoreAudio, DirectSound, SDL(?)
2819    ;;
2820
2821    *)
2822    echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
2823        error_exit "Unknown driver '$drv' selected" \
2824            "Possible drivers are: $audio_possible_drivers"
2825    }
2826    ;;
2827    esac
2828done
2829
2830##########################################
2831# BrlAPI probe
2832
2833if test "$brlapi" != "no" ; then
2834  brlapi_libs="-lbrlapi"
2835  cat > $TMPC << EOF
2836#include <brlapi.h>
2837#include <stddef.h>
2838int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
2839EOF
2840  if compile_prog "" "$brlapi_libs" ; then
2841    brlapi=yes
2842    libs_softmmu="$brlapi_libs $libs_softmmu"
2843  else
2844    if test "$brlapi" = "yes" ; then
2845      feature_not_found "brlapi" "Install brlapi devel"
2846    fi
2847    brlapi=no
2848  fi
2849fi
2850
2851##########################################
2852# curses probe
2853if test "$curses" != "no" ; then
2854  if test "$mingw32" = "yes" ; then
2855    curses_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
2856  else
2857    curses_list="$($pkg_config --libs ncurses 2>/dev/null):-lncurses:-lcurses"
2858  fi
2859  curses_found=no
2860  cat > $TMPC << EOF
2861#include <curses.h>
2862int main(void) {
2863  const char *s = curses_version();
2864  resize_term(0, 0);
2865  return s != 0;
2866}
2867EOF
2868  IFS=:
2869  for curses_lib in $curses_list; do
2870    unset IFS
2871    if compile_prog "" "$curses_lib" ; then
2872      curses_found=yes
2873      libs_softmmu="$curses_lib $libs_softmmu"
2874      break
2875    fi
2876  done
2877  unset IFS
2878  if test "$curses_found" = "yes" ; then
2879    curses=yes
2880  else
2881    if test "$curses" = "yes" ; then
2882      feature_not_found "curses" "Install ncurses devel"
2883    fi
2884    curses=no
2885  fi
2886fi
2887
2888##########################################
2889# curl probe
2890if test "$curl" != "no" ; then
2891  if $pkg_config libcurl --exists; then
2892    curlconfig="$pkg_config libcurl"
2893  else
2894    curlconfig=curl-config
2895  fi
2896  cat > $TMPC << EOF
2897#include <curl/curl.h>
2898int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
2899EOF
2900  curl_cflags=`$curlconfig --cflags 2>/dev/null`
2901  curl_libs=`$curlconfig --libs 2>/dev/null`
2902  if compile_prog "$curl_cflags" "$curl_libs" ; then
2903    curl=yes
2904  else
2905    if test "$curl" = "yes" ; then
2906      feature_not_found "curl" "Install libcurl devel"
2907    fi
2908    curl=no
2909  fi
2910fi # test "$curl"
2911
2912##########################################
2913# bluez support probe
2914if test "$bluez" != "no" ; then
2915  cat > $TMPC << EOF
2916#include <bluetooth/bluetooth.h>
2917int main(void) { return bt_error(0); }
2918EOF
2919  bluez_cflags=`$pkg_config --cflags bluez 2> /dev/null`
2920  bluez_libs=`$pkg_config --libs bluez 2> /dev/null`
2921  if compile_prog "$bluez_cflags" "$bluez_libs" ; then
2922    bluez=yes
2923    libs_softmmu="$bluez_libs $libs_softmmu"
2924  else
2925    if test "$bluez" = "yes" ; then
2926      feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
2927    fi
2928    bluez="no"
2929  fi
2930fi
2931
2932##########################################
2933# glib support probe
2934
2935glib_req_ver=2.22
2936glib_modules=gthread-2.0
2937if test "$modules" = yes; then
2938    glib_modules="$glib_modules gmodule-2.0"
2939fi
2940
2941for i in $glib_modules; do
2942    if $pkg_config --atleast-version=$glib_req_ver $i; then
2943        glib_cflags=`$pkg_config --cflags $i`
2944        glib_libs=`$pkg_config --libs $i`
2945        CFLAGS="$glib_cflags $CFLAGS"
2946        LIBS="$glib_libs $LIBS"
2947        libs_qga="$glib_libs $libs_qga"
2948    else
2949        error_exit "glib-$glib_req_ver $i is required to compile QEMU"
2950    fi
2951done
2952
2953# Sanity check that the current size_t matches the
2954# size that glib thinks it should be. This catches
2955# problems on multi-arch where people try to build
2956# 32-bit QEMU while pointing at 64-bit glib headers
2957cat > $TMPC <<EOF
2958#include <glib.h>
2959#include <unistd.h>
2960
2961#define QEMU_BUILD_BUG_ON(x) \
2962  typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
2963
2964int main(void) {
2965   QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
2966   return 0;
2967}
2968EOF
2969
2970if ! compile_prog "-Werror $CFLAGS" "$LIBS" ; then
2971    error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
2972               "You probably need to set PKG_CONFIG_LIBDIR"\
2973               "to point to the right pkg-config files for your"\
2974               "build target"
2975fi
2976
2977# g_test_trap_subprocess added in 2.38. Used by some tests.
2978glib_subprocess=yes
2979if ! $pkg_config --atleast-version=2.38 glib-2.0; then
2980    glib_subprocess=no
2981fi
2982
2983# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
2984cat > $TMPC << EOF
2985#include <glib.h>
2986int main(void) { return 0; }
2987EOF
2988if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
2989    if cc_has_warning_flag "-Wno-unknown-attributes"; then
2990        glib_cflags="-Wno-unknown-attributes $glib_cflags"
2991        CFLAGS="-Wno-unknown-attributes $CFLAGS"
2992    fi
2993fi
2994
2995##########################################
2996# SHA command probe for modules
2997if test "$modules" = yes; then
2998    shacmd_probe="sha1sum sha1 shasum"
2999    for c in $shacmd_probe; do
3000        if has $c; then
3001            shacmd="$c"
3002            break
3003        fi
3004    done
3005    if test "$shacmd" = ""; then
3006        error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3007    fi
3008fi
3009
3010##########################################
3011# pixman support probe
3012
3013if test "$pixman" = ""; then
3014  if test "$want_tools" = "no" -a "$softmmu" = "no"; then
3015    pixman="none"
3016  elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3017    pixman="system"
3018  else
3019    pixman="internal"
3020  fi
3021fi
3022if test "$pixman" = "none"; then
3023  if test "$want_tools" != "no" -o "$softmmu" != "no"; then
3024    error_exit "pixman disabled but system emulation or tools build" \
3025        "enabled.  You can turn off pixman only if you also" \
3026        "disable all system emulation targets and the tools" \
3027        "build with '--disable-tools --disable-system'."
3028  fi
3029  pixman_cflags=
3030  pixman_libs=
3031elif test "$pixman" = "system"; then
3032  # pixman version has been checked above
3033  pixman_cflags=`$pkg_config --cflags pixman-1`
3034  pixman_libs=`$pkg_config --libs pixman-1`
3035else
3036  if test ! -d ${source_path}/pixman/pixman; then
3037    error_exit "pixman >= 0.21.8 not present. Your options:" \
3038        "  (1) Preferred: Install the pixman devel package (any recent" \
3039        "      distro should have packages as Xorg needs pixman too)." \
3040        "  (2) Fetch the pixman submodule, using:" \
3041        "      git submodule update --init pixman"
3042  fi
3043  mkdir -p pixman/pixman
3044  pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
3045  pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
3046fi
3047
3048##########################################
3049# libcap probe
3050
3051if test "$cap" != "no" ; then
3052  cat > $TMPC <<EOF
3053#include <stdio.h>
3054#include <sys/capability.h>
3055int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
3056EOF
3057  if compile_prog "" "-lcap" ; then
3058    cap=yes
3059  else
3060    cap=no
3061  fi
3062fi
3063
3064##########################################
3065# pthread probe
3066PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3067
3068pthread=no
3069cat > $TMPC << EOF
3070#include <pthread.h>
3071static void *f(void *p) { return NULL; }
3072int main(void) {
3073  pthread_t thread;
3074  pthread_create(&thread, 0, f, 0);
3075  return 0;
3076}
3077EOF
3078if compile_prog "" "" ; then
3079  pthread=yes
3080else
3081  for pthread_lib in $PTHREADLIBS_LIST; do
3082    if compile_prog "" "$pthread_lib" ; then
3083      pthread=yes
3084      found=no
3085      for lib_entry in $LIBS; do
3086        if test "$lib_entry" = "$pthread_lib"; then
3087          found=yes
3088          break
3089        fi
3090      done
3091      if test "$found" = "no"; then
3092        LIBS="$pthread_lib $LIBS"
3093      fi
3094      break
3095    fi
3096  done
3097fi
3098
3099if test "$mingw32" != yes -a "$pthread" = no; then
3100  error_exit "pthread check failed" \
3101      "Make sure to have the pthread libs and headers installed."
3102fi
3103
3104# check for pthread_setname_np
3105pthread_setname_np=no
3106cat > $TMPC << EOF
3107#include <pthread.h>
3108
3109static void *f(void *p) { return NULL; }
3110int main(void)
3111{
3112    pthread_t thread;
3113    pthread_create(&thread, 0, f, 0);
3114    pthread_setname_np(thread, "QEMU");
3115    return 0;
3116}
3117EOF
3118if compile_prog "" "$pthread_lib" ; then
3119  pthread_setname_np=yes
3120fi
3121
3122##########################################
3123# rbd probe
3124if test "$rbd" != "no" ; then
3125  cat > $TMPC <<EOF
3126#include <stdio.h>
3127#include <rbd/librbd.h>
3128int main(void) {
3129    rados_t cluster;
3130    rados_create(&cluster, NULL);
3131    return 0;
3132}
3133EOF
3134  rbd_libs="-lrbd -lrados"
3135  if compile_prog "" "$rbd_libs" ; then
3136    rbd=yes
3137  else
3138    if test "$rbd" = "yes" ; then
3139      feature_not_found "rados block device" "Install librbd/ceph devel"
3140    fi
3141    rbd=no
3142  fi
3143fi
3144
3145##########################################
3146# libssh2 probe
3147min_libssh2_version=1.2.8
3148if test "$libssh2" != "no" ; then
3149  if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
3150    libssh2_cflags=`$pkg_config libssh2 --cflags`
3151    libssh2_libs=`$pkg_config libssh2 --libs`
3152    libssh2=yes
3153  else
3154    if test "$libssh2" = "yes" ; then
3155      error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
3156    fi
3157    libssh2=no
3158  fi
3159fi
3160
3161##########################################
3162# libssh2_sftp_fsync probe
3163
3164if test "$libssh2" = "yes"; then
3165  cat > $TMPC <<EOF
3166#include <stdio.h>
3167#include <libssh2.h>
3168#include <libssh2_sftp.h>
3169int main(void) {
3170    LIBSSH2_SESSION *session;
3171    LIBSSH2_SFTP *sftp;
3172    LIBSSH2_SFTP_HANDLE *sftp_handle;
3173    session = libssh2_session_init ();
3174    sftp = libssh2_sftp_init (session);
3175    sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
3176    libssh2_sftp_fsync (sftp_handle);
3177    return 0;
3178}
3179EOF
3180  # libssh2_cflags/libssh2_libs defined in previous test.
3181  if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
3182    QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
3183  fi
3184fi
3185
3186##########################################
3187# linux-aio probe
3188
3189if test "$linux_aio" != "no" ; then
3190  cat > $TMPC <<EOF
3191#include <libaio.h>
3192#include <sys/eventfd.h>
3193#include <stddef.h>
3194int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3195EOF
3196  if compile_prog "" "-laio" ; then
3197    linux_aio=yes
3198  else
3199    if test "$linux_aio" = "yes" ; then
3200      feature_not_found "linux AIO" "Install libaio devel"
3201    fi
3202    linux_aio=no
3203  fi
3204fi
3205
3206##########################################
3207# TPM passthrough is only on x86 Linux
3208
3209if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3210  tpm_passthrough=$tpm
3211else
3212  tpm_passthrough=no
3213fi
3214
3215##########################################
3216# attr probe
3217
3218if test "$attr" != "no" ; then
3219  cat > $TMPC <<EOF
3220#include <stdio.h>
3221#include <sys/types.h>
3222#ifdef CONFIG_LIBATTR
3223#include <attr/xattr.h>
3224#else
3225#include <sys/xattr.h>
3226#endif
3227int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3228EOF
3229  if compile_prog "" "" ; then
3230    attr=yes
3231  # Older distros have <attr/xattr.h>, and need -lattr:
3232  elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3233    attr=yes
3234    LIBS="-lattr $LIBS"
3235    libattr=yes
3236  else
3237    if test "$attr" = "yes" ; then
3238      feature_not_found "ATTR" "Install libc6 or libattr devel"
3239    fi
3240    attr=no
3241  fi
3242fi
3243
3244##########################################
3245# iovec probe
3246cat > $TMPC <<EOF
3247#include <sys/types.h>
3248#include <sys/uio.h>
3249#include <unistd.h>
3250int main(void) { return sizeof(struct iovec); }
3251EOF
3252iovec=no
3253if compile_prog "" "" ; then
3254  iovec=yes
3255fi
3256
3257##########################################
3258# preadv probe
3259cat > $TMPC <<EOF
3260#include <sys/types.h>
3261#include <sys/uio.h>
3262#include <unistd.h>
3263int main(void) { return preadv(0, 0, 0, 0); }
3264EOF
3265preadv=no
3266if compile_prog "" "" ; then
3267  preadv=yes
3268fi
3269
3270##########################################
3271# fdt probe
3272# fdt support is mandatory for at least some target architectures,
3273# so insist on it if we're building those system emulators.
3274fdt_required=no
3275for target in $target_list; do
3276  case $target in
3277    aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu)
3278      fdt_required=yes
3279    ;;
3280  esac
3281done
3282
3283if test "$fdt_required" = "yes"; then
3284  if test "$fdt" = "no"; then
3285    error_exit "fdt disabled but some requested targets require it." \
3286      "You can turn off fdt only if you also disable all the system emulation" \
3287      "targets which need it (by specifying a cut down --target-list)."
3288  fi
3289  fdt=yes
3290fi
3291
3292if test "$fdt" != "no" ; then
3293  fdt_libs="-lfdt"
3294  # explicitly check for libfdt_env.h as it is missing in some stable installs
3295  # and test for required functions to make sure we are on a version >= 1.4.0
3296  cat > $TMPC << EOF
3297#include <libfdt.h>
3298#include <libfdt_env.h>
3299int main(void) { fdt_get_property_by_offset(0, 0, 0); return 0; }
3300EOF
3301  if compile_prog "" "$fdt_libs" ; then
3302    # system DTC is good - use it
3303    fdt=yes
3304  elif test -d ${source_path}/dtc/libfdt ; then
3305    # have submodule DTC - use it
3306    fdt=yes
3307    dtc_internal="yes"
3308    mkdir -p dtc
3309    if [ "$pwd_is_source_path" != "y" ] ; then
3310       symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3311       symlink "$source_path/dtc/scripts" "dtc/scripts"
3312    fi
3313    fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3314    fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3315  elif test "$fdt" = "yes" ; then
3316    # have neither and want - prompt for system/submodule install
3317    error_exit "DTC (libfdt) version >= 1.4.0 not present. Your options:" \
3318        "  (1) Preferred: Install the DTC (libfdt) devel package" \
3319        "  (2) Fetch the DTC submodule, using:" \
3320        "      git submodule update --init dtc"
3321  else
3322    # don't have and don't want
3323    fdt_libs=
3324    fdt=no
3325  fi
3326fi
3327
3328libs_softmmu="$libs_softmmu $fdt_libs"
3329
3330##########################################
3331# opengl probe (for sdl2, gtk, milkymist-tmu2)
3332
3333if test "$opengl" != "no" ; then
3334  opengl_pkgs="epoxy libdrm gbm"
3335  if $pkg_config $opengl_pkgs x11; then
3336    opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3337    opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
3338    opengl=yes
3339    if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3340        gtk_gl="yes"
3341    fi
3342  else
3343    if test "$opengl" = "yes" ; then
3344      feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3345    fi
3346    opengl_cflags=""
3347    opengl_libs=""
3348    opengl=no
3349  fi
3350fi
3351
3352if test "$opengl" = "yes"; then
3353  cat > $TMPC << EOF
3354#include <epoxy/egl.h>
3355#ifndef EGL_MESA_image_dma_buf_export
3356# error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
3357#endif
3358int main(void) { return 0; }
3359EOF
3360  if compile_prog "" "" ; then
3361    opengl_dmabuf=yes
3362  fi
3363fi
3364
3365##########################################
3366# archipelago probe
3367if test "$archipelago" != "no" ; then
3368    cat > $TMPC <<EOF
3369#include <stdio.h>
3370#include <xseg/xseg.h>
3371#include <xseg/protocol.h>
3372int main(void) {
3373    xseg_initialize();
3374    return 0;
3375}
3376EOF
3377    archipelago_libs=-lxseg
3378    if compile_prog "" "$archipelago_libs"; then
3379        archipelago="yes"
3380        libs_tools="$archipelago_libs $libs_tools"
3381        libs_softmmu="$archipelago_libs $libs_softmmu"
3382
3383        echo "WARNING: Please check the licenses of QEMU and libxseg carefully."
3384        echo "GPLv3 versions of libxseg may not be compatible with QEMU's"
3385        echo "license and therefore prevent redistribution."
3386        echo
3387        echo "To disable Archipelago, use --disable-archipelago"
3388    else
3389      if test "$archipelago" = "yes" ; then
3390        feature_not_found "Archipelago backend support" "Install libxseg devel"
3391      fi
3392      archipelago="no"
3393    fi
3394fi
3395
3396
3397##########################################
3398# glusterfs probe
3399if test "$glusterfs" != "no" ; then
3400  if $pkg_config --atleast-version=3 glusterfs-api; then
3401    glusterfs="yes"
3402    glusterfs_cflags=`$pkg_config --cflags glusterfs-api`
3403    glusterfs_libs=`$pkg_config --libs glusterfs-api`
3404    if $pkg_config --atleast-version=4 glusterfs-api; then
3405      glusterfs_xlator_opt="yes"
3406    fi
3407    if $pkg_config --atleast-version=5 glusterfs-api; then
3408      glusterfs_discard="yes"
3409    fi
3410    if $pkg_config --atleast-version=6 glusterfs-api; then
3411      glusterfs_zerofill="yes"
3412    fi
3413  else
3414    if test "$glusterfs" = "yes" ; then
3415      feature_not_found "GlusterFS backend support" \
3416          "Install glusterfs-api devel >= 3"
3417    fi
3418    glusterfs="no"
3419  fi
3420fi
3421
3422# Check for inotify functions when we are building linux-user
3423# emulator.  This is done because older glibc versions don't
3424# have syscall stubs for these implemented.  In that case we
3425# don't provide them even if kernel supports them.
3426#
3427inotify=no
3428cat > $TMPC << EOF
3429#include <sys/inotify.h>
3430
3431int
3432main(void)
3433{
3434        /* try to start inotify */
3435        return inotify_init();
3436}
3437EOF
3438if compile_prog "" "" ; then
3439  inotify=yes
3440fi
3441
3442inotify1=no
3443cat > $TMPC << EOF
3444#include <sys/inotify.h>
3445
3446int
3447main(void)
3448{
3449    /* try to start inotify */
3450    return inotify_init1(0);
3451}
3452EOF
3453if compile_prog "" "" ; then
3454  inotify1=yes
3455fi
3456
3457# check if utimensat and futimens are supported
3458utimens=no
3459cat > $TMPC << EOF
3460#define _ATFILE_SOURCE
3461#include <stddef.h>
3462#include <fcntl.h>
3463#include <sys/stat.h>
3464
3465int main(void)
3466{
3467    utimensat(AT_FDCWD, "foo", NULL, 0);
3468    futimens(0, NULL);
3469    return 0;
3470}
3471EOF
3472if compile_prog "" "" ; then
3473  utimens=yes
3474fi
3475
3476# check if pipe2 is there
3477pipe2=no
3478cat > $TMPC << EOF
3479#include <unistd.h>
3480#include <fcntl.h>
3481
3482int main(void)
3483{
3484    int pipefd[2];
3485    return pipe2(pipefd, O_CLOEXEC);
3486}
3487EOF
3488if compile_prog "" "" ; then
3489  pipe2=yes
3490fi
3491
3492# check if accept4 is there
3493accept4=no
3494cat > $TMPC << EOF
3495#include <sys/socket.h>
3496#include <stddef.h>
3497
3498int main(void)
3499{
3500    accept4(0, NULL, NULL, SOCK_CLOEXEC);
3501    return 0;
3502}
3503EOF
3504if compile_prog "" "" ; then
3505  accept4=yes
3506fi
3507
3508# check if tee/splice is there. vmsplice was added same time.
3509splice=no
3510cat > $TMPC << EOF
3511#include <unistd.h>
3512#include <fcntl.h>
3513#include <limits.h>
3514
3515int main(void)
3516{
3517    int len, fd = 0;
3518    len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3519    splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3520    return 0;
3521}
3522EOF
3523if compile_prog "" "" ; then
3524  splice=yes
3525fi
3526
3527##########################################
3528# libnuma probe
3529
3530if test "$numa" != "no" ; then
3531  cat > $TMPC << EOF
3532#include <numa.h>
3533int main(void) { return numa_available(); }
3534EOF
3535
3536  if compile_prog "" "-lnuma" ; then
3537    numa=yes
3538    libs_softmmu="-lnuma $libs_softmmu"
3539  else
3540    if test "$numa" = "yes" ; then
3541      feature_not_found "numa" "install numactl devel"
3542    fi
3543    numa=no
3544  fi
3545fi
3546
3547if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3548    echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3549    exit 1
3550fi
3551
3552##########################################
3553# tcmalloc probe
3554
3555if test "$tcmalloc" = "yes" ; then
3556  cat > $TMPC << EOF
3557#include <stdlib.h>
3558int main(void) { malloc(1); return 0; }
3559EOF
3560
3561  if compile_prog "" "-ltcmalloc" ; then
3562    LIBS="-ltcmalloc $LIBS"
3563  else
3564    feature_not_found "tcmalloc" "install gperftools devel"
3565  fi
3566fi
3567
3568##########################################
3569# jemalloc probe
3570
3571if test "$jemalloc" = "yes" ; then
3572  cat > $TMPC << EOF
3573#include <stdlib.h>
3574int main(void) { malloc(1); return 0; }
3575EOF
3576
3577  if compile_prog "" "-ljemalloc" ; then
3578    LIBS="-ljemalloc $LIBS"
3579  else
3580    feature_not_found "jemalloc" "install jemalloc devel"
3581  fi
3582fi
3583
3584##########################################
3585# signalfd probe
3586signalfd="no"
3587cat > $TMPC << EOF
3588#include <unistd.h>
3589#include <sys/syscall.h>
3590#include <signal.h>
3591int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3592EOF
3593
3594if compile_prog "" "" ; then
3595  signalfd=yes
3596fi
3597
3598# check if eventfd is supported
3599eventfd=no
3600cat > $TMPC << EOF
3601#include <sys/eventfd.h>
3602
3603int main(void)
3604{
3605    return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3606}
3607EOF
3608if compile_prog "" "" ; then
3609  eventfd=yes
3610fi
3611
3612# check if memfd is supported
3613memfd=no
3614cat > $TMPC << EOF
3615#include <sys/memfd.h>
3616
3617int main(void)
3618{
3619    return memfd_create("foo", MFD_ALLOW_SEALING);
3620}
3621EOF
3622if compile_prog "" "" ; then
3623  memfd=yes
3624fi
3625
3626
3627
3628# check for fallocate
3629fallocate=no
3630cat > $TMPC << EOF
3631#include <fcntl.h>
3632
3633int main(void)
3634{
3635    fallocate(0, 0, 0, 0);
3636    return 0;
3637}
3638EOF
3639if compile_prog "" "" ; then
3640  fallocate=yes
3641fi
3642
3643# check for fallocate hole punching
3644fallocate_punch_hole=no
3645cat > $TMPC << EOF
3646#include <fcntl.h>
3647#include <linux/falloc.h>
3648
3649int main(void)
3650{
3651    fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3652    return 0;
3653}
3654EOF
3655if compile_prog "" "" ; then
3656  fallocate_punch_hole=yes
3657fi
3658
3659# check that fallocate supports range zeroing inside the file
3660fallocate_zero_range=no
3661cat > $TMPC << EOF
3662#include <fcntl.h>
3663#include <linux/falloc.h>
3664
3665int main(void)
3666{
3667    fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3668    return 0;
3669}
3670EOF
3671if compile_prog "" "" ; then
3672  fallocate_zero_range=yes
3673fi
3674
3675# check for posix_fallocate
3676posix_fallocate=no
3677cat > $TMPC << EOF
3678#include <fcntl.h>
3679
3680int main(void)
3681{
3682    posix_fallocate(0, 0, 0);
3683    return 0;
3684}
3685EOF
3686if compile_prog "" "" ; then
3687    posix_fallocate=yes
3688fi
3689
3690# check for sync_file_range
3691sync_file_range=no
3692cat > $TMPC << EOF
3693#include <fcntl.h>
3694
3695int main(void)
3696{
3697    sync_file_range(0, 0, 0, 0);
3698    return 0;
3699}
3700EOF
3701if compile_prog "" "" ; then
3702  sync_file_range=yes
3703fi
3704
3705# check for linux/fiemap.h and FS_IOC_FIEMAP
3706fiemap=no
3707cat > $TMPC << EOF
3708#include <sys/ioctl.h>
3709#include <linux/fs.h>
3710#include <linux/fiemap.h>
3711
3712int main(void)
3713{
3714    ioctl(0, FS_IOC_FIEMAP, 0);
3715    return 0;
3716}
3717EOF
3718if compile_prog "" "" ; then
3719  fiemap=yes
3720fi
3721
3722# check for dup3
3723dup3=no
3724cat > $TMPC << EOF
3725#include <unistd.h>
3726
3727int main(void)
3728{
3729    dup3(0, 0, 0);
3730    return 0;
3731}
3732EOF
3733if compile_prog "" "" ; then
3734  dup3=yes
3735fi
3736
3737# check for ppoll support
3738ppoll=no
3739cat > $TMPC << EOF
3740#include <poll.h>
3741
3742int main(void)
3743{
3744    struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3745    ppoll(&pfd, 1, 0, 0);
3746    return 0;
3747}
3748EOF
3749if compile_prog "" "" ; then
3750  ppoll=yes
3751fi
3752
3753# check for prctl(PR_SET_TIMERSLACK , ... ) support
3754prctl_pr_set_timerslack=no
3755cat > $TMPC << EOF
3756#include <sys/prctl.h>
3757
3758int main(void)
3759{
3760    prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3761    return 0;
3762}
3763EOF
3764if compile_prog "" "" ; then
3765  prctl_pr_set_timerslack=yes
3766fi
3767
3768# check for epoll support
3769epoll=no
3770cat > $TMPC << EOF
3771#include <sys/epoll.h>
3772
3773int main(void)
3774{
3775    epoll_create(0);
3776    return 0;
3777}
3778EOF
3779if compile_prog "" "" ; then
3780  epoll=yes
3781fi
3782
3783# epoll_create1 and epoll_pwait are later additions
3784# so we must check separately for their presence
3785epoll_create1=no
3786cat > $TMPC << EOF
3787#include <sys/epoll.h>
3788
3789int main(void)
3790{
3791    /* Note that we use epoll_create1 as a value, not as
3792     * a function being called. This is necessary so that on
3793     * old SPARC glibc versions where the function was present in
3794     * the library but not declared in the header file we will
3795     * fail the configure check. (Otherwise we will get a compiler
3796     * warning but not an error, and will proceed to fail the
3797     * qemu compile where we compile with -Werror.)
3798     */
3799    return (int)(uintptr_t)&epoll_create1;
3800}
3801EOF
3802if compile_prog "" "" ; then
3803  epoll_create1=yes
3804fi
3805
3806epoll_pwait=no
3807cat > $TMPC << EOF
3808#include <sys/epoll.h>
3809
3810int main(void)
3811{
3812    epoll_pwait(0, 0, 0, 0, 0);
3813    return 0;
3814}
3815EOF
3816if compile_prog "" "" ; then
3817  epoll_pwait=yes
3818fi
3819
3820# check for sendfile support
3821sendfile=no
3822cat > $TMPC << EOF
3823#include <sys/sendfile.h>
3824
3825int main(void)
3826{
3827    return sendfile(0, 0, 0, 0);
3828}
3829EOF
3830if compile_prog "" "" ; then
3831  sendfile=yes
3832fi
3833
3834# check for timerfd support (glibc 2.8 and newer)
3835timerfd=no
3836cat > $TMPC << EOF
3837#include <sys/timerfd.h>
3838
3839int main(void)
3840{
3841    return(timerfd_create(CLOCK_REALTIME, 0));
3842}
3843EOF
3844if compile_prog "" "" ; then
3845  timerfd=yes
3846fi
3847
3848# check for setns and unshare support
3849setns=no
3850cat > $TMPC << EOF
3851#include <sched.h>
3852
3853int main(void)
3854{
3855    int ret;
3856    ret = setns(0, 0);
3857    ret = unshare(0);
3858    return ret;
3859}
3860EOF
3861if compile_prog "" "" ; then
3862  setns=yes
3863fi
3864
3865# Check if tools are available to build documentation.
3866if test "$docs" != "no" ; then
3867  if has makeinfo && has pod2man; then
3868    docs=yes
3869  else
3870    if test "$docs" = "yes" ; then
3871      feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
3872    fi
3873    docs=no
3874  fi
3875fi
3876
3877# Search for bswap_32 function
3878byteswap_h=no
3879cat > $TMPC << EOF
3880#include <byteswap.h>
3881int main(void) { return bswap_32(0); }
3882EOF
3883if compile_prog "" "" ; then
3884  byteswap_h=yes
3885fi
3886
3887# Search for bswap32 function
3888bswap_h=no
3889cat > $TMPC << EOF
3890#include <sys/endian.h>
3891#include <sys/types.h>
3892#include <machine/bswap.h>
3893int main(void) { return bswap32(0); }
3894EOF
3895if compile_prog "" "" ; then
3896  bswap_h=yes
3897fi
3898
3899##########################################
3900# Do we have libiscsi >= 1.9.0
3901if test "$libiscsi" != "no" ; then
3902  if $pkg_config --atleast-version=1.9.0 libiscsi; then
3903    libiscsi="yes"
3904    libiscsi_cflags=$($pkg_config --cflags libiscsi)
3905    libiscsi_libs=$($pkg_config --libs libiscsi)
3906  else
3907    if test "$libiscsi" = "yes" ; then
3908      feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
3909    fi
3910    libiscsi="no"
3911  fi
3912fi
3913
3914##########################################
3915# Do we need libm
3916cat > $TMPC << EOF
3917#include <math.h>
3918int main(int argc, char **argv) { return isnan(sin((double)argc)); }
3919EOF
3920if compile_prog "" "" ; then
3921  :
3922elif compile_prog "" "-lm" ; then
3923  LIBS="-lm $LIBS"
3924  libs_qga="-lm $libs_qga"
3925else
3926  error_exit "libm check failed"
3927fi
3928
3929##########################################
3930# Do we need librt
3931# uClibc provides 2 versions of clock_gettime(), one with realtime
3932# support and one without. This means that the clock_gettime() don't
3933# need -lrt. We still need it for timer_create() so we check for this
3934# function in addition.
3935cat > $TMPC <<EOF
3936#include <signal.h>
3937#include <time.h>
3938int main(void) {
3939  timer_create(CLOCK_REALTIME, NULL, NULL);
3940  return clock_gettime(CLOCK_REALTIME, NULL);
3941}
3942EOF
3943
3944if compile_prog "" "" ; then
3945  :
3946# we need pthread for static linking. use previous pthread test result
3947elif compile_prog "" "$pthread_lib -lrt" ; then
3948  LIBS="$LIBS -lrt"
3949  libs_qga="$libs_qga -lrt"
3950fi
3951
3952if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
3953        "$aix" != "yes" -a "$haiku" != "yes" ; then
3954    libs_softmmu="-lutil $libs_softmmu"
3955fi
3956
3957##########################################
3958# spice probe
3959if test "$spice" != "no" ; then
3960  cat > $TMPC << EOF
3961#include <spice.h>
3962int main(void) { spice_server_new(); return 0; }
3963EOF
3964  spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
3965  spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
3966  if $pkg_config --atleast-version=0.12.0 spice-server && \
3967     $pkg_config --atleast-version=0.12.3 spice-protocol && \
3968     compile_prog "$spice_cflags" "$spice_libs" ; then
3969    spice="yes"
3970    libs_softmmu="$libs_softmmu $spice_libs"
3971    QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
3972    spice_protocol_version=$($pkg_config --modversion spice-protocol)
3973    spice_server_version=$($pkg_config --modversion spice-server)
3974  else
3975    if test "$spice" = "yes" ; then
3976      feature_not_found "spice" \
3977          "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
3978    fi
3979    spice="no"
3980  fi
3981fi
3982
3983# check for smartcard support
3984smartcard_cflags=""
3985if test "$smartcard" != "no"; then
3986    if $pkg_config libcacard; then
3987        libcacard_cflags=$($pkg_config --cflags libcacard)
3988        libcacard_libs=$($pkg_config --libs libcacard)
3989        QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags"
3990        libs_softmmu="$libs_softmmu $libcacard_libs"
3991        smartcard="yes"
3992    else
3993        if test "$smartcard" = "yes"; then
3994            feature_not_found "smartcard" "Install libcacard devel"
3995        fi
3996        smartcard="no"
3997    fi
3998fi
3999
4000# check for libusb
4001if test "$libusb" != "no" ; then
4002    if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
4003        libusb="yes"
4004        libusb_cflags=$($pkg_config --cflags libusb-1.0)
4005        libusb_libs=$($pkg_config --libs libusb-1.0)
4006        QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
4007        libs_softmmu="$libs_softmmu $libusb_libs"
4008    else
4009        if test "$libusb" = "yes"; then
4010            feature_not_found "libusb" "Install libusb devel >= 1.0.13"
4011        fi
4012        libusb="no"
4013    fi
4014fi
4015
4016# check for usbredirparser for usb network redirection support
4017if test "$usb_redir" != "no" ; then
4018    if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
4019        usb_redir="yes"
4020        usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
4021        usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
4022        QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
4023        libs_softmmu="$libs_softmmu $usb_redir_libs"
4024    else
4025        if test "$usb_redir" = "yes"; then
4026            feature_not_found "usb-redir" "Install usbredir devel"
4027        fi
4028        usb_redir="no"
4029    fi
4030fi
4031
4032##########################################
4033# check if we have VSS SDK headers for win
4034
4035if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
4036  case "$vss_win32_sdk" in
4037    "")   vss_win32_include="-I$source_path" ;;
4038    *\ *) # The SDK is installed in "Program Files" by default, but we cannot
4039          # handle path with spaces. So we symlink the headers into ".sdk/vss".
4040          vss_win32_include="-I$source_path/.sdk/vss"
4041          symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
4042          ;;
4043    *)    vss_win32_include="-I$vss_win32_sdk"
4044  esac
4045  cat > $TMPC << EOF
4046#define __MIDL_user_allocate_free_DEFINED__
4047#include <inc/win2003/vss.h>
4048int main(void) { return VSS_CTX_BACKUP; }
4049EOF
4050  if compile_prog "$vss_win32_include" "" ; then
4051    guest_agent_with_vss="yes"
4052    QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4053    libs_qga="-lole32 -loleaut32 -lshlwapi -luuid -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4054    qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4055  else
4056    if test "$vss_win32_sdk" != "" ; then
4057      echo "ERROR: Please download and install Microsoft VSS SDK:"
4058      echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4059      echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4060      echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
4061      echo "ERROR: The headers are extracted in the directory \`inc'."
4062      feature_not_found "VSS support"
4063    fi
4064    guest_agent_with_vss="no"
4065  fi
4066fi
4067
4068##########################################
4069# lookup Windows platform SDK (if not specified)
4070# The SDK is needed only to build .tlb (type library) file of guest agent
4071# VSS provider from the source. It is usually unnecessary because the
4072# pre-compiled .tlb file is included.
4073
4074if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4075  if test -z "$win_sdk"; then
4076    programfiles="$PROGRAMFILES"
4077    test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4078    if test -n "$programfiles"; then
4079      win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4080    else
4081      feature_not_found "Windows SDK"
4082    fi
4083  elif test "$win_sdk" = "no"; then
4084    win_sdk=""
4085  fi
4086fi
4087
4088##########################################
4089# check if mingw environment provides a recent ntddscsi.h
4090if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4091  cat > $TMPC << EOF
4092#include <windows.h>
4093#include <ntddscsi.h>
4094int main(void) {
4095#if !defined(IOCTL_SCSI_GET_ADDRESS)
4096#error Missing required ioctl definitions
4097#endif
4098  SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4099  return addr.Lun;
4100}
4101EOF
4102  if compile_prog "" "" ; then
4103    guest_agent_ntddscsi=yes
4104    libs_qga="-lsetupapi $libs_qga"
4105  fi
4106fi
4107
4108##########################################
4109# virgl renderer probe
4110
4111if test "$virglrenderer" != "no" ; then
4112  cat > $TMPC << EOF
4113#include <virglrenderer.h>
4114int main(void) { virgl_renderer_poll(); return 0; }
4115EOF
4116  virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4117  virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4118  if $pkg_config virglrenderer >/dev/null 2>&1 && \
4119     compile_prog "$virgl_cflags" "$virgl_libs" ; then
4120    virglrenderer="yes"
4121  else
4122    if test "$virglrenderer" = "yes" ; then
4123      feature_not_found "virglrenderer"
4124    fi
4125    virglrenderer="no"
4126  fi
4127fi
4128
4129##########################################
4130# check if we have fdatasync
4131
4132fdatasync=no
4133cat > $TMPC << EOF
4134#include <unistd.h>
4135int main(void) {
4136#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4137return fdatasync(0);
4138#else
4139#error Not supported
4140#endif
4141}
4142EOF
4143if compile_prog "" "" ; then
4144    fdatasync=yes
4145fi
4146
4147##########################################
4148# check if we have madvise
4149
4150madvise=no
4151cat > $TMPC << EOF
4152#include <sys/types.h>
4153#include <sys/mman.h>
4154#include <stddef.h>
4155int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4156EOF
4157if compile_prog "" "" ; then
4158    madvise=yes
4159fi
4160
4161##########################################
4162# check if we have posix_madvise
4163
4164posix_madvise=no
4165cat > $TMPC << EOF
4166#include <sys/mman.h>
4167#include <stddef.h>
4168int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4169EOF
4170if compile_prog "" "" ; then
4171    posix_madvise=yes
4172fi
4173
4174##########################################
4175# check if we have usable SIGEV_THREAD_ID
4176
4177sigev_thread_id=no
4178cat > $TMPC << EOF
4179#include <signal.h>
4180int main(void) {
4181  struct sigevent ev;
4182  ev.sigev_notify = SIGEV_THREAD_ID;
4183  ev._sigev_un._tid = 0;
4184  asm volatile("" : : "g"(&ev));
4185  return 0;
4186}
4187EOF
4188if compile_prog "" "" ; then
4189    sigev_thread_id=yes
4190fi
4191
4192##########################################
4193# check if trace backend exists
4194
4195$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends  > /dev/null 2> /dev/null
4196if test "$?" -ne 0 ; then
4197  error_exit "invalid trace backends" \
4198      "Please choose supported trace backends."
4199fi
4200
4201##########################################
4202# For 'ust' backend, test if ust headers are present
4203if have_backend "ust"; then
4204  cat > $TMPC << EOF
4205#include <lttng/tracepoint.h>
4206int main(void) { return 0; }
4207EOF
4208  if compile_prog "" "" ; then
4209    if $pkg_config lttng-ust --exists; then
4210      lttng_ust_libs=`$pkg_config --libs lttng-ust`
4211    else
4212      lttng_ust_libs="-llttng-ust"
4213    fi
4214    if $pkg_config liburcu-bp --exists; then
4215      urcu_bp_libs=`$pkg_config --libs liburcu-bp`
4216    else
4217      urcu_bp_libs="-lurcu-bp"
4218    fi
4219
4220    LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4221    libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4222  else
4223    error_exit "Trace backend 'ust' missing lttng-ust header files"
4224  fi
4225fi
4226
4227##########################################
4228# For 'dtrace' backend, test if 'dtrace' command is present
4229if have_backend "dtrace"; then
4230  if ! has 'dtrace' ; then
4231    error_exit "dtrace command is not found in PATH $PATH"
4232  fi
4233  trace_backend_stap="no"
4234  if has 'stap' ; then
4235    trace_backend_stap="yes"
4236  fi
4237fi
4238
4239##########################################
4240# check and set a backend for coroutine
4241
4242# We prefer ucontext, but it's not always possible. The fallback
4243# is sigcontext. gthread is not selectable except explicitly, because
4244# it is not functional enough to run QEMU proper. (It is occasionally
4245# useful for debugging purposes.)  On Windows the only valid backend
4246# is the Windows-specific one.
4247
4248ucontext_works=no
4249if test "$darwin" != "yes"; then
4250  cat > $TMPC << EOF
4251#include <ucontext.h>
4252#ifdef __stub_makecontext
4253#error Ignoring glibc stub makecontext which will always fail
4254#endif
4255int main(void) { makecontext(0, 0, 0); return 0; }
4256EOF
4257  if compile_prog "" "" ; then
4258    ucontext_works=yes
4259  fi
4260fi
4261
4262if test "$coroutine" = ""; then
4263  if test "$mingw32" = "yes"; then
4264    coroutine=win32
4265  elif test "$ucontext_works" = "yes"; then
4266    coroutine=ucontext
4267  else
4268    coroutine=sigaltstack
4269  fi
4270else
4271  case $coroutine in
4272  windows)
4273    if test "$mingw32" != "yes"; then
4274      error_exit "'windows' coroutine backend only valid for Windows"
4275    fi
4276    # Unfortunately the user visible backend name doesn't match the
4277    # coroutine-*.c filename for this case, so we have to adjust it here.
4278    coroutine=win32
4279    ;;
4280  ucontext)
4281    if test "$ucontext_works" != "yes"; then
4282      feature_not_found "ucontext"
4283    fi
4284    ;;
4285  gthread|sigaltstack)
4286    if test "$mingw32" = "yes"; then
4287      error_exit "only the 'windows' coroutine backend is valid for Windows"
4288    fi
4289    ;;
4290  *)
4291    error_exit "unknown coroutine backend $coroutine"
4292    ;;
4293  esac
4294fi
4295
4296if test "$coroutine_pool" = ""; then
4297  if test "$coroutine" = "gthread"; then
4298    coroutine_pool=no
4299  else
4300    coroutine_pool=yes
4301  fi
4302fi
4303if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
4304  error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
4305fi
4306
4307##########################################
4308# check if we have open_by_handle_at
4309
4310open_by_handle_at=no
4311cat > $TMPC << EOF
4312#include <fcntl.h>
4313#if !defined(AT_EMPTY_PATH)
4314# error missing definition
4315#else
4316int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4317#endif
4318EOF
4319if compile_prog "" "" ; then
4320    open_by_handle_at=yes
4321fi
4322
4323########################################
4324# check if we have linux/magic.h
4325
4326linux_magic_h=no
4327cat > $TMPC << EOF
4328#include <linux/magic.h>
4329int main(void) {
4330  return 0;
4331}
4332EOF
4333if compile_prog "" "" ; then
4334    linux_magic_h=yes
4335fi
4336
4337########################################
4338# check whether we can disable warning option with a pragma (this is needed
4339# to silence warnings in the headers of some versions of external libraries).
4340# This test has to be compiled with -Werror as otherwise an unknown pragma is
4341# only a warning.
4342#
4343# If we can't selectively disable warning in the code, disable -Werror so that
4344# the build doesn't fail anyway.
4345
4346pragma_disable_unused_but_set=no
4347cat > $TMPC << EOF
4348#pragma GCC diagnostic push
4349#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4350#pragma GCC diagnostic ignored "-Wstrict-prototypes"
4351#pragma GCC diagnostic pop
4352
4353int main(void) {
4354    return 0;
4355}
4356EOF
4357if compile_prog "-Werror" "" ; then
4358    pragma_diagnostic_available=yes
4359else
4360    werror=no
4361fi
4362
4363########################################
4364# check if we have valgrind/valgrind.h
4365
4366valgrind_h=no
4367cat > $TMPC << EOF
4368#include <valgrind/valgrind.h>
4369int main(void) {
4370  return 0;
4371}
4372EOF
4373if compile_prog "" "" ; then
4374    valgrind_h=yes
4375fi
4376
4377########################################
4378# check if environ is declared
4379
4380has_environ=no
4381cat > $TMPC << EOF
4382#include <unistd.h>
4383int main(void) {
4384    environ = 0;
4385    return 0;
4386}
4387EOF
4388if compile_prog "" "" ; then
4389    has_environ=yes
4390fi
4391
4392########################################
4393# check if cpuid.h is usable.
4394
4395cpuid_h=no
4396cat > $TMPC << EOF
4397#include <cpuid.h>
4398int main(void) {
4399    unsigned a, b, c, d;
4400    int max = __get_cpuid_max(0, 0);
4401
4402    if (max >= 1) {
4403        __cpuid(1, a, b, c, d);
4404    }
4405
4406    if (max >= 7) {
4407        __cpuid_count(7, 0, a, b, c, d);
4408    }
4409
4410    return 0;
4411}
4412EOF
4413if compile_prog "" "" ; then
4414    cpuid_h=yes
4415fi
4416
4417########################################
4418# check if __[u]int128_t is usable.
4419
4420int128=no
4421cat > $TMPC << EOF
4422#if defined(__clang_major__) && defined(__clang_minor__)
4423# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4424#  error __int128_t does not work in CLANG before 3.2
4425# endif
4426#endif
4427__int128_t a;
4428__uint128_t b;
4429int main (void) {
4430  a = a + b;
4431  b = a * b;
4432  a = a * a;
4433  return 0;
4434}
4435EOF
4436if compile_prog "" "" ; then
4437    int128=yes
4438fi
4439
4440########################################
4441# check if getauxval is available.
4442
4443getauxval=no
4444cat > $TMPC << EOF
4445#include <sys/auxv.h>
4446int main(void) {
4447  return getauxval(AT_HWCAP) == 0;
4448}
4449EOF
4450if compile_prog "" "" ; then
4451    getauxval=yes
4452fi
4453
4454########################################
4455# check if ccache is interfering with
4456# semantic analysis of macros
4457
4458unset CCACHE_CPP2
4459ccache_cpp2=no
4460cat > $TMPC << EOF
4461static const int Z = 1;
4462#define fn() ({ Z; })
4463#define TAUT(X) ((X) == Z)
4464#define PAREN(X, Y) (X == Y)
4465#define ID(X) (X)
4466int main(int argc, char *argv[])
4467{
4468    int x = 0, y = 0;
4469    x = ID(x);
4470    x = fn();
4471    fn();
4472    if (PAREN(x, y)) return 0;
4473    if (TAUT(Z)) return 0;
4474    return 0;
4475}
4476EOF
4477
4478if ! compile_object "-Werror"; then
4479    ccache_cpp2=yes
4480fi
4481
4482#################################################
4483# clang does not support glibc + FORTIFY_SOURCE.
4484
4485if test "$fortify_source" != "no"; then
4486  if echo | $cc -dM -E - | grep __clang__ > /dev/null 2>&1 ; then
4487    fortify_source="no";
4488  elif test -n "$cxx" &&
4489       echo | $cxx -dM -E - | grep __clang__ >/dev/null 2>&1 ; then
4490    fortify_source="no";
4491  else
4492    fortify_source="yes"
4493  fi
4494fi
4495
4496##########################################
4497# check if struct fsxattr is available via linux/fs.h
4498
4499have_fsxattr=no
4500cat > $TMPC << EOF
4501#include <linux/fs.h>
4502struct fsxattr foo;
4503int main(void) {
4504  return 0;
4505}
4506EOF
4507if compile_prog "" "" ; then
4508    have_fsxattr=yes
4509fi
4510
4511##########################################
4512# End of CC checks
4513# After here, no more $cc or $ld runs
4514
4515if test "$gcov" = "yes" ; then
4516  CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4517  LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
4518elif test "$fortify_source" = "yes" ; then
4519  CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
4520elif test "$debug" = "no"; then
4521  CFLAGS="-O2 $CFLAGS"
4522fi
4523
4524##########################################
4525# Do we have libnfs
4526if test "$libnfs" != "no" ; then
4527  if $pkg_config --atleast-version=1.9.3 libnfs; then
4528    libnfs="yes"
4529    libnfs_libs=$($pkg_config --libs libnfs)
4530    LIBS="$LIBS $libnfs_libs"
4531  else
4532    if test "$libnfs" = "yes" ; then
4533      feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
4534    fi
4535    libnfs="no"
4536  fi
4537fi
4538
4539# Disable zero malloc errors for official releases unless explicitly told to
4540# enable/disable
4541if test -z "$zero_malloc" ; then
4542    if test "$z_version" = "50" ; then
4543        zero_malloc="no"
4544    else
4545        zero_malloc="yes"
4546    fi
4547fi
4548
4549# Now we've finished running tests it's OK to add -Werror to the compiler flags
4550if test "$werror" = "yes"; then
4551    QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
4552fi
4553
4554if test "$solaris" = "no" ; then
4555    if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
4556        LDFLAGS="-Wl,--warn-common $LDFLAGS"
4557    fi
4558fi
4559
4560# test if pod2man has --utf8 option
4561if pod2man --help | grep -q utf8; then
4562    POD2MAN="pod2man --utf8"
4563else
4564    POD2MAN="pod2man"
4565fi
4566
4567# Use ASLR, no-SEH and DEP if available
4568if test "$mingw32" = "yes" ; then
4569    for flag in --dynamicbase --no-seh --nxcompat; do
4570        if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
4571            LDFLAGS="-Wl,$flag $LDFLAGS"
4572        fi
4573    done
4574fi
4575
4576qemu_confdir=$sysconfdir$confsuffix
4577qemu_moddir=$libdir$confsuffix
4578qemu_datadir=$datadir$confsuffix
4579qemu_localedir="$datadir/locale"
4580
4581tools=""
4582if test "$want_tools" = "yes" ; then
4583  tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4584  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
4585    tools="qemu-nbd\$(EXESUF) $tools"
4586    tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
4587  fi
4588fi
4589if test "$softmmu" = yes ; then
4590  if test "$virtfs" != no ; then
4591    if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
4592      virtfs=yes
4593      tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
4594    else
4595      if test "$virtfs" = yes; then
4596        error_exit "VirtFS is supported only on Linux and requires libcap-devel and libattr-devel"
4597      fi
4598      virtfs=no
4599    fi
4600  fi
4601fi
4602
4603# Probe for guest agent support/options
4604
4605if [ "$guest_agent" != "no" ]; then
4606  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
4607      tools="qemu-ga $tools"
4608      guest_agent=yes
4609  elif [ "$guest_agent" != yes ]; then
4610      guest_agent=no
4611  else
4612      error_exit "Guest agent is not supported on this platform"
4613  fi
4614fi
4615
4616# Guest agent Window MSI  package
4617
4618if test "$guest_agent" != yes; then
4619  if test "$guest_agent_msi" = yes; then
4620    error_exit "MSI guest agent package requires guest agent enabled"
4621  fi
4622  guest_agent_msi=no
4623elif test "$mingw32" != "yes"; then
4624  if test "$guest_agent_msi" = "yes"; then
4625    error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
4626  fi
4627  guest_agent_msi=no
4628elif ! has wixl; then
4629  if test "$guest_agent_msi" = "yes"; then
4630    error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
4631  fi
4632  guest_agent_msi=no
4633else
4634  # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
4635  # disabled explicitly
4636  if test "$guest_agent_msi" != "no"; then
4637    guest_agent_msi=yes
4638  fi
4639fi
4640
4641if test "$guest_agent_msi" = "yes"; then
4642  if test "$guest_agent_with_vss" = "yes"; then
4643    QEMU_GA_MSI_WITH_VSS="-D InstallVss"
4644  fi
4645
4646  if test "$QEMU_GA_MANUFACTURER" = ""; then
4647    QEMU_GA_MANUFACTURER=QEMU
4648  fi
4649
4650  if test "$QEMU_GA_DISTRO" = ""; then
4651    QEMU_GA_DISTRO=Linux
4652  fi
4653
4654  if test "$QEMU_GA_VERSION" = ""; then
4655      QEMU_GA_VERSION=`cat $source_path/VERSION`
4656  fi
4657
4658  QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=`$pkg_config --variable=prefix glib-2.0`/bin"
4659
4660  case "$cpu" in
4661  x86_64)
4662    QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
4663    ;;
4664  i386)
4665    QEMU_GA_MSI_ARCH="-D Arch=32"
4666    ;;
4667  *)
4668    error_exit "CPU $cpu not supported for building installation package"
4669    ;;
4670  esac
4671fi
4672
4673# Mac OS X ships with a broken assembler
4674roms=
4675if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
4676        "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
4677        "$softmmu" = yes ; then
4678  roms="optionrom"
4679fi
4680if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
4681  roms="$roms spapr-rtas"
4682fi
4683
4684if test "$cpu" = "s390x" ; then
4685  roms="$roms s390-ccw"
4686fi
4687
4688# Probe for the need for relocating the user-only binary.
4689if test "$pie" = "no" ; then
4690  textseg_addr=
4691  case "$cpu" in
4692    arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
4693      # ??? Rationale for choosing this address
4694      textseg_addr=0x60000000
4695      ;;
4696    mips)
4697      # A 256M aligned address, high in the address space, with enough
4698      # room for the code_gen_buffer above it before the stack.
4699      textseg_addr=0x60000000
4700      ;;
4701  esac
4702  if [ -n "$textseg_addr" ]; then
4703    cat > $TMPC <<EOF
4704    int main(void) { return 0; }
4705EOF
4706    textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
4707    if ! compile_prog "" "$textseg_ldflags"; then
4708      # In case ld does not support -Ttext-segment, edit the default linker
4709      # script via sed to set the .text start addr.  This is needed on FreeBSD
4710      # at least.
4711      $ld --verbose | sed \
4712        -e '1,/==================================================/d' \
4713        -e '/==================================================/,$d' \
4714        -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
4715        -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
4716      textseg_ldflags="-Wl,-T../config-host.ld"
4717    fi
4718  fi
4719fi
4720
4721# prepend pixman and ftd flags after all config tests are done
4722QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
4723libs_softmmu="$pixman_libs $libs_softmmu"
4724
4725echo "Install prefix    $prefix"
4726echo "BIOS directory    `eval echo $qemu_datadir`"
4727echo "binary directory  `eval echo $bindir`"
4728echo "library directory `eval echo $libdir`"
4729echo "module directory  `eval echo $qemu_moddir`"
4730echo "libexec directory `eval echo $libexecdir`"
4731echo "include directory `eval echo $includedir`"
4732echo "config directory  `eval echo $sysconfdir`"
4733if test "$mingw32" = "no" ; then
4734echo "local state directory   `eval echo $local_statedir`"
4735echo "Manual directory  `eval echo $mandir`"
4736echo "ELF interp prefix $interp_prefix"
4737else
4738echo "local state directory   queried at runtime"
4739echo "Windows SDK       $win_sdk"
4740fi
4741echo "Source path       $source_path"
4742echo "C compiler        $cc"
4743echo "Host C compiler   $host_cc"
4744echo "C++ compiler      $cxx"
4745echo "Objective-C compiler $objcc"
4746echo "ARFLAGS           $ARFLAGS"
4747echo "CFLAGS            $CFLAGS"
4748echo "QEMU_CFLAGS       $QEMU_CFLAGS"
4749echo "LDFLAGS           $LDFLAGS"
4750echo "make              $make"
4751echo "install           $install"
4752echo "python            $python"
4753if test "$slirp" = "yes" ; then
4754    echo "smbd              $smbd"
4755fi
4756echo "module support    $modules"
4757echo "host CPU          $cpu"
4758echo "host big endian   $bigendian"
4759echo "target list       $target_list"
4760echo "tcg debug enabled $debug_tcg"
4761echo "gprof enabled     $gprof"
4762echo "sparse enabled    $sparse"
4763echo "strip binaries    $strip_opt"
4764echo "profiler          $profiler"
4765echo "static build      $static"
4766if test "$darwin" = "yes" ; then
4767    echo "Cocoa support     $cocoa"
4768fi
4769echo "pixman            $pixman"
4770echo "SDL support       $sdl"
4771echo "GTK support       $gtk"
4772echo "GTK GL support    $gtk_gl"
4773echo "GNUTLS support    $gnutls"
4774echo "GNUTLS hash       $gnutls_hash"
4775echo "GNUTLS rnd        $gnutls_rnd"
4776echo "libgcrypt         $gcrypt"
4777echo "libgcrypt kdf     $gcrypt_kdf"
4778if test "$nettle" = "yes"; then
4779    echo "nettle            $nettle ($nettle_version)"
4780else
4781    echo "nettle            $nettle"
4782fi
4783echo "nettle kdf        $nettle_kdf"
4784echo "libtasn1          $tasn1"
4785echo "VTE support       $vte"
4786echo "curses support    $curses"
4787echo "virgl support     $virglrenderer"
4788echo "curl support      $curl"
4789echo "mingw32 support   $mingw32"
4790echo "Audio drivers     $audio_drv_list"
4791echo "Block whitelist (rw) $block_drv_rw_whitelist"
4792echo "Block whitelist (ro) $block_drv_ro_whitelist"
4793echo "VirtFS support    $virtfs"
4794echo "VNC support       $vnc"
4795if test "$vnc" = "yes" ; then
4796    echo "VNC SASL support  $vnc_sasl"
4797    echo "VNC JPEG support  $vnc_jpeg"
4798    echo "VNC PNG support   $vnc_png"
4799fi
4800if test -n "$sparc_cpu"; then
4801    echo "Target Sparc Arch $sparc_cpu"
4802fi
4803echo "xen support       $xen"
4804if test "$xen" = "yes" ; then
4805  echo "xen ctrl version  $xen_ctrl_version"
4806  echo "pv dom build      $xen_pv_domain_build"
4807fi
4808echo "brlapi support    $brlapi"
4809echo "bluez  support    $bluez"
4810echo "Documentation     $docs"
4811echo "PIE               $pie"
4812echo "vde support       $vde"
4813echo "netmap support    $netmap"
4814echo "Linux AIO support $linux_aio"
4815echo "ATTR/XATTR support $attr"
4816echo "Install blobs     $blobs"
4817echo "KVM support       $kvm"
4818echo "RDMA support      $rdma"
4819echo "TCG interpreter   $tcg_interpreter"
4820echo "fdt support       $fdt"
4821echo "preadv support    $preadv"
4822echo "fdatasync         $fdatasync"
4823echo "madvise           $madvise"
4824echo "posix_madvise     $posix_madvise"
4825echo "sigev_thread_id   $sigev_thread_id"
4826echo "uuid support      $uuid"
4827echo "libcap-ng support $cap_ng"
4828echo "vhost-net support $vhost_net"
4829echo "vhost-scsi support $vhost_scsi"
4830echo "Trace backends    $trace_backends"
4831if have_backend "simple"; then
4832echo "Trace output file $trace_file-<pid>"
4833fi
4834if test "$spice" = "yes"; then
4835echo "spice support     $spice ($spice_protocol_version/$spice_server_version)"
4836else
4837echo "spice support     $spice"
4838fi
4839echo "rbd support       $rbd"
4840echo "xfsctl support    $xfs"
4841echo "smartcard support $smartcard"
4842echo "libusb            $libusb"
4843echo "usb net redir     $usb_redir"
4844echo "OpenGL support    $opengl"
4845echo "OpenGL dmabufs    $opengl_dmabuf"
4846echo "libiscsi support  $libiscsi"
4847echo "libnfs support    $libnfs"
4848echo "build guest agent $guest_agent"
4849echo "QGA VSS support   $guest_agent_with_vss"
4850echo "QGA w32 disk info $guest_agent_ntddscsi"
4851echo "QGA MSI support   $guest_agent_msi"
4852echo "seccomp support   $seccomp"
4853echo "coroutine backend $coroutine"
4854echo "coroutine pool    $coroutine_pool"
4855echo "GlusterFS support $glusterfs"
4856echo "Archipelago support $archipelago"
4857echo "gcov              $gcov_tool"
4858echo "gcov enabled      $gcov"
4859echo "TPM support       $tpm"
4860echo "libssh2 support   $libssh2"
4861echo "TPM passthrough   $tpm_passthrough"
4862echo "QOM debugging     $qom_cast_debug"
4863echo "vhdx              $vhdx"
4864echo "lzo support       $lzo"
4865echo "snappy support    $snappy"
4866echo "bzip2 support     $bzip2"
4867echo "NUMA host support $numa"
4868echo "tcmalloc support  $tcmalloc"
4869echo "jemalloc support  $jemalloc"
4870echo "avx2 optimization $avx2_opt"
4871
4872if test "$sdl_too_old" = "yes"; then
4873echo "-> Your SDL version is too old - please upgrade to have SDL support"
4874fi
4875
4876config_host_mak="config-host.mak"
4877
4878echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
4879
4880echo "# Automatically generated by configure - do not modify" > $config_host_mak
4881echo >> $config_host_mak
4882
4883echo all: >> $config_host_mak
4884echo "prefix=$prefix" >> $config_host_mak
4885echo "bindir=$bindir" >> $config_host_mak
4886echo "libdir=$libdir" >> $config_host_mak
4887echo "libexecdir=$libexecdir" >> $config_host_mak
4888echo "includedir=$includedir" >> $config_host_mak
4889echo "mandir=$mandir" >> $config_host_mak
4890echo "sysconfdir=$sysconfdir" >> $config_host_mak
4891echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
4892echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
4893echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
4894echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
4895if test "$mingw32" = "no" ; then
4896  echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
4897fi
4898echo "qemu_helperdir=$libexecdir" >> $config_host_mak
4899echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
4900echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
4901echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
4902echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
4903
4904echo "ARCH=$ARCH" >> $config_host_mak
4905
4906if test "$debug_tcg" = "yes" ; then
4907  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
4908fi
4909if test "$strip_opt" = "yes" ; then
4910  echo "STRIP=${strip}" >> $config_host_mak
4911fi
4912if test "$bigendian" = "yes" ; then
4913  echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
4914fi
4915if test "$mingw32" = "yes" ; then
4916  echo "CONFIG_WIN32=y" >> $config_host_mak
4917  rc_version=`cat $source_path/VERSION`
4918  version_major=${rc_version%%.*}
4919  rc_version=${rc_version#*.}
4920  version_minor=${rc_version%%.*}
4921  rc_version=${rc_version#*.}
4922  version_subminor=${rc_version%%.*}
4923  version_micro=0
4924  echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4925  echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4926  if test "$guest_agent_with_vss" = "yes" ; then
4927    echo "CONFIG_QGA_VSS=y" >> $config_host_mak
4928    echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
4929    echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
4930  fi
4931  if test "$guest_agent_ntddscsi" = "yes" ; then
4932    echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
4933  fi
4934  if test "$guest_agent_msi" = "yes"; then
4935    echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak  
4936    echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
4937    echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
4938    echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
4939    echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
4940    echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
4941    echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
4942  fi
4943else
4944  echo "CONFIG_POSIX=y" >> $config_host_mak
4945fi
4946
4947if test "$linux" = "yes" ; then
4948  echo "CONFIG_LINUX=y" >> $config_host_mak
4949fi
4950
4951if test "$darwin" = "yes" ; then
4952  echo "CONFIG_DARWIN=y" >> $config_host_mak
4953fi
4954
4955if test "$aix" = "yes" ; then
4956  echo "CONFIG_AIX=y" >> $config_host_mak
4957fi
4958
4959if test "$solaris" = "yes" ; then
4960  echo "CONFIG_SOLARIS=y" >> $config_host_mak
4961  echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
4962  if test "$needs_libsunmath" = "yes" ; then
4963    echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
4964  fi
4965fi
4966if test "$haiku" = "yes" ; then
4967  echo "CONFIG_HAIKU=y" >> $config_host_mak
4968fi
4969if test "$static" = "yes" ; then
4970  echo "CONFIG_STATIC=y" >> $config_host_mak
4971fi
4972if test "$profiler" = "yes" ; then
4973  echo "CONFIG_PROFILER=y" >> $config_host_mak
4974fi
4975if test "$slirp" = "yes" ; then
4976  echo "CONFIG_SLIRP=y" >> $config_host_mak
4977  echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
4978fi
4979if test "$vde" = "yes" ; then
4980  echo "CONFIG_VDE=y" >> $config_host_mak
4981fi
4982if test "$netmap" = "yes" ; then
4983  echo "CONFIG_NETMAP=y" >> $config_host_mak
4984fi
4985if test "$l2tpv3" = "yes" ; then
4986  echo "CONFIG_L2TPV3=y" >> $config_host_mak
4987fi
4988if test "$cap_ng" = "yes" ; then
4989  echo "CONFIG_LIBCAP=y" >> $config_host_mak
4990fi
4991echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
4992for drv in $audio_drv_list; do
4993    def=CONFIG_`echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]'`
4994    echo "$def=y" >> $config_host_mak
4995done
4996if test "$audio_pt_int" = "yes" ; then
4997  echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
4998fi
4999if test "$audio_win_int" = "yes" ; then
5000  echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
5001fi
5002echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
5003echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
5004if test "$vnc" = "yes" ; then
5005  echo "CONFIG_VNC=y" >> $config_host_mak
5006fi
5007if test "$vnc_sasl" = "yes" ; then
5008  echo "CONFIG_VNC_SASL=y" >> $config_host_mak
5009fi
5010if test "$vnc_jpeg" = "yes" ; then
5011  echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
5012fi
5013if test "$vnc_png" = "yes" ; then
5014  echo "CONFIG_VNC_PNG=y" >> $config_host_mak
5015fi
5016if test "$fnmatch" = "yes" ; then
5017  echo "CONFIG_FNMATCH=y" >> $config_host_mak
5018fi
5019if test "$uuid" = "yes" ; then
5020  echo "CONFIG_UUID=y" >> $config_host_mak
5021fi
5022if test "$xfs" = "yes" ; then
5023  echo "CONFIG_XFS=y" >> $config_host_mak
5024fi
5025qemu_version=`head $source_path/VERSION`
5026echo "VERSION=$qemu_version" >>$config_host_mak
5027echo "PKGVERSION=$pkgversion" >>$config_host_mak
5028echo "SRC_PATH=$source_path" >> $config_host_mak
5029echo "TARGET_DIRS=$target_list" >> $config_host_mak
5030if [ "$docs" = "yes" ] ; then
5031  echo "BUILD_DOCS=yes" >> $config_host_mak
5032fi
5033if test "$modules" = "yes"; then
5034  # $shacmd can generate a hash started with digit, which the compiler doesn't
5035  # like as an symbol. So prefix it with an underscore
5036  echo "CONFIG_STAMP=_`(echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ `" >> $config_host_mak
5037  echo "CONFIG_MODULES=y" >> $config_host_mak
5038fi
5039if test "$sdl" = "yes" ; then
5040  echo "CONFIG_SDL=y" >> $config_host_mak
5041  echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
5042  echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
5043fi
5044if test "$cocoa" = "yes" ; then
5045  echo "CONFIG_COCOA=y" >> $config_host_mak
5046fi
5047if test "$curses" = "yes" ; then
5048  echo "CONFIG_CURSES=y" >> $config_host_mak
5049fi
5050if test "$utimens" = "yes" ; then
5051  echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
5052fi
5053if test "$pipe2" = "yes" ; then
5054  echo "CONFIG_PIPE2=y" >> $config_host_mak
5055fi
5056if test "$accept4" = "yes" ; then
5057  echo "CONFIG_ACCEPT4=y" >> $config_host_mak
5058fi
5059if test "$splice" = "yes" ; then
5060  echo "CONFIG_SPLICE=y" >> $config_host_mak
5061fi
5062if test "$eventfd" = "yes" ; then
5063  echo "CONFIG_EVENTFD=y" >> $config_host_mak
5064fi
5065if test "$memfd" = "yes" ; then
5066  echo "CONFIG_MEMFD=y" >> $config_host_mak
5067fi
5068if test "$fallocate" = "yes" ; then
5069  echo "CONFIG_FALLOCATE=y" >> $config_host_mak
5070fi
5071if test "$fallocate_punch_hole" = "yes" ; then
5072  echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
5073fi
5074if test "$fallocate_zero_range" = "yes" ; then
5075  echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
5076fi
5077if test "$posix_fallocate" = "yes" ; then
5078  echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
5079fi
5080if test "$sync_file_range" = "yes" ; then
5081  echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
5082fi
5083if test "$fiemap" = "yes" ; then
5084  echo "CONFIG_FIEMAP=y" >> $config_host_mak
5085fi
5086if test "$dup3" = "yes" ; then
5087  echo "CONFIG_DUP3=y" >> $config_host_mak
5088fi
5089if test "$ppoll" = "yes" ; then
5090  echo "CONFIG_PPOLL=y" >> $config_host_mak
5091fi
5092if test "$prctl_pr_set_timerslack" = "yes" ; then
5093  echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5094fi
5095if test "$epoll" = "yes" ; then
5096  echo "CONFIG_EPOLL=y" >> $config_host_mak
5097fi
5098if test "$epoll_create1" = "yes" ; then
5099  echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5100fi
5101if test "$epoll_pwait" = "yes" ; then
5102  echo "CONFIG_EPOLL_PWAIT=y" >> $config_host_mak
5103fi
5104if test "$sendfile" = "yes" ; then
5105  echo "CONFIG_SENDFILE=y" >> $config_host_mak
5106fi
5107if test "$timerfd" = "yes" ; then
5108  echo "CONFIG_TIMERFD=y" >> $config_host_mak
5109fi
5110if test "$setns" = "yes" ; then
5111  echo "CONFIG_SETNS=y" >> $config_host_mak
5112fi
5113if test "$inotify" = "yes" ; then
5114  echo "CONFIG_INOTIFY=y" >> $config_host_mak
5115fi
5116if test "$inotify1" = "yes" ; then
5117  echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5118fi
5119if test "$byteswap_h" = "yes" ; then
5120  echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5121fi
5122if test "$bswap_h" = "yes" ; then
5123  echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5124fi
5125if test "$curl" = "yes" ; then
5126  echo "CONFIG_CURL=m" >> $config_host_mak
5127  echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
5128  echo "CURL_LIBS=$curl_libs" >> $config_host_mak
5129fi
5130if test "$brlapi" = "yes" ; then
5131  echo "CONFIG_BRLAPI=y" >> $config_host_mak
5132fi
5133if test "$bluez" = "yes" ; then
5134  echo "CONFIG_BLUEZ=y" >> $config_host_mak
5135  echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
5136fi
5137if test "$glib_subprocess" = "yes" ; then
5138  echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
5139fi
5140echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
5141if test "$gtk" = "yes" ; then
5142  echo "CONFIG_GTK=y" >> $config_host_mak
5143  echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
5144  echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
5145  echo "GTK_LIBS=$gtk_libs" >> $config_host_mak
5146  if test "$gtk_gl" = "yes" ; then
5147    echo "CONFIG_GTK_GL=y" >> $config_host_mak
5148  fi
5149fi
5150if test "$gnutls" = "yes" ; then
5151  echo "CONFIG_GNUTLS=y" >> $config_host_mak
5152fi
5153if test "$gnutls_hash" = "yes" ; then
5154  echo "CONFIG_GNUTLS_HASH=y" >> $config_host_mak
5155fi
5156if test "$gnutls_rnd" = "yes" ; then
5157  echo "CONFIG_GNUTLS_RND=y" >> $config_host_mak
5158fi
5159if test "$gcrypt" = "yes" ; then
5160  echo "CONFIG_GCRYPT=y" >> $config_host_mak
5161  if test "$gcrypt_kdf" = "yes" ; then
5162    echo "CONFIG_GCRYPT_KDF=y" >> $config_host_mak
5163  fi
5164fi
5165if test "$nettle" = "yes" ; then
5166  echo "CONFIG_NETTLE=y" >> $config_host_mak
5167  echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
5168  if test "$nettle_kdf" = "yes" ; then
5169    echo "CONFIG_NETTLE_KDF=y" >> $config_host_mak
5170  fi
5171fi
5172if test "$tasn1" = "yes" ; then
5173  echo "CONFIG_TASN1=y" >> $config_host_mak
5174fi
5175if test "$have_ifaddrs_h" = "yes" ; then
5176    echo "HAVE_IFADDRS_H=y" >> $config_host_mak
5177fi
5178
5179# Work around a system header bug with some kernel/XFS header
5180# versions where they both try to define 'struct fsxattr':
5181# xfs headers will not try to redefine structs from linux headers
5182# if this macro is set.
5183if test "$have_fsxattr" = "yes" ; then
5184    echo "HAVE_FSXATTR=y" >> $config_host_mak
5185fi
5186if test "$vte" = "yes" ; then
5187  echo "CONFIG_VTE=y" >> $config_host_mak
5188  echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5189fi
5190if test "$virglrenderer" = "yes" ; then
5191  echo "CONFIG_VIRGL=y" >> $config_host_mak
5192  echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5193  echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5194fi
5195if test "$xen" = "yes" ; then
5196  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
5197  echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
5198  if test "$xen_pv_domain_build" = "yes" ; then
5199    echo "CONFIG_XEN_PV_DOMAIN_BUILD=y" >> $config_host_mak
5200  fi
5201fi
5202if test "$linux_aio" = "yes" ; then
5203  echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5204fi
5205if test "$attr" = "yes" ; then
5206  echo "CONFIG_ATTR=y" >> $config_host_mak
5207fi
5208if test "$libattr" = "yes" ; then
5209  echo "CONFIG_LIBATTR=y" >> $config_host_mak
5210fi
5211if test "$virtfs" = "yes" ; then
5212  echo "CONFIG_VIRTFS=y" >> $config_host_mak
5213fi
5214if test "$vhost_scsi" = "yes" ; then
5215  echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5216fi
5217if test "$vhost_net" = "yes" ; then
5218  echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
5219fi
5220if test "$blobs" = "yes" ; then
5221  echo "INSTALL_BLOBS=yes" >> $config_host_mak
5222fi
5223if test "$iovec" = "yes" ; then
5224  echo "CONFIG_IOVEC=y" >> $config_host_mak
5225fi
5226if test "$preadv" = "yes" ; then
5227  echo "CONFIG_PREADV=y" >> $config_host_mak
5228fi
5229if test "$fdt" = "yes" ; then
5230  echo "CONFIG_FDT=y" >> $config_host_mak
5231fi
5232if test "$signalfd" = "yes" ; then
5233  echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5234fi
5235if test "$tcg_interpreter" = "yes" ; then
5236  echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
5237fi
5238if test "$fdatasync" = "yes" ; then
5239  echo "CONFIG_FDATASYNC=y" >> $config_host_mak
5240fi
5241if test "$madvise" = "yes" ; then
5242  echo "CONFIG_MADVISE=y" >> $config_host_mak
5243fi
5244if test "$posix_madvise" = "yes" ; then
5245  echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5246fi
5247if test "$sigev_thread_id" = "yes" ; then
5248  echo "CONFIG_SIGEV_THREAD_ID=y" >> $config_host_mak
5249fi
5250
5251if test "$spice" = "yes" ; then
5252  echo "CONFIG_SPICE=y" >> $config_host_mak
5253fi
5254
5255if test "$smartcard" = "yes" ; then
5256  echo "CONFIG_SMARTCARD=y" >> $config_host_mak
5257fi
5258
5259if test "$libusb" = "yes" ; then
5260  echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5261fi
5262
5263if test "$usb_redir" = "yes" ; then
5264  echo "CONFIG_USB_REDIR=y" >> $config_host_mak
5265fi
5266
5267if test "$opengl" = "yes" ; then
5268  echo "CONFIG_OPENGL=y" >> $config_host_mak
5269  echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
5270  echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
5271  if test "$opengl_dmabuf" = "yes" ; then
5272    echo "CONFIG_OPENGL_DMABUF=y" >> $config_host_mak
5273  fi
5274fi
5275
5276if test "$avx2_opt" = "yes" ; then
5277  echo "CONFIG_AVX2_OPT=y" >> $config_host_mak
5278fi
5279
5280if test "$lzo" = "yes" ; then
5281  echo "CONFIG_LZO=y" >> $config_host_mak
5282fi
5283
5284if test "$snappy" = "yes" ; then
5285  echo "CONFIG_SNAPPY=y" >> $config_host_mak
5286fi
5287
5288if test "$bzip2" = "yes" ; then
5289  echo "CONFIG_BZIP2=y" >> $config_host_mak
5290  echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
5291fi
5292
5293if test "$libiscsi" = "yes" ; then
5294  echo "CONFIG_LIBISCSI=m" >> $config_host_mak
5295  echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
5296  echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
5297fi
5298
5299if test "$libnfs" = "yes" ; then
5300  echo "CONFIG_LIBNFS=y" >> $config_host_mak
5301fi
5302
5303if test "$seccomp" = "yes"; then
5304  echo "CONFIG_SECCOMP=y" >> $config_host_mak
5305fi
5306
5307# XXX: suppress that
5308if [ "$bsd" = "yes" ] ; then
5309  echo "CONFIG_BSD=y" >> $config_host_mak
5310fi
5311
5312if test "$zero_malloc" = "yes" ; then
5313  echo "CONFIG_ZERO_MALLOC=y" >> $config_host_mak
5314fi
5315if test "$localtime_r" = "yes" ; then
5316  echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
5317fi
5318if test "$qom_cast_debug" = "yes" ; then
5319  echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
5320fi
5321if test "$rbd" = "yes" ; then
5322  echo "CONFIG_RBD=m" >> $config_host_mak
5323  echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
5324  echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
5325fi
5326
5327echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
5328if test "$coroutine_pool" = "yes" ; then
5329  echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
5330else
5331  echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
5332fi
5333
5334if test "$open_by_handle_at" = "yes" ; then
5335  echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
5336fi
5337
5338if test "$linux_magic_h" = "yes" ; then
5339  echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
5340fi
5341
5342if test "$pragma_diagnostic_available" = "yes" ; then
5343  echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
5344fi
5345
5346if test "$valgrind_h" = "yes" ; then
5347  echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
5348fi
5349
5350if test "$has_environ" = "yes" ; then
5351  echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
5352fi
5353
5354if test "$cpuid_h" = "yes" ; then
5355  echo "CONFIG_CPUID_H=y" >> $config_host_mak
5356fi
5357
5358if test "$int128" = "yes" ; then
5359  echo "CONFIG_INT128=y" >> $config_host_mak
5360fi
5361
5362if test "$getauxval" = "yes" ; then
5363  echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
5364fi
5365
5366if test "$glusterfs" = "yes" ; then
5367  echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
5368  echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
5369  echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
5370fi
5371
5372if test "$glusterfs_xlator_opt" = "yes" ; then
5373  echo "CONFIG_GLUSTERFS_XLATOR_OPT=y" >> $config_host_mak
5374fi
5375
5376if test "$glusterfs_discard" = "yes" ; then
5377  echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
5378fi
5379
5380if test "$glusterfs_zerofill" = "yes" ; then
5381  echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
5382fi
5383
5384if test "$archipelago" = "yes" ; then
5385  echo "CONFIG_ARCHIPELAGO=m" >> $config_host_mak
5386  echo "ARCHIPELAGO_LIBS=$archipelago_libs" >> $config_host_mak
5387fi
5388
5389if test "$libssh2" = "yes" ; then
5390  echo "CONFIG_LIBSSH2=m" >> $config_host_mak
5391  echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
5392  echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
5393fi
5394
5395if test "$vhdx" = "yes" ; then
5396  echo "CONFIG_VHDX=y" >> $config_host_mak
5397fi
5398
5399# USB host support
5400if test "$libusb" = "yes"; then
5401  echo "HOST_USB=libusb legacy" >> $config_host_mak
5402else
5403  echo "HOST_USB=stub" >> $config_host_mak
5404fi
5405
5406# TPM passthrough support?
5407if test "$tpm" = "yes"; then
5408  echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
5409  if test "$tpm_passthrough" = "yes"; then
5410    echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
5411  fi
5412fi
5413
5414echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5415if have_backend "nop"; then
5416  echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
5417fi
5418if have_backend "simple"; then
5419  echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5420  # Set the appropriate trace file.
5421  trace_file="\"$trace_file-\" FMT_pid"
5422fi
5423if have_backend "log"; then
5424  echo "CONFIG_TRACE_LOG=y" >> $config_host_mak
5425fi
5426if have_backend "ust"; then
5427  echo "CONFIG_TRACE_UST=y" >> $config_host_mak
5428fi
5429if have_backend "dtrace"; then
5430  echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
5431  if test "$trace_backend_stap" = "yes" ; then
5432    echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
5433  fi
5434fi
5435if have_backend "ftrace"; then
5436  if test "$linux" = "yes" ; then
5437    echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
5438  else
5439    feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
5440  fi
5441fi
5442echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
5443
5444if test "$rdma" = "yes" ; then
5445  echo "CONFIG_RDMA=y" >> $config_host_mak
5446fi
5447
5448# Hold two types of flag:
5449#   CONFIG_THREAD_SETNAME_BYTHREAD  - we've got a way of setting the name on
5450#                                     a thread we have a handle to
5451#   CONFIG_PTHREAD_SETNAME_NP       - A way of doing it on a particular
5452#                                     platform
5453if test "$pthread_setname_np" = "yes" ; then
5454  echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
5455  echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
5456fi
5457
5458if test "$tcg_interpreter" = "yes"; then
5459  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5460elif test "$ARCH" = "sparc64" ; then
5461  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5462elif test "$ARCH" = "s390x" ; then
5463  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
5464elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
5465  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
5466elif test "$ARCH" = "ppc64" ; then
5467  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5468else
5469  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5470fi
5471QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
5472
5473echo "TOOLS=$tools" >> $config_host_mak
5474echo "ROMS=$roms" >> $config_host_mak
5475echo "MAKE=$make" >> $config_host_mak
5476echo "INSTALL=$install" >> $config_host_mak
5477echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
5478echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
5479echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
5480echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
5481echo "PYTHON=$python" >> $config_host_mak
5482echo "CC=$cc" >> $config_host_mak
5483if $iasl -h > /dev/null 2>&1; then
5484  echo "IASL=$iasl" >> $config_host_mak
5485fi
5486echo "CC_I386=$cc_i386" >> $config_host_mak
5487echo "HOST_CC=$host_cc" >> $config_host_mak
5488echo "CXX=$cxx" >> $config_host_mak
5489echo "OBJCC=$objcc" >> $config_host_mak
5490echo "AR=$ar" >> $config_host_mak
5491echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
5492echo "AS=$as" >> $config_host_mak
5493echo "CPP=$cpp" >> $config_host_mak
5494echo "OBJCOPY=$objcopy" >> $config_host_mak
5495echo "LD=$ld" >> $config_host_mak
5496echo "NM=$nm" >> $config_host_mak
5497echo "WINDRES=$windres" >> $config_host_mak
5498echo "CFLAGS=$CFLAGS" >> $config_host_mak
5499echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
5500echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
5501echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
5502if test "$sparse" = "yes" ; then
5503  echo "CC           := REAL_CC=\"\$(CC)\" cgcc"       >> $config_host_mak
5504  echo "CPP          := REAL_CC=\"\$(CPP)\" cgcc"      >> $config_host_mak
5505  echo "CXX          := REAL_CC=\"\$(CXX)\" cgcc"      >> $config_host_mak
5506  echo "HOST_CC      := REAL_CC=\"\$(HOST_CC)\" cgcc"  >> $config_host_mak
5507  echo "QEMU_CFLAGS  += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
5508fi
5509if test "$cross_prefix" != ""; then
5510  echo "AUTOCONF_HOST := --host=${cross_prefix%-}"     >> $config_host_mak
5511else
5512  echo "AUTOCONF_HOST := "                             >> $config_host_mak
5513fi
5514echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
5515echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
5516echo "LIBS+=$LIBS" >> $config_host_mak
5517echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
5518echo "EXESUF=$EXESUF" >> $config_host_mak
5519echo "DSOSUF=$DSOSUF" >> $config_host_mak
5520echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
5521echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
5522echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
5523echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
5524echo "POD2MAN=$POD2MAN" >> $config_host_mak
5525echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
5526if test "$gcov" = "yes" ; then
5527  echo "CONFIG_GCOV=y" >> $config_host_mak
5528  echo "GCOV=$gcov_tool" >> $config_host_mak
5529fi
5530
5531# use included Linux headers
5532if test "$linux" = "yes" ; then
5533  mkdir -p linux-headers
5534  case "$cpu" in
5535  i386|x86_64|x32)
5536    linux_arch=x86
5537    ;;
5538  ppcemb|ppc|ppc64)
5539    linux_arch=powerpc
5540    ;;
5541  s390x)
5542    linux_arch=s390
5543    ;;
5544  aarch64)
5545    linux_arch=arm64
5546    ;;
5547  mips64)
5548    linux_arch=mips
5549    ;;
5550  *)
5551    # For most CPUs the kernel architecture name and QEMU CPU name match.
5552    linux_arch="$cpu"
5553    ;;
5554  esac
5555    # For non-KVM architectures we will not have asm headers
5556    if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
5557      symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
5558    fi
5559fi
5560
5561for target in $target_list; do
5562target_dir="$target"
5563config_target_mak=$target_dir/config-target.mak
5564target_name=`echo $target | cut -d '-' -f 1`
5565target_bigendian="no"
5566
5567case "$target_name" in
5568  armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
5569  target_bigendian=yes
5570  ;;
5571esac
5572target_softmmu="no"
5573target_user_only="no"
5574target_linux_user="no"
5575target_bsd_user="no"
5576case "$target" in
5577  ${target_name}-softmmu)
5578    target_softmmu="yes"
5579    ;;
5580  ${target_name}-linux-user)
5581    if test "$linux" != "yes" ; then
5582      error_exit "Target '$target' is only available on a Linux host"
5583    fi
5584    target_user_only="yes"
5585    target_linux_user="yes"
5586    ;;
5587  ${target_name}-bsd-user)
5588    if test "$bsd" != "yes" ; then
5589      error_exit "Target '$target' is only available on a BSD host"
5590    fi
5591    target_user_only="yes"
5592    target_bsd_user="yes"
5593    ;;
5594  *)
5595    error_exit "Target '$target' not recognised"
5596    exit 1
5597    ;;
5598esac
5599
5600mkdir -p $target_dir
5601echo "# Automatically generated by configure - do not modify" > $config_target_mak
5602
5603bflt="no"
5604interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_name/g"`
5605gdb_xml_files=""
5606
5607TARGET_ARCH="$target_name"
5608TARGET_BASE_ARCH=""
5609TARGET_ABI_DIR=""
5610
5611case "$target_name" in
5612  i386)
5613  ;;
5614  x86_64)
5615    TARGET_BASE_ARCH=i386
5616  ;;
5617  alpha)
5618  ;;
5619  arm|armeb)
5620    TARGET_ARCH=arm
5621    bflt="yes"
5622    gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5623  ;;
5624  aarch64)
5625    TARGET_BASE_ARCH=arm
5626    bflt="yes"
5627    gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5628  ;;
5629  cris)
5630  ;;
5631  lm32)
5632  ;;
5633  m68k)
5634    bflt="yes"
5635    gdb_xml_files="cf-core.xml cf-fp.xml"
5636  ;;
5637  microblaze|microblazeel)
5638    TARGET_ARCH=microblaze
5639    bflt="yes"
5640  ;;
5641  mips|mipsel)
5642    TARGET_ARCH=mips
5643    echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
5644  ;;
5645  mipsn32|mipsn32el)
5646    TARGET_ARCH=mips64
5647    TARGET_BASE_ARCH=mips
5648    echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
5649    echo "TARGET_ABI32=y" >> $config_target_mak
5650  ;;
5651  mips64|mips64el)
5652    TARGET_ARCH=mips64
5653    TARGET_BASE_ARCH=mips
5654    echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
5655  ;;
5656  moxie)
5657  ;;
5658  or32)
5659    TARGET_ARCH=openrisc
5660    TARGET_BASE_ARCH=openrisc
5661  ;;
5662  ppc)
5663    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5664  ;;
5665  ppcemb)
5666    TARGET_BASE_ARCH=ppc
5667    TARGET_ABI_DIR=ppc
5668    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5669  ;;
5670  ppc64)
5671    TARGET_BASE_ARCH=ppc
5672    TARGET_ABI_DIR=ppc
5673    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
5674  ;;
5675  ppc64le)
5676    TARGET_ARCH=ppc64
5677    TARGET_BASE_ARCH=ppc
5678    TARGET_ABI_DIR=ppc
5679    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
5680  ;;
5681  ppc64abi32)
5682    TARGET_ARCH=ppc64
5683    TARGET_BASE_ARCH=ppc
5684    TARGET_ABI_DIR=ppc
5685    echo "TARGET_ABI32=y" >> $config_target_mak
5686    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml power-vsx.xml"
5687  ;;
5688  sh4|sh4eb)
5689    TARGET_ARCH=sh4
5690    bflt="yes"
5691  ;;
5692  sparc)
5693  ;;
5694  sparc64)
5695    TARGET_BASE_ARCH=sparc
5696  ;;
5697  sparc32plus)
5698    TARGET_ARCH=sparc64
5699    TARGET_BASE_ARCH=sparc
5700    TARGET_ABI_DIR=sparc
5701    echo "TARGET_ABI32=y" >> $config_target_mak
5702  ;;
5703  s390x)
5704    gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml"
5705  ;;
5706  tilegx)
5707  ;;
5708  tricore)
5709  ;;
5710  unicore32)
5711  ;;
5712  xtensa|xtensaeb)
5713    TARGET_ARCH=xtensa
5714  ;;
5715  *)
5716    error_exit "Unsupported target CPU"
5717  ;;
5718esac
5719# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
5720if [ "$TARGET_BASE_ARCH" = "" ]; then
5721  TARGET_BASE_ARCH=$TARGET_ARCH
5722fi
5723
5724symlink "$source_path/Makefile.target" "$target_dir/Makefile"
5725
5726upper() {
5727    echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
5728}
5729
5730target_arch_name="`upper $TARGET_ARCH`"
5731echo "TARGET_$target_arch_name=y" >> $config_target_mak
5732echo "TARGET_NAME=$target_name" >> $config_target_mak
5733echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
5734if [ "$TARGET_ABI_DIR" = "" ]; then
5735  TARGET_ABI_DIR=$TARGET_ARCH
5736fi
5737echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
5738if [ "$HOST_VARIANT_DIR" != "" ]; then
5739    echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
5740fi
5741case "$target_name" in
5742  i386|x86_64)
5743    if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
5744      echo "CONFIG_XEN=y" >> $config_target_mak
5745      if test "$xen_pci_passthrough" = yes; then
5746        echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
5747      fi
5748    fi
5749    ;;
5750  *)
5751esac
5752case "$target_name" in
5753  aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
5754    # Make sure the target and host cpus are compatible
5755    if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
5756      \( "$target_name" = "$cpu" -o \
5757      \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
5758      \( "$target_name" = "ppc64"  -a "$cpu" = "ppc" \) -o \
5759      \( "$target_name" = "ppc"    -a "$cpu" = "ppc64" \) -o \
5760      \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
5761      \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
5762      \( "$target_name" = "x86_64" -a "$cpu" = "i386"   \) -o \
5763      \( "$target_name" = "i386"   -a "$cpu" = "x86_64" \) -o \
5764      \( "$target_name" = "x86_64" -a "$cpu" = "x32"   \) -o \
5765      \( "$target_name" = "i386"   -a "$cpu" = "x32" \) \) ; then
5766      echo "CONFIG_KVM=y" >> $config_target_mak
5767      if test "$vhost_net" = "yes" ; then
5768        echo "CONFIG_VHOST_NET=y" >> $config_target_mak
5769        echo "CONFIG_VHOST_NET_TEST_$target_name=y" >> $config_host_mak
5770      fi
5771    fi
5772esac
5773if test "$target_bigendian" = "yes" ; then
5774  echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
5775fi
5776if test "$target_softmmu" = "yes" ; then
5777  echo "CONFIG_SOFTMMU=y" >> $config_target_mak
5778fi
5779if test "$target_user_only" = "yes" ; then
5780  echo "CONFIG_USER_ONLY=y" >> $config_target_mak
5781  echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
5782fi
5783if test "$target_linux_user" = "yes" ; then
5784  echo "CONFIG_LINUX_USER=y" >> $config_target_mak
5785fi
5786list=""
5787if test ! -z "$gdb_xml_files" ; then
5788  for x in $gdb_xml_files; do
5789    list="$list $source_path/gdb-xml/$x"
5790  done
5791  echo "TARGET_XML_FILES=$list" >> $config_target_mak
5792fi
5793
5794if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
5795  echo "TARGET_HAS_BFLT=y" >> $config_target_mak
5796fi
5797if test "$target_bsd_user" = "yes" ; then
5798  echo "CONFIG_BSD_USER=y" >> $config_target_mak
5799fi
5800
5801# generate QEMU_CFLAGS/LDFLAGS for targets
5802
5803cflags=""
5804ldflags=""
5805
5806disas_config() {
5807  echo "CONFIG_${1}_DIS=y" >> $config_target_mak
5808  echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
5809}
5810
5811for i in $ARCH $TARGET_BASE_ARCH ; do
5812  case "$i" in
5813  alpha)
5814    disas_config "ALPHA"
5815  ;;
5816  aarch64)
5817    if test -n "${cxx}"; then
5818      disas_config "ARM_A64"
5819    fi
5820  ;;
5821  arm)
5822    disas_config "ARM"
5823    if test -n "${cxx}"; then
5824      disas_config "ARM_A64"
5825    fi
5826  ;;
5827  cris)
5828    disas_config "CRIS"
5829  ;;
5830  hppa)
5831    disas_config "HPPA"
5832  ;;
5833  i386|x86_64|x32)
5834    disas_config "I386"
5835  ;;
5836  ia64*)
5837    disas_config "IA64"
5838  ;;
5839  lm32)
5840    disas_config "LM32"
5841  ;;
5842  m68k)
5843    disas_config "M68K"
5844  ;;
5845  microblaze*)
5846    disas_config "MICROBLAZE"
5847  ;;
5848  mips*)
5849    disas_config "MIPS"
5850  ;;
5851  moxie*)
5852    disas_config "MOXIE"
5853  ;;
5854  or32)
5855    disas_config "OPENRISC"
5856  ;;
5857  ppc*)
5858    disas_config "PPC"
5859  ;;
5860  s390*)
5861    disas_config "S390"
5862  ;;
5863  sh4)
5864    disas_config "SH4"
5865  ;;
5866  sparc*)
5867    disas_config "SPARC"
5868  ;;
5869  xtensa*)
5870    disas_config "XTENSA"
5871  ;;
5872  esac
5873done
5874if test "$tcg_interpreter" = "yes" ; then
5875  disas_config "TCI"
5876fi
5877
5878case "$ARCH" in
5879alpha)
5880  # Ensure there's only a single GP
5881  cflags="-msmall-data $cflags"
5882;;
5883esac
5884
5885if test "$gprof" = "yes" ; then
5886  echo "TARGET_GPROF=yes" >> $config_target_mak
5887  if test "$target_linux_user" = "yes" ; then
5888    cflags="-p $cflags"
5889    ldflags="-p $ldflags"
5890  fi
5891  if test "$target_softmmu" = "yes" ; then
5892    ldflags="-p $ldflags"
5893    echo "GPROF_CFLAGS=-p" >> $config_target_mak
5894  fi
5895fi
5896
5897if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
5898  ldflags="$ldflags $textseg_ldflags"
5899fi
5900
5901echo "LDFLAGS+=$ldflags" >> $config_target_mak
5902echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
5903
5904done # for target in $targets
5905
5906if [ "$pixman" = "internal" ]; then
5907  echo "config-host.h: subdir-pixman" >> $config_host_mak
5908fi
5909
5910if [ "$dtc_internal" = "yes" ]; then
5911  echo "config-host.h: subdir-dtc" >> $config_host_mak
5912fi
5913
5914if test "$numa" = "yes"; then
5915  echo "CONFIG_NUMA=y" >> $config_host_mak
5916fi
5917
5918if test "$ccache_cpp2" = "yes"; then
5919  echo "export CCACHE_CPP2=y" >> $config_host_mak
5920fi
5921
5922# build tree in object directory in case the source is not in the current directory
5923DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
5924DIRS="$DIRS fsdev"
5925DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
5926DIRS="$DIRS roms/seabios roms/vgabios"
5927DIRS="$DIRS qapi-generated"
5928FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
5929FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
5930FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
5931FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
5932FILES="$FILES pc-bios/spapr-rtas/Makefile"
5933FILES="$FILES pc-bios/s390-ccw/Makefile"
5934FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
5935FILES="$FILES pc-bios/qemu-icon.bmp"
5936for bios_file in \
5937    $source_path/pc-bios/*.bin \
5938    $source_path/pc-bios/*.aml \
5939    $source_path/pc-bios/*.rom \
5940    $source_path/pc-bios/*.dtb \
5941    $source_path/pc-bios/*.img \
5942    $source_path/pc-bios/openbios-* \
5943    $source_path/pc-bios/u-boot.* \
5944    $source_path/pc-bios/palcode-*
5945do
5946    FILES="$FILES pc-bios/`basename $bios_file`"
5947done
5948for test_file in `find $source_path/tests/acpi-test-data -type f`
5949do
5950    FILES="$FILES tests/acpi-test-data`echo $test_file | sed -e 's/.*acpi-test-data//'`"
5951done
5952mkdir -p $DIRS
5953for f in $FILES ; do
5954    if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
5955        symlink "$source_path/$f" "$f"
5956    fi
5957done
5958
5959# temporary config to build submodules
5960for rom in seabios vgabios ; do
5961    config_mak=roms/$rom/config.mak
5962    echo "# Automatically generated by configure - do not modify" > $config_mak
5963    echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
5964    echo "AS=$as" >> $config_mak
5965    echo "CC=$cc" >> $config_mak
5966    echo "BCC=bcc" >> $config_mak
5967    echo "CPP=$cpp" >> $config_mak
5968    echo "OBJCOPY=objcopy" >> $config_mak
5969    echo "IASL=$iasl" >> $config_mak
5970    echo "LD=$ld" >> $config_mak
5971done
5972
5973# set up qemu-iotests in this build directory
5974iotests_common_env="tests/qemu-iotests/common.env"
5975iotests_check="tests/qemu-iotests/check"
5976
5977echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
5978echo >> "$iotests_common_env"
5979echo "export PYTHON='$python'" >> "$iotests_common_env"
5980
5981if [ ! -e "$iotests_check" ]; then
5982    symlink "$source_path/$iotests_check" "$iotests_check"
5983fi
5984
5985# Save the configure command line for later reuse.
5986cat <<EOD >config.status
5987#!/bin/sh
5988# Generated by configure.
5989# Run this file to recreate the current configuration.
5990# Compiler output produced by configure, useful for debugging
5991# configure, is in config.log if it exists.
5992EOD
5993printf "exec" >>config.status
5994printf " '%s'" "$0" "$@" >>config.status
5995echo ' "$@"' >>config.status
5996chmod +x config.status
5997
5998rm -r "$TMPDIR1"
5999