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