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