configure 134.9 KB
Newer Older
B
bellard 已提交
1 2
#!/bin/sh
#
B
bellard 已提交
3
# qemu configure script (c) 2003 Fabrice Bellard
B
bellard 已提交
4 5 6 7 8 9 10 11 12 13
#
# set temporary file name
if test ! -z "$TMPDIR" ; then
    TMPDIR1="${TMPDIR}"
elif test ! -z "$TEMPDIR" ; then
    TMPDIR1="${TEMPDIR}"
else
    TMPDIR1="/tmp"
fi

B
bellard 已提交
14
TMPC="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.c"
15 16
TMPB="qemu-conf-${RANDOM}-$$-${RANDOM}"
TMPO="${TMPDIR1}/${TMPB}.o"
17
TMPCXX="${TMPDIR1}/${TMPB}.cxx"
18 19
TMPL="${TMPDIR1}/${TMPB}.lo"
TMPA="${TMPDIR1}/lib${TMPB}.la"
20
TMPE="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.exe"
B
bellard 已提交
21

22 23
# NB: do not call "exit" in the trap handler; this is buggy with some shells;
# see <1285349658-3122-1-git-send-email-loic.minier@linaro.org>
24
trap "rm -f $TMPC $TMPO $TMPCXX $TMPE" EXIT INT QUIT TERM
G
Gerd Hoffmann 已提交
25
rm -f config.log
26

27 28
# Print a helpful header at the top of config.log
echo "# QEMU configure log $(date)" >> config.log
29 30 31
printf "# Configured with:" >> config.log
printf " '%s'" "$0" "$@" >> config.log
echo >> config.log
32 33
echo "#" >> config.log

34 35 36 37 38 39 40 41 42 43 44
error_exit() {
    echo
    echo "ERROR: $1"
    while test -n "$2"; do
        echo "       $2"
        shift
    done
    echo
    exit 1
}

45 46 47 48 49 50 51
do_compiler() {
    # Run the compiler, capturing its output to the log. First argument
    # is compiler binary to execute.
    local compiler="$1"
    shift
    echo $compiler "$@" >> config.log
    $compiler "$@" >> config.log 2>&1 || return $?
52 53 54 55 56 57 58 59 60 61 62 63 64
    # Test passed. If this is an --enable-werror build, rerun
    # the test with -Werror and bail out if it fails. This
    # makes warning-generating-errors in configure test code
    # obvious to developers.
    if test "$werror" != "yes"; then
        return 0
    fi
    # Don't bother rerunning the compile if we were already using -Werror
    case "$*" in
        *-Werror*)
           return 0
        ;;
    esac
65 66
    echo $compiler -Werror "$@" >> config.log
    $compiler -Werror "$@" >> config.log 2>&1 && return $?
67 68 69 70
    error_exit "configure test passed without -Werror but failed with -Werror." \
        "This is probably a bug in the configure script. The failing command" \
        "will be at the bottom of config.log." \
        "You can run configure with --disable-werror to bypass this check."
71 72
}

73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97
do_cc() {
    do_compiler "$cc" "$@"
}

do_cxx() {
    do_compiler "$cxx" "$@"
}

update_cxxflags() {
    # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
    # options which some versions of GCC's C++ compiler complain about
    # because they only make sense for C programs.
    QEMU_CXXFLAGS=
    for arg in $QEMU_CFLAGS; do
        case $arg in
            -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
            -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
                ;;
            *)
                QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
                ;;
        esac
    done
}

98
compile_object() {
99
  do_cc $QEMU_CFLAGS -c -o $TMPO $TMPC
100 101 102 103 104
}

compile_prog() {
  local_cflags="$1"
  local_ldflags="$2"
105
  do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $LDFLAGS $local_ldflags
106 107
}

108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
do_libtool() {
    local mode=$1
    shift
    # Run the compiler, capturing its output to the log.
    echo $libtool $mode --tag=CC $cc "$@" >> config.log
    $libtool $mode --tag=CC $cc "$@" >> config.log 2>&1 || return $?
    # Test passed. If this is an --enable-werror build, rerun
    # the test with -Werror and bail out if it fails. This
    # makes warning-generating-errors in configure test code
    # obvious to developers.
    if test "$werror" != "yes"; then
        return 0
    fi
    # Don't bother rerunning the compile if we were already using -Werror
    case "$*" in
        *-Werror*)
           return 0
        ;;
    esac
    echo $libtool $mode --tag=CC $cc -Werror "$@" >> config.log
    $libtool $mode --tag=CC $cc -Werror "$@" >> config.log 2>&1 && return $?
    error_exit "configure test passed without -Werror but failed with -Werror." \
        "This is probably a bug in the configure script. The failing command" \
        "will be at the bottom of config.log." \
        "You can run configure with --disable-werror to bypass this check."
}

libtool_prog() {
    do_libtool --mode=compile $QEMU_CFLAGS -c -fPIE -DPIE -o $TMPO $TMPC || return $?
    do_libtool --mode=link $LDFLAGS -o $TMPA $TMPL -rpath /usr/local/lib
}

140 141
# symbolically link $1 to $2.  Portable version of "ln -sf".
symlink() {
142
  rm -rf "$2"
143
  mkdir -p "$(dirname "$2")"
144
  ln -s "$1" "$2"
145 146
}

147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182
# check whether a command is available to this shell (may be either an
# executable or a builtin)
has() {
    type "$1" >/dev/null 2>&1
}

# search for an executable in PATH
path_of() {
    local_command="$1"
    local_ifs="$IFS"
    local_dir=""

    # pathname has a dir component?
    if [ "${local_command#*/}" != "$local_command" ]; then
        if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
            echo "$local_command"
            return 0
        fi
    fi
    if [ -z "$local_command" ]; then
        return 1
    fi

    IFS=:
    for local_dir in $PATH; do
        if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
            echo "$local_dir/$local_command"
            IFS="${local_ifs:-$(printf ' \t\n')}"
            return 0
        fi
    done
    # not found
    IFS="${local_ifs:-$(printf ' \t\n')}"
    return 1
}

B
bellard 已提交
183
# default parameters
P
Paolo Bonzini 已提交
184
source_path=`dirname "$0"`
185
cpu=""
186
iasl="iasl"
187
interp_prefix="/usr/gnemul/qemu-%M"
B
bellard 已提交
188
static="no"
B
bellard 已提交
189
cross_prefix=""
M
malc 已提交
190
audio_drv_list=""
191 192
block_drv_rw_whitelist=""
block_drv_ro_whitelist=""
193
host_cc="cc"
J
Juan Quintela 已提交
194
libs_softmmu=""
J
Juan Quintela 已提交
195
libs_tools=""
196
audio_pt_int=""
197
audio_win_int=""
P
Paolo Bonzini 已提交
198
cc_i386=i386-pc-linux-gnu-gcc
199
libs_qga=""
200
debug_info="yes"
201

202 203
# Don't accept a target_list environment variable.
unset target_list
204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222

# Default value for a variable defining feature "foo".
#  * foo="no"  feature will only be used if --enable-foo arg is given
#  * foo=""    feature will be searched for, and if found, will be used
#              unless --disable-foo is given
#  * foo="yes" this value will only be set by --enable-foo flag.
#              feature will searched for,
#              if not found, configure exits with error
#
# Always add --enable-foo and --disable-foo command line args.
# Distributions want to ensure that several features are compiled in, and it
# is impossible without a --enable-foo that exits if a feature is not found.

bluez=""
brlapi=""
curl=""
curses=""
docs=""
fdt=""
223
netmap="no"
224
pixman=""
225
sdl=""
226
sdlabi="1.2"
227
virtfs=""
J
Jes Sorensen 已提交
228
vnc="yes"
229 230 231 232 233 234 235
sparse="no"
uuid=""
vde=""
vnc_tls=""
vnc_sasl=""
vnc_jpeg=""
vnc_png=""
236
vnc_ws=""
237
xen=""
238
xen_ctrl_version=""
239
xen_pci_passthrough=""
240
linux_aio=""
241
cap_ng=""
242
attr=""
243
libattr=""
244 245
xfs=""

246
vhost_net="no"
247
vhost_scsi="no"
248
kvm="no"
M
Michael R. Hines 已提交
249
rdma=""
250 251 252 253
gprof="no"
debug_tcg="no"
debug="no"
strip_opt="yes"
254
tcg_interpreter="no"
255 256
bigendian="no"
mingw32="no"
B
Blue Swirl 已提交
257 258
gcov="no"
gcov_tool="gcov"
259
EXESUF=""
F
Fam Zheng 已提交
260 261 262
DSOSUF=".so"
LDFLAGS_SHARED="-shared"
modules="no"
263 264
prefix="/usr/local"
mandir="\${prefix}/share/man"
265
datadir="\${prefix}/share"
266
qemu_docdir="\${prefix}/share/doc/qemu"
267
bindir="\${prefix}/bin"
A
Alon Levy 已提交
268
libdir="\${prefix}/lib"
269
libexecdir="\${prefix}/libexec"
270
includedir="\${prefix}/include"
271
sysconfdir="\${prefix}/etc"
L
Luiz Capitulino 已提交
272
local_statedir="\${prefix}/var"
273 274 275 276 277 278 279 280 281 282 283 284 285
confsuffix="/qemu"
slirp="yes"
fmod_lib=""
fmod_inc=""
oss_lib=""
bsd="no"
linux="no"
solaris="no"
profiler="no"
cocoa="no"
softmmu="yes"
linux_user="no"
bsd_user="no"
286
guest_base="yes"
287 288 289 290
uname_release=""
aix="no"
blobs="yes"
pkgversion=""
291
pie=""
292
zero_malloc=""
293
qom_cast_debug="yes"
294 295 296 297
trace_backend="nop"
trace_file="trace"
spice=""
rbd=""
R
Robert Relyea 已提交
298
smartcard_nss=""
G
Gerd Hoffmann 已提交
299
libusb=""
300
usb_redir=""
301
glx=""
A
Alon Levy 已提交
302
zlib="yes"
Q
qiaonuohan 已提交
303 304
lzo="no"
snappy="no"
305
guest_agent=""
306 307 308
guest_agent_with_vss="no"
vss_win32_sdk=""
win_sdk="no"
309
want_tools="yes"
R
Ronnie Sahlberg 已提交
310
libiscsi=""
P
Peter Lieven 已提交
311
libnfs=""
312
coroutine=""
313
coroutine_pool=""
314
seccomp=""
315
glusterfs=""
316
glusterfs_discard="no"
317
glusterfs_zerofill="no"
318
virtio_blk_data_plane=""
A
Anthony Liguori 已提交
319
gtk=""
320
gtkabi="2.0"
S
Stefan Berger 已提交
321
tpm="no"
322
libssh2=""
323
vhdx=""
B
Benoît Canet 已提交
324
quorum="no"
325

326 327 328 329 330 331
# parse CC options first
for opt do
  optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
  case "$opt" in
  --cross-prefix=*) cross_prefix="$optarg"
  ;;
332
  --cc=*) CC="$optarg"
333
  ;;
334 335
  --cxx=*) CXX="$optarg"
  ;;
P
Paolo Bonzini 已提交
336 337
  --source-path=*) source_path="$optarg"
  ;;
338 339
  --cpu=*) cpu="$optarg"
  ;;
J
Juan Quintela 已提交
340
  --extra-cflags=*) QEMU_CFLAGS="$optarg $QEMU_CFLAGS"
341
                    EXTRA_CFLAGS="$optarg"
342 343
  ;;
  --extra-ldflags=*) LDFLAGS="$optarg $LDFLAGS"
344
                     EXTRA_LDFLAGS="$optarg"
345
  ;;
346 347 348 349
  --enable-debug-info) debug_info="yes"
  ;;
  --disable-debug-info) debug_info="no"
  ;;
350 351 352 353
  esac
done
# OS specific
# Using uname is really, really broken.  Once we have the right set of checks
354
# we can eliminate its usage altogether.
355

356 357 358 359 360 361 362 363 364 365
# Preferred compiler:
#  ${CC} (if set)
#  ${cross_prefix}gcc (if cross-prefix specified)
#  system compiler
if test -z "${CC}${cross_prefix}"; then
  cc="$host_cc"
else
  cc="${CC-${cross_prefix}gcc}"
fi

366 367 368 369 370 371
if test -z "${CXX}${cross_prefix}"; then
  cxx="c++"
else
  cxx="${CXX-${cross_prefix}g++}"
fi

372
ar="${AR-${cross_prefix}ar}"
373 374
as="${AS-${cross_prefix}as}"
cpp="${CPP-$cc -E}"
375 376
objcopy="${OBJCOPY-${cross_prefix}objcopy}"
ld="${LD-${cross_prefix}ld}"
B
Brad 已提交
377
libtool="${LIBTOOL-${cross_prefix}libtool}"
378 379
strip="${STRIP-${cross_prefix}strip}"
windres="${WINDRES-${cross_prefix}windres}"
380 381 382 383 384
pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
query_pkg_config() {
    "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
}
pkg_config=query_pkg_config
385
sdl_config="${SDL_CONFIG-${cross_prefix}sdl-config}"
386
sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
387

388 389 390
# If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
ARFLAGS="${ARFLAGS-rv}"

391
# default flags for all hosts
392
QEMU_CFLAGS="-fno-strict-aliasing -fno-common $QEMU_CFLAGS"
393
QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
K
Kevin Wolf 已提交
394
QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
395
QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
396
QEMU_INCLUDES="-I. -I\$(SRC_PATH) -I\$(SRC_PATH)/include"
397 398 399 400
if test "$debug_info" = "yes"; then
    CFLAGS="-g $CFLAGS"
    LDFLAGS="-g $LDFLAGS"
fi
401

P
Paolo Bonzini 已提交
402 403 404
# make source path absolute
source_path=`cd "$source_path"; pwd`

405 406 407
check_define() {
cat > $TMPC <<EOF
#if !defined($1)
408
#error $1 not defined
409 410 411
#endif
int main(void) { return 0; }
EOF
412
  compile_object
413 414
}

415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449
if check_define __linux__ ; then
  targetos="Linux"
elif check_define _WIN32 ; then
  targetos='MINGW32'
elif check_define __OpenBSD__ ; then
  targetos='OpenBSD'
elif check_define __sun__ ; then
  targetos='SunOS'
elif check_define __HAIKU__ ; then
  targetos='Haiku'
else
  targetos=`uname -s`
fi

# Some host OSes need non-standard checks for which CPU to use.
# Note that these checks are broken for cross-compilation: if you're
# cross-compiling to one of these OSes then you'll need to specify
# the correct CPU with the --cpu option.
case $targetos in
Darwin)
  # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
  # run 64-bit userspace code.
  # If the user didn't specify a CPU explicitly and the kernel says this is
  # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
  if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
    cpu="x86_64"
  fi
  ;;
SunOS)
  # `uname -m` returns i86pc even on an x86_64 box, so default based on isainfo
  if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
    cpu="x86_64"
  fi
esac

450 451 452 453
if test ! -z "$cpu" ; then
  # command line argument
  :
elif check_define __i386__ ; then
454 455
  cpu="i386"
elif check_define __x86_64__ ; then
456 457 458 459 460
  if check_define __ILP32__ ; then
    cpu="x32"
  else
    cpu="x86_64"
  fi
B
blueswir1 已提交
461 462 463 464 465 466
elif check_define __sparc__ ; then
  if check_define __arch64__ ; then
    cpu="sparc64"
  else
    cpu="sparc"
  fi
M
malc 已提交
467 468 469 470 471 472
elif check_define _ARCH_PPC ; then
  if check_define _ARCH_PPC64 ; then
    cpu="ppc64"
  else
    cpu="ppc"
  fi
A
Aurelien Jarno 已提交
473 474
elif check_define __mips__ ; then
  cpu="mips"
A
Aurelien Jarno 已提交
475 476
elif check_define __ia64__ ; then
  cpu="ia64"
477 478 479 480 481 482
elif check_define __s390__ ; then
  if check_define __s390x__ ; then
    cpu="s390x"
  else
    cpu="s390"
  fi
483 484
elif check_define __arm__ ; then
  cpu="arm"
485 486
elif check_define __aarch64__ ; then
  cpu="aarch64"
487 488
elif check_define __hppa__ ; then
  cpu="hppa"
489
else
M
malc 已提交
490
  cpu=`uname -m`
491 492
fi

493 494 495
ARCH=
# Normalise host CPU name and set ARCH.
# Note that this case should only have supported host CPUs, not guests.
B
bellard 已提交
496
case "$cpu" in
497
  ia64|ppc|ppc64|s390|s390x|sparc64|x32)
498 499
    cpu="$cpu"
  ;;
B
bellard 已提交
500
  i386|i486|i586|i686|i86pc|BePC)
501
    cpu="i386"
B
bellard 已提交
502
  ;;
A
aurel32 已提交
503 504 505
  x86_64|amd64)
    cpu="x86_64"
  ;;
506 507
  armv*b|armv*l|arm)
    cpu="arm"
B
bellard 已提交
508
  ;;
509 510 511
  aarch64)
    cpu="aarch64"
  ;;
A
Aurelien Jarno 已提交
512 513 514
  mips*)
    cpu="mips"
  ;;
515
  sparc|sun4[cdmuv])
B
bellard 已提交
516 517
    cpu="sparc"
  ;;
B
bellard 已提交
518
  *)
519 520
    # This will result in either an error or falling back to TCI later
    ARCH=unknown
B
bellard 已提交
521 522
  ;;
esac
523 524 525
if test -z "$ARCH"; then
  ARCH="$cpu"
fi
J
Juan Quintela 已提交
526

B
bellard 已提交
527
# OS specific
528

B
bellard 已提交
529
case $targetos in
B
bellard 已提交
530
CYGWIN*)
531
  mingw32="yes"
J
Juan Quintela 已提交
532
  QEMU_CFLAGS="-mno-cygwin $QEMU_CFLAGS"
533 534
  audio_possible_drivers="winwave sdl"
  audio_drv_list="winwave"
B
bellard 已提交
535
;;
B
bellard 已提交
536
MINGW32*)
537
  mingw32="yes"
538 539
  audio_possible_drivers="winwave dsound sdl fmod"
  audio_drv_list="winwave"
B
bellard 已提交
540
;;
T
ths 已提交
541
GNU/kFreeBSD)
A
Aurelien Jarno 已提交
542
  bsd="yes"
543 544
  audio_drv_list="oss"
  audio_possible_drivers="oss sdl esd pa"
T
ths 已提交
545
;;
B
bellard 已提交
546
FreeBSD)
547
  bsd="yes"
548
  make="${MAKE-gmake}"
549 550
  audio_drv_list="oss"
  audio_possible_drivers="oss sdl esd pa"
551 552
  # needed for kinfo_getvmmap(3) in libutil.h
  LIBS="-lutil $LIBS"
553
  netmap=""  # enable netmap autodetect
B
bellard 已提交
554
;;
555
DragonFly)
556
  bsd="yes"
557
  make="${MAKE-gmake}"
558 559
  audio_drv_list="oss"
  audio_possible_drivers="oss sdl esd pa"
560
;;
B
bellard 已提交
561
NetBSD)
562
  bsd="yes"
563
  make="${MAKE-gmake}"
564 565 566
  audio_drv_list="oss"
  audio_possible_drivers="oss sdl esd"
  oss_lib="-lossaudio"
B
bellard 已提交
567 568
;;
OpenBSD)
569
  bsd="yes"
570
  make="${MAKE-gmake}"
B
Brad Smith 已提交
571 572
  audio_drv_list="sdl"
  audio_possible_drivers="sdl esd"
B
bellard 已提交
573
;;
574
Darwin)
575 576
  bsd="yes"
  darwin="yes"
F
Fam Zheng 已提交
577
  LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
578
  if [ "$cpu" = "x86_64" ] ; then
J
Juan Quintela 已提交
579
    QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
580
    LDFLAGS="-arch x86_64 $LDFLAGS"
581 582 583 584 585
  fi
  cocoa="yes"
  audio_drv_list="coreaudio"
  audio_possible_drivers="coreaudio sdl fmod"
  LDFLAGS="-framework CoreFoundation -framework IOKit $LDFLAGS"
586
  libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
587 588 589
  # Disable attempts to use ObjectiveC features in os/object.h since they
  # won't work when we're compiling with gcc as a C compiler.
  QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
590
;;
B
bellard 已提交
591
SunOS)
592
  solaris="yes"
593 594
  make="${MAKE-gmake}"
  install="${INSTALL-ginstall}"
595
  ld="gld"
596
  smbd="${SMBD-/usr/sfw/sbin/smbd}"
597 598 599 600 601 602
  needs_libsunmath="no"
  solarisrev=`uname -r | cut -f2 -d.`
  if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
    if test "$solarisrev" -le 9 ; then
      if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then
        needs_libsunmath="yes"
603 604 605
        QEMU_CFLAGS="-I/opt/SUNWspro/prod/include/cc $QEMU_CFLAGS"
        LDFLAGS="-L/opt/SUNWspro/prod/lib -R/opt/SUNWspro/prod/lib $LDFLAGS"
        LIBS="-lsunmath $LIBS"
606
      else
607 608 609 610
        error_exit "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without" \
            "libsunmath from the Sun Studio compilers tools, due to a lack of" \
            "C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86" \
            "Studio 11 can be downloaded from www.sun.com."
611
      fi
T
ths 已提交
612
    fi
613 614 615 616 617
  fi
  if test -f /usr/include/sys/soundcard.h ; then
    audio_drv_list="oss"
  fi
  audio_possible_drivers="oss sdl"
618 619 620 621
# needed for CMSG_ macros in sys/socket.h
  QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
# needed for TIOCWIN* defines in termios.h
  QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
J
Juan Quintela 已提交
622
  QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
623 624 625
  solarisnetlibs="-lsocket -lnsl -lresolv"
  LIBS="$solarisnetlibs $LIBS"
  libs_qga="$solarisnetlibs $libs_qga"
T
ths 已提交
626
;;
M
malc 已提交
627
AIX)
628
  aix="yes"
629
  make="${MAKE-gmake}"
M
malc 已提交
630
;;
631 632 633 634 635
Haiku)
  haiku="yes"
  QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
  LIBS="-lposix_error_mapper -lnetwork $LIBS"
;;
636
*)
637 638 639 640
  audio_drv_list="oss"
  audio_possible_drivers="oss alsa sdl esd pa"
  linux="yes"
  linux_user="yes"
641 642
  kvm="yes"
  vhost_net="yes"
643
  vhost_scsi="yes"
644
  if [ "$cpu" = "i386" -o "$cpu" = "x86_64" -o "$cpu" = "x32" ] ; then
645
    audio_possible_drivers="$audio_possible_drivers fmod"
646
  fi
647
  QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$(pwd)/linux-headers $QEMU_INCLUDES"
B
bellard 已提交
648
;;
B
bellard 已提交
649 650
esac

B
bellard 已提交
651
if [ "$bsd" = "yes" ] ; then
652
  if [ "$darwin" != "yes" ] ; then
653
    bsd_user="yes"
654
  fi
B
bellard 已提交
655 656
fi

657 658
: ${make=${MAKE-make}}
: ${install=${INSTALL-install}}
659
: ${python=${PYTHON-python}}
660
: ${smbd=${SMBD-/usr/sbin/smbd}}
661

662 663 664 665 666 667 668
# Default objcc to clang if available, otherwise use CC
if has clang; then
  objcc=clang
else
  objcc="$cc"
fi

669 670
if test "$mingw32" = "yes" ; then
  EXESUF=".exe"
F
Fam Zheng 已提交
671
  DSOSUF=".dll"
J
Juan Quintela 已提交
672
  QEMU_CFLAGS="-DWIN32_LEAN_AND_MEAN -DWINVER=0x501 $QEMU_CFLAGS"
673 674
  # enable C99/POSIX format strings (needs mingw32-runtime 3.15 or later)
  QEMU_CFLAGS="-D__USE_MINGW_ANSI_STDIO=1 $QEMU_CFLAGS"
675 676 677 678 679 680 681
  LIBS="-lwinmm -lws2_32 -liphlpapi $LIBS"
cat > $TMPC << EOF
int main(void) { return 0; }
EOF
  if compile_prog "" "-liberty" ; then
    LIBS="-liberty $LIBS"
  fi
682
  prefix="c:/Program Files/QEMU"
683
  mandir="\${prefix}"
684
  datadir="\${prefix}"
685
  qemu_docdir="\${prefix}"
686 687
  bindir="\${prefix}"
  sysconfdir="\${prefix}"
688
  local_statedir=
689
  confsuffix=""
