xref: /qemu/configure (revision 14b61600)
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, milkymist-tmu2)
3290
3291# GLX probe, used by milkymist-tmu2
3292# this is temporary, code will be switched to egl mid-term.
3293cat > $TMPC << EOF
3294#include <X11/Xlib.h>
3295#include <GL/gl.h>
3296#include <GL/glx.h>
3297int main(void) { glBegin(0); glXQueryVersion(0,0,0); return 0; }
3298EOF
3299if compile_prog "" "-lGL -lX11" ; then
3300  have_glx=yes
3301else
3302  have_glx=no
3303fi
3304
3305if test "$opengl" != "no" ; then
3306  opengl_pkgs="gl glesv2 epoxy egl"
3307  if $pkg_config $opengl_pkgs x11 && test "$have_glx" = "yes"; then
3308    opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3309    opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
3310    opengl=yes
3311    if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
3312        gtk_gl="yes"
3313    fi
3314  else
3315    if test "$opengl" = "yes" ; then
3316      feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3317    fi
3318    opengl_cflags=""
3319    opengl_libs=""
3320    opengl=no
3321  fi
3322fi
3323
3324
3325##########################################
3326# archipelago probe
3327if test "$archipelago" != "no" ; then
3328    cat > $TMPC <<EOF
3329#include <stdio.h>
3330#include <xseg/xseg.h>
3331#include <xseg/protocol.h>
3332int main(void) {
3333    xseg_initialize();
3334    return 0;
3335}
3336EOF
3337    archipelago_libs=-lxseg
3338    if compile_prog "" "$archipelago_libs"; then
3339        archipelago="yes"
3340        libs_tools="$archipelago_libs $libs_tools"
3341        libs_softmmu="$archipelago_libs $libs_softmmu"
3342
3343	echo "WARNING: Please check the licenses of QEMU and libxseg carefully."
3344	echo "GPLv3 versions of libxseg may not be compatible with QEMU's"
3345	echo "license and therefore prevent redistribution."
3346	echo
3347	echo "To disable Archipelago, use --disable-archipelago"
3348    else
3349      if test "$archipelago" = "yes" ; then
3350        feature_not_found "Archipelago backend support" "Install libxseg devel"
3351      fi
3352      archipelago="no"
3353    fi
3354fi
3355
3356
3357##########################################
3358# glusterfs probe
3359if test "$glusterfs" != "no" ; then
3360  if $pkg_config --atleast-version=3 glusterfs-api; then
3361    glusterfs="yes"
3362    glusterfs_cflags=`$pkg_config --cflags glusterfs-api`
3363    glusterfs_libs=`$pkg_config --libs glusterfs-api`
3364    if $pkg_config --atleast-version=5 glusterfs-api; then
3365      glusterfs_discard="yes"
3366    fi
3367    if $pkg_config --atleast-version=6 glusterfs-api; then
3368      glusterfs_zerofill="yes"
3369    fi
3370  else
3371    if test "$glusterfs" = "yes" ; then
3372      feature_not_found "GlusterFS backend support" \
3373          "Install glusterfs-api devel >= 3"
3374    fi
3375    glusterfs="no"
3376  fi
3377fi
3378
3379# Check for inotify functions when we are building linux-user
3380# emulator.  This is done because older glibc versions don't
3381# have syscall stubs for these implemented.  In that case we
3382# don't provide them even if kernel supports them.
3383#
3384inotify=no
3385cat > $TMPC << EOF
3386#include <sys/inotify.h>
3387
3388int
3389main(void)
3390{
3391	/* try to start inotify */
3392	return inotify_init();
3393}
3394EOF
3395if compile_prog "" "" ; then
3396  inotify=yes
3397fi
3398
3399inotify1=no
3400cat > $TMPC << EOF
3401#include <sys/inotify.h>
3402
3403int
3404main(void)
3405{
3406    /* try to start inotify */
3407    return inotify_init1(0);
3408}
3409EOF
3410if compile_prog "" "" ; then
3411  inotify1=yes
3412fi
3413
3414# check if utimensat and futimens are supported
3415utimens=no
3416cat > $TMPC << EOF
3417#define _ATFILE_SOURCE
3418#include <stddef.h>
3419#include <fcntl.h>
3420#include <sys/stat.h>
3421
3422int main(void)
3423{
3424    utimensat(AT_FDCWD, "foo", NULL, 0);
3425    futimens(0, NULL);
3426    return 0;
3427}
3428EOF
3429if compile_prog "" "" ; then
3430  utimens=yes
3431fi
3432
3433# check if pipe2 is there
3434pipe2=no
3435cat > $TMPC << EOF
3436#include <unistd.h>
3437#include <fcntl.h>
3438
3439int main(void)
3440{
3441    int pipefd[2];
3442    return pipe2(pipefd, O_CLOEXEC);
3443}
3444EOF
3445if compile_prog "" "" ; then
3446  pipe2=yes
3447fi
3448
3449# check if accept4 is there
3450accept4=no
3451cat > $TMPC << EOF
3452#include <sys/socket.h>
3453#include <stddef.h>
3454
3455int main(void)
3456{
3457    accept4(0, NULL, NULL, SOCK_CLOEXEC);
3458    return 0;
3459}
3460EOF
3461if compile_prog "" "" ; then
3462  accept4=yes
3463fi
3464
3465# check if tee/splice is there. vmsplice was added same time.
3466splice=no
3467cat > $TMPC << EOF
3468#include <unistd.h>
3469#include <fcntl.h>
3470#include <limits.h>
3471
3472int main(void)
3473{
3474    int len, fd = 0;
3475    len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3476    splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3477    return 0;
3478}
3479EOF
3480if compile_prog "" "" ; then
3481  splice=yes
3482fi
3483
3484##########################################
3485# libnuma probe
3486
3487if test "$numa" != "no" ; then
3488  cat > $TMPC << EOF
3489#include <numa.h>
3490int main(void) { return numa_available(); }
3491EOF
3492
3493  if compile_prog "" "-lnuma" ; then
3494    numa=yes
3495    libs_softmmu="-lnuma $libs_softmmu"
3496  else
3497    if test "$numa" = "yes" ; then
3498      feature_not_found "numa" "install numactl devel"
3499    fi
3500    numa=no
3501  fi
3502fi
3503
3504if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
3505    echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
3506    exit 1
3507fi
3508
3509##########################################
3510# tcmalloc probe
3511
3512if test "$tcmalloc" = "yes" ; then
3513  cat > $TMPC << EOF
3514#include <stdlib.h>
3515int main(void) { malloc(1); return 0; }
3516EOF
3517
3518  if compile_prog "" "-ltcmalloc" ; then
3519    LIBS="-ltcmalloc $LIBS"
3520  else
3521    feature_not_found "tcmalloc" "install gperftools devel"
3522  fi
3523fi
3524
3525##########################################
3526# jemalloc probe
3527
3528if test "$jemalloc" = "yes" ; then
3529  cat > $TMPC << EOF
3530#include <stdlib.h>
3531int main(void) { malloc(1); return 0; }
3532EOF
3533
3534  if compile_prog "" "-ljemalloc" ; then
3535    LIBS="-ljemalloc $LIBS"
3536  else
3537    feature_not_found "jemalloc" "install jemalloc devel"
3538  fi
3539fi
3540
3541##########################################
3542# signalfd probe
3543signalfd="no"
3544cat > $TMPC << EOF
3545#include <unistd.h>
3546#include <sys/syscall.h>
3547#include <signal.h>
3548int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3549EOF
3550
3551if compile_prog "" "" ; then
3552  signalfd=yes
3553fi
3554
3555# check if eventfd is supported
3556eventfd=no
3557cat > $TMPC << EOF
3558#include <sys/eventfd.h>
3559
3560int main(void)
3561{
3562    return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3563}
3564EOF
3565if compile_prog "" "" ; then
3566  eventfd=yes
3567fi
3568
3569# check if memfd is supported
3570memfd=no
3571cat > $TMPC << EOF
3572#include <sys/memfd.h>
3573
3574int main(void)
3575{
3576    return memfd_create("foo", MFD_ALLOW_SEALING);
3577}
3578EOF
3579if compile_prog "" "" ; then
3580  memfd=yes
3581fi
3582
3583
3584
3585# check for fallocate
3586fallocate=no
3587cat > $TMPC << EOF
3588#include <fcntl.h>
3589
3590int main(void)
3591{
3592    fallocate(0, 0, 0, 0);
3593    return 0;
3594}
3595EOF
3596if compile_prog "" "" ; then
3597  fallocate=yes
3598fi
3599
3600# check for fallocate hole punching
3601fallocate_punch_hole=no
3602cat > $TMPC << EOF
3603#include <fcntl.h>
3604#include <linux/falloc.h>
3605
3606int main(void)
3607{
3608    fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3609    return 0;
3610}
3611EOF
3612if compile_prog "" "" ; then
3613  fallocate_punch_hole=yes
3614fi
3615
3616# check that fallocate supports range zeroing inside the file
3617fallocate_zero_range=no
3618cat > $TMPC << EOF
3619#include <fcntl.h>
3620#include <linux/falloc.h>
3621
3622int main(void)
3623{
3624    fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3625    return 0;
3626}
3627EOF
3628if compile_prog "" "" ; then
3629  fallocate_zero_range=yes
3630fi
3631
3632# check for posix_fallocate
3633posix_fallocate=no
3634cat > $TMPC << EOF
3635#include <fcntl.h>
3636
3637int main(void)
3638{
3639    posix_fallocate(0, 0, 0);
3640    return 0;
3641}
3642EOF
3643if compile_prog "" "" ; then
3644    posix_fallocate=yes
3645fi
3646
3647# check for sync_file_range
3648sync_file_range=no
3649cat > $TMPC << EOF
3650#include <fcntl.h>
3651
3652int main(void)
3653{
3654    sync_file_range(0, 0, 0, 0);
3655    return 0;
3656}
3657EOF
3658if compile_prog "" "" ; then
3659  sync_file_range=yes
3660fi
3661
3662# check for linux/fiemap.h and FS_IOC_FIEMAP
3663fiemap=no
3664cat > $TMPC << EOF
3665#include <sys/ioctl.h>
3666#include <linux/fs.h>
3667#include <linux/fiemap.h>
3668
3669int main(void)
3670{
3671    ioctl(0, FS_IOC_FIEMAP, 0);
3672    return 0;
3673}
3674EOF
3675if compile_prog "" "" ; then
3676  fiemap=yes
3677fi
3678
3679# check for dup3
3680dup3=no
3681cat > $TMPC << EOF
3682#include <unistd.h>
3683
3684int main(void)
3685{
3686    dup3(0, 0, 0);
3687    return 0;
3688}
3689EOF
3690if compile_prog "" "" ; then
3691  dup3=yes
3692fi
3693
3694# check for ppoll support
3695ppoll=no
3696cat > $TMPC << EOF
3697#include <poll.h>
3698
3699int main(void)
3700{
3701    struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3702    ppoll(&pfd, 1, 0, 0);
3703    return 0;
3704}
3705EOF
3706if compile_prog "" "" ; then
3707  ppoll=yes
3708fi
3709
3710# check for prctl(PR_SET_TIMERSLACK , ... ) support
3711prctl_pr_set_timerslack=no
3712cat > $TMPC << EOF
3713#include <sys/prctl.h>
3714
3715int main(void)
3716{
3717    prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3718    return 0;
3719}
3720EOF
3721if compile_prog "" "" ; then
3722  prctl_pr_set_timerslack=yes
3723fi
3724
3725# check for epoll support
3726epoll=no
3727cat > $TMPC << EOF
3728#include <sys/epoll.h>
3729
3730int main(void)
3731{
3732    epoll_create(0);
3733    return 0;
3734}
3735EOF
3736if compile_prog "" "" ; then
3737  epoll=yes
3738fi
3739
3740# epoll_create1 and epoll_pwait are later additions
3741# so we must check separately for their presence
3742epoll_create1=no
3743cat > $TMPC << EOF
3744#include <sys/epoll.h>
3745
3746int main(void)
3747{
3748    /* Note that we use epoll_create1 as a value, not as
3749     * a function being called. This is necessary so that on
3750     * old SPARC glibc versions where the function was present in
3751     * the library but not declared in the header file we will
3752     * fail the configure check. (Otherwise we will get a compiler
3753     * warning but not an error, and will proceed to fail the
3754     * qemu compile where we compile with -Werror.)
3755     */
3756    return (int)(uintptr_t)&epoll_create1;
3757}
3758EOF
3759if compile_prog "" "" ; then
3760  epoll_create1=yes
3761fi
3762
3763epoll_pwait=no
3764cat > $TMPC << EOF
3765#include <sys/epoll.h>
3766
3767int main(void)
3768{
3769    epoll_pwait(0, 0, 0, 0, 0);
3770    return 0;
3771}
3772EOF
3773if compile_prog "" "" ; then
3774  epoll_pwait=yes
3775fi
3776
3777# check for sendfile support
3778sendfile=no
3779cat > $TMPC << EOF
3780#include <sys/sendfile.h>
3781
3782int main(void)
3783{
3784    return sendfile(0, 0, 0, 0);
3785}
3786EOF
3787if compile_prog "" "" ; then
3788  sendfile=yes
3789fi
3790
3791# check for timerfd support (glibc 2.8 and newer)
3792timerfd=no
3793cat > $TMPC << EOF
3794#include <sys/timerfd.h>
3795
3796int main(void)
3797{
3798    return(timerfd_create(CLOCK_REALTIME, 0));
3799}
3800EOF
3801if compile_prog "" "" ; then
3802  timerfd=yes
3803fi
3804
3805# check for setns and unshare support
3806setns=no
3807cat > $TMPC << EOF
3808#include <sched.h>
3809
3810int main(void)
3811{
3812    int ret;
3813    ret = setns(0, 0);
3814    ret = unshare(0);
3815    return ret;
3816}
3817EOF
3818if compile_prog "" "" ; then
3819  setns=yes
3820fi
3821
3822# Check if tools are available to build documentation.
3823if test "$docs" != "no" ; then
3824  if has makeinfo && has pod2man; then
3825    docs=yes
3826  else
3827    if test "$docs" = "yes" ; then
3828      feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
3829    fi
3830    docs=no
3831  fi
3832fi
3833
3834# Search for bswap_32 function
3835byteswap_h=no
3836cat > $TMPC << EOF
3837#include <byteswap.h>
3838int main(void) { return bswap_32(0); }
3839EOF
3840if compile_prog "" "" ; then
3841  byteswap_h=yes
3842fi
3843
3844# Search for bswap32 function
3845bswap_h=no
3846cat > $TMPC << EOF
3847#include <sys/endian.h>
3848#include <sys/types.h>
3849#include <machine/bswap.h>
3850int main(void) { return bswap32(0); }
3851EOF
3852if compile_prog "" "" ; then
3853  bswap_h=yes
3854fi
3855
3856##########################################
3857# Do we have libiscsi >= 1.9.0
3858if test "$libiscsi" != "no" ; then
3859  if $pkg_config --atleast-version=1.9.0 libiscsi; then
3860    libiscsi="yes"
3861    libiscsi_cflags=$($pkg_config --cflags libiscsi)
3862    libiscsi_libs=$($pkg_config --libs libiscsi)
3863  else
3864    if test "$libiscsi" = "yes" ; then
3865      feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
3866    fi
3867    libiscsi="no"
3868  fi
3869fi
3870
3871##########################################
3872# Do we need libm
3873cat > $TMPC << EOF
3874#include <math.h>
3875int main(int argc, char **argv) { return isnan(sin((double)argc)); }
3876EOF
3877if compile_prog "" "" ; then
3878  :
3879elif compile_prog "" "-lm" ; then
3880  LIBS="-lm $LIBS"
3881  libs_qga="-lm $libs_qga"
3882else
3883  error_exit "libm check failed"
3884fi
3885
3886##########################################
3887# Do we need librt
3888# uClibc provides 2 versions of clock_gettime(), one with realtime
3889# support and one without. This means that the clock_gettime() don't
3890# need -lrt. We still need it for timer_create() so we check for this
3891# function in addition.
3892cat > $TMPC <<EOF
3893#include <signal.h>
3894#include <time.h>
3895int main(void) {
3896  timer_create(CLOCK_REALTIME, NULL, NULL);
3897  return clock_gettime(CLOCK_REALTIME, NULL);
3898}
3899EOF
3900
3901if compile_prog "" "" ; then
3902  :
3903# we need pthread for static linking. use previous pthread test result
3904elif compile_prog "" "$pthread_lib -lrt" ; then
3905  LIBS="$LIBS -lrt"
3906  libs_qga="$libs_qga -lrt"
3907fi
3908
3909if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
3910        "$aix" != "yes" -a "$haiku" != "yes" ; then
3911    libs_softmmu="-lutil $libs_softmmu"
3912fi
3913
3914##########################################
3915# spice probe
3916if test "$spice" != "no" ; then
3917  cat > $TMPC << EOF
3918#include <spice.h>
3919int main(void) { spice_server_new(); return 0; }
3920EOF
3921  spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
3922  spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
3923  if $pkg_config --atleast-version=0.12.0 spice-server && \
3924     $pkg_config --atleast-version=0.12.3 spice-protocol && \
3925     compile_prog "$spice_cflags" "$spice_libs" ; then
3926    spice="yes"
3927    libs_softmmu="$libs_softmmu $spice_libs"
3928    QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
3929    spice_protocol_version=$($pkg_config --modversion spice-protocol)
3930    spice_server_version=$($pkg_config --modversion spice-server)
3931  else
3932    if test "$spice" = "yes" ; then
3933      feature_not_found "spice" \
3934          "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
3935    fi
3936    spice="no"
3937  fi
3938fi
3939
3940# check for smartcard support
3941smartcard_cflags=""
3942if test "$smartcard" != "no"; then
3943    if $pkg_config libcacard; then
3944        libcacard_cflags=$($pkg_config --cflags libcacard)
3945        libcacard_libs=$($pkg_config --libs libcacard)
3946        QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags"
3947        libs_softmmu="$libs_softmmu $libcacard_libs"
3948        smartcard="yes"
3949    else
3950        if test "$smartcard" = "yes"; then
3951            feature_not_found "smartcard" "Install libcacard devel"
3952        fi
3953        smartcard="no"
3954    fi
3955fi
3956
3957# check for libusb
3958if test "$libusb" != "no" ; then
3959    if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
3960        libusb="yes"
3961        libusb_cflags=$($pkg_config --cflags libusb-1.0)
3962        libusb_libs=$($pkg_config --libs libusb-1.0)
3963        QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
3964        libs_softmmu="$libs_softmmu $libusb_libs"
3965    else
3966        if test "$libusb" = "yes"; then
3967            feature_not_found "libusb" "Install libusb devel >= 1.0.13"
3968        fi
3969        libusb="no"
3970    fi
3971fi
3972
3973# check for usbredirparser for usb network redirection support
3974if test "$usb_redir" != "no" ; then
3975    if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
3976        usb_redir="yes"
3977        usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
3978        usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
3979        QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
3980        libs_softmmu="$libs_softmmu $usb_redir_libs"
3981    else
3982        if test "$usb_redir" = "yes"; then
3983            feature_not_found "usb-redir" "Install usbredir devel"
3984        fi
3985        usb_redir="no"
3986    fi
3987fi
3988
3989##########################################
3990# check if we have VSS SDK headers for win
3991
3992if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
3993  case "$vss_win32_sdk" in
3994    "")   vss_win32_include="-I$source_path" ;;
3995    *\ *) # The SDK is installed in "Program Files" by default, but we cannot
3996          # handle path with spaces. So we symlink the headers into ".sdk/vss".
3997          vss_win32_include="-I$source_path/.sdk/vss"
3998	  symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
3999	  ;;
4000    *)    vss_win32_include="-I$vss_win32_sdk"
4001  esac
4002  cat > $TMPC << EOF
4003#define __MIDL_user_allocate_free_DEFINED__
4004#include <inc/win2003/vss.h>
4005int main(void) { return VSS_CTX_BACKUP; }
4006EOF
4007  if compile_prog "$vss_win32_include" "" ; then
4008    guest_agent_with_vss="yes"
4009    QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
4010    libs_qga="-lole32 -loleaut32 -lshlwapi -luuid -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
4011    qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
4012  else
4013    if test "$vss_win32_sdk" != "" ; then
4014      echo "ERROR: Please download and install Microsoft VSS SDK:"
4015      echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
4016      echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
4017      echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
4018      echo "ERROR: The headers are extracted in the directory \`inc'."
4019      feature_not_found "VSS support"
4020    fi
4021    guest_agent_with_vss="no"
4022  fi
4023fi
4024
4025##########################################
4026# lookup Windows platform SDK (if not specified)
4027# The SDK is needed only to build .tlb (type library) file of guest agent
4028# VSS provider from the source. It is usually unnecessary because the
4029# pre-compiled .tlb file is included.
4030
4031if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
4032  if test -z "$win_sdk"; then
4033    programfiles="$PROGRAMFILES"
4034    test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
4035    if test -n "$programfiles"; then
4036      win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
4037    else
4038      feature_not_found "Windows SDK"
4039    fi
4040  elif test "$win_sdk" = "no"; then
4041    win_sdk=""
4042  fi
4043fi
4044
4045##########################################
4046# check if mingw environment provides a recent ntddscsi.h
4047if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
4048  cat > $TMPC << EOF
4049#include <windows.h>
4050#include <ntddscsi.h>
4051int main(void) {
4052#if !defined(IOCTL_SCSI_GET_ADDRESS)
4053#error Missing required ioctl definitions
4054#endif
4055  SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
4056  return addr.Lun;
4057}
4058EOF
4059  if compile_prog "" "" ; then
4060    guest_agent_ntddscsi=yes
4061    libs_qga="-lsetupapi $libs_qga"
4062  fi
4063fi
4064
4065##########################################
4066# virgl renderer probe
4067
4068if test "$virglrenderer" != "no" ; then
4069  cat > $TMPC << EOF
4070#include <virglrenderer.h>
4071int main(void) { virgl_renderer_poll(); return 0; }
4072EOF
4073  virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
4074  virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
4075  if $pkg_config virglrenderer >/dev/null 2>&1 && \
4076     compile_prog "$virgl_cflags" "$virgl_libs" ; then
4077    virglrenderer="yes"
4078  else
4079    if test "$virglrenderer" = "yes" ; then
4080      feature_not_found "virglrenderer"
4081    fi
4082    virglrenderer="no"
4083  fi
4084fi
4085
4086##########################################
4087# check if we have fdatasync
4088
4089fdatasync=no
4090cat > $TMPC << EOF
4091#include <unistd.h>
4092int main(void) {
4093#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4094return fdatasync(0);
4095#else
4096#error Not supported
4097#endif
4098}
4099EOF
4100if compile_prog "" "" ; then
4101    fdatasync=yes
4102fi
4103
4104##########################################
4105# check if we have madvise
4106
4107madvise=no
4108cat > $TMPC << EOF
4109#include <sys/types.h>
4110#include <sys/mman.h>
4111#include <stddef.h>
4112int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4113EOF
4114if compile_prog "" "" ; then
4115    madvise=yes
4116fi
4117
4118##########################################
4119# check if we have posix_madvise
4120
4121posix_madvise=no
4122cat > $TMPC << EOF
4123#include <sys/mman.h>
4124#include <stddef.h>
4125int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4126EOF
4127if compile_prog "" "" ; then
4128    posix_madvise=yes
4129fi
4130
4131##########################################
4132# check if we have usable SIGEV_THREAD_ID
4133
4134sigev_thread_id=no
4135cat > $TMPC << EOF
4136#include <signal.h>
4137int main(void) {
4138  struct sigevent ev;
4139  ev.sigev_notify = SIGEV_THREAD_ID;
4140  ev._sigev_un._tid = 0;
4141  asm volatile("" : : "g"(&ev));
4142  return 0;
4143}
4144EOF
4145if compile_prog "" "" ; then
4146    sigev_thread_id=yes
4147fi
4148
4149##########################################
4150# check if trace backend exists
4151
4152$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends  > /dev/null 2> /dev/null
4153if test "$?" -ne 0 ; then
4154  error_exit "invalid trace backends" \
4155      "Please choose supported trace backends."
4156fi
4157
4158##########################################
4159# For 'ust' backend, test if ust headers are present
4160if have_backend "ust"; then
4161  cat > $TMPC << EOF
4162#include <lttng/tracepoint.h>
4163int main(void) { return 0; }
4164EOF
4165  if compile_prog "" "" ; then
4166    if $pkg_config lttng-ust --exists; then
4167      lttng_ust_libs=`$pkg_config --libs lttng-ust`
4168    else
4169      lttng_ust_libs="-llttng-ust"
4170    fi
4171    if $pkg_config liburcu-bp --exists; then
4172      urcu_bp_libs=`$pkg_config --libs liburcu-bp`
4173    else
4174      urcu_bp_libs="-lurcu-bp"
4175    fi
4176
4177    LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4178    libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4179  else
4180    error_exit "Trace backend 'ust' missing lttng-ust header files"
4181  fi
4182fi
4183
4184##########################################
4185# For 'dtrace' backend, test if 'dtrace' command is present
4186if have_backend "dtrace"; then
4187  if ! has 'dtrace' ; then
4188    error_exit "dtrace command is not found in PATH $PATH"
4189  fi
4190  trace_backend_stap="no"
4191  if has 'stap' ; then
4192    trace_backend_stap="yes"
4193  fi
4194fi
4195
4196##########################################
4197# check and set a backend for coroutine
4198
4199# We prefer ucontext, but it's not always possible. The fallback
4200# is sigcontext. gthread is not selectable except explicitly, because
4201# it is not functional enough to run QEMU proper. (It is occasionally
4202# useful for debugging purposes.)  On Windows the only valid backend
4203# is the Windows-specific one.
4204
4205ucontext_works=no
4206if test "$darwin" != "yes"; then
4207  cat > $TMPC << EOF
4208#include <ucontext.h>
4209#ifdef __stub_makecontext
4210#error Ignoring glibc stub makecontext which will always fail
4211#endif
4212int main(void) { makecontext(0, 0, 0); return 0; }
4213EOF
4214  if compile_prog "" "" ; then
4215    ucontext_works=yes
4216  fi
4217fi
4218
4219if test "$coroutine" = ""; then
4220  if test "$mingw32" = "yes"; then
4221    coroutine=win32
4222  elif test "$ucontext_works" = "yes"; then
4223    coroutine=ucontext
4224  else
4225    coroutine=sigaltstack
4226  fi
4227else
4228  case $coroutine in
4229  windows)
4230    if test "$mingw32" != "yes"; then
4231      error_exit "'windows' coroutine backend only valid for Windows"
4232    fi
4233    # Unfortunately the user visible backend name doesn't match the
4234    # coroutine-*.c filename for this case, so we have to adjust it here.
4235    coroutine=win32
4236    ;;
4237  ucontext)
4238    if test "$ucontext_works" != "yes"; then
4239      feature_not_found "ucontext"
4240    fi
4241    ;;
4242  gthread|sigaltstack)
4243    if test "$mingw32" = "yes"; then
4244      error_exit "only the 'windows' coroutine backend is valid for Windows"
4245    fi
4246    ;;
4247  *)
4248    error_exit "unknown coroutine backend $coroutine"
4249    ;;
4250  esac
4251fi
4252
4253if test "$coroutine_pool" = ""; then
4254  if test "$coroutine" = "gthread"; then
4255    coroutine_pool=no
4256  else
4257    coroutine_pool=yes
4258  fi
4259fi
4260if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
4261  error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
4262fi
4263
4264##########################################
4265# check if we have open_by_handle_at
4266
4267open_by_handle_at=no
4268cat > $TMPC << EOF
4269#include <fcntl.h>
4270#if !defined(AT_EMPTY_PATH)
4271# error missing definition
4272#else
4273int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4274#endif
4275EOF
4276if compile_prog "" "" ; then
4277    open_by_handle_at=yes
4278fi
4279
4280########################################
4281# check if we have linux/magic.h
4282
4283linux_magic_h=no
4284cat > $TMPC << EOF
4285#include <linux/magic.h>
4286int main(void) {
4287  return 0;
4288}
4289EOF
4290if compile_prog "" "" ; then
4291    linux_magic_h=yes
4292fi
4293
4294########################################
4295# check whether we can disable warning option with a pragma (this is needed
4296# to silence warnings in the headers of some versions of external libraries).
4297# This test has to be compiled with -Werror as otherwise an unknown pragma is
4298# only a warning.
4299#
4300# If we can't selectively disable warning in the code, disable -Werror so that
4301# the build doesn't fail anyway.
4302
4303pragma_disable_unused_but_set=no
4304cat > $TMPC << EOF
4305#pragma GCC diagnostic push
4306#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4307#pragma GCC diagnostic ignored "-Wstrict-prototypes"
4308#pragma GCC diagnostic pop
4309
4310int main(void) {
4311    return 0;
4312}
4313EOF
4314if compile_prog "-Werror" "" ; then
4315    pragma_diagnostic_available=yes
4316else
4317    werror=no
4318fi
4319
4320########################################
4321# check if we have valgrind/valgrind.h
4322
4323valgrind_h=no
4324cat > $TMPC << EOF
4325#include <valgrind/valgrind.h>
4326int main(void) {
4327  return 0;
4328}
4329EOF
4330if compile_prog "" "" ; then
4331    valgrind_h=yes
4332fi
4333
4334########################################
4335# check if environ is declared
4336
4337has_environ=no
4338cat > $TMPC << EOF
4339#include <unistd.h>
4340int main(void) {
4341    environ = 0;
4342    return 0;
4343}
4344EOF
4345if compile_prog "" "" ; then
4346    has_environ=yes
4347fi
4348
4349########################################
4350# check if cpuid.h is usable.
4351
4352cpuid_h=no
4353cat > $TMPC << EOF
4354#include <cpuid.h>
4355int main(void) {
4356    unsigned a, b, c, d;
4357    int max = __get_cpuid_max(0, 0);
4358
4359    if (max >= 1) {
4360        __cpuid(1, a, b, c, d);
4361    }
4362
4363    if (max >= 7) {
4364        __cpuid_count(7, 0, a, b, c, d);
4365    }
4366
4367    return 0;
4368}
4369EOF
4370if compile_prog "" "" ; then
4371    cpuid_h=yes
4372fi
4373
4374########################################
4375# check if __[u]int128_t is usable.
4376
4377int128=no
4378cat > $TMPC << EOF
4379#if defined(__clang_major__) && defined(__clang_minor__)
4380# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4381#  error __int128_t does not work in CLANG before 3.2
4382# endif
4383#endif
4384__int128_t a;
4385__uint128_t b;
4386int main (void) {
4387  a = a + b;
4388  b = a * b;
4389  a = a * a;
4390  return 0;
4391}
4392EOF
4393if compile_prog "" "" ; then
4394    int128=yes
4395fi
4396
4397########################################
4398# check if getauxval is available.
4399
4400getauxval=no
4401cat > $TMPC << EOF
4402#include <sys/auxv.h>
4403int main(void) {
4404  return getauxval(AT_HWCAP) == 0;
4405}
4406EOF
4407if compile_prog "" "" ; then
4408    getauxval=yes
4409fi
4410
4411########################################
4412# check if ccache is interfering with
4413# semantic analysis of macros
4414
4415ccache_cpp2=no
4416cat > $TMPC << EOF
4417static const int Z = 1;
4418#define fn() ({ Z; })
4419#define TAUT(X) ((X) == Z)
4420#define PAREN(X, Y) (X == Y)
4421#define ID(X) (X)
4422int main(int argc, char *argv[])
4423{
4424    int x = 0, y = 0;
4425    x = ID(x);
4426    x = fn();
4427    fn();
4428    if (PAREN(x, y)) return 0;
4429    if (TAUT(Z)) return 0;
4430    return 0;
4431}
4432EOF
4433
4434if ! compile_object "-Werror"; then
4435    ccache_cpp2=yes
4436fi
4437
4438##########################################
4439# End of CC checks
4440# After here, no more $cc or $ld runs
4441
4442if test "$gcov" = "yes" ; then
4443  CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4444  LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
4445elif test "$debug" = "no" ; then
4446  CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
4447fi
4448
4449##########################################
4450# Do we have libnfs
4451if test "$libnfs" != "no" ; then
4452  if $pkg_config --atleast-version=1.9.3 libnfs; then
4453    libnfs="yes"
4454    libnfs_libs=$($pkg_config --libs libnfs)
4455    LIBS="$LIBS $libnfs_libs"
4456  else
4457    if test "$libnfs" = "yes" ; then
4458      feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
4459    fi
4460    libnfs="no"
4461  fi
4462fi
4463
4464# Disable zero malloc errors for official releases unless explicitly told to
4465# enable/disable
4466if test -z "$zero_malloc" ; then
4467    if test "$z_version" = "50" ; then
4468	zero_malloc="no"
4469    else
4470	zero_malloc="yes"
4471    fi
4472fi
4473
4474# Now we've finished running tests it's OK to add -Werror to the compiler flags
4475if test "$werror" = "yes"; then
4476    QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
4477fi
4478
4479if test "$solaris" = "no" ; then
4480    if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
4481        LDFLAGS="-Wl,--warn-common $LDFLAGS"
4482    fi
4483fi
4484
4485# test if pod2man has --utf8 option
4486if pod2man --help | grep -q utf8; then
4487    POD2MAN="pod2man --utf8"
4488else
4489    POD2MAN="pod2man"
4490fi
4491
4492# Use ASLR, no-SEH and DEP if available
4493if test "$mingw32" = "yes" ; then
4494    for flag in --dynamicbase --no-seh --nxcompat; do
4495        if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
4496            LDFLAGS="-Wl,$flag $LDFLAGS"
4497        fi
4498    done
4499fi
4500
4501qemu_confdir=$sysconfdir$confsuffix
4502qemu_moddir=$libdir$confsuffix
4503qemu_datadir=$datadir$confsuffix
4504qemu_localedir="$datadir/locale"
4505
4506tools=""
4507if test "$want_tools" = "yes" ; then
4508  tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4509  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
4510    tools="qemu-nbd\$(EXESUF) $tools"
4511    tools="ivshmem-client\$(EXESUF) ivshmem-server\$(EXESUF) $tools"
4512  fi
4513fi
4514if test "$softmmu" = yes ; then
4515  if test "$virtfs" != no ; then
4516    if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
4517      virtfs=yes
4518      tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
4519    else
4520      if test "$virtfs" = yes; then
4521        error_exit "VirtFS is supported only on Linux and requires libcap-devel and libattr-devel"
4522      fi
4523      virtfs=no
4524    fi
4525  fi
4526fi
4527
4528# Probe for guest agent support/options
4529
4530if [ "$guest_agent" != "no" ]; then
4531  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
4532      tools="qemu-ga $tools"
4533      guest_agent=yes
4534  elif [ "$guest_agent" != yes ]; then
4535      guest_agent=no
4536  else
4537      error_exit "Guest agent is not supported on this platform"
4538  fi
4539fi
4540
4541# Guest agent Window MSI  package
4542
4543if test "$guest_agent" != yes; then
4544  if test "$guest_agent_msi" = yes; then
4545    error_exit "MSI guest agent package requires guest agent enabled"
4546  fi
4547  guest_agent_msi=no
4548elif test "$mingw32" != "yes"; then
4549  if test "$guest_agent_msi" = "yes"; then
4550    error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
4551  fi
4552  guest_agent_msi=no
4553elif ! has wixl; then
4554  if test "$guest_agent_msi" = "yes"; then
4555    error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
4556  fi
4557  guest_agent_msi=no
4558else
4559  # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
4560  # disabled explicitly
4561  if test "$guest_agent_msi" != "no"; then
4562    guest_agent_msi=yes
4563  fi
4564fi
4565
4566if test "$guest_agent_msi" = "yes"; then
4567  if test "$guest_agent_with_vss" = "yes"; then
4568    QEMU_GA_MSI_WITH_VSS="-D InstallVss"
4569  fi
4570
4571  if test "$QEMU_GA_MANUFACTURER" = ""; then
4572    QEMU_GA_MANUFACTURER=QEMU
4573  fi
4574
4575  if test "$QEMU_GA_DISTRO" = ""; then
4576    QEMU_GA_DISTRO=Linux
4577  fi
4578
4579  if test "$QEMU_GA_VERSION" = ""; then
4580      QEMU_GA_VERSION=`cat $source_path/VERSION`
4581  fi
4582
4583  QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=`$pkg_config --variable=prefix glib-2.0`/bin"
4584
4585  case "$cpu" in
4586  x86_64)
4587    QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
4588    ;;
4589  i386)
4590    QEMU_GA_MSI_ARCH="-D Arch=32"
4591    ;;
4592  *)
4593    error_exit "CPU $cpu not supported for building installation package"
4594    ;;
4595  esac
4596fi
4597
4598# Mac OS X ships with a broken assembler
4599roms=
4600if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
4601        "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
4602        "$softmmu" = yes ; then
4603  roms="optionrom"
4604fi
4605if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
4606  roms="$roms spapr-rtas"
4607fi
4608
4609if test "$cpu" = "s390x" ; then
4610  roms="$roms s390-ccw"
4611fi
4612
4613# Probe for the need for relocating the user-only binary.
4614if test "$pie" = "no" ; then
4615  textseg_addr=
4616  case "$cpu" in
4617    arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
4618      # ??? Rationale for choosing this address
4619      textseg_addr=0x60000000
4620      ;;
4621    mips)
4622      # A 256M aligned address, high in the address space, with enough
4623      # room for the code_gen_buffer above it before the stack.
4624      textseg_addr=0x60000000
4625      ;;
4626  esac
4627  if [ -n "$textseg_addr" ]; then
4628    cat > $TMPC <<EOF
4629    int main(void) { return 0; }
4630EOF
4631    textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
4632    if ! compile_prog "" "$textseg_ldflags"; then
4633      # In case ld does not support -Ttext-segment, edit the default linker
4634      # script via sed to set the .text start addr.  This is needed on FreeBSD
4635      # at least.
4636      $ld --verbose | sed \
4637        -e '1,/==================================================/d' \
4638        -e '/==================================================/,$d' \
4639        -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
4640        -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
4641      textseg_ldflags="-Wl,-T../config-host.ld"
4642    fi
4643  fi
4644fi
4645
4646# prepend pixman and ftd flags after all config tests are done
4647QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
4648libs_softmmu="$pixman_libs $libs_softmmu"
4649
4650echo "Install prefix    $prefix"
4651echo "BIOS directory    `eval echo $qemu_datadir`"
4652echo "binary directory  `eval echo $bindir`"
4653echo "library directory `eval echo $libdir`"
4654echo "module directory  `eval echo $qemu_moddir`"
4655echo "libexec directory `eval echo $libexecdir`"
4656echo "include directory `eval echo $includedir`"
4657echo "config directory  `eval echo $sysconfdir`"
4658if test "$mingw32" = "no" ; then
4659echo "local state directory   `eval echo $local_statedir`"
4660echo "Manual directory  `eval echo $mandir`"
4661echo "ELF interp prefix $interp_prefix"
4662else
4663echo "local state directory   queried at runtime"
4664echo "Windows SDK       $win_sdk"
4665fi
4666echo "Source path       $source_path"
4667echo "C compiler        $cc"
4668echo "Host C compiler   $host_cc"
4669echo "C++ compiler      $cxx"
4670echo "Objective-C compiler $objcc"
4671echo "ARFLAGS           $ARFLAGS"
4672echo "CFLAGS            $CFLAGS"
4673echo "QEMU_CFLAGS       $QEMU_CFLAGS"
4674echo "LDFLAGS           $LDFLAGS"
4675echo "make              $make"
4676echo "install           $install"
4677echo "python            $python"
4678if test "$slirp" = "yes" ; then
4679    echo "smbd              $smbd"
4680fi
4681echo "module support    $modules"
4682echo "host CPU          $cpu"
4683echo "host big endian   $bigendian"
4684echo "target list       $target_list"
4685echo "tcg debug enabled $debug_tcg"
4686echo "gprof enabled     $gprof"
4687echo "sparse enabled    $sparse"
4688echo "strip binaries    $strip_opt"
4689echo "profiler          $profiler"
4690echo "static build      $static"
4691if test "$darwin" = "yes" ; then
4692    echo "Cocoa support     $cocoa"
4693fi
4694echo "pixman            $pixman"
4695echo "SDL support       $sdl"
4696echo "GTK support       $gtk"
4697echo "GTK GL support    $gtk_gl"
4698echo "GNUTLS support    $gnutls"
4699echo "GNUTLS hash       $gnutls_hash"
4700echo "libgcrypt         $gcrypt"
4701echo "nettle            $nettle ${nettle+($nettle_version)}"
4702echo "libtasn1          $tasn1"
4703echo "VTE support       $vte"
4704echo "curses support    $curses"
4705echo "virgl support     $virglrenderer"
4706echo "curl support      $curl"
4707echo "mingw32 support   $mingw32"
4708echo "Audio drivers     $audio_drv_list"
4709echo "Block whitelist (rw) $block_drv_rw_whitelist"
4710echo "Block whitelist (ro) $block_drv_ro_whitelist"
4711echo "VirtFS support    $virtfs"
4712echo "VNC support       $vnc"
4713if test "$vnc" = "yes" ; then
4714    echo "VNC SASL support  $vnc_sasl"
4715    echo "VNC JPEG support  $vnc_jpeg"
4716    echo "VNC PNG support   $vnc_png"
4717fi
4718if test -n "$sparc_cpu"; then
4719    echo "Target Sparc Arch $sparc_cpu"
4720fi
4721echo "xen support       $xen"
4722if test "$xen" = "yes" ; then
4723  echo "xen ctrl version  $xen_ctrl_version"
4724fi
4725echo "brlapi support    $brlapi"
4726echo "bluez  support    $bluez"
4727echo "Documentation     $docs"
4728echo "PIE               $pie"
4729echo "vde support       $vde"
4730echo "netmap support    $netmap"
4731echo "Linux AIO support $linux_aio"
4732echo "ATTR/XATTR support $attr"
4733echo "Install blobs     $blobs"
4734echo "KVM support       $kvm"
4735echo "RDMA support      $rdma"
4736echo "TCG interpreter   $tcg_interpreter"
4737echo "fdt support       $fdt"
4738echo "preadv support    $preadv"
4739echo "fdatasync         $fdatasync"
4740echo "madvise           $madvise"
4741echo "posix_madvise     $posix_madvise"
4742echo "sigev_thread_id   $sigev_thread_id"
4743echo "uuid support      $uuid"
4744echo "libcap-ng support $cap_ng"
4745echo "vhost-net support $vhost_net"
4746echo "vhost-scsi support $vhost_scsi"
4747echo "Trace backends    $trace_backends"
4748if test "$trace_backend" = "simple"; then
4749echo "Trace output file $trace_file-<pid>"
4750fi
4751if test "$spice" = "yes"; then
4752echo "spice support     $spice ($spice_protocol_version/$spice_server_version)"
4753else
4754echo "spice support     $spice"
4755fi
4756echo "rbd support       $rbd"
4757echo "xfsctl support    $xfs"
4758echo "smartcard support $smartcard"
4759echo "libusb            $libusb"
4760echo "usb net redir     $usb_redir"
4761echo "OpenGL support    $opengl"
4762echo "libiscsi support  $libiscsi"
4763echo "libnfs support    $libnfs"
4764echo "build guest agent $guest_agent"
4765echo "QGA VSS support   $guest_agent_with_vss"
4766echo "QGA w32 disk info $guest_agent_ntddscsi"
4767echo "QGA MSI support   $guest_agent_msi"
4768echo "seccomp support   $seccomp"
4769echo "coroutine backend $coroutine"
4770echo "coroutine pool    $coroutine_pool"
4771echo "GlusterFS support $glusterfs"
4772echo "Archipelago support $archipelago"
4773echo "gcov              $gcov_tool"
4774echo "gcov enabled      $gcov"
4775echo "TPM support       $tpm"
4776echo "libssh2 support   $libssh2"
4777echo "TPM passthrough   $tpm_passthrough"
4778echo "QOM debugging     $qom_cast_debug"
4779echo "vhdx              $vhdx"
4780echo "lzo support       $lzo"
4781echo "snappy support    $snappy"
4782echo "bzip2 support     $bzip2"
4783echo "NUMA host support $numa"
4784echo "tcmalloc support  $tcmalloc"
4785echo "jemalloc support  $jemalloc"
4786
4787if test "$sdl_too_old" = "yes"; then
4788echo "-> Your SDL version is too old - please upgrade to have SDL support"
4789fi
4790
4791config_host_mak="config-host.mak"
4792
4793echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
4794
4795echo "# Automatically generated by configure - do not modify" > $config_host_mak
4796echo >> $config_host_mak
4797
4798echo all: >> $config_host_mak
4799echo "prefix=$prefix" >> $config_host_mak
4800echo "bindir=$bindir" >> $config_host_mak
4801echo "libdir=$libdir" >> $config_host_mak
4802echo "libexecdir=$libexecdir" >> $config_host_mak
4803echo "includedir=$includedir" >> $config_host_mak
4804echo "mandir=$mandir" >> $config_host_mak
4805echo "sysconfdir=$sysconfdir" >> $config_host_mak
4806echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
4807echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
4808echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
4809echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
4810if test "$mingw32" = "no" ; then
4811  echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
4812fi
4813echo "qemu_helperdir=$libexecdir" >> $config_host_mak
4814echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
4815echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
4816echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
4817echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
4818
4819echo "ARCH=$ARCH" >> $config_host_mak
4820
4821if test "$debug_tcg" = "yes" ; then
4822  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
4823fi
4824if test "$strip_opt" = "yes" ; then
4825  echo "STRIP=${strip}" >> $config_host_mak
4826fi
4827if test "$bigendian" = "yes" ; then
4828  echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
4829fi
4830if test "$mingw32" = "yes" ; then
4831  echo "CONFIG_WIN32=y" >> $config_host_mak
4832  rc_version=`cat $source_path/VERSION`
4833  version_major=${rc_version%%.*}
4834  rc_version=${rc_version#*.}
4835  version_minor=${rc_version%%.*}
4836  rc_version=${rc_version#*.}
4837  version_subminor=${rc_version%%.*}
4838  version_micro=0
4839  echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4840  echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4841  if test "$guest_agent_with_vss" = "yes" ; then
4842    echo "CONFIG_QGA_VSS=y" >> $config_host_mak
4843    echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
4844    echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
4845  fi
4846  if test "$guest_agent_ntddscsi" = "yes" ; then
4847    echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
4848  fi
4849  if test "$guest_agent_msi" = "yes"; then
4850    echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
4851    echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
4852    echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
4853    echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
4854    echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
4855    echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
4856    echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
4857  fi
4858else
4859  echo "CONFIG_POSIX=y" >> $config_host_mak
4860fi
4861
4862if test "$linux" = "yes" ; then
4863  echo "CONFIG_LINUX=y" >> $config_host_mak
4864fi
4865
4866if test "$darwin" = "yes" ; then
4867  echo "CONFIG_DARWIN=y" >> $config_host_mak
4868fi
4869
4870if test "$aix" = "yes" ; then
4871  echo "CONFIG_AIX=y" >> $config_host_mak
4872fi
4873
4874if test "$solaris" = "yes" ; then
4875  echo "CONFIG_SOLARIS=y" >> $config_host_mak
4876  echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
4877  if test "$needs_libsunmath" = "yes" ; then
4878    echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
4879  fi
4880fi
4881if test "$haiku" = "yes" ; then
4882  echo "CONFIG_HAIKU=y" >> $config_host_mak
4883fi
4884if test "$static" = "yes" ; then
4885  echo "CONFIG_STATIC=y" >> $config_host_mak
4886fi
4887if test "$profiler" = "yes" ; then
4888  echo "CONFIG_PROFILER=y" >> $config_host_mak
4889fi
4890if test "$slirp" = "yes" ; then
4891  echo "CONFIG_SLIRP=y" >> $config_host_mak
4892  echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
4893fi
4894if test "$vde" = "yes" ; then
4895  echo "CONFIG_VDE=y" >> $config_host_mak
4896fi
4897if test "$netmap" = "yes" ; then
4898  echo "CONFIG_NETMAP=y" >> $config_host_mak
4899fi
4900if test "$l2tpv3" = "yes" ; then
4901  echo "CONFIG_L2TPV3=y" >> $config_host_mak
4902fi
4903if test "$cap_ng" = "yes" ; then
4904  echo "CONFIG_LIBCAP=y" >> $config_host_mak
4905fi
4906echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
4907for drv in $audio_drv_list; do
4908    def=CONFIG_`echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]'`
4909    echo "$def=y" >> $config_host_mak
4910done
4911if test "$audio_pt_int" = "yes" ; then
4912  echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
4913fi
4914if test "$audio_win_int" = "yes" ; then
4915  echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
4916fi
4917echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
4918echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
4919if test "$vnc" = "yes" ; then
4920  echo "CONFIG_VNC=y" >> $config_host_mak
4921fi
4922if test "$vnc_sasl" = "yes" ; then
4923  echo "CONFIG_VNC_SASL=y" >> $config_host_mak
4924fi
4925if test "$vnc_jpeg" = "yes" ; then
4926  echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
4927fi
4928if test "$vnc_png" = "yes" ; then
4929  echo "CONFIG_VNC_PNG=y" >> $config_host_mak
4930fi
4931if test "$fnmatch" = "yes" ; then
4932  echo "CONFIG_FNMATCH=y" >> $config_host_mak
4933fi
4934if test "$uuid" = "yes" ; then
4935  echo "CONFIG_UUID=y" >> $config_host_mak
4936fi
4937if test "$xfs" = "yes" ; then
4938  echo "CONFIG_XFS=y" >> $config_host_mak
4939fi
4940qemu_version=`head $source_path/VERSION`
4941echo "VERSION=$qemu_version" >>$config_host_mak
4942echo "PKGVERSION=$pkgversion" >>$config_host_mak
4943echo "SRC_PATH=$source_path" >> $config_host_mak
4944echo "TARGET_DIRS=$target_list" >> $config_host_mak
4945if [ "$docs" = "yes" ] ; then
4946  echo "BUILD_DOCS=yes" >> $config_host_mak
4947fi
4948if test "$modules" = "yes"; then
4949  # $shacmd can generate a hash started with digit, which the compiler doesn't
4950  # like as an symbol. So prefix it with an underscore
4951  echo "CONFIG_STAMP=_`(echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ `" >> $config_host_mak
4952  echo "CONFIG_MODULES=y" >> $config_host_mak
4953fi
4954if test "$sdl" = "yes" ; then
4955  echo "CONFIG_SDL=y" >> $config_host_mak
4956  echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
4957  echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
4958fi
4959if test "$cocoa" = "yes" ; then
4960  echo "CONFIG_COCOA=y" >> $config_host_mak
4961fi
4962if test "$curses" = "yes" ; then
4963  echo "CONFIG_CURSES=y" >> $config_host_mak
4964fi
4965if test "$utimens" = "yes" ; then
4966  echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
4967fi
4968if test "$pipe2" = "yes" ; then
4969  echo "CONFIG_PIPE2=y" >> $config_host_mak
4970fi
4971if test "$accept4" = "yes" ; then
4972  echo "CONFIG_ACCEPT4=y" >> $config_host_mak
4973fi
4974if test "$splice" = "yes" ; then
4975  echo "CONFIG_SPLICE=y" >> $config_host_mak
4976fi
4977if test "$eventfd" = "yes" ; then
4978  echo "CONFIG_EVENTFD=y" >> $config_host_mak
4979fi
4980if test "$memfd" = "yes" ; then
4981  echo "CONFIG_MEMFD=y" >> $config_host_mak
4982fi
4983if test "$fallocate" = "yes" ; then
4984  echo "CONFIG_FALLOCATE=y" >> $config_host_mak
4985fi
4986if test "$fallocate_punch_hole" = "yes" ; then
4987  echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
4988fi
4989if test "$fallocate_zero_range" = "yes" ; then
4990  echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
4991fi
4992if test "$posix_fallocate" = "yes" ; then
4993  echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
4994fi
4995if test "$sync_file_range" = "yes" ; then
4996  echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
4997fi
4998if test "$fiemap" = "yes" ; then
4999  echo "CONFIG_FIEMAP=y" >> $config_host_mak
5000fi
5001if test "$dup3" = "yes" ; then
5002  echo "CONFIG_DUP3=y" >> $config_host_mak
5003fi
5004if test "$ppoll" = "yes" ; then
5005  echo "CONFIG_PPOLL=y" >> $config_host_mak
5006fi
5007if test "$prctl_pr_set_timerslack" = "yes" ; then
5008  echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
5009fi
5010if test "$epoll" = "yes" ; then
5011  echo "CONFIG_EPOLL=y" >> $config_host_mak
5012fi
5013if test "$epoll_create1" = "yes" ; then
5014  echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
5015fi
5016if test "$epoll_pwait" = "yes" ; then
5017  echo "CONFIG_EPOLL_PWAIT=y" >> $config_host_mak
5018fi
5019if test "$sendfile" = "yes" ; then
5020  echo "CONFIG_SENDFILE=y" >> $config_host_mak
5021fi
5022if test "$timerfd" = "yes" ; then
5023  echo "CONFIG_TIMERFD=y" >> $config_host_mak
5024fi
5025if test "$setns" = "yes" ; then
5026  echo "CONFIG_SETNS=y" >> $config_host_mak
5027fi
5028if test "$inotify" = "yes" ; then
5029  echo "CONFIG_INOTIFY=y" >> $config_host_mak
5030fi
5031if test "$inotify1" = "yes" ; then
5032  echo "CONFIG_INOTIFY1=y" >> $config_host_mak
5033fi
5034if test "$byteswap_h" = "yes" ; then
5035  echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
5036fi
5037if test "$bswap_h" = "yes" ; then
5038  echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
5039fi
5040if test "$curl" = "yes" ; then
5041  echo "CONFIG_CURL=m" >> $config_host_mak
5042  echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
5043  echo "CURL_LIBS=$curl_libs" >> $config_host_mak
5044fi
5045if test "$brlapi" = "yes" ; then
5046  echo "CONFIG_BRLAPI=y" >> $config_host_mak
5047fi
5048if test "$bluez" = "yes" ; then
5049  echo "CONFIG_BLUEZ=y" >> $config_host_mak
5050  echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
5051fi
5052if test "$glib_subprocess" = "yes" ; then
5053  echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
5054fi
5055echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
5056if test "$gtk" = "yes" ; then
5057  echo "CONFIG_GTK=y" >> $config_host_mak
5058  echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
5059  echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
5060  if test "$gtk_gl" = "yes" ; then
5061    echo "CONFIG_GTK_GL=y" >> $config_host_mak
5062  fi
5063fi
5064if test "$gnutls" = "yes" ; then
5065  echo "CONFIG_GNUTLS=y" >> $config_host_mak
5066fi
5067if test "$gnutls_hash" = "yes" ; then
5068  echo "CONFIG_GNUTLS_HASH=y" >> $config_host_mak
5069fi
5070if test "$gcrypt" = "yes" ; then
5071  echo "CONFIG_GCRYPT=y" >> $config_host_mak
5072fi
5073if test "$nettle" = "yes" ; then
5074  echo "CONFIG_NETTLE=y" >> $config_host_mak
5075  echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
5076fi
5077if test "$tasn1" = "yes" ; then
5078  echo "CONFIG_TASN1=y" >> $config_host_mak
5079fi
5080if test "$vte" = "yes" ; then
5081  echo "CONFIG_VTE=y" >> $config_host_mak
5082  echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
5083fi
5084if test "$virglrenderer" = "yes" ; then
5085  echo "CONFIG_VIRGL=y" >> $config_host_mak
5086  echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
5087  echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
5088fi
5089if test "$xen" = "yes" ; then
5090  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
5091  echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
5092fi
5093if test "$linux_aio" = "yes" ; then
5094  echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5095fi
5096if test "$attr" = "yes" ; then
5097  echo "CONFIG_ATTR=y" >> $config_host_mak
5098fi
5099if test "$libattr" = "yes" ; then
5100  echo "CONFIG_LIBATTR=y" >> $config_host_mak
5101fi
5102if test "$virtfs" = "yes" ; then
5103  echo "CONFIG_VIRTFS=y" >> $config_host_mak
5104fi
5105if test "$vhost_scsi" = "yes" ; then
5106  echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5107fi
5108if test "$vhost_net" = "yes" ; then
5109  echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
5110fi
5111if test "$blobs" = "yes" ; then
5112  echo "INSTALL_BLOBS=yes" >> $config_host_mak
5113fi
5114if test "$iovec" = "yes" ; then
5115  echo "CONFIG_IOVEC=y" >> $config_host_mak
5116fi
5117if test "$preadv" = "yes" ; then
5118  echo "CONFIG_PREADV=y" >> $config_host_mak
5119fi
5120if test "$fdt" = "yes" ; then
5121  echo "CONFIG_FDT=y" >> $config_host_mak
5122fi
5123if test "$signalfd" = "yes" ; then
5124  echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5125fi
5126if test "$tcg_interpreter" = "yes" ; then
5127  echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
5128fi
5129if test "$fdatasync" = "yes" ; then
5130  echo "CONFIG_FDATASYNC=y" >> $config_host_mak
5131fi
5132if test "$madvise" = "yes" ; then
5133  echo "CONFIG_MADVISE=y" >> $config_host_mak
5134fi
5135if test "$posix_madvise" = "yes" ; then
5136  echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5137fi
5138if test "$sigev_thread_id" = "yes" ; then
5139  echo "CONFIG_SIGEV_THREAD_ID=y" >> $config_host_mak
5140fi
5141
5142if test "$spice" = "yes" ; then
5143  echo "CONFIG_SPICE=y" >> $config_host_mak
5144fi
5145
5146if test "$smartcard" = "yes" ; then
5147  echo "CONFIG_SMARTCARD=y" >> $config_host_mak
5148fi
5149
5150if test "$libusb" = "yes" ; then
5151  echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5152fi
5153
5154if test "$usb_redir" = "yes" ; then
5155  echo "CONFIG_USB_REDIR=y" >> $config_host_mak
5156fi
5157
5158if test "$opengl" = "yes" ; then
5159  echo "CONFIG_OPENGL=y" >> $config_host_mak
5160  echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
5161  echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
5162fi
5163
5164if test "$lzo" = "yes" ; then
5165  echo "CONFIG_LZO=y" >> $config_host_mak
5166fi
5167
5168if test "$snappy" = "yes" ; then
5169  echo "CONFIG_SNAPPY=y" >> $config_host_mak
5170fi
5171
5172if test "$bzip2" = "yes" ; then
5173  echo "CONFIG_BZIP2=y" >> $config_host_mak
5174  echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
5175fi
5176
5177if test "$libiscsi" = "yes" ; then
5178  echo "CONFIG_LIBISCSI=m" >> $config_host_mak
5179  echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
5180  echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
5181fi
5182
5183if test "$libnfs" = "yes" ; then
5184  echo "CONFIG_LIBNFS=y" >> $config_host_mak
5185fi
5186
5187if test "$seccomp" = "yes"; then
5188  echo "CONFIG_SECCOMP=y" >> $config_host_mak
5189fi
5190
5191# XXX: suppress that
5192if [ "$bsd" = "yes" ] ; then
5193  echo "CONFIG_BSD=y" >> $config_host_mak
5194fi
5195
5196if test "$zero_malloc" = "yes" ; then
5197  echo "CONFIG_ZERO_MALLOC=y" >> $config_host_mak
5198fi
5199if test "$localtime_r" = "yes" ; then
5200  echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
5201fi
5202if test "$qom_cast_debug" = "yes" ; then
5203  echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
5204fi
5205if test "$rbd" = "yes" ; then
5206  echo "CONFIG_RBD=m" >> $config_host_mak
5207  echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
5208  echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
5209fi
5210
5211echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
5212if test "$coroutine_pool" = "yes" ; then
5213  echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
5214else
5215  echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
5216fi
5217
5218if test "$open_by_handle_at" = "yes" ; then
5219  echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
5220fi
5221
5222if test "$linux_magic_h" = "yes" ; then
5223  echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
5224fi
5225
5226if test "$pragma_diagnostic_available" = "yes" ; then
5227  echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
5228fi
5229
5230if test "$valgrind_h" = "yes" ; then
5231  echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
5232fi
5233
5234if test "$has_environ" = "yes" ; then
5235  echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
5236fi
5237
5238if test "$cpuid_h" = "yes" ; then
5239  echo "CONFIG_CPUID_H=y" >> $config_host_mak
5240fi
5241
5242if test "$int128" = "yes" ; then
5243  echo "CONFIG_INT128=y" >> $config_host_mak
5244fi
5245
5246if test "$getauxval" = "yes" ; then
5247  echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
5248fi
5249
5250if test "$glusterfs" = "yes" ; then
5251  echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
5252  echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
5253  echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
5254fi
5255
5256if test "$glusterfs_discard" = "yes" ; then
5257  echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
5258fi
5259
5260if test "$glusterfs_zerofill" = "yes" ; then
5261  echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
5262fi
5263
5264if test "$archipelago" = "yes" ; then
5265  echo "CONFIG_ARCHIPELAGO=m" >> $config_host_mak
5266  echo "ARCHIPELAGO_LIBS=$archipelago_libs" >> $config_host_mak
5267fi
5268
5269if test "$libssh2" = "yes" ; then
5270  echo "CONFIG_LIBSSH2=m" >> $config_host_mak
5271  echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
5272  echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
5273fi
5274
5275if test "$vhdx" = "yes" ; then
5276  echo "CONFIG_VHDX=y" >> $config_host_mak
5277fi
5278
5279# USB host support
5280if test "$libusb" = "yes"; then
5281  echo "HOST_USB=libusb legacy" >> $config_host_mak
5282else
5283  echo "HOST_USB=stub" >> $config_host_mak
5284fi
5285
5286# TPM passthrough support?
5287if test "$tpm" = "yes"; then
5288  echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
5289  if test "$tpm_passthrough" = "yes"; then
5290    echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
5291  fi
5292fi
5293
5294echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5295if have_backend "nop"; then
5296  echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
5297fi
5298if have_backend "simple"; then
5299  echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5300  # Set the appropriate trace file.
5301  trace_file="\"$trace_file-\" FMT_pid"
5302fi
5303if have_backend "stderr"; then
5304  echo "CONFIG_TRACE_STDERR=y" >> $config_host_mak
5305fi
5306if have_backend "ust"; then
5307  echo "CONFIG_TRACE_UST=y" >> $config_host_mak
5308fi
5309if have_backend "dtrace"; then
5310  echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
5311  if test "$trace_backend_stap" = "yes" ; then
5312    echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
5313  fi
5314fi
5315if have_backend "ftrace"; then
5316  if test "$linux" = "yes" ; then
5317    echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
5318  else
5319    feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
5320  fi
5321fi
5322echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
5323
5324if test "$rdma" = "yes" ; then
5325  echo "CONFIG_RDMA=y" >> $config_host_mak
5326fi
5327
5328# Hold two types of flag:
5329#   CONFIG_THREAD_SETNAME_BYTHREAD  - we've got a way of setting the name on
5330#                                     a thread we have a handle to
5331#   CONFIG_PTHREAD_SETNAME_NP       - A way of doing it on a particular
5332#                                     platform
5333if test "$pthread_setname_np" = "yes" ; then
5334  echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
5335  echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
5336fi
5337
5338if test "$tcg_interpreter" = "yes"; then
5339  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5340elif test "$ARCH" = "sparc64" ; then
5341  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5342elif test "$ARCH" = "s390x" ; then
5343  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
5344elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
5345  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
5346elif test "$ARCH" = "ppc64" ; then
5347  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5348else
5349  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5350fi
5351QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
5352
5353echo "TOOLS=$tools" >> $config_host_mak
5354echo "ROMS=$roms" >> $config_host_mak
5355echo "MAKE=$make" >> $config_host_mak
5356echo "INSTALL=$install" >> $config_host_mak
5357echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
5358echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
5359if test -n "$libtool"; then
5360  echo "INSTALL_PROG=\$(LIBTOOL) --mode=install $install -c -m 0755" >> $config_host_mak
5361  echo "INSTALL_LIB=\$(LIBTOOL) --mode=install $install -c -m 0644" >> $config_host_mak
5362else
5363  echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
5364  echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
5365fi
5366echo "PYTHON=$python" >> $config_host_mak
5367echo "CC=$cc" >> $config_host_mak
5368if $iasl -h > /dev/null 2>&1; then
5369  echo "IASL=$iasl" >> $config_host_mak
5370fi
5371echo "CC_I386=$cc_i386" >> $config_host_mak
5372echo "HOST_CC=$host_cc" >> $config_host_mak
5373echo "CXX=$cxx" >> $config_host_mak
5374echo "OBJCC=$objcc" >> $config_host_mak
5375echo "AR=$ar" >> $config_host_mak
5376echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
5377echo "AS=$as" >> $config_host_mak
5378echo "CPP=$cpp" >> $config_host_mak
5379echo "OBJCOPY=$objcopy" >> $config_host_mak
5380echo "LD=$ld" >> $config_host_mak
5381echo "NM=$nm" >> $config_host_mak
5382echo "WINDRES=$windres" >> $config_host_mak
5383echo "LIBTOOL=$libtool" >> $config_host_mak
5384echo "CFLAGS=$CFLAGS" >> $config_host_mak
5385echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
5386echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
5387echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
5388if test "$sparse" = "yes" ; then
5389  echo "CC           := REAL_CC=\"\$(CC)\" cgcc"       >> $config_host_mak
5390  echo "CPP          := REAL_CC=\"\$(CPP)\" cgcc"      >> $config_host_mak
5391  echo "CXX          := REAL_CC=\"\$(CXX)\" cgcc"      >> $config_host_mak
5392  echo "HOST_CC      := REAL_CC=\"\$(HOST_CC)\" cgcc"  >> $config_host_mak
5393  echo "QEMU_CFLAGS  += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
5394fi
5395if test "$cross_prefix" != ""; then
5396  echo "AUTOCONF_HOST := --host=${cross_prefix%-}"     >> $config_host_mak
5397else
5398  echo "AUTOCONF_HOST := "                             >> $config_host_mak
5399fi
5400echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
5401echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
5402echo "LIBTOOLFLAGS=$LIBTOOLFLAGS" >> $config_host_mak
5403echo "LIBS+=$LIBS" >> $config_host_mak
5404echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
5405echo "EXESUF=$EXESUF" >> $config_host_mak
5406echo "DSOSUF=$DSOSUF" >> $config_host_mak
5407echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
5408echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
5409echo "TASN1_LIBS=$tasn1_libs" >> $config_host_mak
5410echo "TASN1_CFLAGS=$tasn1_cflags" >> $config_host_mak
5411echo "POD2MAN=$POD2MAN" >> $config_host_mak
5412echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
5413if test "$gcov" = "yes" ; then
5414  echo "CONFIG_GCOV=y" >> $config_host_mak
5415  echo "GCOV=$gcov_tool" >> $config_host_mak
5416fi
5417
5418# use included Linux headers
5419if test "$linux" = "yes" ; then
5420  mkdir -p linux-headers
5421  case "$cpu" in
5422  i386|x86_64|x32)
5423    linux_arch=x86
5424    ;;
5425  ppcemb|ppc|ppc64)
5426    linux_arch=powerpc
5427    ;;
5428  s390x)
5429    linux_arch=s390
5430    ;;
5431  aarch64)
5432    linux_arch=arm64
5433    ;;
5434  mips64)
5435    linux_arch=mips
5436    ;;
5437  *)
5438    # For most CPUs the kernel architecture name and QEMU CPU name match.
5439    linux_arch="$cpu"
5440    ;;
5441  esac
5442    # For non-KVM architectures we will not have asm headers
5443    if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
5444      symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
5445    fi
5446fi
5447
5448for target in $target_list; do
5449target_dir="$target"
5450config_target_mak=$target_dir/config-target.mak
5451target_name=`echo $target | cut -d '-' -f 1`
5452target_bigendian="no"
5453
5454case "$target_name" in
5455  armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
5456  target_bigendian=yes
5457  ;;
5458esac
5459target_softmmu="no"
5460target_user_only="no"
5461target_linux_user="no"
5462target_bsd_user="no"
5463case "$target" in
5464  ${target_name}-softmmu)
5465    target_softmmu="yes"
5466    ;;
5467  ${target_name}-linux-user)
5468    if test "$linux" != "yes" ; then
5469      error_exit "Target '$target' is only available on a Linux host"
5470    fi
5471    target_user_only="yes"
5472    target_linux_user="yes"
5473    ;;
5474  ${target_name}-bsd-user)
5475    if test "$bsd" != "yes" ; then
5476      error_exit "Target '$target' is only available on a BSD host"
5477    fi
5478    target_user_only="yes"
5479    target_bsd_user="yes"
5480    ;;
5481  *)
5482    error_exit "Target '$target' not recognised"
5483    exit 1
5484    ;;
5485esac
5486
5487mkdir -p $target_dir
5488echo "# Automatically generated by configure - do not modify" > $config_target_mak
5489
5490bflt="no"
5491interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_name/g"`
5492gdb_xml_files=""
5493
5494TARGET_ARCH="$target_name"
5495TARGET_BASE_ARCH=""
5496TARGET_ABI_DIR=""
5497
5498case "$target_name" in
5499  i386)
5500  ;;
5501  x86_64)
5502    TARGET_BASE_ARCH=i386
5503  ;;
5504  alpha)
5505  ;;
5506  arm|armeb)
5507    TARGET_ARCH=arm
5508    bflt="yes"
5509    gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5510  ;;
5511  aarch64)
5512    TARGET_BASE_ARCH=arm
5513    bflt="yes"
5514    gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5515  ;;
5516  cris)
5517  ;;
5518  lm32)
5519  ;;
5520  m68k)
5521    bflt="yes"
5522    gdb_xml_files="cf-core.xml cf-fp.xml"
5523  ;;
5524  microblaze|microblazeel)
5525    TARGET_ARCH=microblaze
5526    bflt="yes"
5527  ;;
5528  mips|mipsel)
5529    TARGET_ARCH=mips
5530    echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
5531  ;;
5532  mipsn32|mipsn32el)
5533    TARGET_ARCH=mips64
5534    TARGET_BASE_ARCH=mips
5535    echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
5536    echo "TARGET_ABI32=y" >> $config_target_mak
5537  ;;
5538  mips64|mips64el)
5539    TARGET_ARCH=mips64
5540    TARGET_BASE_ARCH=mips
5541    echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
5542  ;;
5543  moxie)
5544  ;;
5545  or32)
5546    TARGET_ARCH=openrisc
5547    TARGET_BASE_ARCH=openrisc
5548  ;;
5549  ppc)
5550    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5551  ;;
5552  ppcemb)
5553    TARGET_BASE_ARCH=ppc
5554    TARGET_ABI_DIR=ppc
5555    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5556  ;;
5557  ppc64)
5558    TARGET_BASE_ARCH=ppc
5559    TARGET_ABI_DIR=ppc
5560    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5561  ;;
5562  ppc64le)
5563    TARGET_ARCH=ppc64
5564    TARGET_BASE_ARCH=ppc
5565    TARGET_ABI_DIR=ppc
5566    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5567  ;;
5568  ppc64abi32)
5569    TARGET_ARCH=ppc64
5570    TARGET_BASE_ARCH=ppc
5571    TARGET_ABI_DIR=ppc
5572    echo "TARGET_ABI32=y" >> $config_target_mak
5573    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5574  ;;
5575  sh4|sh4eb)
5576    TARGET_ARCH=sh4
5577    bflt="yes"
5578  ;;
5579  sparc)
5580  ;;
5581  sparc64)
5582    TARGET_BASE_ARCH=sparc
5583  ;;
5584  sparc32plus)
5585    TARGET_ARCH=sparc64
5586    TARGET_BASE_ARCH=sparc
5587    TARGET_ABI_DIR=sparc
5588    echo "TARGET_ABI32=y" >> $config_target_mak
5589  ;;
5590  s390x)
5591    gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml"
5592  ;;
5593  tilegx)
5594  ;;
5595  tricore)
5596  ;;
5597  unicore32)
5598  ;;
5599  xtensa|xtensaeb)
5600    TARGET_ARCH=xtensa
5601  ;;
5602  *)
5603    error_exit "Unsupported target CPU"
5604  ;;
5605esac
5606# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
5607if [ "$TARGET_BASE_ARCH" = "" ]; then
5608  TARGET_BASE_ARCH=$TARGET_ARCH
5609fi
5610
5611symlink "$source_path/Makefile.target" "$target_dir/Makefile"
5612
5613upper() {
5614    echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
5615}
5616
5617target_arch_name="`upper $TARGET_ARCH`"
5618echo "TARGET_$target_arch_name=y" >> $config_target_mak
5619echo "TARGET_NAME=$target_name" >> $config_target_mak
5620echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
5621if [ "$TARGET_ABI_DIR" = "" ]; then
5622  TARGET_ABI_DIR=$TARGET_ARCH
5623fi
5624echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
5625if [ "$HOST_VARIANT_DIR" != "" ]; then
5626    echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
5627fi
5628case "$target_name" in
5629  i386|x86_64)
5630    if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
5631      echo "CONFIG_XEN=y" >> $config_target_mak
5632      if test "$xen_pci_passthrough" = yes; then
5633        echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
5634      fi
5635    fi
5636    ;;
5637  *)
5638esac
5639case "$target_name" in
5640  aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
5641    # Make sure the target and host cpus are compatible
5642    if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
5643      \( "$target_name" = "$cpu" -o \
5644      \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
5645      \( "$target_name" = "ppc64"  -a "$cpu" = "ppc" \) -o \
5646      \( "$target_name" = "ppc"    -a "$cpu" = "ppc64" \) -o \
5647      \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
5648      \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
5649      \( "$target_name" = "x86_64" -a "$cpu" = "i386"   \) -o \
5650      \( "$target_name" = "i386"   -a "$cpu" = "x86_64" \) -o \
5651      \( "$target_name" = "x86_64" -a "$cpu" = "x32"   \) -o \
5652      \( "$target_name" = "i386"   -a "$cpu" = "x32" \) \) ; then
5653      echo "CONFIG_KVM=y" >> $config_target_mak
5654      if test "$vhost_net" = "yes" ; then
5655        echo "CONFIG_VHOST_NET=y" >> $config_target_mak
5656      fi
5657    fi
5658esac
5659if test "$target_bigendian" = "yes" ; then
5660  echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
5661fi
5662if test "$target_softmmu" = "yes" ; then
5663  echo "CONFIG_SOFTMMU=y" >> $config_target_mak
5664fi
5665if test "$target_user_only" = "yes" ; then
5666  echo "CONFIG_USER_ONLY=y" >> $config_target_mak
5667  echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
5668fi
5669if test "$target_linux_user" = "yes" ; then
5670  echo "CONFIG_LINUX_USER=y" >> $config_target_mak
5671fi
5672list=""
5673if test ! -z "$gdb_xml_files" ; then
5674  for x in $gdb_xml_files; do
5675    list="$list $source_path/gdb-xml/$x"
5676  done
5677  echo "TARGET_XML_FILES=$list" >> $config_target_mak
5678fi
5679
5680if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
5681  echo "TARGET_HAS_BFLT=y" >> $config_target_mak
5682fi
5683if test "$target_bsd_user" = "yes" ; then
5684  echo "CONFIG_BSD_USER=y" >> $config_target_mak
5685fi
5686
5687# generate QEMU_CFLAGS/LDFLAGS for targets
5688
5689cflags=""
5690ldflags=""
5691
5692disas_config() {
5693  echo "CONFIG_${1}_DIS=y" >> $config_target_mak
5694  echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
5695}
5696
5697for i in $ARCH $TARGET_BASE_ARCH ; do
5698  case "$i" in
5699  alpha)
5700    disas_config "ALPHA"
5701  ;;
5702  aarch64)
5703    if test -n "${cxx}"; then
5704      disas_config "ARM_A64"
5705    fi
5706  ;;
5707  arm)
5708    disas_config "ARM"
5709    if test -n "${cxx}"; then
5710      disas_config "ARM_A64"
5711    fi
5712  ;;
5713  cris)
5714    disas_config "CRIS"
5715  ;;
5716  hppa)
5717    disas_config "HPPA"
5718  ;;
5719  i386|x86_64|x32)
5720    disas_config "I386"
5721  ;;
5722  ia64*)
5723    disas_config "IA64"
5724  ;;
5725  lm32)
5726    disas_config "LM32"
5727  ;;
5728  m68k)
5729    disas_config "M68K"
5730  ;;
5731  microblaze*)
5732    disas_config "MICROBLAZE"
5733  ;;
5734  mips*)
5735    disas_config "MIPS"
5736  ;;
5737  moxie*)
5738    disas_config "MOXIE"
5739  ;;
5740  or32)
5741    disas_config "OPENRISC"
5742  ;;
5743  ppc*)
5744    disas_config "PPC"
5745  ;;
5746  s390*)
5747    disas_config "S390"
5748  ;;
5749  sh4)
5750    disas_config "SH4"
5751  ;;
5752  sparc*)
5753    disas_config "SPARC"
5754  ;;
5755  xtensa*)
5756    disas_config "XTENSA"
5757  ;;
5758  esac
5759done
5760if test "$tcg_interpreter" = "yes" ; then
5761  disas_config "TCI"
5762fi
5763
5764case "$ARCH" in
5765alpha)
5766  # Ensure there's only a single GP
5767  cflags="-msmall-data $cflags"
5768;;
5769esac
5770
5771if test "$gprof" = "yes" ; then
5772  echo "TARGET_GPROF=yes" >> $config_target_mak
5773  if test "$target_linux_user" = "yes" ; then
5774    cflags="-p $cflags"
5775    ldflags="-p $ldflags"
5776  fi
5777  if test "$target_softmmu" = "yes" ; then
5778    ldflags="-p $ldflags"
5779    echo "GPROF_CFLAGS=-p" >> $config_target_mak
5780  fi
5781fi
5782
5783if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
5784  ldflags="$ldflags $textseg_ldflags"
5785fi
5786
5787echo "LDFLAGS+=$ldflags" >> $config_target_mak
5788echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
5789
5790done # for target in $targets
5791
5792if [ "$pixman" = "internal" ]; then
5793  echo "config-host.h: subdir-pixman" >> $config_host_mak
5794fi
5795
5796if [ "$dtc_internal" = "yes" ]; then
5797  echo "config-host.h: subdir-dtc" >> $config_host_mak
5798fi
5799
5800if test "$numa" = "yes"; then
5801  echo "CONFIG_NUMA=y" >> $config_host_mak
5802fi
5803
5804if test "$ccache_cpp2" = "yes"; then
5805  echo "export CCACHE_CPP2=y" >> $config_host_mak
5806fi
5807
5808# build tree in object directory in case the source is not in the current directory
5809DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
5810DIRS="$DIRS fsdev"
5811DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
5812DIRS="$DIRS roms/seabios roms/vgabios"
5813DIRS="$DIRS qapi-generated"
5814FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
5815FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
5816FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
5817FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
5818FILES="$FILES pc-bios/spapr-rtas/Makefile"
5819FILES="$FILES pc-bios/s390-ccw/Makefile"
5820FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
5821FILES="$FILES pc-bios/qemu-icon.bmp"
5822for bios_file in \
5823    $source_path/pc-bios/*.bin \
5824    $source_path/pc-bios/*.aml \
5825    $source_path/pc-bios/*.rom \
5826    $source_path/pc-bios/*.dtb \
5827    $source_path/pc-bios/*.img \
5828    $source_path/pc-bios/openbios-* \
5829    $source_path/pc-bios/u-boot.* \
5830    $source_path/pc-bios/palcode-*
5831do
5832    FILES="$FILES pc-bios/`basename $bios_file`"
5833done
5834for test_file in `find $source_path/tests/acpi-test-data -type f`
5835do
5836    FILES="$FILES tests/acpi-test-data`echo $test_file | sed -e 's/.*acpi-test-data//'`"
5837done
5838mkdir -p $DIRS
5839for f in $FILES ; do
5840    if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
5841        symlink "$source_path/$f" "$f"
5842    fi
5843done
5844
5845# temporary config to build submodules
5846for rom in seabios vgabios ; do
5847    config_mak=roms/$rom/config.mak
5848    echo "# Automatically generated by configure - do not modify" > $config_mak
5849    echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
5850    echo "AS=$as" >> $config_mak
5851    echo "CC=$cc" >> $config_mak
5852    echo "BCC=bcc" >> $config_mak
5853    echo "CPP=$cpp" >> $config_mak
5854    echo "OBJCOPY=objcopy" >> $config_mak
5855    echo "IASL=$iasl" >> $config_mak
5856    echo "LD=$ld" >> $config_mak
5857done
5858
5859# set up qemu-iotests in this build directory
5860iotests_common_env="tests/qemu-iotests/common.env"
5861iotests_check="tests/qemu-iotests/check"
5862
5863echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
5864echo >> "$iotests_common_env"
5865echo "export PYTHON='$python'" >> "$iotests_common_env"
5866
5867if [ ! -e "$iotests_check" ]; then
5868    symlink "$source_path/$iotests_check" "$iotests_check"
5869fi
5870
5871# Save the configure command line for later reuse.
5872cat <<EOD >config.status
5873#!/bin/sh
5874# Generated by configure.
5875# Run this file to recreate the current configuration.
5876# Compiler output produced by configure, useful for debugging
5877# configure, is in config.log if it exists.
5878EOD
5879printf "exec" >>config.status
5880printf " '%s'" "$0" "$@" >>config.status
5881echo >>config.status
5882chmod +x config.status
5883
5884rm -r "$TMPDIR1"
5885