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