690
  libs_qga="-lws2_32 -lwinmm -lpowrprof $libs_qga"
691 692
fi

693
werror=""
694

B
bellard 已提交
695
for opt do
P
pbrook 已提交
696
  optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
B
bellard 已提交
697
  case "$opt" in
698 699
  --help|-h) show_help=yes
  ;;
M
Mike Frysinger 已提交
700 701
  --version|-V) exec cat $source_path/VERSION
  ;;
702
  --prefix=*) prefix="$optarg"
B
bellard 已提交
703
  ;;
704
  --interp-prefix=*) interp_prefix="$optarg"
B
bellard 已提交
705
  ;;
P
Paolo Bonzini 已提交
706
  --source-path=*)
B
bellard 已提交
707
  ;;
708
  --cross-prefix=*)
B
bellard 已提交
709
  ;;
710
  --cc=*)
B
bellard 已提交
711
  ;;
712
  --host-cc=*) host_cc="$optarg"
B
bellard 已提交
713
  ;;
714 715
  --cxx=*)
  ;;
716 717
  --iasl=*) iasl="$optarg"
  ;;
718 719
  --objcc=*) objcc="$optarg"
  ;;
720
  --make=*) make="$optarg"
B
bellard 已提交
721
  ;;
722 723
  --install=*) install="$optarg"
  ;;
B
Blue Swirl 已提交
724 725
  --python=*) python="$optarg"
  ;;
B
Blue Swirl 已提交
726 727
  --gcov=*) gcov_tool="$optarg"
  ;;
728 729
  --smbd=*) smbd="$optarg"
  ;;
730
  --extra-cflags=*)
B
bellard 已提交
731
  ;;
732
  --extra-ldflags=*)
B
bellard 已提交
733
  ;;
734 735 736 737
  --enable-debug-info)
  ;;
  --disable-debug-info)
  ;;
F
Fam Zheng 已提交
738 739 740
  --enable-modules)
      modules="yes"
  ;;
741
  --cpu=*)
B
bellard 已提交
742
  ;;
743
  --target-list=*) target_list="$optarg"
B
bellard 已提交
744
  ;;
745
  --enable-trace-backend=*) trace_backend="$optarg"
746
  ;;
747
  --with-trace-file=*) trace_file="$optarg"
P
Prerna Saxena 已提交
748
  ;;
B
bellard 已提交
749 750
  --enable-gprof) gprof="yes"
  ;;
B
Blue Swirl 已提交
751 752
  --enable-gcov) gcov="yes"
  ;;
753 754 755
  --static)
    static="yes"
    LDFLAGS="-static $LDFLAGS"
756
    QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
B
bellard 已提交
757
  ;;
758 759 760 761
  --mandir=*) mandir="$optarg"
  ;;
  --bindir=*) bindir="$optarg"
  ;;
A
Alon Levy 已提交
762 763
  --libdir=*) libdir="$optarg"
  ;;
764 765
  --libexecdir=*) libexecdir="$optarg"
  ;;
766 767
  --includedir=*) includedir="$optarg"
  ;;
768
  --datadir=*) datadir="$optarg"
769
  ;;
770 771
  --with-confsuffix=*) confsuffix="$optarg"
  ;;
772
  --docdir=*) qemu_docdir="$optarg"
773
  ;;
774
  --sysconfdir=*) sysconfdir="$optarg"
775
  ;;
L
Luiz Capitulino 已提交
776 777 778
  --localstatedir=*) local_statedir="$optarg"
  ;;
  --sbindir=*|--sharedstatedir=*|\
779 780 781 782 783 784 785
  --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
  --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
    # These switches are silently ignored, for compatibility with
    # autoconf-generated configure scripts. This allows QEMU's
    # configure to be used by RPM and similar macros that set
    # lots of directory switches by default.
  ;;
786 787 788 789
  --with-system-pixman) pixman="system"
  ;;
  --without-system-pixman) pixman="internal"
  ;;
790 791
  --without-pixman) pixman="none"
  ;;
792 793
  --disable-sdl) sdl="no"
  ;;
794 795
  --enable-sdl) sdl="yes"
  ;;
796 797
  --with-sdlabi=*) sdlabi="$optarg"
  ;;
798 799 800 801
  --disable-qom-cast-debug) qom_cast_debug="no"
  ;;
  --enable-qom-cast-debug) qom_cast_debug="yes"
  ;;
802 803 804 805
  --disable-virtfs) virtfs="no"
  ;;
  --enable-virtfs) virtfs="yes"
  ;;
J
Jes Sorensen 已提交
806 807 808 809
  --disable-vnc) vnc="no"
  ;;
  --enable-vnc) vnc="yes"
  ;;
M
malc 已提交
810
  --fmod-lib=*) fmod_lib="$optarg"
811
  ;;
812 813
  --fmod-inc=*) fmod_inc="$optarg"
  ;;
B
blueswir1 已提交
814 815
  --oss-lib=*) oss_lib="$optarg"
  ;;
M
malc 已提交
816
  --audio-drv-list=*) audio_drv_list="$optarg"
B
bellard 已提交
817
  ;;
818 819 820
  --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=`echo "$optarg" | sed -e 's/,/ /g'`
  ;;
  --block-drv-ro-whitelist=*) block_drv_ro_whitelist=`echo "$optarg" | sed -e 's/,/ /g'`
821
  ;;
822 823 824 825
  --enable-debug-tcg) debug_tcg="yes"
  ;;
  --disable-debug-tcg) debug_tcg="no"
  ;;
P
Paul Brook 已提交
826 827 828 829 830 831
  --enable-debug)
      # Enable debugging options that aren't excessively noisy
      debug_tcg="yes"
      debug="yes"
      strip_opt="no"
  ;;
832 833 834 835
  --enable-sparse) sparse="yes"
  ;;
  --disable-sparse) sparse="no"
  ;;
836 837
  --disable-strip) strip_opt="no"
  ;;
838 839
  --disable-vnc-tls) vnc_tls="no"
  ;;
840 841
  --enable-vnc-tls) vnc_tls="yes"
  ;;
842 843
  --disable-vnc-sasl) vnc_sasl="no"
  ;;
844 845
  --enable-vnc-sasl) vnc_sasl="yes"
  ;;
846 847 848 849
  --disable-vnc-jpeg) vnc_jpeg="no"
  ;;
  --enable-vnc-jpeg) vnc_jpeg="yes"
  ;;
C
Corentin Chary 已提交
850 851 852 853
  --disable-vnc-png) vnc_png="no"
  ;;
  --enable-vnc-png) vnc_png="yes"
  ;;
854 855 856 857
  --disable-vnc-ws) vnc_ws="no"
  ;;
  --enable-vnc-ws) vnc_ws="yes"
  ;;
B
bellard 已提交
858
  --disable-slirp) slirp="no"
859
  ;;
860 861 862 863
  --disable-uuid) uuid="no"
  ;;
  --enable-uuid) uuid="yes"
  ;;
864
  --disable-vde) vde="no"
865
  ;;
866 867
  --enable-vde) vde="yes"
  ;;
868 869 870 871
  --disable-netmap) netmap="no"
  ;;
  --enable-netmap) netmap="yes"
  ;;
872 873
  --disable-xen) xen="no"
  ;;
874 875
  --enable-xen) xen="yes"
  ;;
876 877 878 879
  --disable-xen-pci-passthrough) xen_pci_passthrough="no"
  ;;
  --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
  ;;
A
aurel32 已提交
880 881
  --disable-brlapi) brlapi="no"
  ;;
882 883
  --enable-brlapi) brlapi="yes"
  ;;
B
balrog 已提交
884 885
  --disable-bluez) bluez="no"
  ;;
886 887
  --enable-bluez) bluez="yes"
  ;;
A
aliguori 已提交
888 889
  --disable-kvm) kvm="no"
  ;;
890 891
  --enable-kvm) kvm="yes"
  ;;
892 893 894 895
  --disable-tcg-interpreter) tcg_interpreter="no"
  ;;
  --enable-tcg-interpreter) tcg_interpreter="yes"
  ;;
896 897 898 899
  --disable-cap-ng)  cap_ng="no"
  ;;
  --enable-cap-ng) cap_ng="yes"
  ;;
900 901 902 903
  --disable-spice) spice="no"
  ;;
  --enable-spice) spice="yes"
  ;;
R
Ronnie Sahlberg 已提交
904 905 906 907
  --disable-libiscsi) libiscsi="no"
  ;;
  --enable-libiscsi) libiscsi="yes"
  ;;
P
Peter Lieven 已提交
908 909 910 911
  --disable-libnfs) libnfs="no"
  ;;
  --enable-libnfs) libnfs="yes"
  ;;
912 913
  --enable-profiler) profiler="yes"
  ;;
914 915
  --disable-cocoa) cocoa="no"
  ;;
916 917 918 919
  --enable-cocoa)
      cocoa="yes" ;
      sdl="no" ;
      audio_drv_list="coreaudio `echo $audio_drv_list | sed s,coreaudio,,g`"
920
  ;;
P
pbrook 已提交
921
  --disable-system) softmmu="no"
922
  ;;
P
pbrook 已提交
923
  --enable-system) softmmu="yes"
924
  ;;
925 926 927 928 929
  --disable-user)
      linux_user="no" ;
      bsd_user="no" ;
  ;;
  --enable-user) ;;
930
  --disable-linux-user) linux_user="no"
931
  ;;
932 933
  --enable-linux-user) linux_user="yes"
  ;;
B
blueswir1 已提交
934 935 936 937
  --disable-bsd-user) bsd_user="no"
  ;;
  --enable-bsd-user) bsd_user="yes"
  ;;
P
Paul Brook 已提交
938 939 940 941
  --enable-guest-base) guest_base="yes"
  ;;
  --disable-guest-base) guest_base="no"
  ;;
942
  --enable-pie) pie="yes"
943
  ;;
944
  --disable-pie) pie="no"
945
  ;;
946 947
  --enable-uname-release=*) uname_release="$optarg"
  ;;
948 949 950 951
  --enable-werror) werror="yes"
  ;;
  --disable-werror) werror="no"
  ;;
B
balrog 已提交
952 953
  --disable-curses) curses="no"
  ;;
954 955
  --enable-curses) curses="yes"
  ;;
A
Alexander Graf 已提交
956 957
  --disable-curl) curl="no"
  ;;
958 959
  --enable-curl) curl="yes"
  ;;
960 961 962 963
  --disable-fdt) fdt="no"
  ;;
  --enable-fdt) fdt="yes"
  ;;
964 965 966 967
  --disable-linux-aio) linux_aio="no"
  ;;
  --enable-linux-aio) linux_aio="yes"
  ;;
968 969 970 971
  --disable-attr) attr="no"
  ;;
  --enable-attr) attr="yes"
  ;;
T
ths 已提交
972 973
  --disable-blobs) blobs="no"
  ;;
P
pbrook 已提交
974 975
  --with-pkgversion=*) pkgversion=" ($optarg)"
  ;;
976 977
  --with-coroutine=*) coroutine="$optarg"
  ;;
978 979 980 981
  --disable-coroutine-pool) coroutine_pool="no"
  ;;
  --enable-coroutine-pool) coroutine_pool="yes"
  ;;
J
Juan Quintela 已提交
982
  --disable-docs) docs="no"
983
  ;;
J
Juan Quintela 已提交
984
  --enable-docs) docs="yes"
985
  ;;
M
Michael S. Tsirkin 已提交
986 987 988 989
  --disable-vhost-net) vhost_net="no"
  ;;
  --enable-vhost-net) vhost_net="yes"
  ;;
990 991 992 993
  --disable-vhost-scsi) vhost_scsi="no"
  ;;
  --enable-vhost-scsi) vhost_scsi="yes"
  ;;
994
  --disable-glx) glx="no"
M
Michael Walle 已提交
995
  ;;
996
  --enable-glx) glx="yes"
M
Michael Walle 已提交
997
  ;;
998 999 1000 1001
  --disable-rbd) rbd="no"
  ;;
  --enable-rbd) rbd="yes"
  ;;
1002 1003 1004 1005
  --disable-xfsctl) xfs="no"
  ;;
  --enable-xfsctl) xfs="yes"
  ;;
R
Robert Relyea 已提交
1006 1007 1008 1009
  --disable-smartcard-nss) smartcard_nss="no"
  ;;
  --enable-smartcard-nss) smartcard_nss="yes"
  ;;
G
Gerd Hoffmann 已提交
1010 1011 1012 1013
  --disable-libusb) libusb="no"
  ;;
  --enable-libusb) libusb="yes"
  ;;
1014 1015 1016 1017
  --disable-usb-redir) usb_redir="no"
  ;;
  --enable-usb-redir) usb_redir="yes"
  ;;
A
Alon Levy 已提交
1018 1019
  --disable-zlib-test) zlib="no"
  ;;
Q
qiaonuohan 已提交
1020 1021 1022 1023
  --enable-lzo) lzo="yes"
  ;;
  --enable-snappy) snappy="yes"
  ;;
1024 1025 1026 1027
  --enable-guest-agent) guest_agent="yes"
  ;;
  --disable-guest-agent) guest_agent="no"
  ;;
1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039
  --with-vss-sdk) vss_win32_sdk=""
  ;;
  --with-vss-sdk=*) vss_win32_sdk="$optarg"
  ;;
  --without-vss-sdk) vss_win32_sdk="no"
  ;;
  --with-win-sdk) win_sdk=""
  ;;
  --with-win-sdk=*) win_sdk="$optarg"
  ;;
  --without-win-sdk) win_sdk="no"
  ;;
1040 1041 1042 1043
  --enable-tools) want_tools="yes"
  ;;
  --disable-tools) want_tools="no"
  ;;
1044 1045 1046 1047
  --enable-seccomp) seccomp="yes"
  ;;
  --disable-seccomp) seccomp="no"
  ;;
1048 1049 1050 1051
  --disable-glusterfs) glusterfs="no"
  ;;
  --enable-glusterfs) glusterfs="yes"
  ;;
1052 1053 1054 1055
  --disable-virtio-blk-data-plane) virtio_blk_data_plane="no"
  ;;
  --enable-virtio-blk-data-plane) virtio_blk_data_plane="yes"
  ;;
A
Anthony Liguori 已提交
1056 1057 1058 1059
  --disable-gtk) gtk="no"
  ;;
  --enable-gtk) gtk="yes"
  ;;
M
Michael R. Hines 已提交
1060 1061 1062 1063
  --enable-rdma) rdma="yes"
  ;;
  --disable-rdma) rdma="no"
  ;;
1064 1065
  --with-gtkabi=*) gtkabi="$optarg"
  ;;
S
Stefan Berger 已提交
1066 1067
  --enable-tpm) tpm="yes"
  ;;
1068 1069 1070 1071
  --disable-libssh2) libssh2="no"
  ;;
  --enable-libssh2) libssh2="yes"
  ;;
1072 1073 1074 1075
  --enable-vhdx) vhdx="yes"
  ;;
  --disable-vhdx) vhdx="no"
  ;;
B
Benoît Canet 已提交
1076 1077 1078 1079
  --disable-quorum) quorum="no"
  ;;
  --enable-quorum) quorum="yes"
  ;;
1080 1081
  *) echo "ERROR: unknown option $opt"; show_help="yes"
  ;;
B
bellard 已提交
1082 1083 1084
  esac
done

1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103
if ! has $python; then
  error_exit "Python not found. Use --python=/path/to/python"
fi

# Note that if the Python conditional here evaluates True we will exit
# with status 1 which is a shell 'false' value.
if ! $python -c 'import sys; sys.exit(sys.version_info < (2,4) or sys.version_info >= (3,))'; then
  error_exit "Cannot use '$python', Python 2.4 or later is required." \
      "Note that Python 3 or later is not yet supported." \
      "Use --python=/path/to/python to specify a supported Python."
fi

# The -B switch was added in Python 2.6.
# If it is supplied, compiled files are not written.
# Use it for Python versions which support it.
if $python -B -c 'import sys; sys.exit(0)' 2>/dev/null; then
  python="$python -B"
fi

1104
case "$cpu" in
1105 1106 1107 1108 1109 1110 1111 1112
    ppc)
           CPU_CFLAGS="-m32"
           LDFLAGS="-m32 $LDFLAGS"
           ;;
    ppc64)
           CPU_CFLAGS="-m64"
           LDFLAGS="-m64 $LDFLAGS"
           ;;
1113
    sparc)
1114
           LDFLAGS="-m32 $LDFLAGS"
1115
           CPU_CFLAGS="-m32 -mcpu=ultrasparc"
1116
           ;;
1117 1118
    sparc64)
           LDFLAGS="-m64 $LDFLAGS"
1119
           CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1120
           ;;
1121
    s390)
1122
           CPU_CFLAGS="-m31 -march=z990"
1123 1124 1125
           LDFLAGS="-m31 $LDFLAGS"
           ;;
    s390x)
1126
           CPU_CFLAGS="-m64 -march=z990"
1127
           LDFLAGS="-m64 $LDFLAGS"
1128
           ;;
1129
    i386)
1130
           CPU_CFLAGS="-m32"
1131
           LDFLAGS="-m32 $LDFLAGS"
P
Paolo Bonzini 已提交
1132
           cc_i386='$(CC) -m32'
1133 1134
           ;;
    x86_64)
1135
           CPU_CFLAGS="-m64"
1136
           LDFLAGS="-m64 $LDFLAGS"
P
Paolo Bonzini 已提交
1137
           cc_i386='$(CC) -m32'
1138
           ;;
1139 1140 1141 1142 1143
    x32)
           CPU_CFLAGS="-mx32"
           LDFLAGS="-mx32 $LDFLAGS"
           cc_i386='$(CC) -m32'
           ;;
1144
    # No special flags required for other host CPUs
1145 1146
esac

1147 1148 1149
QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
EXTRA_CFLAGS="$CPU_CFLAGS $EXTRA_CFLAGS"

1150 1151
default_target_list=""

1152 1153 1154 1155
mak_wilds=""

if [ "$softmmu" = "yes" ]; then
    mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1156
fi
1157 1158
if [ "$linux_user" = "yes" ]; then
    mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1159
fi
1160 1161
if [ "$bsd_user" = "yes" ]; then
    mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1162 1163
fi

1164 1165 1166 1167
for config in $mak_wilds; do
    default_target_list="${default_target_list} $(basename "$config" .mak)"
done

1168 1169 1170 1171 1172 1173
if test x"$show_help" = x"yes" ; then
cat << EOF

Usage: configure [options]
Options: [defaults in brackets after descriptions]

1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205
Standard options:
  --help                   print this message
  --prefix=PREFIX          install in PREFIX [$prefix]
  --interp-prefix=PREFIX   where to find shared libraries, etc.
                           use %M for cpu name [$interp_prefix]
  --target-list=LIST       set target list (default: build everything)
$(echo Available targets: $default_target_list | \
  fold -s -w 53 | sed -e 's/^/                           /')

Advanced options (experts only):
  --source-path=PATH       path of source code [$source_path]
  --cross-prefix=PREFIX    use PREFIX for compile tools [$cross_prefix]
  --cc=CC                  use C compiler CC [$cc]
  --iasl=IASL              use ACPI compiler IASL [$iasl]
  --host-cc=CC             use C compiler CC [$host_cc] for code run at
                           build time
  --cxx=CXX                use C++ compiler CXX [$cxx]
  --objcc=OBJCC            use Objective-C compiler OBJCC [$objcc]
  --extra-cflags=CFLAGS    append extra C compiler flags QEMU_CFLAGS
  --extra-ldflags=LDFLAGS  append extra linker flags LDFLAGS
  --make=MAKE              use specified make [$make]
  --install=INSTALL        use specified install [$install]
  --python=PYTHON          use specified python [$python]
  --smbd=SMBD              use specified smbd [$smbd]
  --static                 enable static build [$static]
  --mandir=PATH            install man pages in PATH
  --datadir=PATH           install firmware in PATH$confsuffix
  --docdir=PATH            install documentation in PATH$confsuffix
  --bindir=PATH            install binaries in PATH
  --libdir=PATH            install libraries in PATH
  --sysconfdir=PATH        install config in PATH$confsuffix
  --localstatedir=PATH     install local state in PATH (set at runtime on win32)
F
Fam Zheng 已提交
1206
  --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
F
Fam Zheng 已提交
1207
  --enable-modules         enable modules support
1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 1218
  --enable-debug-tcg       enable TCG debugging
  --disable-debug-tcg      disable TCG debugging (default)
  --enable-debug-info       enable debugging information (default)
  --disable-debug-info      disable debugging information
  --enable-debug           enable common debug build options
  --enable-sparse          enable sparse checker
  --disable-sparse         disable sparse checker (default)
  --disable-strip          disable stripping binaries
  --disable-werror         disable compilation abort on warning
  --disable-sdl            disable SDL
  --enable-sdl             enable SDL
1219
  --with-sdlabi            select preferred SDL ABI 1.2 or 2.0
1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242 1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260 1261 1262 1263 1264 1265 1266 1267 1268 1269 1270 1271 1272 1273 1274 1275 1276 1277 1278 1279 1280 1281 1282 1283 1284 1285 1286 1287 1288 1289 1290 1291 1292 1293 1294 1295 1296 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310
  --disable-gtk            disable gtk UI
  --enable-gtk             enable gtk UI
  --disable-virtfs         disable VirtFS
  --enable-virtfs          enable VirtFS
  --disable-vnc            disable VNC
  --enable-vnc             enable VNC
  --disable-cocoa          disable Cocoa (Mac OS X only)
  --enable-cocoa           enable Cocoa (default on Mac OS X)
  --audio-drv-list=LIST    set audio drivers list:
                           Available drivers: $audio_possible_drivers
  --block-drv-whitelist=L  Same as --block-drv-rw-whitelist=L
  --block-drv-rw-whitelist=L
                           set block driver read-write whitelist
                           (affects only QEMU, not qemu-img)
  --block-drv-ro-whitelist=L
                           set block driver read-only whitelist
                           (affects only QEMU, not qemu-img)
  --disable-xen            disable xen backend driver support
  --enable-xen             enable xen backend driver support
  --disable-xen-pci-passthrough
  --enable-xen-pci-passthrough
  --disable-brlapi         disable BrlAPI
  --enable-brlapi          enable BrlAPI
  --disable-vnc-tls        disable TLS encryption for VNC server
  --enable-vnc-tls         enable TLS encryption for VNC server
  --disable-vnc-sasl       disable SASL encryption for VNC server
  --enable-vnc-sasl        enable SASL encryption for VNC server
  --disable-vnc-jpeg       disable JPEG lossy compression for VNC server
  --enable-vnc-jpeg        enable JPEG lossy compression for VNC server
  --disable-vnc-png        disable PNG compression for VNC server (default)
  --enable-vnc-png         enable PNG compression for VNC server
  --disable-vnc-ws         disable Websockets support for VNC server
  --enable-vnc-ws          enable Websockets support for VNC server
  --disable-curses         disable curses output
  --enable-curses          enable curses output
  --disable-curl           disable curl connectivity
  --enable-curl            enable curl connectivity
  --disable-fdt            disable fdt device tree
  --enable-fdt             enable fdt device tree
  --disable-bluez          disable bluez stack connectivity
  --enable-bluez           enable bluez stack connectivity
  --disable-slirp          disable SLIRP userspace network connectivity
  --disable-kvm            disable KVM acceleration support
  --enable-kvm             enable KVM acceleration support
  --disable-rdma           disable RDMA-based migration support
  --enable-rdma            enable RDMA-based migration support
  --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
  --enable-system          enable all system emulation targets
  --disable-system         disable all system emulation targets
  --enable-user            enable supported user emulation targets
  --disable-user           disable all user emulation targets
  --enable-linux-user      enable all linux usermode emulation targets
  --disable-linux-user     disable all linux usermode emulation targets
  --enable-bsd-user        enable all BSD usermode emulation targets
  --disable-bsd-user       disable all BSD usermode emulation targets
  --enable-guest-base      enable GUEST_BASE support for usermode
                           emulation targets
  --disable-guest-base     disable GUEST_BASE support
  --enable-pie             build Position Independent Executables
  --disable-pie            do not build Position Independent Executables
  --fmod-lib               path to FMOD library
  --fmod-inc               path to FMOD includes
  --oss-lib                path to OSS library
  --enable-uname-release=R Return R for uname -r in usermode emulation
  --cpu=CPU                Build for host CPU [$cpu]
  --disable-uuid           disable uuid support
  --enable-uuid            enable uuid support
  --disable-vde            disable support for vde network
  --enable-vde             enable support for vde network
  --disable-netmap         disable support for netmap network
  --enable-netmap          enable support for netmap network
  --disable-linux-aio      disable Linux AIO support
  --enable-linux-aio       enable Linux AIO support
  --disable-cap-ng         disable libcap-ng support
  --enable-cap-ng          enable libcap-ng support
  --disable-attr           disables attr and xattr support
  --enable-attr            enable attr and xattr support
  --disable-blobs          disable installing provided firmware blobs
  --enable-docs            enable documentation build
  --disable-docs           disable documentation build
  --disable-vhost-net      disable vhost-net acceleration support
  --enable-vhost-net       enable vhost-net acceleration support
  --enable-trace-backend=B Set trace backend
                           Available backends: $($python $source_path/scripts/tracetool.py --list-backends)
  --with-trace-file=NAME   Full PATH,NAME of file to store traces
                           Default:trace-<pid>
  --disable-spice          disable spice
  --enable-spice           enable spice
  --enable-rbd             enable building the rados block device (rbd)
  --disable-libiscsi       disable iscsi support
  --enable-libiscsi        enable iscsi support
