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