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