P
Peter Lieven 已提交
1311 1312
  --disable-libnfs         disable nfs support
  --enable-libnfs          enable nfs support
1313 1314 1315 1316 1317 1318
  --disable-smartcard-nss  disable smartcard nss support
  --enable-smartcard-nss   enable smartcard nss support
  --disable-libusb         disable libusb (for usb passthrough)
  --enable-libusb          enable libusb (for usb passthrough)
  --disable-usb-redir      disable usb network redirection support
  --enable-usb-redir       enable usb network redirection support
Q
qiaonuohan 已提交
1319 1320
  --enable-lzo             enable the support of lzo compression library
  --enable-snappy          enable the support of snappy compression library
1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339
  --disable-guest-agent    disable building of the QEMU Guest Agent
  --enable-guest-agent     enable building of the QEMU Guest Agent
  --with-vss-sdk=SDK-path  enable Windows VSS support in QEMU Guest Agent
  --with-win-sdk=SDK-path  path to Windows Platform SDK (to build VSS .tlb)
  --disable-seccomp        disable seccomp support
  --enable-seccomp         enables seccomp support
  --with-coroutine=BACKEND coroutine backend. Supported options:
                           gthread, ucontext, sigaltstack, windows
  --disable-coroutine-pool disable coroutine freelist (worse performance)
  --enable-coroutine-pool  enable coroutine freelist (better performance)
  --enable-glusterfs       enable GlusterFS backend
  --disable-glusterfs      disable GlusterFS backend
  --enable-gcov            enable test coverage analysis with gcov
  --gcov=GCOV              use specified gcov [$gcov_tool]
  --enable-tpm             enable TPM support
  --disable-libssh2        disable ssh block device support
  --enable-libssh2         enable ssh block device support
  --disable-vhdx           disables support for the Microsoft VHDX image format
  --enable-vhdx            enable support for the Microsoft VHDX image format
B
Benoît Canet 已提交
1340 1341
  --disable-quorum         disable quorum block filter support
  --enable-quorum          enable quorum block filter support
1342 1343

NOTE: The object files are built at the place where configure is launched
1344 1345 1346 1347
EOF
exit 1
fi

1348 1349 1350 1351 1352 1353 1354
# Now we have handled --enable-tcg-interpreter and know we're not just
# printing the help message, bail out if the host CPU isn't supported.
if test "$ARCH" = "unknown"; then
    if test "$tcg_interpreter" = "yes" ; then
        echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
        ARCH=tci
    else
1355
        error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1356 1357 1358
    fi
fi

1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371
# Consult white-list to determine whether to enable werror
# by default.  Only enable by default for git builds
z_version=`cut -f3 -d. $source_path/VERSION`

if test -z "$werror" ; then
    if test -d "$source_path/.git" -a \
        "$linux" = "yes" ; then
        werror="yes"
    else
        werror="no"
    fi
fi

1372 1373
# check that the C compiler works.
cat > $TMPC <<EOF
1374
int main(void) { return 0; }
1375 1376 1377 1378 1379
EOF

if compile_object ; then
  : C compiler works ok
else
1380
    error_exit "\"$cc\" either does not exist or does not work"
1381 1382
fi

1383 1384 1385 1386 1387 1388 1389 1390 1391
# Check that the C++ compiler exists and works with the C compiler
if has $cxx; then
    cat > $TMPC <<EOF
int c_function(void);
int main(void) { return c_function(); }
EOF

    compile_object

1392
    cat > $TMPCXX <<EOF
1393 1394 1395 1396 1397 1398
extern "C" {
   int c_function(void);
}
int c_function(void) { return 42; }
EOF

1399 1400 1401
    update_cxxflags

    if do_cxx $QEMU_CXXFLAGS -o $TMPE $TMPCXX $TMPO $LDFLAGS; then
1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413
        # C++ compiler $cxx works ok with C compiler $cc
        :
    else
        echo "C++ compiler $cxx does not work with C compiler $cc"
        echo "Disabling C++ specific optional code"
        cxx=
    fi
else
    echo "No C++ compiler available; disabling C++ specific optional code"
    cxx=
fi

1414 1415 1416
gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
gcc_flags="-Wmissing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1417
gcc_flags="-Wendif-labels $gcc_flags"
1418
gcc_flags="-Wno-initializer-overrides $gcc_flags"
1419
gcc_flags="-Wno-string-plus-int $gcc_flags"
1420 1421 1422 1423
# Note that we do not add -Werror to gcc_flags here, because that would
# enable it for all configure tests. If a configure test failed due
# to -Werror this would just silently disable some features,
# so it's too error prone.
1424 1425 1426 1427
cat > $TMPC << EOF
int main(void) { return 0; }
EOF
for flag in $gcc_flags; do
1428 1429 1430 1431 1432
    # Use the positive sense of the flag when testing for -Wno-wombat
    # support (gcc will happily accept the -Wno- form of unknown
    # warning options).
    optflag="$(echo $flag | sed -e 's/^-Wno-/-W/')"
    if compile_prog "-Werror $optflag" "" ; then
1433 1434 1435 1436
	QEMU_CFLAGS="$QEMU_CFLAGS $flag"
    fi
done

1437 1438 1439 1440 1441
if compile_prog "-Werror -fstack-protector-all" "" ; then
    QEMU_CFLAGS="$QEMU_CFLAGS -fstack-protector-all"
    LIBTOOLFLAGS="$LIBTOOLFLAGS -Wc,-fstack-protector-all"
fi

1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456
# Workaround for http://gcc.gnu.org/PR55489.  Happens with -fPIE/-fPIC and
# large functions that use global variables.  The bug is in all releases of
# GCC, but it became particularly acute in 4.6.x and 4.7.x.  It is fixed in
# 4.7.3 and 4.8.0.  We should be able to delete this at the end of 2013.
cat > $TMPC << EOF
#if __GNUC__ == 4 && (__GNUC_MINOR__ == 6 || (__GNUC_MINOR__ == 7 && __GNUC_PATCHLEVEL__ <= 2))
int main(void) { return 0; }
#else
#error No bug in this compiler.
#endif
EOF
if compile_prog "-Werror -fno-gcse" "" ; then
  TRANSLATE_OPT_CFLAGS=-fno-gcse
fi

1457
if test "$static" = "yes" ; then
1458 1459 1460
  if test "$modules" = "yes" ; then
    error_exit "static and modules are mutually incompatible"
  fi
1461
  if test "$pie" = "yes" ; then
1462
    error_exit "static and pie are mutually incompatible"
1463 1464 1465 1466 1467 1468 1469
  else
    pie="no"
  fi
fi

if test "$pie" = ""; then
  case "$cpu-$targetos" in
1470
    i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
1471 1472 1473 1474 1475 1476 1477 1478 1479
      ;;
    *)
      pie="no"
      ;;
  esac
fi

if test "$pie" != "no" ; then
  cat > $TMPC << EOF
1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490

#ifdef __linux__
#  define THREAD __thread
#else
#  define THREAD
#endif

static THREAD int tls_var;

int main(void) { return tls_var; }

1491 1492 1493 1494 1495 1496 1497 1498 1499 1500
EOF
  if compile_prog "-fPIE -DPIE" "-pie"; then
    QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
    LDFLAGS="-pie $LDFLAGS"
    pie="yes"
    if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
      LDFLAGS="-Wl,-z,relro -Wl,-z,now $LDFLAGS"
    fi
  else
    if test "$pie" = "yes"; then
1501
      error_exit "PIE not available due to missing toolchain support"
1502 1503 1504 1505 1506
    else
      echo "Disabling PIE due to missing toolchain support"
      pie="no"
    fi
  fi
B
Brad 已提交
1507 1508 1509 1510 1511

  if compile_prog "-fno-pie" "-nopie"; then
    CFLAGS_NOPIE="-fno-pie"
    LDFLAGS_NOPIE="-nopie"
  fi
1512 1513
fi

1514 1515 1516 1517 1518 1519 1520 1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531 1532 1533 1534 1535 1536 1537 1538 1539
# check for broken gcc and libtool in RHEL5
if test -n "$libtool" -a "$pie" != "no" ; then
  cat > $TMPC <<EOF

void *f(unsigned char *buf, int len);
void *g(unsigned char *buf, int len);

void *
f(unsigned char *buf, int len)
{
    return (void*)0L;
}

void *
g(unsigned char *buf, int len)
{
    return f(buf, len);
}

EOF
  if ! libtool_prog; then
    echo "Disabling libtool due to broken toolchain support"
    libtool=
  fi
fi

P
Paolo Bonzini 已提交
1540 1541 1542 1543 1544 1545 1546 1547 1548 1549 1550 1551 1552 1553 1554
##########################################
# __sync_fetch_and_and requires at least -march=i486. Many toolchains
# use i686 as default anyway, but for those that don't, an explicit
# specification is necessary

if test "$cpu" = "i386"; then
  cat > $TMPC << EOF
static int sfaa(int *ptr)
{
  return __sync_fetch_and_and(ptr, 0);
}

int main(void)
{
  int val = 42;
1555
  val = __sync_val_compare_and_swap(&val, 0, 1);
P
Paolo Bonzini 已提交
1556 1557 1558 1559 1560 1561 1562 1563 1564 1565
  sfaa(&val);
  return val;
}
EOF
  if ! compile_prog "" "" ; then
    QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
  fi
fi

#########################################
B
bellard 已提交
1566
# Solaris specific configure tool chain decisions
P
Paolo Bonzini 已提交
1567

B
bellard 已提交
1568
if test "$solaris" = "yes" ; then
1569 1570 1571
  if has $install; then
    :
  else
1572 1573 1574
    error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
        "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
        "to get ginstall which is used by default (which lives in /opt/csw/bin)"
B
bellard 已提交
1575
  fi
1576
  if test "`path_of $install`" = "/usr/sbin/install" ; then
1577 1578 1579
    error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
        "try ginstall from the GNU fileutils available from www.blastwave.org" \
        "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
B
bellard 已提交
1580
  fi
1581 1582 1583
  if has ar; then
    :
  else
B
bellard 已提交
1584
    if test -f /usr/ccs/bin/ar ; then
1585 1586
      error_exit "No path includes ar" \
          "Add /usr/ccs/bin to your path and rerun configure"
B
bellard 已提交
1587
    fi
1588
    error_exit "No path includes ar"
B
bellard 已提交
1589
  fi
1590
fi
B
bellard 已提交
1591

1592
if test -z "${target_list+xxx}" ; then
1593 1594 1595 1596
    target_list="$default_target_list"
else
    target_list=`echo "$target_list" | sed -e 's/,/ /g'`
fi
1597 1598 1599 1600 1601 1602 1603 1604 1605 1606 1607 1608 1609

# Check that we recognised the target name; this allows a more
# friendly error message than if we let it fall through.
for target in $target_list; do
    case " $default_target_list " in
        *" $target "*)
            ;;
        *)
            error_exit "Unknown target name '$target'"
            ;;
    esac
done

P
Paolo Bonzini 已提交
1610 1611 1612 1613 1614 1615 1616
# see if system emulation was really requested
case " $target_list " in
  *"-softmmu "*) softmmu=yes
  ;;
  *) softmmu=no
  ;;
esac
B
bellard 已提交
1617

1618 1619
feature_not_found() {
  feature=$1
1620
  remedy=$2
1621

1622
  error_exit "User requested feature $feature" \
1623 1624
      "configure was not able to find it." \
      "$remedy"
1625 1626
}

B
bellard 已提交
1627 1628 1629
# ---
# big/little endian test
cat > $TMPC << EOF
1630 1631 1632 1633 1634
short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
extern int foo(short *, short *);
int main(int argc, char *argv[]) {
    return foo(big_endian, little_endian);
B
bellard 已提交
1635 1636 1637
}
EOF

1638 1639 1640 1641 1642 1643 1644
if compile_object ; then
    if grep -q BiGeNdIaN $TMPO ; then
        bigendian="yes"
    elif grep -q LiTtLeEnDiAn $TMPO ; then
        bigendian="no"
    else
        echo big/little test failed
1645
    fi
1646 1647
else
    echo big/little test failed
B
bellard 已提交
1648 1649
fi

S
Stefan Weil 已提交
1650 1651 1652 1653
##########################################
# pkg-config probe

if ! has "$pkg_config_exe"; then
1654
  error_exit "pkg-config binary '$pkg_config_exe' not found"
S
Stefan Weil 已提交
1655 1656
fi

1657 1658 1659
##########################################
# NPTL probe

1660
if test "$linux_user" = "yes"; then
1661
  cat > $TMPC <<EOF
1662
#include <sched.h>
P
pbrook 已提交
1663
#include <linux/futex.h>
1664
int main(void) {
1665 1666 1667
#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
#error bork
#endif
1668
  return 0;
1669 1670
}
EOF
1671
  if ! compile_object ; then
1672
    feature_not_found "nptl" "Install glibc and linux kernel headers."
1673
  fi
1674 1675
fi

1676 1677 1678
##########################################
# zlib check

A
Alon Levy 已提交
1679 1680
if test "$zlib" != "no" ; then
    cat > $TMPC << EOF
1681 1682 1683
#include <zlib.h>
int main(void) { zlibVersion(); return 0; }
EOF
A
Alon Levy 已提交
1684 1685 1686
    if compile_prog "" "-lz" ; then
        :
    else
1687 1688
        error_exit "zlib check failed" \
            "Make sure to have the zlib libs and headers installed."
A
Alon Levy 已提交
1689
    fi
1690
fi
1691
LIBS="$LIBS -lz"
1692

Q
qiaonuohan 已提交
1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728
##########################################
# lzo check

if test "$lzo" != "no" ; then
    cat > $TMPC << EOF
#include <lzo/lzo1x.h>
int main(void) { lzo_version(); return 0; }
EOF
    if compile_prog "" "-llzo2" ; then
        :
    else
        error_exit "lzo check failed" \
            "Make sure to have the lzo libs and headers installed."
    fi

    libs_softmmu="$libs_softmmu -llzo2"
fi

##########################################
# snappy check

if test "$snappy" != "no" ; then
    cat > $TMPC << EOF
#include <snappy-c.h>
int main(void) { snappy_max_compressed_length(4096); return 0; }
EOF
    if compile_prog "" "-lsnappy" ; then
        :
    else
        error_exit "snappy check failed" \
            "Make sure to have the snappy libs and headers installed."
    fi

    libs_softmmu="$libs_softmmu -lsnappy"
fi

1729 1730 1731 1732
##########################################
# libseccomp check

if test "$seccomp" != "no" ; then
1733
    if $pkg_config --atleast-version=2.1.0 libseccomp; then
1734
        libs_softmmu="$libs_softmmu `$pkg_config --libs libseccomp`"
1735
        QEMU_CFLAGS="$QEMU_CFLAGS `$pkg_config --cflags libseccomp`"
1736 1737 1738
	seccomp="yes"
    else
	if test "$seccomp" = "yes"; then
1739
            feature_not_found "libseccomp" "Install libseccomp devel >= 2.1.0"
1740
	fi
Y
Yann E. MORIN 已提交
1741
	seccomp="no"
1742 1743
    fi
fi
1744 1745 1746
##########################################
# xen probe

1747
if test "$xen" != "no" ; then
1748
  xen_libs="-lxenstore -lxenctrl -lxenguest"
1749

1750 1751 1752 1753 1754
  # First we test whether Xen headers and libraries are available.
  # If no, we are done and there is no Xen support.
  # If yes, more tests are run to detect the Xen version.

  # Xen (any)
1755
  cat > $TMPC <<EOF
1756
#include <xenctrl.h>
1757 1758 1759 1760 1761 1762 1763
int main(void) {
  return 0;
}
EOF
  if ! compile_prog "" "$xen_libs" ; then
    # Xen not found
    if test "$xen" = "yes" ; then
1764
      feature_not_found "xen" "Install xen devel"
1765 1766 1767 1768
    fi
    xen=no

  # Xen unstable
1769 1770
  elif
      cat > $TMPC <<EOF &&
1771
#include <xenctrl.h>
A
Anthony PERARD 已提交
1772
#include <xenstore.h>
1773 1774 1775 1776 1777
#include <stdint.h>
#include <xen/hvm/hvm_info_table.h>
#if !defined(HVM_MAX_VCPUS)
# error HVM_MAX_VCPUS not defined
#endif
1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789
int main(void) {
  xc_interface *xc;
  xs_daemon_open();
  xc = xc_interface_open(0, 0, 0);
  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
  xc_gnttab_open(NULL, 0);
  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
  xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
  return 0;
}
EOF
      compile_prog "" "$xen_libs"
1790
    then
1791 1792 1793
    xen_ctrl_version=420
    xen=yes

1794 1795
  elif
      cat > $TMPC <<EOF &&
1796 1797 1798 1799 1800 1801 1802
#include <xenctrl.h>
#include <xs.h>
#include <stdint.h>
#include <xen/hvm/hvm_info_table.h>
#if !defined(HVM_MAX_VCPUS)
# error HVM_MAX_VCPUS not defined
#endif
1803 1804
int main(void) {
  xs_daemon_open();
1805
  xc_interface_open(0, 0, 0);
1806 1807
  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
  xc_gnttab_open(NULL, 0);
1808
  xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
1809 1810
  return 0;
}
1811
EOF
1812
      compile_prog "" "$xen_libs"
1813
    then
1814
    xen_ctrl_version=410
1815
    xen=yes
1816 1817

  # Xen 4.0.0
1818 1819
  elif
      cat > $TMPC <<EOF &&
1820 1821 1822 1823 1824 1825 1826 1827
#include <xenctrl.h>
#include <xs.h>
#include <stdint.h>
#include <xen/hvm/hvm_info_table.h>
#if !defined(HVM_MAX_VCPUS)
# error HVM_MAX_VCPUS not defined
#endif
int main(void) {
1828 1829 1830
  struct xen_add_to_physmap xatp = {
    .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
  };
1831 1832 1833 1834
  xs_daemon_open();
  xc_interface_open();
  xc_gnttab_open();
  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
1835
  xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
1836 1837 1838 1839
  return 0;
}
EOF
      compile_prog "" "$xen_libs"
1840
    then
1841 1842 1843
    xen_ctrl_version=400
    xen=yes

1844
  # Xen 3.4.0
1845 1846
  elif
      cat > $TMPC <<EOF &&
1847 1848 1849 1850 1851 1852 1853 1854 1855 1856 1857 1858 1859 1860 1861
#include <xenctrl.h>
#include <xs.h>
int main(void) {
  struct xen_add_to_physmap xatp = {
    .domid = 0, .space = XENMAPSPACE_gmfn, .idx = 0, .gpfn = 0,
  };
  xs_daemon_open();
  xc_interface_open();
  xc_gnttab_open();
  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
  xc_memory_op(0, XENMEM_add_to_physmap, &xatp);
  return 0;
}
EOF
      compile_prog "" "$xen_libs"
1862
    then
1863 1864 1865 1866
    xen_ctrl_version=340
    xen=yes

  # Xen 3.3.0
1867 1868
  elif
      cat > $TMPC <<EOF &&
1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879
#include <xenctrl.h>
#include <xs.h>
int main(void) {
  xs_daemon_open();
  xc_interface_open();
  xc_gnttab_open();
  xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
  return 0;
}
EOF
      compile_prog "" "$xen_libs"
1880
    then
1881 1882 1883
    xen_ctrl_version=330
    xen=yes

1884
  # Xen version unsupported
1885
  else
1886
    if test "$xen" = "yes" ; then
1887
      feature_not_found "xen (unsupported version)" "Install supported xen (e.g. 4.0, 3.4, 3.3)"
1888 1889
    fi
    xen=no
1890
  fi
1891 1892 1893 1894

  if test "$xen" = yes; then
    libs_softmmu="$xen_libs $libs_softmmu"
  fi
1895 1896
fi

1897 1898 1899 1900 1901 1902 1903
if test "$xen_pci_passthrough" != "no"; then
  if test "$xen" = "yes" && test "$linux" = "yes" &&
    test "$xen_ctrl_version" -ge 340; then
    xen_pci_passthrough=yes
  else
    if test "$xen_pci_passthrough" = "yes"; then
      if test "$xen_ctrl_version" -lt 340; then
1904 1905
        error_exit "User requested feature Xen PCI Passthrough" \
            "This feature does not work with Xen 3.3"
1906
      fi
1907 1908
      error_exit "User requested feature Xen PCI Passthrough" \
          " but this feature requires /sys from Linux"
1909 1910 1911 1912 1913
    fi
    xen_pci_passthrough=no
  fi
fi

A
Alon Levy 已提交
1914 1915 1916
##########################################
# libtool probe

B
Brad 已提交
1917
if ! has $libtool; then
A
Alon Levy 已提交
1918 1919 1920
    libtool=
fi

1921 1922 1923 1924 1925 1926 1927 1928
# MacOSX ships with a libtool which isn't the GNU one; weed this
# out by checking whether libtool supports the --version switch
if test -n "$libtool"; then
  if ! "$libtool" --version >/dev/null 2>&1; then
    libtool=
  fi
fi

1929 1930 1931
##########################################
# Sparse probe
if test "$sparse" != "no" ; then
1932
  if has cgcc; then
1933 1934 1935
    sparse=yes
  else
    if test "$sparse" = "yes" ; then
1936
      feature_not_found "sparse" "Install sparse binary"
1937 1938 1939 1940 1941
    fi
    sparse=no
  fi
fi

A
Anthony Liguori 已提交
1942 1943 1944 1945
##########################################
# GTK probe

if test "$gtk" != "no"; then
1946 1947 1948 1949 1950 1951 1952 1953 1954 1955
    gtkpackage="gtk+-$gtkabi"
    if test "$gtkabi" = "3.0" ; then
      gtkversion="3.0.0"
      vtepackage="vte-2.90"
      vteversion="0.32.0"
    else
      gtkversion="2.18.0"
      vtepackage="vte"
      vteversion="0.24.0"
    fi
1956 1957
    if ! $pkg_config --exists "$gtkpackage >= $gtkversion"; then
        if test "$gtk" = "yes" ; then
1958
            feature_not_found "gtk" "Install gtk2 or gtk3 (requires --with-gtkabi=3.0 option to configure) devel"
1959 1960 1961 1962 1963 1964 1965 1966
        fi
        gtk="no"
    elif ! $pkg_config --exists "$vtepackage >= $vteversion"; then
        if test "$gtk" = "yes" ; then
            error_exit "libvte not found (required for gtk support)"
        fi
        gtk="no"
    else
1967 1968 1969 1970
	gtk_cflags=`$pkg_config --cflags $gtkpackage`
	gtk_libs=`$pkg_config --libs $gtkpackage`
	vte_cflags=`$pkg_config --cflags $vtepackage`
	vte_libs=`$pkg_config --libs $vtepackage`
A
Anthony Liguori 已提交
1971 1972 1973 1974 1975
	libs_softmmu="$gtk_libs $vte_libs $libs_softmmu"
	gtk="yes"
    fi
fi

B
bellard 已提交
1976 1977 1978
##########################################
# SDL probe

P
Paolo Bonzini 已提交
1979 1980
# Look for sdl configuration program (pkg-config or sdl-config).  Try
# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992

if test $sdlabi = "2.0"; then
    sdl_config=$sdl2_config
    sdlname=sdl2
    sdlconfigname=sdl2_config
else
    sdlname=sdl
    sdlconfigname=sdl_config
fi

if test "`basename $sdl_config`" != $sdlconfigname && ! has ${sdl_config}; then
  sdl_config=$sdlconfigname
P
Paolo Bonzini 已提交
1993 1994
fi

1995 1996
if $pkg_config $sdlname --exists; then
  sdlconfig="$pkg_config $sdlname"
