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