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