1997
  _sdlversion=`$sdlconfig --modversion 2>/dev/null | sed 's/[^0-9]//g'`
P
Paolo Bonzini 已提交
1998 1999
elif has ${sdl_config}; then
  sdlconfig="$sdl_config"
2000
  _sdlversion=`$sdlconfig --version | sed 's/[^0-9]//g'`
2001 2002
else
  if test "$sdl" = "yes" ; then
2003
    feature_not_found "sdl" "Install SDL devel"
2004 2005
  fi
  sdl=no
2006
fi
2007
if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
P
Paolo Bonzini 已提交
2008 2009
  echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
fi
B
bellard 已提交
2010

2011
sdl_too_old=no
2012
if test "$sdl" != "no" ; then
J
Juan Quintela 已提交
2013
  cat > $TMPC << EOF
B
bellard 已提交
2014 2015 2016 2017
#include <SDL.h>
#undef main /* We don't want SDL to override our main() */
int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
EOF
2018
  sdl_cflags=`$sdlconfig --cflags 2> /dev/null`
2019 2020 2021 2022 2023
  if test "$static" = "yes" ; then
    sdl_libs=`$sdlconfig --static-libs 2>/dev/null`
  else
    sdl_libs=`$sdlconfig --libs 2> /dev/null`
  fi
2024
  if compile_prog "$sdl_cflags" "$sdl_libs" ; then
J
Juan Quintela 已提交
2025 2026 2027 2028 2029 2030 2031
    if test "$_sdlversion" -lt 121 ; then
      sdl_too_old=yes
    else
      if test "$cocoa" = "no" ; then
        sdl=yes
      fi
    fi
A
aliguori 已提交
2032

2033
    # static link with sdl ? (note: sdl.pc's --static --libs is broken)
J
Juan Quintela 已提交
2034
    if test "$sdl" = "yes" -a "$static" = "yes" ; then
2035
      if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2036 2037
         sdl_libs="$sdl_libs `aalib-config --static-libs 2>/dev/null`"
         sdl_cflags="$sdl_cflags `aalib-config --cflags 2>/dev/null`"
J
Juan Quintela 已提交
2038
      fi
2039
      if compile_prog "$sdl_cflags" "$sdl_libs" ; then
J
Juan Quintela 已提交
2040 2041 2042 2043 2044
	:
      else
        sdl=no
      fi
    fi # static link
2045 2046
  else # sdl not found
    if test "$sdl" = "yes" ; then
2047
      feature_not_found "sdl" "Install SDL devel"
2048 2049
    fi
    sdl=no
J
Juan Quintela 已提交
2050
  fi # sdl compile test
2051
fi
B
bellard 已提交
2052

2053
if test "$sdl" = "yes" ; then
J
Juan Quintela 已提交
2054
  cat > $TMPC <<EOF
2055 2056 2057 2058 2059 2060 2061 2062
#include <SDL.h>
#if defined(SDL_VIDEO_DRIVER_X11)
#include <X11/XKBlib.h>
#else
#error No x11 support
#endif
int main(void) { return 0; }
EOF
2063
  if compile_prog "$sdl_cflags" "$sdl_libs" ; then
J
Juan Quintela 已提交
2064 2065
    sdl_libs="$sdl_libs -lX11"
  fi
J
Juan Quintela 已提交
2066
  libs_softmmu="$sdl_libs $libs_softmmu"
2067 2068
fi

M
Michael R. Hines 已提交
2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092
##########################################
# RDMA needs OpenFabrics libraries
if test "$rdma" != "no" ; then
  cat > $TMPC <<EOF
#include <rdma/rdma_cma.h>
int main(void) { return 0; }
EOF
  rdma_libs="-lrdmacm -libverbs"
  if compile_prog "" "$rdma_libs" ; then
    rdma="yes"
    libs_softmmu="$libs_softmmu $rdma_libs"
  else
    if test "$rdma" = "yes" ; then
        error_exit \
            " OpenFabrics librdmacm/libibverbs not present." \
            " Your options:" \
            "  (1) Fast: Install infiniband packages from your distro." \
            "  (2) Cleanest: Install libraries from www.openfabrics.org" \
            "  (3) Also: Install softiwarp if you don't have RDMA hardware"
    fi
    rdma="no"
  fi
fi

2093
##########################################
2094 2095
# VNC TLS/WS detection
if test "$vnc" = "yes" -a \( "$vnc_tls" != "no" -o "$vnc_ws" != "no" \) ; then
2096
  cat > $TMPC <<EOF
2097 2098 2099
#include <gnutls/gnutls.h>
int main(void) { gnutls_session_t s; gnutls_init(&s, GNUTLS_SERVER); return 0; }
EOF
2100 2101
  vnc_tls_cflags=`$pkg_config --cflags gnutls 2> /dev/null`
  vnc_tls_libs=`$pkg_config --libs gnutls 2> /dev/null`
2102
  if compile_prog "$vnc_tls_cflags" "$vnc_tls_libs" ; then
2103 2104 2105 2106 2107 2108
    if test "$vnc_tls" != "no" ; then
      vnc_tls=yes
    fi
    if test "$vnc_ws" != "no" ; then
      vnc_ws=yes
    fi
2109
    libs_softmmu="$vnc_tls_libs $libs_softmmu"
P
Paolo Bonzini 已提交
2110
    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_tls_cflags"
2111 2112
  else
    if test "$vnc_tls" = "yes" ; then
2113
      feature_not_found "vnc-tls" "Install gnutls devel"
2114
    fi
2115
    if test "$vnc_ws" = "yes" ; then
2116
      feature_not_found "vnc-ws" "Install gnutls devel"
2117
    fi
2118
    vnc_tls=no
2119
    vnc_ws=no
2120
  fi
2121 2122
fi

B
Benoît Canet 已提交
2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139 2140 2141 2142 2143 2144 2145 2146
##########################################
# Quorum probe (check for gnutls)
if test "$quorum" != "no" ; then
cat > $TMPC <<EOF
#include <gnutls/gnutls.h>
#include <gnutls/crypto.h>
int main(void) {char data[4096], digest[32];
gnutls_hash_fast(GNUTLS_DIG_SHA256, data, 4096, digest);
return 0;
}
EOF
quorum_tls_cflags=`$pkg_config --cflags gnutls 2> /dev/null`
quorum_tls_libs=`$pkg_config --libs gnutls 2> /dev/null`
if compile_prog "$quorum_tls_cflags" "$quorum_tls_libs" ; then
  qcow_tls=yes
  libs_softmmu="$quorum_tls_libs $libs_softmmu"
  libs_tools="$quorum_tls_libs $libs_softmmu"
  QEMU_CFLAGS="$QEMU_CFLAGS $quorum_tls_cflags"
else
  echo "gnutls > 2.10.0 required to compile Quorum"
  exit 1
fi
fi

2147 2148
##########################################
# VNC SASL detection
J
Jes Sorensen 已提交
2149
if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
2150
  cat > $TMPC <<EOF
2151 2152 2153 2154
#include <sasl/sasl.h>
#include <stdio.h>
int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
EOF
2155 2156 2157 2158 2159 2160
  # Assuming Cyrus-SASL installed in /usr prefix
  vnc_sasl_cflags=""
  vnc_sasl_libs="-lsasl2"
  if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
    vnc_sasl=yes
    libs_softmmu="$vnc_sasl_libs $libs_softmmu"
P
Paolo Bonzini 已提交
2161
    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
2162 2163
  else
    if test "$vnc_sasl" = "yes" ; then
2164
      feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2165
    fi
2166 2167
    vnc_sasl=no
  fi
2168 2169
fi

2170 2171
##########################################
# VNC JPEG detection
J
Jes Sorensen 已提交
2172
if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2173 2174 2175 2176 2177 2178 2179 2180 2181 2182
cat > $TMPC <<EOF
#include <stdio.h>
#include <jpeglib.h>
int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
EOF
    vnc_jpeg_cflags=""
    vnc_jpeg_libs="-ljpeg"
  if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
    vnc_jpeg=yes
    libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
P
Paolo Bonzini 已提交
2183
    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2184 2185
  else
    if test "$vnc_jpeg" = "yes" ; then
2186
      feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2187 2188 2189 2190 2191
    fi
    vnc_jpeg=no
  fi
fi

C
Corentin Chary 已提交
2192 2193
##########################################
# VNC PNG detection
J
Jes Sorensen 已提交
2194
if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
C
Corentin Chary 已提交
2195 2196 2197
cat > $TMPC <<EOF
//#include <stdio.h>
#include <png.h>
S
Scott Wood 已提交
2198
#include <stddef.h>
C
Corentin Chary 已提交
2199 2200 2201
int main(void) {
    png_structp png_ptr;
    png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
2202
    return png_ptr != 0;
C
Corentin Chary 已提交
2203 2204
}
EOF
2205
  if $pkg_config libpng --exists; then
2206 2207
    vnc_png_cflags=`$pkg_config libpng --cflags`
    vnc_png_libs=`$pkg_config libpng --libs`
2208
  else
C
Corentin Chary 已提交
2209 2210
    vnc_png_cflags=""
    vnc_png_libs="-lpng"
2211
  fi
C
Corentin Chary 已提交
2212 2213 2214
  if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
    vnc_png=yes
    libs_softmmu="$vnc_png_libs $libs_softmmu"
2215
    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
C
Corentin Chary 已提交
2216 2217
  else
    if test "$vnc_png" = "yes" ; then
2218
      feature_not_found "vnc-png" "Install libpng devel"
C
Corentin Chary 已提交
2219 2220 2221 2222 2223
    fi
    vnc_png=no
  fi
fi

2224 2225 2226 2227 2228 2229 2230 2231 2232 2233 2234
##########################################
# fnmatch() probe, used for ACL routines
fnmatch="no"
cat > $TMPC << EOF
#include <fnmatch.h>
int main(void)
{
    fnmatch("foo", "foo", 0);
    return 0;
}
EOF
2235
if compile_prog "" "" ; then
2236 2237 2238
   fnmatch="yes"
fi

2239 2240
##########################################
# uuid_generate() probe, used for vdi block driver
2241 2242
# Note that on some systems (notably MacOSX) no extra library
# need be linked to get the uuid functions.
2243 2244 2245 2246 2247 2248 2249 2250 2251 2252 2253
if test "$uuid" != "no" ; then
  uuid_libs="-luuid"
  cat > $TMPC << EOF
#include <uuid/uuid.h>
int main(void)
{
    uuid_t my_uuid;
    uuid_generate(my_uuid);
    return 0;
}
EOF
2254 2255 2256
  if compile_prog "" "" ; then
    uuid="yes"
  elif compile_prog "" "$uuid_libs" ; then
2257 2258 2259 2260 2261
    uuid="yes"
    libs_softmmu="$uuid_libs $libs_softmmu"
    libs_tools="$uuid_libs $libs_tools"
  else
    if test "$uuid" = "yes" ; then
2262
      feature_not_found "uuid" "Install libuuid devel"
2263 2264 2265 2266 2267
    fi
    uuid=no
  fi
fi

2268 2269 2270 2271 2272 2273 2274 2275 2276 2277 2278 2279
if test "$vhdx" = "yes" ; then
    if test "$uuid" = "no" ; then
        error_exit "uuid required for VHDX support"
    fi
elif test "$vhdx" != "no" ; then
    if test "$uuid" = "yes" ; then
        vhdx=yes
    else
        vhdx=no
    fi
fi

C
Christoph Hellwig 已提交
2280 2281 2282 2283
##########################################
# xfsctl() probe, used for raw-posix
if test "$xfs" != "no" ; then
  cat > $TMPC << EOF
2284
#include <stddef.h>  /* NULL */
C
Christoph Hellwig 已提交
2285 2286 2287 2288 2289 2290 2291 2292 2293 2294 2295
#include <xfs/xfs.h>
int main(void)
{
    xfsctl(NULL, 0, 0, NULL);
    return 0;
}
EOF
  if compile_prog "" "" ; then
    xfs="yes"
  else
    if test "$xfs" = "yes" ; then
2296
      feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
C
Christoph Hellwig 已提交
2297 2298 2299 2300 2301
    fi
    xfs=no
  fi
fi

2302 2303
##########################################
# vde libraries probe
2304
if test "$vde" != "no" ; then
J
Juan Quintela 已提交
2305
  vde_libs="-lvdeplug"
2306 2307
  cat > $TMPC << EOF
#include <libvdeplug.h>
P
pbrook 已提交
2308 2309 2310
int main(void)
{
    struct vde_open_args a = {0, 0, 0};
2311 2312
    char s[] = "";
    vde_open(s, s, &a);
P
pbrook 已提交
2313 2314
    return 0;
}
2315
EOF
2316
  if compile_prog "" "$vde_libs" ; then
J
Juan Quintela 已提交
2317
    vde=yes
2318 2319
    libs_softmmu="$vde_libs $libs_softmmu"
    libs_tools="$vde_libs $libs_tools"
2320 2321
  else
    if test "$vde" = "yes" ; then
2322
      feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
2323 2324
    fi
    vde=no
J
Juan Quintela 已提交
2325
  fi
2326 2327
fi

2328
##########################################
2329 2330 2331 2332 2333 2334
# netmap support probe
# Apart from looking for netmap headers, we make sure that the host API version
# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
# a minor/major version number. Minor new features will be marked with values up
# to 15, and if something happens that requires a change to the backend we will
# move above 15, submit the backend fixes and modify this two bounds.
2335 2336 2337 2338 2339 2340
if test "$netmap" != "no" ; then
  cat > $TMPC << EOF
#include <inttypes.h>
#include <net/if.h>
#include <net/netmap.h>
#include <net/netmap_user.h>
2341 2342 2343
#if (NETMAP_API < 11) || (NETMAP_API > 15)
#error
#endif
2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355
int main(void) { return 0; }
EOF
  if compile_prog "" "" ; then
    netmap=yes
  else
    if test "$netmap" = "yes" ; then
      feature_not_found "netmap"
    fi
    netmap=no
  fi
fi

2356 2357 2358 2359 2360 2361 2362 2363 2364 2365 2366 2367 2368 2369 2370 2371 2372
##########################################
# libcap-ng library probe
if test "$cap_ng" != "no" ; then
  cap_libs="-lcap-ng"
  cat > $TMPC << EOF
#include <cap-ng.h>
int main(void)
{
    capng_capability_to_name(CAPNG_EFFECTIVE);
    return 0;
}
EOF
  if compile_prog "" "$cap_libs" ; then
    cap_ng=yes
    libs_tools="$cap_libs $libs_tools"
  else
    if test "$cap_ng" = "yes" ; then
2373
      feature_not_found "cap_ng" "Install libcap-ng devel"
2374 2375 2376 2377 2378
    fi
    cap_ng=no
  fi
fi

2379
##########################################
2380
# Sound support libraries probe
2381

2382 2383 2384 2385 2386 2387 2388 2389 2390 2391
audio_drv_probe()
{
    drv=$1
    hdr=$2
    lib=$3
    exp=$4
    cfl=$5
        cat > $TMPC << EOF
#include <$hdr>
int main(void) { $exp }
2392
EOF
2393
    if compile_prog "$cfl" "$lib" ; then
2394 2395
        :
    else
2396 2397
        error_exit "$drv check failed" \
            "Make sure to have the $drv libs and headers installed."
2398 2399 2400
    fi
}

2401
audio_drv_list=`echo "$audio_drv_list" | sed -e 's/,/ /g'`
2402 2403 2404 2405
for drv in $audio_drv_list; do
    case $drv in
    alsa)
    audio_drv_probe $drv alsa/asoundlib.h -lasound \
2406
        "return snd_pcm_close((snd_pcm_t *)0);"
2407
    libs_softmmu="-lasound $libs_softmmu"
2408 2409 2410 2411
    ;;

    fmod)
    if test -z $fmod_lib || test -z $fmod_inc; then
2412 2413
        error_exit "You must specify path to FMOD library and headers" \
            "Example: --fmod-inc=/path/include/fmod --fmod-lib=/path/lib/libfmod-3.74.so"
2414 2415
    fi
    audio_drv_probe $drv fmod.h $fmod_lib "return FSOUND_GetVersion();" "-I $fmod_inc"
2416
    libs_softmmu="$fmod_lib $libs_softmmu"
2417 2418 2419 2420
    ;;

    esd)
    audio_drv_probe $drv esd.h -lesd 'return esd_play_stream(0, 0, "", 0);'
2421
    libs_softmmu="-lesd $libs_softmmu"
2422
    audio_pt_int="yes"
2423
    ;;
M
malc 已提交
2424 2425

    pa)
2426 2427 2428
    audio_drv_probe $drv pulse/mainloop.h "-lpulse" \
        "pa_mainloop *m = 0; pa_mainloop_free (m); return 0;"
    libs_softmmu="-lpulse $libs_softmmu"
2429
    audio_pt_int="yes"
M
malc 已提交
2430 2431
    ;;

2432 2433 2434 2435
    coreaudio)
      libs_softmmu="-framework CoreAudio $libs_softmmu"
    ;;

2436 2437
    dsound)
      libs_softmmu="-lole32 -ldxguid $libs_softmmu"
2438
      audio_win_int="yes"
2439 2440 2441 2442 2443 2444 2445
    ;;

    oss)
      libs_softmmu="$oss_lib $libs_softmmu"
    ;;

    sdl|wav)
B
blueswir1 已提交
2446 2447 2448
    # XXX: Probes for CoreAudio, DirectSound, SDL(?)
    ;;

2449 2450 2451 2452 2453
    winwave)
      libs_softmmu="-lwinmm $libs_softmmu"
      audio_win_int="yes"
    ;;

M
malc 已提交
2454
    *)
M
malc 已提交
2455
    echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
2456 2457
        error_exit "Unknown driver '$drv' selected" \
            "Possible drivers are: $audio_possible_drivers"
M
malc 已提交
2458 2459
    }
    ;;
2460 2461
    esac
done
2462

A
aurel32 已提交
2463 2464 2465
##########################################
# BrlAPI probe

2466
if test "$brlapi" != "no" ; then
J
Juan Quintela 已提交
2467 2468
  brlapi_libs="-lbrlapi"
  cat > $TMPC << EOF
A
aurel32 已提交
2469
#include <brlapi.h>
S
Scott Wood 已提交
2470
#include <stddef.h>
A
aurel32 已提交
2471 2472
int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
EOF
2473
  if compile_prog "" "$brlapi_libs" ; then
J
Juan Quintela 已提交
2474
    brlapi=yes
2475
    libs_softmmu="$brlapi_libs $libs_softmmu"
2476 2477
  else
    if test "$brlapi" = "yes" ; then
2478
      feature_not_found "brlapi" "Install brlapi devel"
2479 2480
    fi
    brlapi=no
J
Juan Quintela 已提交
2481 2482
  fi
fi
A
aurel32 已提交
2483

B
balrog 已提交
2484 2485
##########################################
# curses probe
2486 2487
if test "$curses" != "no" ; then
  if test "$mingw32" = "yes" ; then
S
Stefan Weil 已提交
2488
    curses_list="-lpdcurses"
2489
  else
2490
    curses_list="$($pkg_config --libs ncurses 2>/dev/null):-lncurses:-lcurses"
2491
  fi
2492
  curses_found=no
B
balrog 已提交
2493 2494
  cat > $TMPC << EOF
#include <curses.h>
2495 2496 2497 2498 2499
int main(void) {
  const char *s = curses_version();
  resize_term(0, 0);
  return s != 0;
}
B
balrog 已提交
2500
EOF
2501
  IFS=:
2502
  for curses_lib in $curses_list; do
2503
    unset IFS
2504
    if compile_prog "" "$curses_lib" ; then
2505
      curses_found=yes
2506 2507 2508 2509
      libs_softmmu="$curses_lib $libs_softmmu"
      break
    fi
  done
2510
  unset IFS
2511 2512 2513 2514
  if test "$curses_found" = "yes" ; then
    curses=yes
  else
    if test "$curses" = "yes" ; then
2515
      feature_not_found "curses" "Install ncurses devel"
2516 2517 2518
    fi
    curses=no
  fi
2519
fi
B
balrog 已提交
2520

A
Alexander Graf 已提交
2521 2522
##########################################
# curl probe
2523
if test "$curl" != "no" ; then
2524
  if $pkg_config libcurl --exists; then
2525 2526 2527 2528
    curlconfig="$pkg_config libcurl"
  else
    curlconfig=curl-config
  fi
A
Alexander Graf 已提交
2529 2530
  cat > $TMPC << EOF
#include <curl/curl.h>
2531
int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
A
Alexander Graf 已提交
2532
EOF
2533 2534
  curl_cflags=`$curlconfig --cflags 2>/dev/null`
  curl_libs=`$curlconfig --libs 2>/dev/null`
J
Juan Quintela 已提交
2535
  if compile_prog "$curl_cflags" "$curl_libs" ; then
A
Alexander Graf 已提交
2536
    curl=yes
2537 2538
  else
    if test "$curl" = "yes" ; then
2539
      feature_not_found "curl" "Install libcurl devel"
2540 2541
    fi
    curl=no
A
Alexander Graf 已提交
2542 2543 2544
  fi
fi # test "$curl"

B
balrog 已提交
2545 2546
##########################################
# bluez support probe
2547
if test "$bluez" != "no" ; then
2548 2549 2550 2551
  cat > $TMPC << EOF
#include <bluetooth/bluetooth.h>
int main(void) { return bt_error(0); }
EOF
2552 2553
  bluez_cflags=`$pkg_config --cflags bluez 2> /dev/null`
  bluez_libs=`$pkg_config --libs bluez 2> /dev/null`
2554
  if compile_prog "$bluez_cflags" "$bluez_libs" ; then
2555
    bluez=yes
2556
    libs_softmmu="$bluez_libs $libs_softmmu"
2557
  else
2558
    if test "$bluez" = "yes" ; then
2559
      feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
2560
    fi
2561 2562
    bluez="no"
  fi
B
balrog 已提交
2563 2564
fi

2565 2566
##########################################
# glib support probe
2567 2568 2569 2570 2571 2572 2573

if test "$mingw32" = yes; then
    # g_poll is required in order to integrate with the glib main loop.
    glib_req_ver=2.20
else
    glib_req_ver=2.12
fi
2574 2575 2576 2577
glib_modules=gthread-2.0
if test "$modules" = yes; then
    glib_modules="$glib_modules gmodule-2.0"
fi
F
Fam Zheng 已提交
2578

2579
for i in $glib_modules; do
F
Fam Zheng 已提交
2580 2581 2582 2583 2584 2585 2586 2587 2588 2589 2590 2591 2592 2593 2594 2595 2596 2597 2598 2599 2600 2601 2602 2603
    if $pkg_config --atleast-version=$glib_req_ver $i; then
        glib_cflags=`$pkg_config --cflags $i`
        glib_libs=`$pkg_config --libs $i`
        CFLAGS="$glib_cflags $CFLAGS"
        LIBS="$glib_libs $LIBS"
        libs_qga="$glib_libs $libs_qga"
    else
        error_exit "glib-$glib_req_ver $i is required to compile QEMU"
    fi
done

##########################################
# SHA command probe for modules
if test "$modules" = yes; then
    shacmd_probe="sha1sum sha1 shasum"
    for c in $shacmd_probe; do
        if which $c &>/dev/null; then
            shacmd="$c"
            break
        fi
    done
    if test "$shacmd" = ""; then
        error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
    fi
2604 2605
fi

2606 2607 2608 2609
##########################################
# pixman support probe

if test "$pixman" = ""; then
2610 2611 2612
  if test "$want_tools" = "no" -a "$softmmu" = "no"; then
    pixman="none"
  elif $pkg_config pixman-1 > /dev/null 2>&1; then
2613 2614 2615 2616 2617
    pixman="system"
  else
    pixman="internal"
  fi
fi
2618 2619
if test "$pixman" = "none"; then
  if test "$want_tools" != "no" -o "$softmmu" != "no"; then
2620 2621 2622 2623
    error_exit "pixman disabled but system emulation or tools build" \
        "enabled.  You can turn off pixman only if you also" \
        "disable all system emulation targets and the tools" \
        "build with '--disable-tools --disable-system'."
2624 2625 2626 2627
  fi
  pixman_cflags=
  pixman_libs=
elif test "$pixman" = "system"; then
2628 2629
  pixman_cflags=`$pkg_config --cflags pixman-1`
  pixman_libs=`$pkg_config --libs pixman-1`
2630 2631
else
  if test ! -d ${source_path}/pixman/pixman; then
