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