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