2632 2633 2634 2635 2636
    error_exit "pixman not present. Your options:" \
        "  (1) Preferred: Install the pixman devel package (any recent" \
        "      distro should have packages as Xorg needs pixman too)." \
        "  (2) Fetch the pixman submodule, using:" \
        "      git submodule update --init pixman"
2637
  fi
2638 2639 2640
  mkdir -p pixman/pixman
  pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
  pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
2641 2642
fi

2643 2644 2645 2646 2647 2648 2649
##########################################
# libcap probe

if test "$cap" != "no" ; then
  cat > $TMPC <<EOF
#include <stdio.h>
#include <sys/capability.h>
2650
int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
2651 2652 2653 2654 2655 2656 2657 2658
EOF
  if compile_prog "" "-lcap" ; then
    cap=yes
  else
    cap=no
  fi
fi

2659
##########################################
2660
# pthread probe
2661
PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
2662

C
Christoph Hellwig 已提交
2663
pthread=no
2664
cat > $TMPC << EOF
2665
#include <pthread.h>
2666 2667 2668 2669 2670 2671
static void *f(void *p) { return NULL; }
int main(void) {
  pthread_t thread;
  pthread_create(&thread, 0, f, 0);
  return 0;
}
2672
EOF
2673 2674 2675 2676 2677 2678
if compile_prog "" "" ; then
  pthread=yes
else
  for pthread_lib in $PTHREADLIBS_LIST; do
    if compile_prog "" "$pthread_lib" ; then
      pthread=yes
P
Peter Portante 已提交
2679 2680 2681 2682 2683 2684 2685 2686 2687 2688
      found=no
      for lib_entry in $LIBS; do
        if test "$lib_entry" = "$pthread_lib"; then
          found=yes
          break
        fi
      done
      if test "$found" = "no"; then
        LIBS="$pthread_lib $LIBS"
      fi
2689 2690 2691 2692
      break
    fi
  done
fi
2693

2694
if test "$mingw32" != yes -a "$pthread" = no; then
2695 2696
  error_exit "pthread check failed" \
      "Make sure to have the pthread libs and headers installed."
2697 2698
fi

2699 2700 2701 2702 2703
##########################################
# rbd probe
if test "$rbd" != "no" ; then
  cat > $TMPC <<EOF
#include <stdio.h>
2704
#include <rbd/librbd.h>
2705
int main(void) {
2706 2707
    rados_t cluster;
    rados_create(&cluster, NULL);
2708 2709 2710
    return 0;
}
EOF
2711 2712 2713
  rbd_libs="-lrbd -lrados"
  if compile_prog "" "$rbd_libs" ; then
    rbd=yes
2714 2715
  else
    if test "$rbd" = "yes" ; then
2716
      feature_not_found "rados block device" "Install librbd/ceph devel"
2717 2718 2719 2720 2721
    fi
    rbd=no
  fi
fi

2722 2723
##########################################
# libssh2 probe
2724
min_libssh2_version=1.2.8
2725
if test "$libssh2" != "no" ; then
2726
  if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
2727 2728 2729 2730 2731
    libssh2_cflags=`$pkg_config libssh2 --cflags`
    libssh2_libs=`$pkg_config libssh2 --libs`
    libssh2=yes
  else
    if test "$libssh2" = "yes" ; then
2732
      error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
2733 2734 2735 2736 2737
    fi
    libssh2=no
  fi
fi

2738 2739 2740 2741 2742 2743 2744 2745 2746 2747 2748 2749 2750 2751 2752 2753 2754 2755 2756 2757 2758 2759 2760 2761 2762
##########################################
# libssh2_sftp_fsync probe

if test "$libssh2" = "yes"; then
  cat > $TMPC <<EOF
#include <stdio.h>
#include <libssh2.h>
#include <libssh2_sftp.h>
int main(void) {
    LIBSSH2_SESSION *session;
    LIBSSH2_SFTP *sftp;
    LIBSSH2_SFTP_HANDLE *sftp_handle;
    session = libssh2_session_init ();
    sftp = libssh2_sftp_init (session);
    sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
    libssh2_sftp_fsync (sftp_handle);
    return 0;
}
EOF
  # libssh2_cflags/libssh2_libs defined in previous test.
  if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
    QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
  fi
fi

2763 2764 2765 2766 2767 2768 2769
##########################################
# linux-aio probe

if test "$linux_aio" != "no" ; then
  cat > $TMPC <<EOF
#include <libaio.h>
#include <sys/eventfd.h>
S
Scott Wood 已提交
2770
#include <stddef.h>
2771 2772 2773 2774 2775 2776
int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
EOF
  if compile_prog "" "-laio" ; then
    linux_aio=yes
  else
    if test "$linux_aio" = "yes" ; then
2777
      feature_not_found "linux AIO" "Install libaio devel"
2778
    fi
2779
    linux_aio=no
2780 2781 2782
  fi
fi

P
Paolo Bonzini 已提交
2783 2784 2785 2786 2787 2788 2789 2790 2791
##########################################
# TPM passthrough is only on x86 Linux

if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
  tpm_passthrough=$tpm
else
  tpm_passthrough=no
fi

2792 2793 2794 2795 2796
##########################################
# adjust virtio-blk-data-plane based on linux-aio

if test "$virtio_blk_data_plane" = "yes" -a \
	"$linux_aio" != "yes" ; then
2797
  error_exit "virtio-blk-data-plane requires Linux AIO, please try --enable-linux-aio"
2798 2799 2800 2801
elif test -z "$virtio_blk_data_plane" ; then
  virtio_blk_data_plane=$linux_aio
fi

2802 2803 2804 2805 2806 2807 2808
##########################################
# attr probe

if test "$attr" != "no" ; then
  cat > $TMPC <<EOF
#include <stdio.h>
#include <sys/types.h>
P
Pavel Borzenkov 已提交
2809 2810 2811
#ifdef CONFIG_LIBATTR
#include <attr/xattr.h>
#else
2812
#include <sys/xattr.h>
P
Pavel Borzenkov 已提交
2813
#endif
2814 2815
int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
EOF
2816 2817 2818
  if compile_prog "" "" ; then
    attr=yes
  # Older distros have <attr/xattr.h>, and need -lattr:
P
Pavel Borzenkov 已提交
2819
  elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
2820 2821
    attr=yes
    LIBS="-lattr $LIBS"
2822
    libattr=yes
2823 2824
  else
    if test "$attr" = "yes" ; then
2825
      feature_not_found "ATTR" "Install libc6 or libattr devel"
2826 2827 2828 2829 2830
    fi
    attr=no
  fi
fi

A
aliguori 已提交
2831 2832 2833
##########################################
# iovec probe
cat > $TMPC <<EOF
B
blueswir1 已提交
2834
#include <sys/types.h>
A
aliguori 已提交
2835
#include <sys/uio.h>
B
blueswir1 已提交
2836
#include <unistd.h>
2837
int main(void) { return sizeof(struct iovec); }
A
aliguori 已提交
2838 2839
EOF
iovec=no
2840
if compile_prog "" "" ; then
A
aliguori 已提交
2841 2842 2843
  iovec=yes
fi

2844 2845 2846 2847 2848 2849
##########################################
# preadv probe
cat > $TMPC <<EOF
#include <sys/types.h>
#include <sys/uio.h>
#include <unistd.h>
2850
int main(void) { return preadv(0, 0, 0, 0); }
2851 2852
EOF
preadv=no
2853
if compile_prog "" "" ; then
2854 2855 2856
  preadv=yes
fi

2857 2858
##########################################
# fdt probe
2859 2860 2861 2862 2863
# fdt support is mandatory for at least some target architectures,
# so insist on it if we're building those system emulators.
fdt_required=no
for target in $target_list; do
  case $target in
2864
    aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu)
2865 2866 2867 2868 2869 2870 2871 2872 2873 2874 2875 2876 2877 2878
      fdt_required=yes
    ;;
  esac
done

if test "$fdt_required" = "yes"; then
  if test "$fdt" = "no"; then
    error_exit "fdt disabled but some requested targets require it." \
      "You can turn off fdt only if you also disable all the system emulation" \
      "targets which need it (by specifying a cut down --target-list)."
  fi
  fdt=yes
fi

2879
if test "$fdt" != "no" ; then
J
Juan Quintela 已提交
2880
  fdt_libs="-lfdt"
2881
  # explicitly check for libfdt_env.h as it is missing in some stable installs
J
Juan Quintela 已提交
2882
  cat > $TMPC << EOF
2883
#include <libfdt_env.h>
2884 2885
int main(void) { return 0; }
EOF
2886
  if compile_prog "" "$fdt_libs" ; then
2887
    # system DTC is good - use it
2888
    fdt=yes
2889 2890 2891 2892 2893 2894 2895 2896
  elif test -d ${source_path}/dtc/libfdt ; then
    # have submodule DTC - use it
    fdt=yes
    dtc_internal="yes"
    mkdir -p dtc
    if [ "$source_path" != `pwd` ] ; then
       symlink "$source_path/dtc/Makefile" "dtc/Makefile"
       symlink "$source_path/dtc/scripts" "dtc/scripts"
2897
    fi
2898 2899 2900 2901
    fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
    fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
  elif test "$fdt" = "yes" ; then
    # have neither and want - prompt for system/submodule install
2902 2903
    error_exit "DTC (libfdt) not present. Your options:" \
        "  (1) Preferred: Install the DTC (libfdt) devel package" \
2904 2905 2906 2907
        "  (2) Fetch the DTC submodule, using:" \
        "      git submodule update --init dtc"
  else
    # don't have and don't want
2908
    fdt_libs=
2909
    fdt=no
2910 2911 2912
  fi
fi

2913 2914
libs_softmmu="$libs_softmmu $fdt_libs"

M
Michael Walle 已提交
2915
##########################################
2916 2917 2918
# GLX probe, used by milkymist-tmu2
if test "$glx" != "no" ; then
  glx_libs="-lGL -lX11"
M
Michael Walle 已提交
2919 2920 2921 2922
  cat > $TMPC << EOF
#include <X11/Xlib.h>
#include <GL/gl.h>
#include <GL/glx.h>
2923
int main(void) { glBegin(0); glXQueryVersion(0,0,0); return 0; }
M
Michael Walle 已提交
2924
EOF
2925
  if compile_prog "" "-lGL -lX11" ; then
2926
    glx=yes
M
Michael Walle 已提交
2927
  else
2928
    if test "$glx" = "yes" ; then
2929
      feature_not_found "glx" "Install GL devel (e.g. MESA)"
M
Michael Walle 已提交
2930
    fi
2931 2932
    glx_libs=
    glx=no
M
Michael Walle 已提交
2933 2934 2935
  fi
fi

2936 2937 2938
##########################################
# glusterfs probe
if test "$glusterfs" != "no" ; then
2939
  if $pkg_config --atleast-version=3 glusterfs-api; then
2940
    glusterfs="yes"
2941 2942
    glusterfs_cflags=`$pkg_config --cflags glusterfs-api`
    glusterfs_libs=`$pkg_config --libs glusterfs-api`
2943
    if $pkg_config --atleast-version=5 glusterfs-api; then
2944 2945
      glusterfs_discard="yes"
    fi
2946 2947 2948
    if $pkg_config --atleast-version=6 glusterfs-api; then
      glusterfs_zerofill="yes"
    fi
2949 2950
  else
    if test "$glusterfs" = "yes" ; then
2951
      feature_not_found "GlusterFS backend support" "Install glusterfs-api devel"
2952
    fi
2953
    glusterfs="no"
2954 2955 2956
  fi
fi

A
aurel32 已提交
2957
# Check for inotify functions when we are building linux-user
2958 2959 2960 2961 2962
# emulator.  This is done because older glibc versions don't
# have syscall stubs for these implemented.  In that case we
# don't provide them even if kernel supports them.
#
inotify=no
2963
cat > $TMPC << EOF
2964 2965 2966 2967 2968 2969
#include <sys/inotify.h>

int
main(void)
{
	/* try to start inotify */
A
aurel32 已提交
2970
	return inotify_init();
2971 2972
}
EOF
2973
if compile_prog "" "" ; then
2974
  inotify=yes
2975 2976
fi

2977 2978 2979 2980 2981 2982 2983 2984 2985 2986 2987 2988 2989 2990 2991
inotify1=no
cat > $TMPC << EOF
#include <sys/inotify.h>

int
main(void)
{
    /* try to start inotify */
    return inotify_init1(0);
}
EOF
if compile_prog "" "" ; then
  inotify1=yes
fi

R
Riku Voipio 已提交
2992 2993 2994 2995 2996 2997
# check if utimensat and futimens are supported
utimens=no
cat > $TMPC << EOF
#define _ATFILE_SOURCE
#include <stddef.h>
#include <fcntl.h>
2998
#include <sys/stat.h>
R
Riku Voipio 已提交
2999 3000 3001 3002 3003 3004 3005 3006

int main(void)
{
    utimensat(AT_FDCWD, "foo", NULL, 0);
    futimens(0, NULL);
    return 0;
}
EOF
3007
if compile_prog "" "" ; then
R
Riku Voipio 已提交
3008 3009 3010
  utimens=yes
fi

R
Riku Voipio 已提交
3011 3012 3013 3014 3015 3016 3017 3018 3019
# check if pipe2 is there
pipe2=no
cat > $TMPC << EOF
#include <unistd.h>
#include <fcntl.h>

int main(void)
{
    int pipefd[2];
3020
    return pipe2(pipefd, O_CLOEXEC);
R
Riku Voipio 已提交
3021 3022
}
EOF
3023
if compile_prog "" "" ; then
R
Riku Voipio 已提交
3024 3025 3026
  pipe2=yes
fi

K
Kevin Wolf 已提交
3027 3028 3029 3030 3031 3032 3033 3034 3035 3036 3037 3038 3039 3040 3041 3042
# check if accept4 is there
accept4=no
cat > $TMPC << EOF
#include <sys/socket.h>
#include <stddef.h>

int main(void)
{
    accept4(0, NULL, NULL, SOCK_CLOEXEC);
    return 0;
}
EOF
if compile_prog "" "" ; then
  accept4=yes
fi

3043 3044 3045 3046 3047 3048 3049 3050 3051
# check if tee/splice is there. vmsplice was added same time.
splice=no
cat > $TMPC << EOF
#include <unistd.h>
#include <fcntl.h>
#include <limits.h>

int main(void)
{
3052
    int len, fd = 0;
3053 3054 3055 3056 3057
    len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
    splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
    return 0;
}
EOF
3058
if compile_prog "" "" ; then
3059 3060 3061
  splice=yes
fi

M
Marcelo Tosatti 已提交
3062 3063 3064 3065 3066 3067 3068 3069 3070 3071 3072 3073 3074 3075
##########################################
# signalfd probe
signalfd="no"
cat > $TMPC << EOF
#include <unistd.h>
#include <sys/syscall.h>
#include <signal.h>
int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
EOF

if compile_prog "" "" ; then
  signalfd=yes
fi

R
Riku Voipio 已提交
3076 3077 3078 3079 3080 3081 3082
# check if eventfd is supported
eventfd=no
cat > $TMPC << EOF
#include <sys/eventfd.h>

int main(void)
{
3083
    return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
R
Riku Voipio 已提交
3084 3085 3086 3087 3088 3089
}
EOF
if compile_prog "" "" ; then
  eventfd=yes
fi

3090 3091 3092 3093 3094 3095 3096 3097 3098 3099 3100
# check for fallocate
fallocate=no
cat > $TMPC << EOF
#include <fcntl.h>

int main(void)
{
    fallocate(0, 0, 0, 0);
    return 0;
}
EOF
3101
if compile_prog "" "" ; then
3102 3103 3104
  fallocate=yes
fi

3105 3106 3107 3108 3109 3110 3111 3112 3113 3114 3115 3116 3117 3118 3119 3120
# check for fallocate hole punching
fallocate_punch_hole=no
cat > $TMPC << EOF
#include <fcntl.h>
#include <linux/falloc.h>

int main(void)
{
    fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
    return 0;
}
EOF
if compile_prog "" "" ; then
  fallocate_punch_hole=yes
fi

3121 3122 3123 3124 3125 3126 3127 3128 3129 3130 3131
# check for sync_file_range
sync_file_range=no
cat > $TMPC << EOF
#include <fcntl.h>

int main(void)
{
    sync_file_range(0, 0, 0, 0);
    return 0;
}
EOF
3132
if compile_prog "" "" ; then
3133 3134 3135
  sync_file_range=yes
fi

3136 3137 3138 3139 3140 3141 3142 3143 3144 3145 3146 3147 3148
# check for linux/fiemap.h and FS_IOC_FIEMAP
fiemap=no
cat > $TMPC << EOF
#include <sys/ioctl.h>
#include <linux/fs.h>
#include <linux/fiemap.h>

int main(void)
{
    ioctl(0, FS_IOC_FIEMAP, 0);
    return 0;
}
EOF
3149
if compile_prog "" "" ; then
3150 3151 3152
  fiemap=yes
fi

3153 3154 3155 3156 3157 3158 3159 3160 3161 3162 3163
# check for dup3
dup3=no
cat > $TMPC << EOF
#include <unistd.h>

int main(void)
{
    dup3(0, 0, 0);
    return 0;
}
EOF
3164
if compile_prog "" "" ; then
3165 3166 3167
  dup3=yes
fi

3168 3169 3170 3171 3172 3173 3174 3175 3176 3177 3178 3179 3180 3181 3182 3183
# check for ppoll support
ppoll=no
cat > $TMPC << EOF
#include <poll.h>

int main(void)
{
    struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
    ppoll(&pfd, 1, 0, 0);
    return 0;
}
EOF
if compile_prog "" "" ; then
  ppoll=yes
fi

3184 3185 3186 3187 3188 3189 3190 3191 3192 3193 3194 3195 3196 3197 3198
# check for prctl(PR_SET_TIMERSLACK , ... ) support
prctl_pr_set_timerslack=no
cat > $TMPC << EOF
#include <sys/prctl.h>

int main(void)
{
    prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
    return 0;
}
EOF
if compile_prog "" "" ; then
  prctl_pr_set_timerslack=yes
fi

3199 3200 3201 3202 3203 3204 3205 3206 3207 3208 3209
# check for epoll support
epoll=no
cat > $TMPC << EOF
#include <sys/epoll.h>

int main(void)
{
    epoll_create(0);
    return 0;
}
EOF
3210
if compile_prog "" "" ; then
3211 3212 3213 3214 3215 3216 3217 3218 3219 3220 3221
  epoll=yes
fi

# epoll_create1 and epoll_pwait are later additions
# so we must check separately for their presence
epoll_create1=no
cat > $TMPC << EOF
#include <sys/epoll.h>

int main(void)
{
3222 3223 3224 3225 3226 3227 3228 3229
    /* Note that we use epoll_create1 as a value, not as
     * a function being called. This is necessary so that on
     * old SPARC glibc versions where the function was present in
     * the library but not declared in the header file we will
     * fail the configure check. (Otherwise we will get a compiler
     * warning but not an error, and will proceed to fail the
     * qemu compile where we compile with -Werror.)
     */
3230
    return (int)(uintptr_t)&epoll_create1;
3231 3232
}
EOF
3233
if compile_prog "" "" ; then
3234 3235 3236 3237 3238 3239 3240 3241 3242 3243 3244 3245 3246
  epoll_create1=yes
fi

epoll_pwait=no
cat > $TMPC << EOF
#include <sys/epoll.h>

int main(void)
{
    epoll_pwait(0, 0, 0, 0, 0);
    return 0;
}
EOF
3247
if compile_prog "" "" ; then
3248 3249 3250
  epoll_pwait=yes
fi

3251 3252 3253 3254 3255 3256 3257 3258 3259 3260 3261 3262 3263 3264
# check for sendfile support
sendfile=no
cat > $TMPC << EOF
#include <sys/sendfile.h>

int main(void)
{
    return sendfile(0, 0, 0, 0);
}
EOF
if compile_prog "" "" ; then
  sendfile=yes
fi

3265
# Check if tools are available to build documentation.
J
Juan Quintela 已提交
3266
if test "$docs" != "no" ; then
3267
  if has makeinfo && has pod2man; then
J
Juan Quintela 已提交
3268
    docs=yes
3269
  else
J
Juan Quintela 已提交
3270
    if test "$docs" = "yes" ; then
3271
      feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
3272
    fi
J
Juan Quintela 已提交
3273
    docs=no
3274
  fi
3275 3276
fi

S
Stefan Weil 已提交
3277
# Search for bswap_32 function
3278 3279 3280 3281 3282
byteswap_h=no
cat > $TMPC << EOF
#include <byteswap.h>
int main(void) { return bswap_32(0); }
EOF
3283
if compile_prog "" "" ; then
3284 3285 3286
  byteswap_h=yes
fi

3287
# Search for bswap32 function
3288 3289 3290 3291 3292 3293 3294
bswap_h=no
cat > $TMPC << EOF
#include <sys/endian.h>
#include <sys/types.h>
#include <machine/bswap.h>
int main(void) { return bswap32(0); }
EOF
3295
if compile_prog "" "" ; then
3296 3297 3298
  bswap_h=yes
fi

R
Ronnie Sahlberg 已提交
3299 3300
##########################################
# Do we have libiscsi
3301 3302
# We check for iscsi_write16_sync() to make sure we have a
# at least version 1.4.0 of libiscsi.
R
Ronnie Sahlberg 已提交
3303 3304
if test "$libiscsi" != "no" ; then
  cat > $TMPC << EOF
3305
#include <stdio.h>
R
Ronnie Sahlberg 已提交
3306
#include <iscsi/iscsi.h>
3307
int main(void) { iscsi_write16_sync(NULL,0,0,NULL,0,0,0,0,0,0,0); return 0; }
R
Ronnie Sahlberg 已提交
3308
EOF
3309
  if $pkg_config --atleast-version=1.7.0 libiscsi; then
3310
    libiscsi="yes"
3311 3312
    libiscsi_cflags=$($pkg_config --cflags libiscsi)
    libiscsi_libs=$($pkg_config --libs libiscsi)
3313
  elif compile_prog "" "-liscsi" ; then
R
Ronnie Sahlberg 已提交
3314
    libiscsi="yes"
3315
    libiscsi_libs="-liscsi"
R
Ronnie Sahlberg 已提交
3316 3317
  else
    if test "$libiscsi" = "yes" ; then
3318
      feature_not_found "libiscsi" "Install libiscsi devel"
R
Ronnie Sahlberg 已提交
3319 3320 3321 3322 3323
    fi
    libiscsi="no"
  fi
fi

3324 3325 3326 3327 3328 3329 3330 3331 3332 3333 3334 3335 3336 3337 3338
# We also need to know the API version because there was an
# API change from 1.4.0 to 1.5.0.
if test "$libiscsi" = "yes"; then
  cat >$TMPC <<EOF
#include <iscsi/iscsi.h>
int main(void)
{
  iscsi_read10_task(0, 0, 0, 0, 0, 0, 0);
  return 0;
}
EOF
  if compile_prog "" "-liscsi"; then
    libiscsi_version="1.4.0"
  fi
fi
R
Ronnie Sahlberg 已提交
3339

3340 3341 3342 3343 3344 3345 3346 3347 3348 3349 3350 3351
##########################################
# Do we need libm
cat > $TMPC << EOF
#include <math.h>
int main(void) { return isnan(sin(0.0)); }
EOF
if compile_prog "" "" ; then
  :
elif compile_prog "" "-lm" ; then
  LIBS="-lm $LIBS"
  libs_qga="-lm $libs_qga"
else
3352
  error_exit "libm check failed"
3353 3354
fi

A
aliguori 已提交
3355 3356
##########################################
# Do we need librt
3357 3358 3359 3360
# uClibc provides 2 versions of clock_gettime(), one with realtime
# support and one without. This means that the clock_gettime() don't
# need -lrt. We still need it for timer_create() so we check for this
# function in addition.
A
aliguori 已提交
3361 3362 3363
cat > $TMPC <<EOF
#include <signal.h>
#include <time.h>
3364 3365 3366 3367
int main(void) {
  timer_create(CLOCK_REALTIME, NULL, NULL);
  return clock_gettime(CLOCK_REALTIME, NULL);
}
A
aliguori 已提交
3368 3369
EOF

3370
if compile_prog "" "" ; then
3371
  :
3372 3373
# we need pthread for static linking. use previous pthread test result
elif compile_prog "" "-lrt $pthread_lib" ; then
3374
  LIBS="-lrt $LIBS"
3375
  libs_qga="-lrt $libs_qga"
A
aliguori 已提交
3376 3377
fi

3378
if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
3379
        "$aix" != "yes" -a "$haiku" != "yes" ; then
3380 3381 3382
    libs_softmmu="-lutil $libs_softmmu"
