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