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