fi

3383
##########################################
3384 3385 3386 3387 3388 3389
# spice probe
if test "$spice" != "no" ; then
  cat > $TMPC << EOF
#include <spice.h>
int main(void) { spice_server_new(); return 0; }
EOF
J
Jiri Denemark 已提交
3390 3391
  spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
  spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
3392 3393
  if $pkg_config --atleast-version=0.12.0 spice-server && \
     $pkg_config --atleast-version=0.12.3 spice-protocol && \
3394 3395 3396 3397
     compile_prog "$spice_cflags" "$spice_libs" ; then
    spice="yes"
    libs_softmmu="$libs_softmmu $spice_libs"
    QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
3398 3399
    spice_protocol_version=$($pkg_config --modversion spice-protocol)
    spice_server_version=$($pkg_config --modversion spice-server)
3400 3401
  else
    if test "$spice" = "yes" ; then
3402
      feature_not_found "spice" "Install spice-server and spice-protocol devel"
3403 3404 3405 3406 3407
    fi
    spice="no"
  fi
fi

R
Robert Relyea 已提交
3408
# check for libcacard for smartcard support
P
Paolo Bonzini 已提交
3409 3410 3411 3412
smartcard_cflags=""
# TODO - what's the minimal nss version we support?
if test "$smartcard_nss" != "no"; then
  cat > $TMPC << EOF
3413 3414 3415
#include <pk11pub.h>
int main(void) { PK11_FreeSlot(0); return 0; }
EOF
P
Paolo Bonzini 已提交
3416 3417 3418 3419 3420 3421 3422 3423 3424 3425 3426
    smartcard_includes="-I\$(SRC_PATH)/libcacard"
    libcacard_libs="$($pkg_config --libs nss 2>/dev/null) $glib_libs"
    libcacard_cflags="$($pkg_config --cflags nss 2>/dev/null) $glib_cflags"
    test_cflags="$libcacard_cflags"
    # The header files in nss < 3.13.3 have a bug which causes them to
    # emit a warning. If we're going to compile QEMU with -Werror, then
    # test that the headers don't have this bug. Otherwise we would pass
    # the configure test but fail to compile QEMU later.
    if test "$werror" = "yes"; then
        test_cflags="-Werror $test_cflags"
    fi
3427
    if test -n "$libtool" &&
3428
       $pkg_config --atleast-version=3.12.8 nss && \
P
Paolo Bonzini 已提交
3429 3430 3431 3432 3433 3434 3435 3436
      compile_prog "$test_cflags" "$libcacard_libs"; then
        smartcard_nss="yes"
        QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags"
        QEMU_INCLUDES="$QEMU_INCLUDES $smartcard_includes"
        libs_softmmu="$libcacard_libs $libs_softmmu"
    else
        if test "$smartcard_nss" = "yes"; then
            feature_not_found "nss"
R
Robert Relyea 已提交
3437
        fi
P
Paolo Bonzini 已提交
3438
        smartcard_nss="no"
R
Robert Relyea 已提交
3439 3440 3441
    fi
fi

G
Gerd Hoffmann 已提交
3442 3443
# check for libusb
if test "$libusb" != "no" ; then
3444
    if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
G
Gerd Hoffmann 已提交
3445
        libusb="yes"
3446 3447
        libusb_cflags=$($pkg_config --cflags libusb-1.0)
        libusb_libs=$($pkg_config --libs libusb-1.0)
G
Gerd Hoffmann 已提交
3448 3449 3450 3451
        QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
        libs_softmmu="$libs_softmmu $libusb_libs"
    else
        if test "$libusb" = "yes"; then
3452
            feature_not_found "libusb" "Install libusb devel"
G
Gerd Hoffmann 已提交
3453 3454 3455 3456 3457
        fi
        libusb="no"
    fi
fi

3458 3459
# check for usbredirparser for usb network redirection support
if test "$usb_redir" != "no" ; then
3460
    if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
3461
        usb_redir="yes"
3462 3463
        usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
        usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
3464
        QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
A
Aurelien Jarno 已提交
3465
        libs_softmmu="$libs_softmmu $usb_redir_libs"
3466 3467
    else
        if test "$usb_redir" = "yes"; then
3468
            feature_not_found "usb-redir" "Install usbredir devel"
3469 3470 3471 3472 3473
        fi
        usb_redir="no"
    fi
fi

3474 3475 3476 3477 3478 3479 3480 3481 3482 3483 3484 3485 3486 3487 3488 3489 3490 3491 3492 3493 3494 3495 3496 3497 3498 3499 3500 3501 3502 3503 3504 3505 3506 3507 3508 3509 3510 3511 3512 3513 3514 3515 3516 3517 3518 3519 3520 3521 3522 3523 3524 3525 3526 3527 3528
##########################################
# check if we have VSS SDK headers for win

if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
  case "$vss_win32_sdk" in
    "")   vss_win32_include="-I$source_path" ;;
    *\ *) # The SDK is installed in "Program Files" by default, but we cannot
          # handle path with spaces. So we symlink the headers into ".sdk/vss".
          vss_win32_include="-I$source_path/.sdk/vss"
	  symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
	  ;;
    *)    vss_win32_include="-I$vss_win32_sdk"
  esac
  cat > $TMPC << EOF
#define __MIDL_user_allocate_free_DEFINED__
#include <inc/win2003/vss.h>
int main(void) { return VSS_CTX_BACKUP; }
EOF
  if compile_prog "$vss_win32_include" "" ; then
    guest_agent_with_vss="yes"
    QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
    libs_qga="-lole32 -loleaut32 -lshlwapi -luuid -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
  else
    if test "$vss_win32_sdk" != "" ; then
      echo "ERROR: Please download and install Microsoft VSS SDK:"
      echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
      echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
      echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
      echo "ERROR: The headers are extracted in the directory \`inc'."
      feature_not_found "VSS support"
    fi
    guest_agent_with_vss="no"
  fi
fi

##########################################
# lookup Windows platform SDK (if not specified)
# The SDK is needed only to build .tlb (type library) file of guest agent
# VSS provider from the source. It is usually unnecessary because the
# pre-compiled .tlb file is included.

if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
  if test -z "$win_sdk"; then
    programfiles="$PROGRAMFILES"
    test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
    if test -n "$programfiles"; then
      win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
    else
      feature_not_found "Windows SDK"
    fi
  elif test "$win_sdk" = "no"; then
    win_sdk=""
  fi
fi

3529 3530
##########################################

B
Blue Swirl 已提交
3531 3532 3533 3534 3535 3536
##########################################
# check if we have fdatasync

fdatasync=no
cat > $TMPC << EOF
#include <unistd.h>
3537 3538 3539 3540
int main(void) {
#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
return fdatasync(0);
#else
3541
#error Not supported
3542 3543
#endif
}
B
Blue Swirl 已提交
3544 3545 3546 3547 3548
EOF
if compile_prog "" "" ; then
    fdatasync=yes
fi

A
Andreas Färber 已提交
3549 3550 3551 3552 3553 3554 3555
##########################################
# check if we have madvise

madvise=no
cat > $TMPC << EOF
#include <sys/types.h>
#include <sys/mman.h>
S
Scott Wood 已提交
3556
#include <stddef.h>
A
Andreas Färber 已提交
3557 3558 3559 3560 3561 3562 3563 3564 3565 3566 3567 3568
int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
EOF
if compile_prog "" "" ; then
    madvise=yes
fi

##########################################
# check if we have posix_madvise

posix_madvise=no
cat > $TMPC << EOF
#include <sys/mman.h>
S
Scott Wood 已提交
3569
#include <stddef.h>
A
Andreas Färber 已提交
3570 3571 3572 3573 3574 3575
int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
EOF
if compile_prog "" "" ; then
    posix_madvise=yes
fi

3576 3577 3578 3579 3580 3581 3582 3583 3584 3585 3586 3587 3588 3589 3590 3591 3592 3593
##########################################
# check if we have usable SIGEV_THREAD_ID

sigev_thread_id=no
cat > $TMPC << EOF
#include <signal.h>
int main(void) {
  struct sigevent ev;
  ev.sigev_notify = SIGEV_THREAD_ID;
  ev._sigev_un._tid = 0;
  asm volatile("" : : "g"(&ev));
  return 0;
}
EOF
if compile_prog "" "" ; then
    sigev_thread_id=yes
fi

3594 3595 3596
##########################################
# check if trace backend exists

3597
$python "$source_path/scripts/tracetool.py" "--backend=$trace_backend" --check-backend  > /dev/null 2> /dev/null
3598
if test "$?" -ne 0 ; then
3599 3600
  error_exit "invalid trace backend" \
      "Please choose a supported trace backend."
3601 3602
fi

3603 3604 3605 3606
##########################################
# For 'ust' backend, test if ust headers are present
if test "$trace_backend" = "ust"; then
  cat > $TMPC << EOF
3607
#include <lttng/tracepoint.h>
3608 3609 3610
int main(void) { return 0; }
EOF
  if compile_prog "" "" ; then
3611 3612 3613 3614 3615 3616 3617 3618 3619 3620 3621 3622 3623
    if $pkg_config lttng-ust --exists; then
      lttng_ust_libs=`$pkg_config --libs lttng-ust`
    else
      lttng_ust_libs="-llttng-ust"
    fi
    if $pkg_config liburcu-bp --exists; then
      urcu_bp_libs=`$pkg_config --libs liburcu-bp`
    else
      urcu_bp_libs="-lurcu-bp"
    fi

    LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
    libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
3624
  else
3625
    error_exit "Trace backend 'ust' missing lttng-ust header files"
3626 3627
  fi
fi
3628 3629 3630 3631 3632

##########################################
# For 'dtrace' backend, test if 'dtrace' command is present
if test "$trace_backend" = "dtrace"; then
  if ! has 'dtrace' ; then
3633
    error_exit "dtrace command is not found in PATH $PATH"
3634
  fi
3635 3636 3637 3638
  trace_backend_stap="no"
  if has 'stap' ; then
    trace_backend_stap="yes"
  fi
3639 3640
fi

W
Wolfgang Mauerer 已提交
3641
##########################################
3642
# check and set a backend for coroutine
3643

3644 3645 3646 3647 3648 3649 3650 3651 3652
# We prefer ucontext, but it's not always possible. The fallback
# is sigcontext. gthread is not selectable except explicitly, because
# it is not functional enough to run QEMU proper. (It is occasionally
# useful for debugging purposes.)  On Windows the only valid backend
# is the Windows-specific one.

ucontext_works=no
if test "$darwin" != "yes"; then
  cat > $TMPC << EOF
3653
#include <ucontext.h>
3654 3655 3656
#ifdef __stub_makecontext
#error Ignoring glibc stub makecontext which will always fail
#endif
3657
int main(void) { makecontext(0, 0, 0); return 0; }
3658
EOF
3659 3660 3661 3662 3663 3664 3665 3666 3667 3668 3669 3670
  if compile_prog "" "" ; then
    ucontext_works=yes
  fi
fi

if test "$coroutine" = ""; then
  if test "$mingw32" = "yes"; then
    coroutine=win32
  elif test "$ucontext_works" = "yes"; then
    coroutine=ucontext
  else
    coroutine=sigaltstack
3671
  fi
3672
else
3673 3674 3675 3676 3677 3678 3679 3680 3681 3682 3683 3684 3685 3686 3687 3688 3689 3690 3691 3692 3693 3694 3695
  case $coroutine in
  windows)
    if test "$mingw32" != "yes"; then
      error_exit "'windows' coroutine backend only valid for Windows"
    fi
    # Unfortunately the user visible backend name doesn't match the
    # coroutine-*.c filename for this case, so we have to adjust it here.
    coroutine=win32
    ;;
  ucontext)
    if test "$ucontext_works" != "yes"; then
      feature_not_found "ucontext"
    fi
    ;;
  gthread|sigaltstack)
    if test "$mingw32" = "yes"; then
      error_exit "only the 'windows' coroutine backend is valid for Windows"
    fi
    ;;
  *)
    error_exit "unknown coroutine backend $coroutine"
    ;;
  esac
3696 3697
fi

3698 3699 3700 3701 3702 3703 3704 3705 3706 3707 3708
if test "$coroutine_pool" = ""; then
  if test "$coroutine" = "gthread"; then
    coroutine_pool=no
  else
    coroutine_pool=yes
  fi
fi
if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
  error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
fi

3709 3710 3711
##########################################
# check if we have open_by_handle_at

S
Stefan Weil 已提交
3712
open_by_handle_at=no
3713 3714
cat > $TMPC << EOF
#include <fcntl.h>
3715 3716 3717
#if !defined(AT_EMPTY_PATH)
# error missing definition
#else
3718
int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
3719
#endif
3720 3721 3722 3723 3724
EOF
if compile_prog "" "" ; then
    open_by_handle_at=yes
fi

3725 3726 3727 3728 3729 3730 3731
########################################
# check if we have linux/magic.h

linux_magic_h=no
cat > $TMPC << EOF
#include <linux/magic.h>
int main(void) {
3732
  return 0;
3733 3734 3735 3736 3737 3738
}
EOF
if compile_prog "" "" ; then
    linux_magic_h=yes
fi

3739
########################################
K
Kevin Wolf 已提交
3740 3741 3742 3743 3744 3745 3746 3747
# check whether we can disable warning option with a pragma (this is needed
# to silence warnings in the headers of some versions of external libraries).
# This test has to be compiled with -Werror as otherwise an unknown pragma is
# only a warning.
#
# If we can't selectively disable warning in the code, disable -Werror so that
# the build doesn't fail anyway.

3748 3749
pragma_disable_unused_but_set=no
cat > $TMPC << EOF
3750
#pragma GCC diagnostic push
3751
#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
K
Kevin Wolf 已提交
3752
#pragma GCC diagnostic ignored "-Wstrict-prototypes"
3753
#pragma GCC diagnostic pop
K
Kevin Wolf 已提交
3754

3755 3756 3757 3758 3759
int main(void) {
    return 0;
}
EOF
if compile_prog "-Werror" "" ; then
3760
    pragma_diagnostic_available=yes
K
Kevin Wolf 已提交
3761 3762
else
    werror=no
3763 3764
fi

3765
########################################
3766
# check if we have valgrind/valgrind.h and valgrind/memcheck.h
3767 3768 3769 3770

valgrind_h=no
cat > $TMPC << EOF
#include <valgrind/valgrind.h>
3771
#include <valgrind/memcheck.h>
3772 3773 3774 3775 3776 3777 3778 3779
int main(void) {
  return 0;
}
EOF
if compile_prog "" "" ; then
    valgrind_h=yes
fi

3780 3781 3782 3783 3784 3785 3786
########################################
# check if environ is declared

has_environ=no
cat > $TMPC << EOF
#include <unistd.h>
int main(void) {
3787
    environ = 0;
3788 3789 3790 3791 3792 3793 3794
    return 0;
}
EOF
if compile_prog "" "" ; then
    has_environ=yes
fi

3795 3796 3797 3798 3799 3800 3801
########################################
# check if cpuid.h is usable.

cpuid_h=no
cat > $TMPC << EOF
#include <cpuid.h>
int main(void) {
3802 3803 3804 3805 3806 3807 3808 3809 3810 3811 3812 3813
    unsigned a, b, c, d;
    int max = __get_cpuid_max(0, 0);

    if (max >= 1) {
        __cpuid(1, a, b, c, d);
    }

    if (max >= 7) {
        __cpuid_count(7, 0, a, b, c, d);
    }

    return 0;
3814 3815 3816 3817 3818 3819
}
EOF
if compile_prog "" "" ; then
    cpuid_h=yes
fi

3820 3821 3822 3823 3824 3825 3826 3827 3828 3829
########################################
# check if __[u]int128_t is usable.

int128=no
cat > $TMPC << EOF
__int128_t a;
__uint128_t b;
int main (void) {
  a = a + b;
  b = a * b;
3830
  a = a * a;
3831 3832 3833 3834 3835 3836
  return 0;
}
EOF
if compile_prog "" "" ; then
    int128=yes
fi
3837

3838 3839 3840 3841 3842 3843 3844 3845 3846 3847 3848 3849 3850 3851
########################################
# check if getauxval is available.

getauxval=no
cat > $TMPC << EOF
#include <sys/auxv.h>
int main(void) {
  return getauxval(AT_HWCAP) == 0;
}
EOF
if compile_prog "" "" ; then
    getauxval=yes
fi

3852
##########################################
3853 3854 3855
# End of CC checks
# After here, no more $cc or $ld runs

B
Blue Swirl 已提交
3856 3857 3858 3859
if test "$gcov" = "yes" ; then
  CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
  LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
elif test "$debug" = "no" ; then
3860
  CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
3861
fi
J
Juan Quintela 已提交
3862

P
Peter Lieven 已提交
3863 3864 3865 3866 3867 3868 3869 3870 3871 3872 3873 3874 3875 3876
##########################################
# Do we have libnfs
if test "$libnfs" != "no" ; then
  if $pkg_config --atleast-version=1.9.2 libnfs; then
    libnfs="yes"
    libnfs_libs=$($pkg_config --libs libnfs)
    LIBS="$LIBS $libnfs_libs"
  else
    if test "$libnfs" = "yes" ; then
      feature_not_found "libnfs"
    fi
    libnfs="no"
  fi
fi
B
Blue Swirl 已提交
3877

3878 3879 3880 3881 3882 3883 3884 3885 3886 3887
# Disable zero malloc errors for official releases unless explicitly told to
# enable/disable
if test -z "$zero_malloc" ; then
    if test "$z_version" = "50" ; then
	zero_malloc="no"
    else
	zero_malloc="yes"
    fi
fi

3888 3889 3890 3891 3892
# Now we've finished running tests it's OK to add -Werror to the compiler flags
if test "$werror" = "yes"; then
    QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
fi

3893 3894
if test "$solaris" = "no" ; then
    if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
3895
        LDFLAGS="-Wl,--warn-common $LDFLAGS"
3896 3897 3898
    fi
fi

3899 3900 3901 3902 3903 3904 3905
# test if pod2man has --utf8 option
if pod2man --help | grep -q utf8; then
    POD2MAN="pod2man --utf8"
else
    POD2MAN="pod2man"
fi

3906 3907 3908 3909 3910 3911 3912 3913 3914
# Use ASLR, no-SEH and DEP if available
if test "$mingw32" = "yes" ; then
    for flag in --dynamicbase --no-seh --nxcompat; do
        if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
            LDFLAGS="-Wl,$flag $LDFLAGS"
        fi
    done
fi

3915
qemu_confdir=$sysconfdir$confsuffix
F
Fam Zheng 已提交
3916
qemu_moddir=$libdir$confsuffix
3917
qemu_datadir=$datadir$confsuffix
3918
qemu_localedir="$datadir/locale"
3919

3920 3921
tools=""
if test "$want_tools" = "yes" ; then
3922
  tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
3923 3924 3925 3926 3927
  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
    tools="qemu-nbd\$(EXESUF) $tools"
  fi
fi
if test "$softmmu" = yes ; then
3928
  if test "$virtfs" != no ; then
3929 3930 3931 3932 3933
    if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
      virtfs=yes
      tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
    else
      if test "$virtfs" = yes; then
3934
        error_exit "VirtFS is supported only on Linux and requires libcap-devel and libattr-devel"
3935
      fi
3936
      virtfs=no
3937
    fi
3938
  fi
3939 3940
fi
if [ "$guest_agent" != "no" ]; then
3941
  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
M
Michael Roth 已提交
3942
      tools="qemu-ga\$(EXESUF) $tools"
3943 3944 3945
      if [ "$mingw32" = "yes" -a "$guest_agent_with_vss" = "yes" ]; then
        tools="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb $tools"
      fi
3946 3947 3948 3949 3950
      guest_agent=yes
  elif [ "$guest_agent" != yes ]; then
      guest_agent=no
  else
      error_exit "Guest agent is not supported on this platform"
3951
  fi
3952
fi
3953 3954 3955 3956 3957 3958 3959 3960

# Mac OS X ships with a broken assembler
roms=
if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
        "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
        "$softmmu" = yes ; then
  roms="optionrom"
fi
3961
if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
3962 3963
  roms="$roms spapr-rtas"
fi
3964

3965 3966 3967 3968
if test "$cpu" = "s390x" ; then
  roms="$roms s390-ccw"
fi

3969 3970 3971 3972
# Probe for the need for relocating the user-only binary.
if test "$pie" = "no" ; then
  textseg_addr=
  case "$cpu" in
3973
    arm | hppa | i386 | m68k | ppc | ppc64 | s390* | sparc | sparc64 | x86_64 | x32)
3974 3975 3976 3977 3978 3979 3980 3981 3982 3983 3984 3985 3986 3987 3988 3989 3990 3991 3992 3993 3994 3995 3996 3997 3998
      textseg_addr=0x60000000
      ;;
    mips)
      textseg_addr=0x400000
      ;;
  esac
  if [ -n "$textseg_addr" ]; then
    cat > $TMPC <<EOF
    int main(void) { return 0; }
EOF
    textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
    if ! compile_prog "" "$textseg_ldflags"; then
      # In case ld does not support -Ttext-segment, edit the default linker
      # script via sed to set the .text start addr.  This is needed on FreeBSD
      # at least.
      $ld --verbose | sed \
        -e '1,/==================================================/d' \
        -e '/==================================================/,$d' \
        -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
        -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
      textseg_ldflags="-Wl,-T../config-host.ld"
    fi
  fi
fi

3999
# add pixman flags after all config tests are done
4000
QEMU_CFLAGS="$QEMU_CFLAGS $pixman_cflags $fdt_cflags"
4001 4002
libs_softmmu="$libs_softmmu $pixman_libs"

B
bellard 已提交
4003
echo "Install prefix    $prefix"
4004
echo "BIOS directory    `eval echo $qemu_datadir`"
4005
echo "binary directory  `eval echo $bindir`"
A
Alon Levy 已提交
4006
echo "library directory `eval echo $libdir`"
F
Fam Zheng 已提交
4007
echo "module directory  `eval echo $qemu_moddir`"
4008
echo "libexec directory `eval echo $libexecdir`"
4009
echo "include directory `eval echo $includedir`"
4010
echo "config directory  `eval echo $sysconfdir`"
B
bellard 已提交
4011
if test "$mingw32" = "no" ; then
4012
echo "local state directory   `eval echo $local_statedir`"
4013
echo "Manual directory  `eval echo $mandir`"
B
bellard 已提交
4014
echo "ELF interp prefix $interp_prefix"
4015 4016
else
echo "local state directory   queried at runtime"
4017
echo "Windows SDK       $win_sdk"
B
bellard 已提交
4018
fi
4019
echo "Source path       $source_path"
B
bellard 已提交
4020
echo "C compiler        $cc"
B
bellard 已提交
4021
echo "Host C compiler   $host_cc"
4022
echo "C++ compiler      $cxx"
4023
echo "Objective-C compiler $objcc"
4024
echo "ARFLAGS           $ARFLAGS"
4025
echo "CFLAGS            $CFLAGS"
J
Juan Quintela 已提交
4026
echo "QEMU_CFLAGS       $QEMU_CFLAGS"
4027
echo "LDFLAGS           $LDFLAGS"
B
bellard 已提交
4028
echo "make              $make"
4029
echo "install           $install"
B
Blue Swirl 已提交
4030
echo "python            $python"
4031 4032 4033
if test "$slirp" = "yes" ; then
    echo "smbd              $smbd"
fi
F
Fam Zheng 已提交
4034
echo "module support    $modules"
B
bellard 已提交
4035
echo "host CPU          $cpu"
B
bellard 已提交
4036
echo "host big endian   $bigendian"
4037
echo "target list       $target_list"
4038
echo "tcg debug enabled $debug_tcg"
B
bellard 已提交
4039
echo "gprof enabled     $gprof"
4040
echo "sparse enabled    $sparse"
4041
echo "strip binaries    $strip_opt"
4042
echo "profiler          $profiler"
B
bellard 已提交
4043
echo "static build      $static"
4044
echo "-Werror enabled   $werror"
4045 4046 4047
if test "$darwin" = "yes" ; then
    echo "Cocoa support     $cocoa"
