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