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