fi
4048
echo "pixman            $pixman"
4049
echo "SDL support       $sdl"
A
Anthony Liguori 已提交
4050
echo "GTK support       $gtk"
B
balrog 已提交
4051
echo "curses support    $curses"
A
Alexander Graf 已提交
4052
echo "curl support      $curl"
B
bellard 已提交
4053
echo "mingw32 support   $mingw32"
M
malc 已提交
4054
echo "Audio drivers     $audio_drv_list"
4055 4056
echo "Block whitelist (rw) $block_drv_rw_whitelist"
echo "Block whitelist (ro) $block_drv_ro_whitelist"
4057
echo "VirtFS support    $virtfs"
J
Jes Sorensen 已提交
4058 4059 4060 4061 4062 4063
echo "VNC support       $vnc"
if test "$vnc" = "yes" ; then
    echo "VNC TLS support   $vnc_tls"
    echo "VNC SASL support  $vnc_sasl"
    echo "VNC JPEG support  $vnc_jpeg"
    echo "VNC PNG support   $vnc_png"
4064
    echo "VNC WS support    $vnc_ws"
J
Jes Sorensen 已提交
4065
fi
4066 4067 4068
if test -n "$sparc_cpu"; then
    echo "Target Sparc Arch $sparc_cpu"
fi
4069
echo "xen support       $xen"
A
aurel32 已提交
4070
echo "brlapi support    $brlapi"
4071
echo "bluez  support    $bluez"
J
Juan Quintela 已提交
4072
echo "Documentation     $docs"
4073 4074
[ ! -z "$uname_release" ] && \
echo "uname -r          $uname_release"
P
Paul Brook 已提交
4075
echo "GUEST_BASE        $guest_base"
4076
echo "PIE               $pie"
4077
echo "vde support       $vde"
4078
echo "netmap support    $netmap"
4079
echo "Linux AIO support $linux_aio"
4080
echo "ATTR/XATTR support $attr"
T
ths 已提交
4081
echo "Install blobs     $blobs"
4082
echo "KVM support       $kvm"
M
Michael R. Hines 已提交
4083
echo "RDMA support      $rdma"
4084
echo "TCG interpreter   $tcg_interpreter"
4085
echo "fdt support       $fdt"
4086
echo "preadv support    $preadv"
B
Blue Swirl 已提交
4087
echo "fdatasync         $fdatasync"
A
Andreas Färber 已提交
4088 4089
echo "madvise           $madvise"
echo "posix_madvise     $posix_madvise"
4090
echo "sigev_thread_id   $sigev_thread_id"
4091
echo "uuid support      $uuid"
4092
echo "libcap-ng support $cap_ng"
M
Michael S. Tsirkin 已提交
4093
echo "vhost-net support $vhost_net"
4094
echo "vhost-scsi support $vhost_scsi"
4095
echo "Trace backend     $trace_backend"
P
Prerna Saxena 已提交
4096
echo "Trace output file $trace_file-<pid>"
4097
echo "spice support     $spice ($spice_protocol_version/$spice_server_version)"
4098
echo "rbd support       $rbd"
C
Christoph Hellwig 已提交
4099
echo "xfsctl support    $xfs"
R
Robert Relyea 已提交
4100
echo "nss used          $smartcard_nss"
G
Gerd Hoffmann 已提交
4101
echo "libusb            $libusb"
4102
echo "usb net redir     $usb_redir"
4103
echo "GLX support       $glx"
4104 4105 4106
if test "$libiscsi_version" = "1.4.0"; then
echo "libiscsi support  $libiscsi (1.4.0)"
else
R
Ronnie Sahlberg 已提交
4107
echo "libiscsi support  $libiscsi"
4108
fi
P
Peter Lieven 已提交
4109
echo "libnfs support    $libnfs"
4110
echo "build guest agent $guest_agent"
4111
echo "QGA VSS support   $guest_agent_with_vss"
4112
echo "seccomp support   $seccomp"
4113
echo "coroutine backend $coroutine"
4114
echo "coroutine pool    $coroutine_pool"
4115
echo "GlusterFS support $glusterfs"
4116
echo "virtio-blk-data-plane $virtio_blk_data_plane"
B
Blue Swirl 已提交
4117 4118
echo "gcov              $gcov_tool"
echo "gcov enabled      $gcov"
S
Stefan Berger 已提交
4119
echo "TPM support       $tpm"
4120
echo "libssh2 support   $libssh2"
P
Paolo Bonzini 已提交
4121
echo "TPM passthrough   $tpm_passthrough"
4122
echo "QOM debugging     $qom_cast_debug"
4123
echo "vhdx              $vhdx"
B
Benoît Canet 已提交
4124
echo "Quorum            $quorum"
Q
qiaonuohan 已提交
4125 4126
echo "lzo support       $lzo"
echo "snappy support    $snappy"
B
bellard 已提交
4127

4128
if test "$sdl_too_old" = "yes"; then
B
bellard 已提交
4129
echo "-> Your SDL version is too old - please upgrade to have SDL support"
B
bellard 已提交
4130
fi
B
bellard 已提交
4131

4132 4133
config_host_mak="config-host.mak"

4134 4135
echo "# Automatically generated by configure - do not modify" >config-all-disas.mak

4136 4137 4138
echo "# Automatically generated by configure - do not modify" > $config_host_mak
echo >> $config_host_mak

4139
echo all: >> $config_host_mak
4140 4141
echo "prefix=$prefix" >> $config_host_mak
echo "bindir=$bindir" >> $config_host_mak
A
Alon Levy 已提交
4142
echo "libdir=$libdir" >> $config_host_mak
4143
echo "libexecdir=$libexecdir" >> $config_host_mak
4144
echo "includedir=$includedir" >> $config_host_mak
4145 4146
echo "mandir=$mandir" >> $config_host_mak
echo "sysconfdir=$sysconfdir" >> $config_host_mak
4147
echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
4148 4149
echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
F
Fam Zheng 已提交
4150
echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
4151 4152 4153
if test "$mingw32" = "no" ; then
  echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
fi
4154
echo "qemu_helperdir=$libexecdir" >> $config_host_mak
4155 4156
echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
4157
echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
4158
echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
4159

4160
echo "ARCH=$ARCH" >> $config_host_mak
4161

4162
if test "$debug_tcg" = "yes" ; then
4163
  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
4164
fi
4165
if test "$strip_opt" = "yes" ; then
4166
  echo "STRIP=${strip}" >> $config_host_mak
4167
fi
B
bellard 已提交
4168
if test "$bigendian" = "yes" ; then
4169
  echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
4170
fi
B
bellard 已提交
4171
if test "$mingw32" = "yes" ; then
4172
  echo "CONFIG_WIN32=y" >> $config_host_mak
4173 4174 4175 4176 4177 4178 4179 4180 4181
  rc_version=`cat $source_path/VERSION`
  version_major=${rc_version%%.*}
  rc_version=${rc_version#*.}
  version_minor=${rc_version%%.*}
  rc_version=${rc_version#*.}
  version_subminor=${rc_version%%.*}
  version_micro=0
  echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
  echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4182 4183 4184 4185
  if test "$guest_agent_with_vss" = "yes" ; then
    echo "CONFIG_QGA_VSS=y" >> $config_host_mak
    echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
  fi
4186
else
J
Juan Quintela 已提交
4187
  echo "CONFIG_POSIX=y" >> $config_host_mak
M
Mark McLoughlin 已提交
4188 4189 4190 4191
fi

if test "$linux" = "yes" ; then
  echo "CONFIG_LINUX=y" >> $config_host_mak
B
bellard 已提交
4192
fi
4193

4194
if test "$darwin" = "yes" ; then
4195
  echo "CONFIG_DARWIN=y" >> $config_host_mak
4196
fi
M
malc 已提交
4197 4198

if test "$aix" = "yes" ; then
4199
  echo "CONFIG_AIX=y" >> $config_host_mak
M
malc 已提交
4200 4201
fi

B
bellard 已提交
4202
if test "$solaris" = "yes" ; then
4203
  echo "CONFIG_SOLARIS=y" >> $config_host_mak
4204
  echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
T
ths 已提交
4205
  if test "$needs_libsunmath" = "yes" ; then
4206
    echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
T
ths 已提交
4207
  fi
B
bellard 已提交
4208
fi
4209 4210 4211
if test "$haiku" = "yes" ; then
  echo "CONFIG_HAIKU=y" >> $config_host_mak
fi
4212
if test "$static" = "yes" ; then
4213
  echo "CONFIG_STATIC=y" >> $config_host_mak
B
bellard 已提交
4214
fi
4215
if test "$profiler" = "yes" ; then
4216
  echo "CONFIG_PROFILER=y" >> $config_host_mak
4217
fi
B
bellard 已提交
4218
if test "$slirp" = "yes" ; then
4219
  echo "CONFIG_SLIRP=y" >> $config_host_mak
4220
  echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
B
bellard 已提交
4221
fi
4222
if test "$vde" = "yes" ; then
4223
  echo "CONFIG_VDE=y" >> $config_host_mak
4224
fi
4225 4226 4227
if test "$netmap" = "yes" ; then
  echo "CONFIG_NETMAP=y" >> $config_host_mak
fi
4228 4229 4230
if test "$cap_ng" = "yes" ; then
  echo "CONFIG_LIBCAP=y" >> $config_host_mak
fi
4231
echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
M
malc 已提交
4232
for drv in $audio_drv_list; do
4233
    def=CONFIG_`echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]'`
4234
    echo "$def=y" >> $config_host_mak
M
malc 已提交
4235
    if test "$drv" = "fmod"; then
4236
        echo "FMOD_CFLAGS=-I$fmod_inc" >> $config_host_mak
M
malc 已提交
4237 4238
    fi
done
4239 4240 4241
if test "$audio_pt_int" = "yes" ; then
  echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
fi
4242 4243 4244
if test "$audio_win_int" = "yes" ; then
  echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
fi
4245 4246
echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
J
Jes Sorensen 已提交
4247 4248 4249
if test "$vnc" = "yes" ; then
  echo "CONFIG_VNC=y" >> $config_host_mak
fi
4250
if test "$vnc_tls" = "yes" ; then
4251
  echo "CONFIG_VNC_TLS=y" >> $config_host_mak
4252
fi
4253
if test "$vnc_sasl" = "yes" ; then
4254
  echo "CONFIG_VNC_SASL=y" >> $config_host_mak
4255
fi
J
Jes Sorensen 已提交
4256
if test "$vnc_jpeg" = "yes" ; then
4257 4258
  echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
fi
J
Jes Sorensen 已提交
4259
if test "$vnc_png" = "yes" ; then
C
Corentin Chary 已提交
4260 4261
  echo "CONFIG_VNC_PNG=y" >> $config_host_mak
fi
4262 4263 4264 4265
if test "$vnc_ws" = "yes" ; then
  echo "CONFIG_VNC_WS=y" >> $config_host_mak
  echo "VNC_WS_CFLAGS=$vnc_ws_cflags" >> $config_host_mak
fi
4266
if test "$fnmatch" = "yes" ; then
4267
  echo "CONFIG_FNMATCH=y" >> $config_host_mak
4268
fi
4269 4270 4271
if test "$uuid" = "yes" ; then
  echo "CONFIG_UUID=y" >> $config_host_mak
fi
C
Christoph Hellwig 已提交
4272 4273 4274
if test "$xfs" = "yes" ; then
  echo "CONFIG_XFS=y" >> $config_host_mak
fi
4275
qemu_version=`head $source_path/VERSION`
4276
echo "VERSION=$qemu_version" >>$config_host_mak
4277
echo "PKGVERSION=$pkgversion" >>$config_host_mak
4278 4279
echo "SRC_PATH=$source_path" >> $config_host_mak
echo "TARGET_DIRS=$target_list" >> $config_host_mak
J
Juan Quintela 已提交
4280
if [ "$docs" = "yes" ] ; then
4281
  echo "BUILD_DOCS=yes" >> $config_host_mak
4282
fi
F
Fam Zheng 已提交
4283
if test "$modules" = "yes"; then
F
Fam Zheng 已提交
4284 4285 4286
  # $shacmd can generate a hash started with digit, which the compiler doesn't
  # like as an symbol. So prefix it with an underscore
  echo "CONFIG_STAMP=_`(echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ `" >> $config_host_mak
F
Fam Zheng 已提交
4287 4288
  echo "CONFIG_MODULES=y" >> $config_host_mak
fi
4289
if test "$sdl" = "yes" ; then
4290
  echo "CONFIG_SDL=y" >> $config_host_mak
4291
  echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
4292 4293
fi
if test "$cocoa" = "yes" ; then
4294
  echo "CONFIG_COCOA=y" >> $config_host_mak
B
balrog 已提交
4295 4296
fi
if test "$curses" = "yes" ; then
4297
  echo "CONFIG_CURSES=y" >> $config_host_mak
4298
fi
R
Riku Voipio 已提交
4299
if test "$utimens" = "yes" ; then
4300
  echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
R
Riku Voipio 已提交
4301
fi
R
Riku Voipio 已提交
4302
if test "$pipe2" = "yes" ; then
4303
  echo "CONFIG_PIPE2=y" >> $config_host_mak
R
Riku Voipio 已提交
4304
fi
K
Kevin Wolf 已提交
4305 4306 4307
if test "$accept4" = "yes" ; then
  echo "CONFIG_ACCEPT4=y" >> $config_host_mak
fi
4308
if test "$splice" = "yes" ; then
4309
  echo "CONFIG_SPLICE=y" >> $config_host_mak
4310
fi
R
Riku Voipio 已提交
4311 4312 4313
if test "$eventfd" = "yes" ; then
  echo "CONFIG_EVENTFD=y" >> $config_host_mak
fi
4314 4315 4316
if test "$fallocate" = "yes" ; then
  echo "CONFIG_FALLOCATE=y" >> $config_host_mak
fi
4317 4318 4319
if test "$fallocate_punch_hole" = "yes" ; then
  echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
fi
4320 4321 4322
if test "$sync_file_range" = "yes" ; then
  echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
fi
4323 4324 4325
if test "$fiemap" = "yes" ; then
  echo "CONFIG_FIEMAP=y" >> $config_host_mak
fi
4326 4327 4328
if test "$dup3" = "yes" ; then
  echo "CONFIG_DUP3=y" >> $config_host_mak
fi
4329 4330 4331
if test "$ppoll" = "yes" ; then
  echo "CONFIG_PPOLL=y" >> $config_host_mak
fi
4332 4333 4334
if test "$prctl_pr_set_timerslack" = "yes" ; then
  echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
fi
4335 4336 4337 4338 4339 4340 4341 4342 4343
if test "$epoll" = "yes" ; then
  echo "CONFIG_EPOLL=y" >> $config_host_mak
fi
if test "$epoll_create1" = "yes" ; then
  echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
fi
if test "$epoll_pwait" = "yes" ; then
  echo "CONFIG_EPOLL_PWAIT=y" >> $config_host_mak
fi
4344 4345 4346
if test "$sendfile" = "yes" ; then
  echo "CONFIG_SENDFILE=y" >> $config_host_mak
fi
4347
if test "$inotify" = "yes" ; then
4348
  echo "CONFIG_INOTIFY=y" >> $config_host_mak
4349
fi
4350 4351 4352
if test "$inotify1" = "yes" ; then
  echo "CONFIG_INOTIFY1=y" >> $config_host_mak
fi
4353 4354 4355 4356 4357 4358
if test "$byteswap_h" = "yes" ; then
  echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
fi
if test "$bswap_h" = "yes" ; then
  echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
fi
A
Alexander Graf 已提交
4359
if test "$curl" = "yes" ; then
4360
  echo "CONFIG_CURL=m" >> $config_host_mak
J
Juan Quintela 已提交
4361
  echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
4362
  echo "CURL_LIBS=$curl_libs" >> $config_host_mak
A
Alexander Graf 已提交
4363
fi
A
aurel32 已提交
4364
if test "$brlapi" = "yes" ; then
4365
  echo "CONFIG_BRLAPI=y" >> $config_host_mak
A
aurel32 已提交
4366
fi
B
balrog 已提交
4367
if test "$bluez" = "yes" ; then
4368
  echo "CONFIG_BLUEZ=y" >> $config_host_mak
4369
  echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
B
balrog 已提交
4370
fi
4371
echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
A
Anthony Liguori 已提交
4372 4373 4374 4375 4376
if test "$gtk" = "yes" ; then
  echo "CONFIG_GTK=y" >> $config_host_mak
  echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
  echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
fi
4377
if test "$xen" = "yes" ; then
J
Jan Kiszka 已提交
4378
  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
4379
  echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
4380
fi
4381 4382 4383
if test "$linux_aio" = "yes" ; then
  echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
fi
4384 4385 4386
if test "$attr" = "yes" ; then
  echo "CONFIG_ATTR=y" >> $config_host_mak
fi
4387 4388 4389
if test "$libattr" = "yes" ; then
  echo "CONFIG_LIBATTR=y" >> $config_host_mak
fi
4390 4391
if test "$virtfs" = "yes" ; then
  echo "CONFIG_VIRTFS=y" >> $config_host_mak
4392
fi
4393 4394 4395
if test "$vhost_scsi" = "yes" ; then
  echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
fi
T
ths 已提交
4396
if test "$blobs" = "yes" ; then
4397
  echo "INSTALL_BLOBS=yes" >> $config_host_mak
T
ths 已提交
4398
fi
A
aliguori 已提交
4399
if test "$iovec" = "yes" ; then
4400
  echo "CONFIG_IOVEC=y" >> $config_host_mak
A
aliguori 已提交
4401
fi
4402
if test "$preadv" = "yes" ; then
4403
  echo "CONFIG_PREADV=y" >> $config_host_mak
4404
fi
4405
if test "$fdt" = "yes" ; then
4406
  echo "CONFIG_FDT=y" >> $config_host_mak
4407
fi
M
Marcelo Tosatti 已提交
4408 4409 4410
if test "$signalfd" = "yes" ; then
  echo "CONFIG_SIGNALFD=y" >> $config_host_mak
fi
4411 4412 4413
if test "$tcg_interpreter" = "yes" ; then
  echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
fi
B
Blue Swirl 已提交
4414 4415 4416
if test "$fdatasync" = "yes" ; then
  echo "CONFIG_FDATASYNC=y" >> $config_host_mak
fi
A
Andreas Färber 已提交
4417 4418 4419 4420 4421 4422
if test "$madvise" = "yes" ; then
  echo "CONFIG_MADVISE=y" >> $config_host_mak
fi
if test "$posix_madvise" = "yes" ; then
  echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
fi
4423 4424 4425
if test "$sigev_thread_id" = "yes" ; then
  echo "CONFIG_SIGEV_THREAD_ID=y" >> $config_host_mak
fi
4426

4427 4428 4429
if test "$spice" = "yes" ; then
  echo "CONFIG_SPICE=y" >> $config_host_mak
fi
A
Alon Levy 已提交
4430

R
Robert Relyea 已提交
4431 4432
if test "$smartcard_nss" = "yes" ; then
  echo "CONFIG_SMARTCARD_NSS=y" >> $config_host_mak
P
Paul Brook 已提交
4433 4434
  echo "libcacard_libs=$libcacard_libs" >> $config_host_mak
  echo "libcacard_cflags=$libcacard_cflags" >> $config_host_mak
R
Robert Relyea 已提交
4435 4436
fi

G
Gerd Hoffmann 已提交
4437 4438 4439 4440
if test "$libusb" = "yes" ; then
  echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
fi

4441 4442 4443 4444
if test "$usb_redir" = "yes" ; then
  echo "CONFIG_USB_REDIR=y" >> $config_host_mak
fi

4445 4446
if test "$glx" = "yes" ; then
  echo "CONFIG_GLX=y" >> $config_host_mak
4447
  echo "GLX_LIBS=$glx_libs" >> $config_host_mak
M
Michael Walle 已提交
4448 4449
fi

Q
qiaonuohan 已提交
4450 4451 4452 4453 4454 4455 4456 4457
if test "$lzo" = "yes" ; then
  echo "CONFIG_LZO=y" >> $config_host_mak
fi

if test "$snappy" = "yes" ; then
  echo "CONFIG_SNAPPY=y" >> $config_host_mak
fi

R
Ronnie Sahlberg 已提交
4458
if test "$libiscsi" = "yes" ; then
4459
  echo "CONFIG_LIBISCSI=m" >> $config_host_mak
4460 4461 4462
  if test "$libiscsi_version" = "1.4.0"; then
    echo "CONFIG_LIBISCSI_1_4=y" >> $config_host_mak
  fi
4463 4464
  echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
  echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
R
Ronnie Sahlberg 已提交
4465 4466
fi

P
Peter Lieven 已提交
4467 4468 4469 4470
if test "$libnfs" = "yes" ; then
  echo "CONFIG_LIBNFS=y" >> $config_host_mak
fi

4471 4472 4473 4474
if test "$seccomp" = "yes"; then
  echo "CONFIG_SECCOMP=y" >> $config_host_mak
fi

4475
# XXX: suppress that
B
bellard 已提交
4476
if [ "$bsd" = "yes" ] ; then
4477
  echo "CONFIG_BSD=y" >> $config_host_mak
B
bellard 已提交
4478 4479
fi

4480
echo "CONFIG_UNAME_RELEASE=\"$uname_release\"" >> $config_host_mak
4481

4482 4483 4484
if test "$zero_malloc" = "yes" ; then
  echo "CONFIG_ZERO_MALLOC=y" >> $config_host_mak
fi
4485 4486 4487
if test "$qom_cast_debug" = "yes" ; then
  echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
fi
4488
if test "$rbd" = "yes" ; then
4489
  echo "CONFIG_RBD=m" >> $config_host_mak
4490 4491
  echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
  echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
4492 4493
fi

4494
echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
4495 4496 4497 4498 4499
if test "$coroutine_pool" = "yes" ; then
  echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
else
  echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
fi
4500

4501 4502 4503 4504
if test "$open_by_handle_at" = "yes" ; then
  echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
fi

4505 4506
if test "$linux_magic_h" = "yes" ; then
  echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
4507 4508
fi

4509 4510
if test "$pragma_diagnostic_available" = "yes" ; then
  echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
4511 4512
fi

4513 4514 4515 4516
if test "$valgrind_h" = "yes" ; then
  echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
fi

4517 4518
if test "$has_environ" = "yes" ; then
  echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
4519 4520
fi

4521 4522 4523 4524
if test "$cpuid_h" = "yes" ; then
  echo "CONFIG_CPUID_H=y" >> $config_host_mak
fi

4525 4526 4527 4528
if test "$int128" = "yes" ; then
  echo "CONFIG_INT128=y" >> $config_host_mak
fi

4529 4530 4531 4532
if test "$getauxval" = "yes" ; then
  echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
fi

4533
if test "$glusterfs" = "yes" ; then
4534
  echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
4535 4536
  echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
  echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
4537 4538 4539 4540
fi

if test "$glusterfs_discard" = "yes" ; then
  echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
4541
fi
4542

4543 4544 4545 4546
if test "$glusterfs_zerofill" = "yes" ; then
  echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
fi

4547
if test "$libssh2" = "yes" ; then
4548
  echo "CONFIG_LIBSSH2=m" >> $config_host_mak
4549 4550
  echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
  echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
4551 4552
fi

B
Benoît Canet 已提交
4553 4554 4555 4556
if test "$quorum" = "yes" ; then
  echo "CONFIG_QUORUM=y" >> $config_host_mak
fi

4557
if test "$virtio_blk_data_plane" = "yes" ; then
4558
  echo 'CONFIG_VIRTIO_BLK_DATA_PLANE=$(CONFIG_VIRTIO)' >> $config_host_mak
4559 4560
fi

4561 4562 4563 4564
if test "$vhdx" = "yes" ; then
  echo "CONFIG_VHDX=y" >> $config_host_mak
fi

4565
# USB host support
G
Gerd Hoffmann 已提交
4566 4567 4568
if test "$libusb" = "yes"; then
  echo "HOST_USB=libusb legacy" >> $config_host_mak
else
4569
  echo "HOST_USB=stub" >> $config_host_mak
G
Gerd Hoffmann 已提交
4570
fi
4571

P
Paolo Bonzini 已提交
4572 4573 4574 4575 4576 4577 4578 4579
# TPM passthrough support?
if test "$tpm" = "yes"; then
  echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
  if test "$tpm_passthrough" = "yes"; then
    echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
  fi
fi

4580 4581
# use default implementation for tracing backend-specific routines
trace_default=yes
4582
echo "TRACE_BACKEND=$trace_backend" >> $config_host_mak
4583 4584
if test "$trace_backend" = "nop"; then
  echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
4585
fi
P
Prerna Saxena 已提交
4586
if test "$trace_backend" = "simple"; then
4587
  echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
4588
  trace_default=no
4589
  # Set the appropriate trace file.
4590
  trace_file="\"$trace_file-\" FMT_pid"
P
Prerna Saxena 已提交
4591
fi
4592 4593
if test "$trace_backend" = "stderr"; then
  echo "CONFIG_TRACE_STDERR=y" >> $config_host_mak
4594
  trace_default=no
4595 4596 4597 4598 4599 4600 4601 4602 4603
fi
if test "$trace_backend" = "ust"; then
  echo "CONFIG_TRACE_UST=y" >> $config_host_mak
fi
if test "$trace_backend" = "dtrace"; then
  echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
  if test "$trace_backend_stap" = "yes" ; then
    echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
  fi
4604
fi
4605 4606 4607 4608 4609
if test "$trace_backend" = "ftrace"; then
  if test "$linux" = "yes" ; then
    echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
    trace_default=no
  else
4610
    feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
4611 4612
  fi
fi
P
Prerna Saxena 已提交
4613
echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
4614 4615 4616
if test "$trace_default" = "yes"; then
  echo "CONFIG_TRACE_DEFAULT=y" >> $config_host_mak
fi
P
Prerna Saxena 已提交
4617

M
Michael R. Hines 已提交
4618 4619 4620 4621
if test "$rdma" = "yes" ; then
  echo "CONFIG_RDMA=y" >> $config_host_mak
fi

4622 4623 4624 4625 4626 4627
if test "$tcg_interpreter" = "yes"; then
  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
elif test "$ARCH" = "sparc64" ; then
  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
elif test "$ARCH" = "s390x" ; then
  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
4628
elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
4629 4630 4631 4632 4633 4634
  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
else
  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
fi
QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"

4635 4636
echo "TOOLS=$tools" >> $config_host_mak
echo "ROMS=$roms" >> $config_host_mak
4637 4638
echo "MAKE=$make" >> $config_host_mak
echo "INSTALL=$install" >> $config_host_mak
4639 4640
echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
4641 4642 4643 4644 4645 4646 4647
if test -n "$libtool"; then
  echo "INSTALL_PROG=\$(LIBTOOL) --mode=install $install -c -m 0755" >> $config_host_mak
  echo "INSTALL_LIB=\$(LIBTOOL) --mode=install $install -c -m 0644" >> $config_host_mak
else
  echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
  echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
fi
B
Blue Swirl 已提交
4648
echo "PYTHON=$python" >> $config_host_mak
4649
echo "CC=$cc" >> $config_host_mak
4650 4651 4652
if $iasl -h > /dev/null 2>&1; then
  echo "IASL=$iasl" >> $config_host_mak
fi
P
Paolo Bonzini 已提交
4653
echo "CC_I386=$cc_i386" >> $config_host_mak
4654
echo "HOST_CC=$host_cc" >> $config_host_mak
4655
echo "CXX=$cxx" >> $config_host_mak
4656
echo "OBJCC=$objcc" >> $config_host_mak
4657
echo "AR=$ar" >> $config_host_mak
4658
echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
4659 4660
echo "AS=$as" >> $config_host_mak
echo "CPP=$cpp" >> $config_host_mak
4661 4662
echo "OBJCOPY=$objcopy" >> $config_host_mak
echo "LD=$ld" >> $config_host_mak
4663
echo "WINDRES=$windres" >> $config_host_mak
A
Alon Levy 已提交
4664
echo "LIBTOOL=$libtool" >> $config_host_mak
4665
echo "CFLAGS=$CFLAGS" >> $config_host_mak
B
Brad 已提交
4666
echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
J
Juan Quintela 已提交
4667
echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
4668
echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
P
Paolo Bonzini 已提交
4669 4670 4671 4672 4673
if test "$sparse" = "yes" ; then
  echo "CC           := REAL_CC=\"\$(CC)\" cgcc"       >> $config_host_mak
  echo "HOST_CC      := REAL_CC=\"\$(HOST_CC)\" cgcc"  >> $config_host_mak
  echo "QEMU_CFLAGS  += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
fi
4674 4675 4676 4677 4678
if test "$cross_prefix" != ""; then
  echo "AUTOCONF_HOST := --host=${cross_prefix%-}"     >> $config_host_mak
else
  echo "AUTOCONF_HOST := "                             >> $config_host_mak
fi
4679
echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
B
Brad 已提交
4680
echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
4681
echo "LIBTOOLFLAGS=$LIBTOOLFLAGS" >> $config_host_mak
J
Juan Quintela 已提交
4682
echo "LIBS+=$LIBS" >> $config_host_mak
J
Juan Quintela 已提交
4683
echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
4684
echo "EXESUF=$EXESUF" >> $config_host_mak
F
Fam Zheng 已提交
4685 4686
echo "DSOSUF=$DSOSUF" >> $config_host_mak
echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
4687
echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
4688
echo "POD2MAN=$POD2MAN" >> $config_host_mak
4689
echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
B
Blue Swirl 已提交
4690 4691 4692 4693
if test "$gcov" = "yes" ; then
  echo "CONFIG_GCOV=y" >> $config_host_mak
  echo "GCOV=$gcov_tool" >> $config_host_mak
fi
4694

4695 4696
# use included Linux headers
if test "$linux" = "yes" ; then
4697
  mkdir -p linux-headers
4698
  case "$cpu" in
4699
  i386|x86_64|x32)
4700
    linux_arch=x86
4701 4702
    ;;
  ppcemb|ppc|ppc64)
