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