4703
    linux_arch=powerpc
4704 4705
    ;;
  s390x)
4706 4707
    linux_arch=s390
    ;;
4708 4709 4710
  aarch64)
    linux_arch=arm64
    ;;
4711 4712 4713
  *)
    # For most CPUs the kernel architecture name and QEMU CPU name match.
    linux_arch="$cpu"
4714 4715
    ;;
  esac
4716 4717 4718 4719
    # For non-KVM architectures we will not have asm headers
    if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
      symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
    fi
4720 4721
fi

4722
for target in $target_list; do
4723
target_dir="$target"
4724
config_target_mak=$target_dir/config-target.mak
4725
target_name=`echo $target | cut -d '-' -f 1`
4726
target_bigendian="no"
4727

4728
case "$target_name" in
A
Anthony Green 已提交
4729
  armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
4730 4731 4732
  target_bigendian=yes
  ;;
esac
4733
target_softmmu="no"
B
bellard 已提交
4734
target_user_only="no"
4735
target_linux_user="no"
B
blueswir1 已提交
4736
target_bsd_user="no"
P
pbrook 已提交
4737
case "$target" in
4738
  ${target_name}-softmmu)
P
pbrook 已提交
4739 4740
    target_softmmu="yes"
    ;;
4741
  ${target_name}-linux-user)
4742
    if test "$linux" != "yes" ; then
4743
      error_exit "Target '$target' is only available on a Linux host"
4744
    fi
P
pbrook 已提交
4745 4746 4747
    target_user_only="yes"
    target_linux_user="yes"
    ;;
4748
  ${target_name}-bsd-user)
B
Blue Swirl 已提交
4749
    if test "$bsd" != "yes" ; then
4750
      error_exit "Target '$target' is only available on a BSD host"
4751
    fi
B
blueswir1 已提交
4752 4753 4754
    target_user_only="yes"
    target_bsd_user="yes"
    ;;
P
pbrook 已提交
4755
  *)
4756
    error_exit "Target '$target' not recognised"
P
pbrook 已提交
4757 4758 4759
    exit 1
    ;;
esac
4760

4761
mkdir -p $target_dir
4762
echo "# Automatically generated by configure - do not modify" > $config_target_mak
B
bellard 已提交
4763

P
pbrook 已提交
4764
bflt="no"
4765
interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_name/g"`
P
pbrook 已提交
4766
gdb_xml_files=""
A
aliguori 已提交
4767

4768
TARGET_ARCH="$target_name"
4769
TARGET_BASE_ARCH=""
4770
TARGET_ABI_DIR=""
4771

4772
case "$target_name" in
A
aurel32 已提交
4773 4774 4775
  i386)
  ;;
  x86_64)
4776
    TARGET_BASE_ARCH=i386
A
aurel32 已提交
4777 4778 4779 4780
  ;;
  alpha)
  ;;
  arm|armeb)
J
Juan Quintela 已提交
4781
    TARGET_ARCH=arm
A
aurel32 已提交
4782
    bflt="yes"
P
pbrook 已提交
4783
    gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
A
aurel32 已提交
4784
  ;;
4785 4786 4787
  aarch64)
    TARGET_BASE_ARCH=arm
    bflt="yes"
4788
    gdb_xml_files="aarch64-core.xml aarch64-fpu.xml"
4789
  ;;
A
aurel32 已提交
4790 4791
  cris)
  ;;
M
Michael Walle 已提交
4792 4793
  lm32)
  ;;
A
aurel32 已提交
4794 4795
  m68k)
    bflt="yes"
P
pbrook 已提交
4796
    gdb_xml_files="cf-core.xml cf-fp.xml"
A
aurel32 已提交
4797
  ;;
4798 4799
  microblaze|microblazeel)
    TARGET_ARCH=microblaze
4800 4801
    bflt="yes"
  ;;
J
Juan Quintela 已提交
4802
  mips|mipsel)
J
Juan Quintela 已提交
4803
    TARGET_ARCH=mips
4804
    echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
A
aurel32 已提交
4805 4806
  ;;
  mipsn32|mipsn32el)
4807
    TARGET_ARCH=mips64
4808
    TARGET_BASE_ARCH=mips
4809
    echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
4810
    echo "TARGET_ABI32=y" >> $config_target_mak
A
aurel32 已提交
4811 4812
  ;;
  mips64|mips64el)
J
Juan Quintela 已提交
4813
    TARGET_ARCH=mips64
4814
    TARGET_BASE_ARCH=mips
4815
    echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
A
aurel32 已提交
4816
  ;;
A
Anthony Green 已提交
4817 4818
  moxie)
  ;;
4819 4820 4821 4822
  or32)
    TARGET_ARCH=openrisc
    TARGET_BASE_ARCH=openrisc
  ;;
A
aurel32 已提交
4823
  ppc)
4824
    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
A
aurel32 已提交
4825 4826
  ;;
  ppcemb)
4827
    TARGET_BASE_ARCH=ppc
4828
    TARGET_ABI_DIR=ppc
4829
    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
A
aurel32 已提交
4830 4831
  ;;
  ppc64)
4832
    TARGET_BASE_ARCH=ppc
4833
    TARGET_ABI_DIR=ppc
4834
    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
A
aurel32 已提交
4835 4836
  ;;
  ppc64abi32)
J
Juan Quintela 已提交
4837
    TARGET_ARCH=ppc64
4838
    TARGET_BASE_ARCH=ppc
4839
    TARGET_ABI_DIR=ppc
4840
    echo "TARGET_ABI32=y" >> $config_target_mak
4841
    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
A
aurel32 已提交
4842 4843
  ;;
  sh4|sh4eb)
J
Juan Quintela 已提交
4844
    TARGET_ARCH=sh4
A
aurel32 已提交
4845 4846 4847 4848 4849
    bflt="yes"
  ;;
  sparc)
  ;;
  sparc64)
4850
    TARGET_BASE_ARCH=sparc
A
aurel32 已提交
4851 4852
  ;;
  sparc32plus)
J
Juan Quintela 已提交
4853
    TARGET_ARCH=sparc64
4854
    TARGET_BASE_ARCH=sparc
4855
    TARGET_ABI_DIR=sparc
4856
    echo "TARGET_ABI32=y" >> $config_target_mak
A
aurel32 已提交
4857
  ;;
4858 4859
  s390x)
  ;;
4860 4861
  unicore32)
  ;;
4862 4863 4864
  xtensa|xtensaeb)
    TARGET_ARCH=xtensa
  ;;
A
aurel32 已提交
4865
  *)
4866
    error_exit "Unsupported target CPU"
A
aurel32 已提交
4867 4868
  ;;
esac
4869 4870 4871 4872 4873 4874 4875
# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
if [ "$TARGET_BASE_ARCH" = "" ]; then
  TARGET_BASE_ARCH=$TARGET_ARCH
fi

symlink "$source_path/Makefile.target" "$target_dir/Makefile"

4876 4877 4878 4879 4880
upper() {
    echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
}

target_arch_name="`upper $TARGET_ARCH`"
4881
echo "TARGET_$target_arch_name=y" >> $config_target_mak
4882
echo "TARGET_NAME=$target_name" >> $config_target_mak
4883
echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
4884 4885 4886
if [ "$TARGET_ABI_DIR" = "" ]; then
  TARGET_ABI_DIR=$TARGET_ARCH
fi
4887
echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
4888
case "$target_name" in
J
Juan Quintela 已提交
4889 4890
  i386|x86_64)
    if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
4891
      echo "CONFIG_XEN=y" >> $config_target_mak
4892 4893 4894
      if test "$xen_pci_passthrough" = yes; then
        echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
      fi
J
Juan Quintela 已提交
4895
    fi
4896 4897
    ;;
  *)
J
Juan Quintela 已提交
4898
esac
4899
case "$target_name" in
4900
  aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x)
J
Juan Quintela 已提交
4901 4902
    # Make sure the target and host cpus are compatible
    if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
4903 4904 4905 4906 4907 4908 4909
      \( "$target_name" = "$cpu" -o \
      \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
      \( "$target_name" = "ppc64"  -a "$cpu" = "ppc" \) -o \
      \( "$target_name" = "ppc"    -a "$cpu" = "ppc64" \) -o \
      \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
      \( "$target_name" = "x86_64" -a "$cpu" = "i386"   \) -o \
      \( "$target_name" = "i386"   -a "$cpu" = "x86_64" \) \) ; then
4910
      echo "CONFIG_KVM=y" >> $config_target_mak
4911
      if test "$vhost_net" = "yes" ; then
M
Michael S. Tsirkin 已提交
4912 4913
        echo "CONFIG_VHOST_NET=y" >> $config_target_mak
      fi
J
Juan Quintela 已提交
4914 4915
    fi
esac
B
bellard 已提交
4916
if test "$target_bigendian" = "yes" ; then
4917
  echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
B
bellard 已提交
4918
fi
4919
if test "$target_softmmu" = "yes" ; then
4920
  echo "CONFIG_SOFTMMU=y" >> $config_target_mak
B
bellard 已提交
4921
fi
B
bellard 已提交
4922
if test "$target_user_only" = "yes" ; then
4923
  echo "CONFIG_USER_ONLY=y" >> $config_target_mak
4924
  echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
B
bellard 已提交
4925
fi
4926
if test "$target_linux_user" = "yes" ; then
4927
  echo "CONFIG_LINUX_USER=y" >> $config_target_mak
4928
fi
P
pbrook 已提交
4929 4930 4931 4932 4933
list=""
if test ! -z "$gdb_xml_files" ; then
  for x in $gdb_xml_files; do
    list="$list $source_path/gdb-xml/$x"
  done
4934
  echo "TARGET_XML_FILES=$list" >> $config_target_mak
P
pbrook 已提交
4935
fi
4936

P
pbrook 已提交
4937
if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
4938
  echo "TARGET_HAS_BFLT=y" >> $config_target_mak
P
pbrook 已提交
4939
fi
P
Paul Brook 已提交
4940
if test "$target_user_only" = "yes" -a "$guest_base" = "yes"; then
4941
  echo "CONFIG_USE_GUEST_BASE=y" >> $config_target_mak
P
Paul Brook 已提交
4942
fi
B
blueswir1 已提交
4943
if test "$target_bsd_user" = "yes" ; then
4944
  echo "CONFIG_BSD_USER=y" >> $config_target_mak
B
blueswir1 已提交
4945
fi
4946

4947
# generate QEMU_CFLAGS/LDFLAGS for targets
4948

4949
cflags=""
4950
ldflags=""
4951

4952 4953 4954
for i in $ARCH $TARGET_BASE_ARCH ; do
  case "$i" in
  alpha)
4955
    echo "CONFIG_ALPHA_DIS=y"  >> $config_target_mak
4956
    echo "CONFIG_ALPHA_DIS=y"  >> config-all-disas.mak
4957 4958
  ;;
  arm)
4959
    echo "CONFIG_ARM_DIS=y"  >> $config_target_mak
4960
    echo "CONFIG_ARM_DIS=y"  >> config-all-disas.mak
4961 4962 4963 4964
    if test -n "${cxx}"; then
      echo "CONFIG_ARM_A64_DIS=y"  >> $config_target_mak
      echo "CONFIG_ARM_A64_DIS=y"  >> config-all-disas.mak
    fi
4965 4966
  ;;
  cris)
4967
    echo "CONFIG_CRIS_DIS=y"  >> $config_target_mak
4968
    echo "CONFIG_CRIS_DIS=y"  >> config-all-disas.mak
4969 4970
  ;;
  hppa)
4971
    echo "CONFIG_HPPA_DIS=y"  >> $config_target_mak
4972
    echo "CONFIG_HPPA_DIS=y"  >> config-all-disas.mak
4973
  ;;
4974
  i386|x86_64|x32)
4975
    echo "CONFIG_I386_DIS=y"  >> $config_target_mak
4976
    echo "CONFIG_I386_DIS=y"  >> config-all-disas.mak
4977
  ;;
A
Aurelien Jarno 已提交
4978 4979
  ia64*)
    echo "CONFIG_IA64_DIS=y"  >> $config_target_mak
4980
    echo "CONFIG_IA64_DIS=y"  >> config-all-disas.mak
A
Aurelien Jarno 已提交
4981
  ;;
4982 4983
  lm32)
    echo "CONFIG_LM32_DIS=y"  >> $config_target_mak
4984
    echo "CONFIG_LM32_DIS=y"  >> config-all-disas.mak
4985
  ;;
4986
  m68k)
4987
    echo "CONFIG_M68K_DIS=y"  >> $config_target_mak
4988
    echo "CONFIG_M68K_DIS=y"  >> config-all-disas.mak
4989
  ;;
4990
  microblaze*)
4991
    echo "CONFIG_MICROBLAZE_DIS=y"  >> $config_target_mak
4992
    echo "CONFIG_MICROBLAZE_DIS=y"  >> config-all-disas.mak
4993 4994
  ;;
  mips*)
4995
    echo "CONFIG_MIPS_DIS=y"  >> $config_target_mak
4996
    echo "CONFIG_MIPS_DIS=y"  >> config-all-disas.mak
4997
  ;;
A
Anthony Green 已提交
4998 4999 5000 5001
  moxie*)
    echo "CONFIG_MOXIE_DIS=y"  >> $config_target_mak
    echo "CONFIG_MOXIE_DIS=y"  >> config-all-disas.mak
  ;;
5002 5003
  or32)
    echo "CONFIG_OPENRISC_DIS=y"  >> $config_target_mak
5004
    echo "CONFIG_OPENRISC_DIS=y"  >> config-all-disas.mak
5005
  ;;
5006
  ppc*)
5007
    echo "CONFIG_PPC_DIS=y"  >> $config_target_mak
5008
    echo "CONFIG_PPC_DIS=y"  >> config-all-disas.mak
5009
  ;;
5010
  s390*)
5011
    echo "CONFIG_S390_DIS=y"  >> $config_target_mak
5012
    echo "CONFIG_S390_DIS=y"  >> config-all-disas.mak
5013 5014
  ;;
  sh4)
5015
    echo "CONFIG_SH4_DIS=y"  >> $config_target_mak
5016
    echo "CONFIG_SH4_DIS=y"  >> config-all-disas.mak
5017 5018
  ;;
  sparc*)
5019
    echo "CONFIG_SPARC_DIS=y"  >> $config_target_mak
5020
    echo "CONFIG_SPARC_DIS=y"  >> config-all-disas.mak
5021
  ;;
5022 5023
  xtensa*)
    echo "CONFIG_XTENSA_DIS=y"  >> $config_target_mak
5024
    echo "CONFIG_XTENSA_DIS=y"  >> config-all-disas.mak
5025
  ;;
5026 5027
  esac
done
5028 5029
if test "$tcg_interpreter" = "yes" ; then
  echo "CONFIG_TCI_DIS=y"  >> $config_target_mak
5030
  echo "CONFIG_TCI_DIS=y"  >> config-all-disas.mak
5031
fi
5032

5033 5034 5035 5036 5037 5038 5039
case "$ARCH" in
alpha)
  # Ensure there's only a single GP
  cflags="-msmall-data $cflags"
;;
esac

5040
if test "$gprof" = "yes" ; then
5041
  echo "TARGET_GPROF=yes" >> $config_target_mak
5042 5043 5044 5045 5046 5047
  if test "$target_linux_user" = "yes" ; then
    cflags="-p $cflags"
    ldflags="-p $ldflags"
  fi
  if test "$target_softmmu" = "yes" ; then
    ldflags="-p $ldflags"
5048
    echo "GPROF_CFLAGS=-p" >> $config_target_mak
5049 5050 5051
  fi
fi

5052
if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
5053
  ldflags="$ldflags $textseg_ldflags"
5054 5055
fi

5056 5057
echo "LDFLAGS+=$ldflags" >> $config_target_mak
echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
5058

5059
done # for target in $targets
B
bellard 已提交
5060

5061 5062 5063 5064
if [ "$pixman" = "internal" ]; then
  echo "config-host.h: subdir-pixman" >> $config_host_mak
fi

M
Michael R. Hines 已提交
5065 5066 5067 5068
if test "$rdma" = "yes" ; then
echo "CONFIG_RDMA=y" >> $config_host_mak
fi

5069 5070 5071 5072
if [ "$dtc_internal" = "yes" ]; then
  echo "config-host.h: subdir-dtc" >> $config_host_mak
fi

P
Paolo Bonzini 已提交
5073
# build tree in object directory in case the source is not in the current directory
5074
DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
5075
DIRS="$DIRS fsdev"
5076
DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
P
Paolo Bonzini 已提交
5077
DIRS="$DIRS roms/seabios roms/vgabios"
5078
DIRS="$DIRS qapi-generated"
A
Anthony Liguori 已提交
5079 5080
FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
5081
FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
P
Paolo Bonzini 已提交
5082
FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
A
Andreas Färber 已提交
5083
FILES="$FILES pc-bios/spapr-rtas/Makefile"
5084
FILES="$FILES pc-bios/s390-ccw/Makefile"
P
Paolo Bonzini 已提交
5085
FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
5086
FILES="$FILES pc-bios/qemu-icon.bmp"
5087 5088
for bios_file in \
    $source_path/pc-bios/*.bin \
5089
    $source_path/pc-bios/*.aml \
5090 5091
    $source_path/pc-bios/*.rom \
    $source_path/pc-bios/*.dtb \
5092
    $source_path/pc-bios/*.img \
5093 5094 5095
    $source_path/pc-bios/openbios-* \
    $source_path/pc-bios/palcode-*
do
P
Paolo Bonzini 已提交
5096 5097
    FILES="$FILES pc-bios/`basename $bios_file`"
done
5098 5099 5100 5101
for test_file in `find $source_path/tests/acpi-test-data -type f`
do
    FILES="$FILES tests/acpi-test-data`echo $test_file | sed -e 's/.*acpi-test-data//'`"
done
P
Paolo Bonzini 已提交
5102 5103
mkdir -p $DIRS
for f in $FILES ; do
5104
    if [ -e "$source_path/$f" ] && [ "$source_path" != `pwd` ]; then
5105 5106
        symlink "$source_path/$f" "$f"
    fi
P
Paolo Bonzini 已提交
5107
done
P
Paul Brook 已提交
5108

5109
# temporary config to build submodules
5110
for rom in seabios vgabios ; do
5111
    config_mak=roms/$rom/config.mak
5112
    echo "# Automatically generated by configure - do not modify" > $config_mak
5113
    echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
5114
    echo "AS=$as" >> $config_mak
5115 5116
    echo "CC=$cc" >> $config_mak
    echo "BCC=bcc" >> $config_mak
5117
    echo "CPP=$cpp" >> $config_mak
5118
    echo "OBJCOPY=objcopy" >> $config_mak
5119
    echo "IASL=$iasl" >> $config_mak
5120 5121 5122
    echo "LD=$ld" >> $config_mak
done

5123 5124 5125
if test "$docs" = "yes" ; then
  mkdir -p QMP
fi
5126 5127 5128 5129 5130 5131 5132 5133 5134 5135 5136 5137 5138 5139

# Save the configure command line for later reuse.
cat <<EOD >config.status
#!/bin/sh
# Generated by configure.
# Run this file to recreate the current configuration.
# Compiler output produced by configure, useful for debugging
# configure, is in config.log if it exists.
EOD
printf "exec" >>config.status
printf " '%s'" "$0" "$@" >>config.status
echo >>config.status
chmod +x config.status