xref: /openbmc/qemu/configure (revision 2ce68e4c)
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 for fallocate
3499fallocate=no
3500cat > $TMPC << EOF
3501#include <fcntl.h>
3502
3503int main(void)
3504{
3505    fallocate(0, 0, 0, 0);
3506    return 0;
3507}
3508EOF
3509if compile_prog "" "" ; then
3510  fallocate=yes
3511fi
3512
3513# check for fallocate hole punching
3514fallocate_punch_hole=no
3515cat > $TMPC << EOF
3516#include <fcntl.h>
3517#include <linux/falloc.h>
3518
3519int main(void)
3520{
3521    fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3522    return 0;
3523}
3524EOF
3525if compile_prog "" "" ; then
3526  fallocate_punch_hole=yes
3527fi
3528
3529# check that fallocate supports range zeroing inside the file
3530fallocate_zero_range=no
3531cat > $TMPC << EOF
3532#include <fcntl.h>
3533#include <linux/falloc.h>
3534
3535int main(void)
3536{
3537    fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3538    return 0;
3539}
3540EOF
3541if compile_prog "" "" ; then
3542  fallocate_zero_range=yes
3543fi
3544
3545# check for posix_fallocate
3546posix_fallocate=no
3547cat > $TMPC << EOF
3548#include <fcntl.h>
3549
3550int main(void)
3551{
3552    posix_fallocate(0, 0, 0);
3553    return 0;
3554}
3555EOF
3556if compile_prog "" "" ; then
3557    posix_fallocate=yes
3558fi
3559
3560# check for sync_file_range
3561sync_file_range=no
3562cat > $TMPC << EOF
3563#include <fcntl.h>
3564
3565int main(void)
3566{
3567    sync_file_range(0, 0, 0, 0);
3568    return 0;
3569}
3570EOF
3571if compile_prog "" "" ; then
3572  sync_file_range=yes
3573fi
3574
3575# check for linux/fiemap.h and FS_IOC_FIEMAP
3576fiemap=no
3577cat > $TMPC << EOF
3578#include <sys/ioctl.h>
3579#include <linux/fs.h>
3580#include <linux/fiemap.h>
3581
3582int main(void)
3583{
3584    ioctl(0, FS_IOC_FIEMAP, 0);
3585    return 0;
3586}
3587EOF
3588if compile_prog "" "" ; then
3589  fiemap=yes
3590fi
3591
3592# check for dup3
3593dup3=no
3594cat > $TMPC << EOF
3595#include <unistd.h>
3596
3597int main(void)
3598{
3599    dup3(0, 0, 0);
3600    return 0;
3601}
3602EOF
3603if compile_prog "" "" ; then
3604  dup3=yes
3605fi
3606
3607# check for ppoll support
3608ppoll=no
3609cat > $TMPC << EOF
3610#include <poll.h>
3611
3612int main(void)
3613{
3614    struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3615    ppoll(&pfd, 1, 0, 0);
3616    return 0;
3617}
3618EOF
3619if compile_prog "" "" ; then
3620  ppoll=yes
3621fi
3622
3623# check for prctl(PR_SET_TIMERSLACK , ... ) support
3624prctl_pr_set_timerslack=no
3625cat > $TMPC << EOF
3626#include <sys/prctl.h>
3627
3628int main(void)
3629{
3630    prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3631    return 0;
3632}
3633EOF
3634if compile_prog "" "" ; then
3635  prctl_pr_set_timerslack=yes
3636fi
3637
3638# check for epoll support
3639epoll=no
3640cat > $TMPC << EOF
3641#include <sys/epoll.h>
3642
3643int main(void)
3644{
3645    epoll_create(0);
3646    return 0;
3647}
3648EOF
3649if compile_prog "" "" ; then
3650  epoll=yes
3651fi
3652
3653# epoll_create1 and epoll_pwait are later additions
3654# so we must check separately for their presence
3655epoll_create1=no
3656cat > $TMPC << EOF
3657#include <sys/epoll.h>
3658
3659int main(void)
3660{
3661    /* Note that we use epoll_create1 as a value, not as
3662     * a function being called. This is necessary so that on
3663     * old SPARC glibc versions where the function was present in
3664     * the library but not declared in the header file we will
3665     * fail the configure check. (Otherwise we will get a compiler
3666     * warning but not an error, and will proceed to fail the
3667     * qemu compile where we compile with -Werror.)
3668     */
3669    return (int)(uintptr_t)&epoll_create1;
3670}
3671EOF
3672if compile_prog "" "" ; then
3673  epoll_create1=yes
3674fi
3675
3676epoll_pwait=no
3677cat > $TMPC << EOF
3678#include <sys/epoll.h>
3679
3680int main(void)
3681{
3682    epoll_pwait(0, 0, 0, 0, 0);
3683    return 0;
3684}
3685EOF
3686if compile_prog "" "" ; then
3687  epoll_pwait=yes
3688fi
3689
3690# check for sendfile support
3691sendfile=no
3692cat > $TMPC << EOF
3693#include <sys/sendfile.h>
3694
3695int main(void)
3696{
3697    return sendfile(0, 0, 0, 0);
3698}
3699EOF
3700if compile_prog "" "" ; then
3701  sendfile=yes
3702fi
3703
3704# check for timerfd support (glibc 2.8 and newer)
3705timerfd=no
3706cat > $TMPC << EOF
3707#include <sys/timerfd.h>
3708
3709int main(void)
3710{
3711    return(timerfd_create(CLOCK_REALTIME, 0));
3712}
3713EOF
3714if compile_prog "" "" ; then
3715  timerfd=yes
3716fi
3717
3718# check for setns and unshare support
3719setns=no
3720cat > $TMPC << EOF
3721#include <sched.h>
3722
3723int main(void)
3724{
3725    int ret;
3726    ret = setns(0, 0);
3727    ret = unshare(0);
3728    return ret;
3729}
3730EOF
3731if compile_prog "" "" ; then
3732  setns=yes
3733fi
3734
3735# Check if tools are available to build documentation.
3736if test "$docs" != "no" ; then
3737  if has makeinfo && has pod2man; then
3738    docs=yes
3739  else
3740    if test "$docs" = "yes" ; then
3741      feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
3742    fi
3743    docs=no
3744  fi
3745fi
3746
3747# Search for bswap_32 function
3748byteswap_h=no
3749cat > $TMPC << EOF
3750#include <byteswap.h>
3751int main(void) { return bswap_32(0); }
3752EOF
3753if compile_prog "" "" ; then
3754  byteswap_h=yes
3755fi
3756
3757# Search for bswap32 function
3758bswap_h=no
3759cat > $TMPC << EOF
3760#include <sys/endian.h>
3761#include <sys/types.h>
3762#include <machine/bswap.h>
3763int main(void) { return bswap32(0); }
3764EOF
3765if compile_prog "" "" ; then
3766  bswap_h=yes
3767fi
3768
3769##########################################
3770# Do we have libiscsi >= 1.9.0
3771if test "$libiscsi" != "no" ; then
3772  if $pkg_config --atleast-version=1.9.0 libiscsi; then
3773    libiscsi="yes"
3774    libiscsi_cflags=$($pkg_config --cflags libiscsi)
3775    libiscsi_libs=$($pkg_config --libs libiscsi)
3776  else
3777    if test "$libiscsi" = "yes" ; then
3778      feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
3779    fi
3780    libiscsi="no"
3781  fi
3782fi
3783
3784##########################################
3785# Do we need libm
3786cat > $TMPC << EOF
3787#include <math.h>
3788int main(int argc, char **argv) { return isnan(sin((double)argc)); }
3789EOF
3790if compile_prog "" "" ; then
3791  :
3792elif compile_prog "" "-lm" ; then
3793  LIBS="-lm $LIBS"
3794  libs_qga="-lm $libs_qga"
3795else
3796  error_exit "libm check failed"
3797fi
3798
3799##########################################
3800# Do we need librt
3801# uClibc provides 2 versions of clock_gettime(), one with realtime
3802# support and one without. This means that the clock_gettime() don't
3803# need -lrt. We still need it for timer_create() so we check for this
3804# function in addition.
3805cat > $TMPC <<EOF
3806#include <signal.h>
3807#include <time.h>
3808int main(void) {
3809  timer_create(CLOCK_REALTIME, NULL, NULL);
3810  return clock_gettime(CLOCK_REALTIME, NULL);
3811}
3812EOF
3813
3814if compile_prog "" "" ; then
3815  :
3816# we need pthread for static linking. use previous pthread test result
3817elif compile_prog "" "$pthread_lib -lrt" ; then
3818  LIBS="$LIBS -lrt"
3819  libs_qga="$libs_qga -lrt"
3820fi
3821
3822if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
3823        "$aix" != "yes" -a "$haiku" != "yes" ; then
3824    libs_softmmu="-lutil $libs_softmmu"
3825fi
3826
3827##########################################
3828# spice probe
3829if test "$spice" != "no" ; then
3830  cat > $TMPC << EOF
3831#include <spice.h>
3832int main(void) { spice_server_new(); return 0; }
3833EOF
3834  spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
3835  spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
3836  if $pkg_config --atleast-version=0.12.0 spice-server && \
3837     $pkg_config --atleast-version=0.12.3 spice-protocol && \
3838     compile_prog "$spice_cflags" "$spice_libs" ; then
3839    spice="yes"
3840    libs_softmmu="$libs_softmmu $spice_libs"
3841    QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
3842    spice_protocol_version=$($pkg_config --modversion spice-protocol)
3843    spice_server_version=$($pkg_config --modversion spice-server)
3844  else
3845    if test "$spice" = "yes" ; then
3846      feature_not_found "spice" \
3847          "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
3848    fi
3849    spice="no"
3850  fi
3851fi
3852
3853# check for smartcard support
3854smartcard_cflags=""
3855if test "$smartcard" != "no"; then
3856    if $pkg_config libcacard; then
3857        libcacard_cflags=$($pkg_config --cflags libcacard)
3858        libcacard_libs=$($pkg_config --libs libcacard)
3859        QEMU_CFLAGS="$QEMU_CFLAGS $libcacard_cflags"
3860        libs_softmmu="$libs_softmmu $libcacard_libs"
3861        smartcard="yes"
3862    else
3863        if test "$smartcard" = "yes"; then
3864            feature_not_found "smartcard" "Install libcacard devel"
3865        fi
3866        smartcard="no"
3867    fi
3868fi
3869
3870# check for libusb
3871if test "$libusb" != "no" ; then
3872    if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
3873        libusb="yes"
3874        libusb_cflags=$($pkg_config --cflags libusb-1.0)
3875        libusb_libs=$($pkg_config --libs libusb-1.0)
3876        QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
3877        libs_softmmu="$libs_softmmu $libusb_libs"
3878    else
3879        if test "$libusb" = "yes"; then
3880            feature_not_found "libusb" "Install libusb devel >= 1.0.13"
3881        fi
3882        libusb="no"
3883    fi
3884fi
3885
3886# check for usbredirparser for usb network redirection support
3887if test "$usb_redir" != "no" ; then
3888    if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
3889        usb_redir="yes"
3890        usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
3891        usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
3892        QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
3893        libs_softmmu="$libs_softmmu $usb_redir_libs"
3894    else
3895        if test "$usb_redir" = "yes"; then
3896            feature_not_found "usb-redir" "Install usbredir devel"
3897        fi
3898        usb_redir="no"
3899    fi
3900fi
3901
3902##########################################
3903# check if we have VSS SDK headers for win
3904
3905if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
3906  case "$vss_win32_sdk" in
3907    "")   vss_win32_include="-I$source_path" ;;
3908    *\ *) # The SDK is installed in "Program Files" by default, but we cannot
3909          # handle path with spaces. So we symlink the headers into ".sdk/vss".
3910          vss_win32_include="-I$source_path/.sdk/vss"
3911	  symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
3912	  ;;
3913    *)    vss_win32_include="-I$vss_win32_sdk"
3914  esac
3915  cat > $TMPC << EOF
3916#define __MIDL_user_allocate_free_DEFINED__
3917#include <inc/win2003/vss.h>
3918int main(void) { return VSS_CTX_BACKUP; }
3919EOF
3920  if compile_prog "$vss_win32_include" "" ; then
3921    guest_agent_with_vss="yes"
3922    QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
3923    libs_qga="-lole32 -loleaut32 -lshlwapi -luuid -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
3924    qga_vss_provider="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb"
3925  else
3926    if test "$vss_win32_sdk" != "" ; then
3927      echo "ERROR: Please download and install Microsoft VSS SDK:"
3928      echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
3929      echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
3930      echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
3931      echo "ERROR: The headers are extracted in the directory \`inc'."
3932      feature_not_found "VSS support"
3933    fi
3934    guest_agent_with_vss="no"
3935  fi
3936fi
3937
3938##########################################
3939# lookup Windows platform SDK (if not specified)
3940# The SDK is needed only to build .tlb (type library) file of guest agent
3941# VSS provider from the source. It is usually unnecessary because the
3942# pre-compiled .tlb file is included.
3943
3944if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
3945  if test -z "$win_sdk"; then
3946    programfiles="$PROGRAMFILES"
3947    test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
3948    if test -n "$programfiles"; then
3949      win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
3950    else
3951      feature_not_found "Windows SDK"
3952    fi
3953  elif test "$win_sdk" = "no"; then
3954    win_sdk=""
3955  fi
3956fi
3957
3958##########################################
3959# check if mingw environment provides a recent ntddscsi.h
3960if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
3961  cat > $TMPC << EOF
3962#include <windows.h>
3963#include <ntddscsi.h>
3964int main(void) {
3965#if !defined(IOCTL_SCSI_GET_ADDRESS)
3966#error Missing required ioctl definitions
3967#endif
3968  SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
3969  return addr.Lun;
3970}
3971EOF
3972  if compile_prog "" "" ; then
3973    guest_agent_ntddscsi=yes
3974    libs_qga="-lsetupapi $libs_qga"
3975  fi
3976fi
3977
3978##########################################
3979# virgl renderer probe
3980
3981if test "$virglrenderer" != "no" ; then
3982  cat > $TMPC << EOF
3983#include <virglrenderer.h>
3984int main(void) { virgl_renderer_poll(); return 0; }
3985EOF
3986  virgl_cflags=$($pkg_config --cflags virglrenderer 2>/dev/null)
3987  virgl_libs=$($pkg_config --libs virglrenderer 2>/dev/null)
3988  if $pkg_config virglrenderer >/dev/null 2>&1 && \
3989     compile_prog "$virgl_cflags" "$virgl_libs" ; then
3990    virglrenderer="yes"
3991  else
3992    if test "$virglrenderer" = "yes" ; then
3993      feature_not_found "virglrenderer"
3994    fi
3995    virglrenderer="no"
3996  fi
3997fi
3998
3999##########################################
4000# check if we have fdatasync
4001
4002fdatasync=no
4003cat > $TMPC << EOF
4004#include <unistd.h>
4005int main(void) {
4006#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
4007return fdatasync(0);
4008#else
4009#error Not supported
4010#endif
4011}
4012EOF
4013if compile_prog "" "" ; then
4014    fdatasync=yes
4015fi
4016
4017##########################################
4018# check if we have madvise
4019
4020madvise=no
4021cat > $TMPC << EOF
4022#include <sys/types.h>
4023#include <sys/mman.h>
4024#include <stddef.h>
4025int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
4026EOF
4027if compile_prog "" "" ; then
4028    madvise=yes
4029fi
4030
4031##########################################
4032# check if we have posix_madvise
4033
4034posix_madvise=no
4035cat > $TMPC << EOF
4036#include <sys/mman.h>
4037#include <stddef.h>
4038int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
4039EOF
4040if compile_prog "" "" ; then
4041    posix_madvise=yes
4042fi
4043
4044##########################################
4045# check if we have usable SIGEV_THREAD_ID
4046
4047sigev_thread_id=no
4048cat > $TMPC << EOF
4049#include <signal.h>
4050int main(void) {
4051  struct sigevent ev;
4052  ev.sigev_notify = SIGEV_THREAD_ID;
4053  ev._sigev_un._tid = 0;
4054  asm volatile("" : : "g"(&ev));
4055  return 0;
4056}
4057EOF
4058if compile_prog "" "" ; then
4059    sigev_thread_id=yes
4060fi
4061
4062##########################################
4063# check if trace backend exists
4064
4065$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends  > /dev/null 2> /dev/null
4066if test "$?" -ne 0 ; then
4067  error_exit "invalid trace backends" \
4068      "Please choose supported trace backends."
4069fi
4070
4071##########################################
4072# For 'ust' backend, test if ust headers are present
4073if have_backend "ust"; then
4074  cat > $TMPC << EOF
4075#include <lttng/tracepoint.h>
4076int main(void) { return 0; }
4077EOF
4078  if compile_prog "" "" ; then
4079    if $pkg_config lttng-ust --exists; then
4080      lttng_ust_libs=`$pkg_config --libs lttng-ust`
4081    else
4082      lttng_ust_libs="-llttng-ust"
4083    fi
4084    if $pkg_config liburcu-bp --exists; then
4085      urcu_bp_libs=`$pkg_config --libs liburcu-bp`
4086    else
4087      urcu_bp_libs="-lurcu-bp"
4088    fi
4089
4090    LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4091    libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4092  else
4093    error_exit "Trace backend 'ust' missing lttng-ust header files"
4094  fi
4095fi
4096
4097##########################################
4098# For 'dtrace' backend, test if 'dtrace' command is present
4099if have_backend "dtrace"; then
4100  if ! has 'dtrace' ; then
4101    error_exit "dtrace command is not found in PATH $PATH"
4102  fi
4103  trace_backend_stap="no"
4104  if has 'stap' ; then
4105    trace_backend_stap="yes"
4106  fi
4107fi
4108
4109##########################################
4110# check and set a backend for coroutine
4111
4112# We prefer ucontext, but it's not always possible. The fallback
4113# is sigcontext. gthread is not selectable except explicitly, because
4114# it is not functional enough to run QEMU proper. (It is occasionally
4115# useful for debugging purposes.)  On Windows the only valid backend
4116# is the Windows-specific one.
4117
4118ucontext_works=no
4119if test "$darwin" != "yes"; then
4120  cat > $TMPC << EOF
4121#include <ucontext.h>
4122#ifdef __stub_makecontext
4123#error Ignoring glibc stub makecontext which will always fail
4124#endif
4125int main(void) { makecontext(0, 0, 0); return 0; }
4126EOF
4127  if compile_prog "" "" ; then
4128    ucontext_works=yes
4129  fi
4130fi
4131
4132if test "$coroutine" = ""; then
4133  if test "$mingw32" = "yes"; then
4134    coroutine=win32
4135  elif test "$ucontext_works" = "yes"; then
4136    coroutine=ucontext
4137  else
4138    coroutine=sigaltstack
4139  fi
4140else
4141  case $coroutine in
4142  windows)
4143    if test "$mingw32" != "yes"; then
4144      error_exit "'windows' coroutine backend only valid for Windows"
4145    fi
4146    # Unfortunately the user visible backend name doesn't match the
4147    # coroutine-*.c filename for this case, so we have to adjust it here.
4148    coroutine=win32
4149    ;;
4150  ucontext)
4151    if test "$ucontext_works" != "yes"; then
4152      feature_not_found "ucontext"
4153    fi
4154    ;;
4155  gthread|sigaltstack)
4156    if test "$mingw32" = "yes"; then
4157      error_exit "only the 'windows' coroutine backend is valid for Windows"
4158    fi
4159    ;;
4160  *)
4161    error_exit "unknown coroutine backend $coroutine"
4162    ;;
4163  esac
4164fi
4165
4166if test "$coroutine_pool" = ""; then
4167  if test "$coroutine" = "gthread"; then
4168    coroutine_pool=no
4169  else
4170    coroutine_pool=yes
4171  fi
4172fi
4173if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
4174  error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
4175fi
4176
4177##########################################
4178# check if we have open_by_handle_at
4179
4180open_by_handle_at=no
4181cat > $TMPC << EOF
4182#include <fcntl.h>
4183#if !defined(AT_EMPTY_PATH)
4184# error missing definition
4185#else
4186int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4187#endif
4188EOF
4189if compile_prog "" "" ; then
4190    open_by_handle_at=yes
4191fi
4192
4193########################################
4194# check if we have linux/magic.h
4195
4196linux_magic_h=no
4197cat > $TMPC << EOF
4198#include <linux/magic.h>
4199int main(void) {
4200  return 0;
4201}
4202EOF
4203if compile_prog "" "" ; then
4204    linux_magic_h=yes
4205fi
4206
4207########################################
4208# check whether we can disable warning option with a pragma (this is needed
4209# to silence warnings in the headers of some versions of external libraries).
4210# This test has to be compiled with -Werror as otherwise an unknown pragma is
4211# only a warning.
4212#
4213# If we can't selectively disable warning in the code, disable -Werror so that
4214# the build doesn't fail anyway.
4215
4216pragma_disable_unused_but_set=no
4217cat > $TMPC << EOF
4218#pragma GCC diagnostic push
4219#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4220#pragma GCC diagnostic ignored "-Wstrict-prototypes"
4221#pragma GCC diagnostic pop
4222
4223int main(void) {
4224    return 0;
4225}
4226EOF
4227if compile_prog "-Werror" "" ; then
4228    pragma_diagnostic_available=yes
4229else
4230    werror=no
4231fi
4232
4233########################################
4234# check if we have valgrind/valgrind.h
4235
4236valgrind_h=no
4237cat > $TMPC << EOF
4238#include <valgrind/valgrind.h>
4239int main(void) {
4240  return 0;
4241}
4242EOF
4243if compile_prog "" "" ; then
4244    valgrind_h=yes
4245fi
4246
4247########################################
4248# check if environ is declared
4249
4250has_environ=no
4251cat > $TMPC << EOF
4252#include <unistd.h>
4253int main(void) {
4254    environ = 0;
4255    return 0;
4256}
4257EOF
4258if compile_prog "" "" ; then
4259    has_environ=yes
4260fi
4261
4262########################################
4263# check if cpuid.h is usable.
4264
4265cpuid_h=no
4266cat > $TMPC << EOF
4267#include <cpuid.h>
4268int main(void) {
4269    unsigned a, b, c, d;
4270    int max = __get_cpuid_max(0, 0);
4271
4272    if (max >= 1) {
4273        __cpuid(1, a, b, c, d);
4274    }
4275
4276    if (max >= 7) {
4277        __cpuid_count(7, 0, a, b, c, d);
4278    }
4279
4280    return 0;
4281}
4282EOF
4283if compile_prog "" "" ; then
4284    cpuid_h=yes
4285fi
4286
4287########################################
4288# check if __[u]int128_t is usable.
4289
4290int128=no
4291cat > $TMPC << EOF
4292#if defined(__clang_major__) && defined(__clang_minor__)
4293# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4294#  error __int128_t does not work in CLANG before 3.2
4295# endif
4296#endif
4297__int128_t a;
4298__uint128_t b;
4299int main (void) {
4300  a = a + b;
4301  b = a * b;
4302  a = a * a;
4303  return 0;
4304}
4305EOF
4306if compile_prog "" "" ; then
4307    int128=yes
4308fi
4309
4310########################################
4311# check if getauxval is available.
4312
4313getauxval=no
4314cat > $TMPC << EOF
4315#include <sys/auxv.h>
4316int main(void) {
4317  return getauxval(AT_HWCAP) == 0;
4318}
4319EOF
4320if compile_prog "" "" ; then
4321    getauxval=yes
4322fi
4323
4324########################################
4325# check if ccache is interfering with
4326# semantic analysis of macros
4327
4328ccache_cpp2=no
4329cat > $TMPC << EOF
4330static const int Z = 1;
4331#define fn() ({ Z; })
4332#define TAUT(X) ((X) == Z)
4333#define PAREN(X, Y) (X == Y)
4334#define ID(X) (X)
4335int main(int argc, char *argv[])
4336{
4337    int x = 0, y = 0;
4338    x = ID(x);
4339    x = fn();
4340    fn();
4341    if (PAREN(x, y)) return 0;
4342    if (TAUT(Z)) return 0;
4343    return 0;
4344}
4345EOF
4346
4347if ! compile_object "-Werror"; then
4348    ccache_cpp2=yes
4349fi
4350
4351##########################################
4352# End of CC checks
4353# After here, no more $cc or $ld runs
4354
4355if test "$gcov" = "yes" ; then
4356  CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4357  LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
4358elif test "$debug" = "no" ; then
4359  CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
4360fi
4361
4362##########################################
4363# Do we have libnfs
4364if test "$libnfs" != "no" ; then
4365  if $pkg_config --atleast-version=1.9.3 libnfs; then
4366    libnfs="yes"
4367    libnfs_libs=$($pkg_config --libs libnfs)
4368    LIBS="$LIBS $libnfs_libs"
4369  else
4370    if test "$libnfs" = "yes" ; then
4371      feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
4372    fi
4373    libnfs="no"
4374  fi
4375fi
4376
4377# Disable zero malloc errors for official releases unless explicitly told to
4378# enable/disable
4379if test -z "$zero_malloc" ; then
4380    if test "$z_version" = "50" ; then
4381	zero_malloc="no"
4382    else
4383	zero_malloc="yes"
4384    fi
4385fi
4386
4387# Now we've finished running tests it's OK to add -Werror to the compiler flags
4388if test "$werror" = "yes"; then
4389    QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
4390fi
4391
4392if test "$solaris" = "no" ; then
4393    if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
4394        LDFLAGS="-Wl,--warn-common $LDFLAGS"
4395    fi
4396fi
4397
4398# test if pod2man has --utf8 option
4399if pod2man --help | grep -q utf8; then
4400    POD2MAN="pod2man --utf8"
4401else
4402    POD2MAN="pod2man"
4403fi
4404
4405# Use ASLR, no-SEH and DEP if available
4406if test "$mingw32" = "yes" ; then
4407    for flag in --dynamicbase --no-seh --nxcompat; do
4408        if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
4409            LDFLAGS="-Wl,$flag $LDFLAGS"
4410        fi
4411    done
4412fi
4413
4414qemu_confdir=$sysconfdir$confsuffix
4415qemu_moddir=$libdir$confsuffix
4416qemu_datadir=$datadir$confsuffix
4417qemu_localedir="$datadir/locale"
4418
4419tools=""
4420if test "$want_tools" = "yes" ; then
4421  tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4422  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
4423    tools="qemu-nbd\$(EXESUF) $tools"
4424  fi
4425fi
4426if test "$softmmu" = yes ; then
4427  if test "$virtfs" != no ; then
4428    if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
4429      virtfs=yes
4430      tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
4431    else
4432      if test "$virtfs" = yes; then
4433        error_exit "VirtFS is supported only on Linux and requires libcap-devel and libattr-devel"
4434      fi
4435      virtfs=no
4436    fi
4437  fi
4438fi
4439
4440# Probe for guest agent support/options
4441
4442if [ "$guest_agent" != "no" ]; then
4443  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
4444      tools="qemu-ga\$(EXESUF) $tools"
4445      guest_agent=yes
4446  elif [ "$guest_agent" != yes ]; then
4447      guest_agent=no
4448  else
4449      error_exit "Guest agent is not supported on this platform"
4450  fi
4451fi
4452
4453# Guest agent Window MSI  package
4454
4455if test "$guest_agent" != yes; then
4456  if test "$guest_agent_msi" = yes; then
4457    error_exit "MSI guest agent package requires guest agent enabled"
4458  fi
4459  guest_agent_msi=no
4460elif test "$mingw32" != "yes"; then
4461  if test "$guest_agent_msi" = "yes"; then
4462    error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
4463  fi
4464  guest_agent_msi=no
4465elif ! has wixl; then
4466  if test "$guest_agent_msi" = "yes"; then
4467    error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
4468  fi
4469  guest_agent_msi=no
4470else
4471  # we support qemu-ga, mingw32, and wixl: default to MSI enabled if it wasn't
4472  # disabled explicitly
4473  if test "$guest_agent_msi" != "no"; then
4474    guest_agent_msi=yes
4475  fi
4476fi
4477
4478if test "$guest_agent_msi" = "yes"; then
4479  if test "$guest_agent_with_vss" = "yes"; then
4480    QEMU_GA_MSI_WITH_VSS="-D InstallVss"
4481  fi
4482
4483  if test "$QEMU_GA_MANUFACTURER" = ""; then
4484    QEMU_GA_MANUFACTURER=QEMU
4485  fi
4486
4487  if test "$QEMU_GA_DISTRO" = ""; then
4488    QEMU_GA_DISTRO=Linux
4489  fi
4490
4491  if test "$QEMU_GA_VERSION" = ""; then
4492      QEMU_GA_VERSION=`cat $source_path/VERSION`
4493  fi
4494
4495  QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=`$pkg_config --variable=prefix glib-2.0`/bin"
4496
4497  case "$cpu" in
4498  x86_64)
4499    QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
4500    ;;
4501  i386)
4502    QEMU_GA_MSI_ARCH="-D Arch=32"
4503    ;;
4504  *)
4505    error_exit "CPU $cpu not supported for building installation package"
4506    ;;
4507  esac
4508fi
4509
4510# Mac OS X ships with a broken assembler
4511roms=
4512if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
4513        "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
4514        "$softmmu" = yes ; then
4515  roms="optionrom"
4516fi
4517if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
4518  roms="$roms spapr-rtas"
4519fi
4520
4521if test "$cpu" = "s390x" ; then
4522  roms="$roms s390-ccw"
4523fi
4524
4525# Probe for the need for relocating the user-only binary.
4526if test "$pie" = "no" ; then
4527  textseg_addr=
4528  case "$cpu" in
4529    arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
4530      # ??? Rationale for choosing this address
4531      textseg_addr=0x60000000
4532      ;;
4533    mips)
4534      # A 256M aligned address, high in the address space, with enough
4535      # room for the code_gen_buffer above it before the stack.
4536      textseg_addr=0x60000000
4537      ;;
4538  esac
4539  if [ -n "$textseg_addr" ]; then
4540    cat > $TMPC <<EOF
4541    int main(void) { return 0; }
4542EOF
4543    textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
4544    if ! compile_prog "" "$textseg_ldflags"; then
4545      # In case ld does not support -Ttext-segment, edit the default linker
4546      # script via sed to set the .text start addr.  This is needed on FreeBSD
4547      # at least.
4548      $ld --verbose | sed \
4549        -e '1,/==================================================/d' \
4550        -e '/==================================================/,$d' \
4551        -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
4552        -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
4553      textseg_ldflags="-Wl,-T../config-host.ld"
4554    fi
4555  fi
4556fi
4557
4558# prepend pixman and ftd flags after all config tests are done
4559QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
4560libs_softmmu="$pixman_libs $libs_softmmu"
4561
4562echo "Install prefix    $prefix"
4563echo "BIOS directory    `eval echo $qemu_datadir`"
4564echo "binary directory  `eval echo $bindir`"
4565echo "library directory `eval echo $libdir`"
4566echo "module directory  `eval echo $qemu_moddir`"
4567echo "libexec directory `eval echo $libexecdir`"
4568echo "include directory `eval echo $includedir`"
4569echo "config directory  `eval echo $sysconfdir`"
4570if test "$mingw32" = "no" ; then
4571echo "local state directory   `eval echo $local_statedir`"
4572echo "Manual directory  `eval echo $mandir`"
4573echo "ELF interp prefix $interp_prefix"
4574else
4575echo "local state directory   queried at runtime"
4576echo "Windows SDK       $win_sdk"
4577fi
4578echo "Source path       $source_path"
4579echo "C compiler        $cc"
4580echo "Host C compiler   $host_cc"
4581echo "C++ compiler      $cxx"
4582echo "Objective-C compiler $objcc"
4583echo "ARFLAGS           $ARFLAGS"
4584echo "CFLAGS            $CFLAGS"
4585echo "QEMU_CFLAGS       $QEMU_CFLAGS"
4586echo "LDFLAGS           $LDFLAGS"
4587echo "make              $make"
4588echo "install           $install"
4589echo "python            $python"
4590if test "$slirp" = "yes" ; then
4591    echo "smbd              $smbd"
4592fi
4593echo "module support    $modules"
4594echo "host CPU          $cpu"
4595echo "host big endian   $bigendian"
4596echo "target list       $target_list"
4597echo "tcg debug enabled $debug_tcg"
4598echo "gprof enabled     $gprof"
4599echo "sparse enabled    $sparse"
4600echo "strip binaries    $strip_opt"
4601echo "profiler          $profiler"
4602echo "static build      $static"
4603if test "$darwin" = "yes" ; then
4604    echo "Cocoa support     $cocoa"
4605fi
4606echo "pixman            $pixman"
4607echo "SDL support       $sdl"
4608echo "GTK support       $gtk"
4609echo "GTK GL support    $gtk_gl"
4610echo "GNUTLS support    $gnutls"
4611echo "GNUTLS hash       $gnutls_hash"
4612echo "GNUTLS gcrypt     $gnutls_gcrypt"
4613echo "GNUTLS nettle     $gnutls_nettle ${gnutls_nettle+($nettle_version)}"
4614echo "libtasn1          $tasn1"
4615echo "VTE support       $vte"
4616echo "curses support    $curses"
4617echo "virgl support     $virglrenderer"
4618echo "curl support      $curl"
4619echo "mingw32 support   $mingw32"
4620echo "Audio drivers     $audio_drv_list"
4621echo "Block whitelist (rw) $block_drv_rw_whitelist"
4622echo "Block whitelist (ro) $block_drv_ro_whitelist"
4623echo "VirtFS support    $virtfs"
4624echo "VNC support       $vnc"
4625if test "$vnc" = "yes" ; then
4626    echo "VNC SASL support  $vnc_sasl"
4627    echo "VNC JPEG support  $vnc_jpeg"
4628    echo "VNC PNG support   $vnc_png"
4629fi
4630if test -n "$sparc_cpu"; then
4631    echo "Target Sparc Arch $sparc_cpu"
4632fi
4633echo "xen support       $xen"
4634if test "$xen" = "yes" ; then
4635  echo "xen ctrl version  $xen_ctrl_version"
4636fi
4637echo "brlapi support    $brlapi"
4638echo "bluez  support    $bluez"
4639echo "Documentation     $docs"
4640echo "PIE               $pie"
4641echo "vde support       $vde"
4642echo "netmap support    $netmap"
4643echo "Linux AIO support $linux_aio"
4644echo "ATTR/XATTR support $attr"
4645echo "Install blobs     $blobs"
4646echo "KVM support       $kvm"
4647echo "RDMA support      $rdma"
4648echo "TCG interpreter   $tcg_interpreter"
4649echo "fdt support       $fdt"
4650echo "preadv support    $preadv"
4651echo "fdatasync         $fdatasync"
4652echo "madvise           $madvise"
4653echo "posix_madvise     $posix_madvise"
4654echo "sigev_thread_id   $sigev_thread_id"
4655echo "uuid support      $uuid"
4656echo "libcap-ng support $cap_ng"
4657echo "vhost-net support $vhost_net"
4658echo "vhost-scsi support $vhost_scsi"
4659echo "Trace backends    $trace_backends"
4660if test "$trace_backend" = "simple"; then
4661echo "Trace output file $trace_file-<pid>"
4662fi
4663if test "$spice" = "yes"; then
4664echo "spice support     $spice ($spice_protocol_version/$spice_server_version)"
4665else
4666echo "spice support     $spice"
4667fi
4668echo "rbd support       $rbd"
4669echo "xfsctl support    $xfs"
4670echo "smartcard support $smartcard"
4671echo "libusb            $libusb"
4672echo "usb net redir     $usb_redir"
4673echo "OpenGL support    $opengl"
4674echo "libiscsi support  $libiscsi"
4675echo "libnfs support    $libnfs"
4676echo "build guest agent $guest_agent"
4677echo "QGA VSS support   $guest_agent_with_vss"
4678echo "QGA w32 disk info $guest_agent_ntddscsi"
4679echo "QGA MSI support   $guest_agent_msi"
4680echo "seccomp support   $seccomp"
4681echo "coroutine backend $coroutine"
4682echo "coroutine pool    $coroutine_pool"
4683echo "GlusterFS support $glusterfs"
4684echo "Archipelago support $archipelago"
4685echo "gcov              $gcov_tool"
4686echo "gcov enabled      $gcov"
4687echo "TPM support       $tpm"
4688echo "libssh2 support   $libssh2"
4689echo "TPM passthrough   $tpm_passthrough"
4690echo "QOM debugging     $qom_cast_debug"
4691echo "vhdx              $vhdx"
4692echo "lzo support       $lzo"
4693echo "snappy support    $snappy"
4694echo "bzip2 support     $bzip2"
4695echo "NUMA host support $numa"
4696echo "tcmalloc support  $tcmalloc"
4697echo "jemalloc support  $jemalloc"
4698
4699if test "$sdl_too_old" = "yes"; then
4700echo "-> Your SDL version is too old - please upgrade to have SDL support"
4701fi
4702
4703config_host_mak="config-host.mak"
4704
4705echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
4706
4707echo "# Automatically generated by configure - do not modify" > $config_host_mak
4708echo >> $config_host_mak
4709
4710echo all: >> $config_host_mak
4711echo "prefix=$prefix" >> $config_host_mak
4712echo "bindir=$bindir" >> $config_host_mak
4713echo "libdir=$libdir" >> $config_host_mak
4714echo "libexecdir=$libexecdir" >> $config_host_mak
4715echo "includedir=$includedir" >> $config_host_mak
4716echo "mandir=$mandir" >> $config_host_mak
4717echo "sysconfdir=$sysconfdir" >> $config_host_mak
4718echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
4719echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
4720echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
4721echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
4722if test "$mingw32" = "no" ; then
4723  echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
4724fi
4725echo "qemu_helperdir=$libexecdir" >> $config_host_mak
4726echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
4727echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
4728echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
4729echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
4730
4731echo "ARCH=$ARCH" >> $config_host_mak
4732
4733if test "$debug_tcg" = "yes" ; then
4734  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
4735fi
4736if test "$strip_opt" = "yes" ; then
4737  echo "STRIP=${strip}" >> $config_host_mak
4738fi
4739if test "$bigendian" = "yes" ; then
4740  echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
4741fi
4742if test "$mingw32" = "yes" ; then
4743  echo "CONFIG_WIN32=y" >> $config_host_mak
4744  rc_version=`cat $source_path/VERSION`
4745  version_major=${rc_version%%.*}
4746  rc_version=${rc_version#*.}
4747  version_minor=${rc_version%%.*}
4748  rc_version=${rc_version#*.}
4749  version_subminor=${rc_version%%.*}
4750  version_micro=0
4751  echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4752  echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4753  if test "$guest_agent_with_vss" = "yes" ; then
4754    echo "CONFIG_QGA_VSS=y" >> $config_host_mak
4755    echo "QGA_VSS_PROVIDER=$qga_vss_provider" >> $config_host_mak
4756    echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
4757  fi
4758  if test "$guest_agent_ntddscsi" = "yes" ; then
4759    echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
4760  fi
4761  if test "$guest_agent_msi" = "yes"; then
4762    echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
4763    echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
4764    echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
4765    echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
4766    echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
4767    echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
4768    echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
4769  fi
4770else
4771  echo "CONFIG_POSIX=y" >> $config_host_mak
4772fi
4773
4774if test "$linux" = "yes" ; then
4775  echo "CONFIG_LINUX=y" >> $config_host_mak
4776fi
4777
4778if test "$darwin" = "yes" ; then
4779  echo "CONFIG_DARWIN=y" >> $config_host_mak
4780fi
4781
4782if test "$aix" = "yes" ; then
4783  echo "CONFIG_AIX=y" >> $config_host_mak
4784fi
4785
4786if test "$solaris" = "yes" ; then
4787  echo "CONFIG_SOLARIS=y" >> $config_host_mak
4788  echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
4789  if test "$needs_libsunmath" = "yes" ; then
4790    echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
4791  fi
4792fi
4793if test "$haiku" = "yes" ; then
4794  echo "CONFIG_HAIKU=y" >> $config_host_mak
4795fi
4796if test "$static" = "yes" ; then
4797  echo "CONFIG_STATIC=y" >> $config_host_mak
4798fi
4799if test "$profiler" = "yes" ; then
4800  echo "CONFIG_PROFILER=y" >> $config_host_mak
4801fi
4802if test "$slirp" = "yes" ; then
4803  echo "CONFIG_SLIRP=y" >> $config_host_mak
4804  echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
4805fi
4806if test "$vde" = "yes" ; then
4807  echo "CONFIG_VDE=y" >> $config_host_mak
4808fi
4809if test "$netmap" = "yes" ; then
4810  echo "CONFIG_NETMAP=y" >> $config_host_mak
4811fi
4812if test "$l2tpv3" = "yes" ; then
4813  echo "CONFIG_L2TPV3=y" >> $config_host_mak
4814fi
4815if test "$cap_ng" = "yes" ; then
4816  echo "CONFIG_LIBCAP=y" >> $config_host_mak
4817fi
4818echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
4819for drv in $audio_drv_list; do
4820    def=CONFIG_`echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]'`
4821    echo "$def=y" >> $config_host_mak
4822done
4823if test "$audio_pt_int" = "yes" ; then
4824  echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
4825fi
4826if test "$audio_win_int" = "yes" ; then
4827  echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
4828fi
4829echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
4830echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
4831if test "$vnc" = "yes" ; then
4832  echo "CONFIG_VNC=y" >> $config_host_mak
4833fi
4834if test "$vnc_sasl" = "yes" ; then
4835  echo "CONFIG_VNC_SASL=y" >> $config_host_mak
4836fi
4837if test "$vnc_jpeg" = "yes" ; then
4838  echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
4839fi
4840if test "$vnc_png" = "yes" ; then
4841  echo "CONFIG_VNC_PNG=y" >> $config_host_mak
4842fi
4843if test "$fnmatch" = "yes" ; then
4844  echo "CONFIG_FNMATCH=y" >> $config_host_mak
4845fi
4846if test "$uuid" = "yes" ; then
4847  echo "CONFIG_UUID=y" >> $config_host_mak
4848fi
4849if test "$xfs" = "yes" ; then
4850  echo "CONFIG_XFS=y" >> $config_host_mak
4851fi
4852qemu_version=`head $source_path/VERSION`
4853echo "VERSION=$qemu_version" >>$config_host_mak
4854echo "PKGVERSION=$pkgversion" >>$config_host_mak
4855echo "SRC_PATH=$source_path" >> $config_host_mak
4856echo "TARGET_DIRS=$target_list" >> $config_host_mak
4857if [ "$docs" = "yes" ] ; then
4858  echo "BUILD_DOCS=yes" >> $config_host_mak
4859fi
4860if test "$modules" = "yes"; then
4861  # $shacmd can generate a hash started with digit, which the compiler doesn't
4862  # like as an symbol. So prefix it with an underscore
4863  echo "CONFIG_STAMP=_`(echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ `" >> $config_host_mak
4864  echo "CONFIG_MODULES=y" >> $config_host_mak
4865fi
4866if test "$sdl" = "yes" ; then
4867  echo "CONFIG_SDL=y" >> $config_host_mak
4868  echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
4869  echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
4870fi
4871if test "$cocoa" = "yes" ; then
4872  echo "CONFIG_COCOA=y" >> $config_host_mak
4873fi
4874if test "$curses" = "yes" ; then
4875  echo "CONFIG_CURSES=y" >> $config_host_mak
4876fi
4877if test "$utimens" = "yes" ; then
4878  echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
4879fi
4880if test "$pipe2" = "yes" ; then
4881  echo "CONFIG_PIPE2=y" >> $config_host_mak
4882fi
4883if test "$accept4" = "yes" ; then
4884  echo "CONFIG_ACCEPT4=y" >> $config_host_mak
4885fi
4886if test "$splice" = "yes" ; then
4887  echo "CONFIG_SPLICE=y" >> $config_host_mak
4888fi
4889if test "$eventfd" = "yes" ; then
4890  echo "CONFIG_EVENTFD=y" >> $config_host_mak
4891fi
4892if test "$fallocate" = "yes" ; then
4893  echo "CONFIG_FALLOCATE=y" >> $config_host_mak
4894fi
4895if test "$fallocate_punch_hole" = "yes" ; then
4896  echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
4897fi
4898if test "$fallocate_zero_range" = "yes" ; then
4899  echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
4900fi
4901if test "$posix_fallocate" = "yes" ; then
4902  echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
4903fi
4904if test "$sync_file_range" = "yes" ; then
4905  echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
4906fi
4907if test "$fiemap" = "yes" ; then
4908  echo "CONFIG_FIEMAP=y" >> $config_host_mak
4909fi
4910if test "$dup3" = "yes" ; then
4911  echo "CONFIG_DUP3=y" >> $config_host_mak
4912fi
4913if test "$ppoll" = "yes" ; then
4914  echo "CONFIG_PPOLL=y" >> $config_host_mak
4915fi
4916if test "$prctl_pr_set_timerslack" = "yes" ; then
4917  echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
4918fi
4919if test "$epoll" = "yes" ; then
4920  echo "CONFIG_EPOLL=y" >> $config_host_mak
4921fi
4922if test "$epoll_create1" = "yes" ; then
4923  echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
4924fi
4925if test "$epoll_pwait" = "yes" ; then
4926  echo "CONFIG_EPOLL_PWAIT=y" >> $config_host_mak
4927fi
4928if test "$sendfile" = "yes" ; then
4929  echo "CONFIG_SENDFILE=y" >> $config_host_mak
4930fi
4931if test "$timerfd" = "yes" ; then
4932  echo "CONFIG_TIMERFD=y" >> $config_host_mak
4933fi
4934if test "$setns" = "yes" ; then
4935  echo "CONFIG_SETNS=y" >> $config_host_mak
4936fi
4937if test "$inotify" = "yes" ; then
4938  echo "CONFIG_INOTIFY=y" >> $config_host_mak
4939fi
4940if test "$inotify1" = "yes" ; then
4941  echo "CONFIG_INOTIFY1=y" >> $config_host_mak
4942fi
4943if test "$byteswap_h" = "yes" ; then
4944  echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
4945fi
4946if test "$bswap_h" = "yes" ; then
4947  echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
4948fi
4949if test "$curl" = "yes" ; then
4950  echo "CONFIG_CURL=m" >> $config_host_mak
4951  echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
4952  echo "CURL_LIBS=$curl_libs" >> $config_host_mak
4953fi
4954if test "$brlapi" = "yes" ; then
4955  echo "CONFIG_BRLAPI=y" >> $config_host_mak
4956fi
4957if test "$bluez" = "yes" ; then
4958  echo "CONFIG_BLUEZ=y" >> $config_host_mak
4959  echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
4960fi
4961if test "$glib_subprocess" = "yes" ; then
4962  echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
4963fi
4964echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
4965if test "$gtk" = "yes" ; then
4966  echo "CONFIG_GTK=y" >> $config_host_mak
4967  echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
4968  echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
4969  if test "$gtk_gl" = "yes" ; then
4970    echo "CONFIG_GTK_GL=y" >> $config_host_mak
4971  fi
4972fi
4973if test "$gnutls" = "yes" ; then
4974  echo "CONFIG_GNUTLS=y" >> $config_host_mak
4975fi
4976if test "$gnutls_hash" = "yes" ; then
4977  echo "CONFIG_GNUTLS_HASH=y" >> $config_host_mak
4978fi
4979if test "$gnutls_gcrypt" = "yes" ; then
4980  echo "CONFIG_GNUTLS_GCRYPT=y" >> $config_host_mak
4981fi
4982if test "$gnutls_nettle" = "yes" ; then
4983  echo "CONFIG_GNUTLS_NETTLE=y" >> $config_host_mak
4984  echo "CONFIG_NETTLE_VERSION_MAJOR=${nettle_version%%.*}" >> $config_host_mak
4985fi
4986if test "$tasn1" = "yes" ; then
4987  echo "CONFIG_TASN1=y" >> $config_host_mak
4988fi
4989if test "$vte" = "yes" ; then
4990  echo "CONFIG_VTE=y" >> $config_host_mak
4991  echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
4992fi
4993if test "$virglrenderer" = "yes" ; then
4994  echo "CONFIG_VIRGL=y" >> $config_host_mak
4995  echo "VIRGL_CFLAGS=$virgl_cflags" >> $config_host_mak
4996  echo "VIRGL_LIBS=$virgl_libs" >> $config_host_mak
4997fi
4998if test "$xen" = "yes" ; then
4999  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
5000  echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
5001fi
5002if test "$linux_aio" = "yes" ; then
5003  echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
5004fi
5005if test "$attr" = "yes" ; then
5006  echo "CONFIG_ATTR=y" >> $config_host_mak
5007fi
5008if test "$libattr" = "yes" ; then
5009  echo "CONFIG_LIBATTR=y" >> $config_host_mak
5010fi
5011if test "$virtfs" = "yes" ; then
5012  echo "CONFIG_VIRTFS=y" >> $config_host_mak
5013fi
5014if test "$vhost_scsi" = "yes" ; then
5015  echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
5016fi
5017if test "$vhost_net" = "yes" ; then
5018  echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
5019fi
5020if test "$blobs" = "yes" ; then
5021  echo "INSTALL_BLOBS=yes" >> $config_host_mak
5022fi
5023if test "$iovec" = "yes" ; then
5024  echo "CONFIG_IOVEC=y" >> $config_host_mak
5025fi
5026if test "$preadv" = "yes" ; then
5027  echo "CONFIG_PREADV=y" >> $config_host_mak
5028fi
5029if test "$fdt" = "yes" ; then
5030  echo "CONFIG_FDT=y" >> $config_host_mak
5031fi
5032if test "$signalfd" = "yes" ; then
5033  echo "CONFIG_SIGNALFD=y" >> $config_host_mak
5034fi
5035if test "$tcg_interpreter" = "yes" ; then
5036  echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
5037fi
5038if test "$fdatasync" = "yes" ; then
5039  echo "CONFIG_FDATASYNC=y" >> $config_host_mak
5040fi
5041if test "$madvise" = "yes" ; then
5042  echo "CONFIG_MADVISE=y" >> $config_host_mak
5043fi
5044if test "$posix_madvise" = "yes" ; then
5045  echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
5046fi
5047if test "$sigev_thread_id" = "yes" ; then
5048  echo "CONFIG_SIGEV_THREAD_ID=y" >> $config_host_mak
5049fi
5050
5051if test "$spice" = "yes" ; then
5052  echo "CONFIG_SPICE=y" >> $config_host_mak
5053fi
5054
5055if test "$smartcard" = "yes" ; then
5056  echo "CONFIG_SMARTCARD=y" >> $config_host_mak
5057fi
5058
5059if test "$libusb" = "yes" ; then
5060  echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
5061fi
5062
5063if test "$usb_redir" = "yes" ; then
5064  echo "CONFIG_USB_REDIR=y" >> $config_host_mak
5065fi
5066
5067if test "$opengl" = "yes" ; then
5068  echo "CONFIG_OPENGL=y" >> $config_host_mak
5069  echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
5070  echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
5071fi
5072
5073if test "$lzo" = "yes" ; then
5074  echo "CONFIG_LZO=y" >> $config_host_mak
5075fi
5076
5077if test "$snappy" = "yes" ; then
5078  echo "CONFIG_SNAPPY=y" >> $config_host_mak
5079fi
5080
5081if test "$bzip2" = "yes" ; then
5082  echo "CONFIG_BZIP2=y" >> $config_host_mak
5083  echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
5084fi
5085
5086if test "$libiscsi" = "yes" ; then
5087  echo "CONFIG_LIBISCSI=m" >> $config_host_mak
5088  echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
5089  echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
5090fi
5091
5092if test "$libnfs" = "yes" ; then
5093  echo "CONFIG_LIBNFS=y" >> $config_host_mak
5094fi
5095
5096if test "$seccomp" = "yes"; then
5097  echo "CONFIG_SECCOMP=y" >> $config_host_mak
5098fi
5099
5100# XXX: suppress that
5101if [ "$bsd" = "yes" ] ; then
5102  echo "CONFIG_BSD=y" >> $config_host_mak
5103fi
5104
5105if test "$zero_malloc" = "yes" ; then
5106  echo "CONFIG_ZERO_MALLOC=y" >> $config_host_mak
5107fi
5108if test "$localtime_r" = "yes" ; then
5109  echo "CONFIG_LOCALTIME_R=y" >> $config_host_mak
5110fi
5111if test "$qom_cast_debug" = "yes" ; then
5112  echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
5113fi
5114if test "$rbd" = "yes" ; then
5115  echo "CONFIG_RBD=m" >> $config_host_mak
5116  echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
5117  echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
5118fi
5119
5120echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
5121if test "$coroutine_pool" = "yes" ; then
5122  echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
5123else
5124  echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
5125fi
5126
5127if test "$open_by_handle_at" = "yes" ; then
5128  echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
5129fi
5130
5131if test "$linux_magic_h" = "yes" ; then
5132  echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
5133fi
5134
5135if test "$pragma_diagnostic_available" = "yes" ; then
5136  echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
5137fi
5138
5139if test "$valgrind_h" = "yes" ; then
5140  echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
5141fi
5142
5143if test "$has_environ" = "yes" ; then
5144  echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
5145fi
5146
5147if test "$cpuid_h" = "yes" ; then
5148  echo "CONFIG_CPUID_H=y" >> $config_host_mak
5149fi
5150
5151if test "$int128" = "yes" ; then
5152  echo "CONFIG_INT128=y" >> $config_host_mak
5153fi
5154
5155if test "$getauxval" = "yes" ; then
5156  echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
5157fi
5158
5159if test "$glusterfs" = "yes" ; then
5160  echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
5161  echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
5162  echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
5163fi
5164
5165if test "$glusterfs_discard" = "yes" ; then
5166  echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
5167fi
5168
5169if test "$glusterfs_zerofill" = "yes" ; then
5170  echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
5171fi
5172
5173if test "$archipelago" = "yes" ; then
5174  echo "CONFIG_ARCHIPELAGO=m" >> $config_host_mak
5175  echo "ARCHIPELAGO_LIBS=$archipelago_libs" >> $config_host_mak
5176fi
5177
5178if test "$libssh2" = "yes" ; then
5179  echo "CONFIG_LIBSSH2=m" >> $config_host_mak
5180  echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
5181  echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
5182fi
5183
5184if test "$vhdx" = "yes" ; then
5185  echo "CONFIG_VHDX=y" >> $config_host_mak
5186fi
5187
5188# USB host support
5189if test "$libusb" = "yes"; then
5190  echo "HOST_USB=libusb legacy" >> $config_host_mak
5191else
5192  echo "HOST_USB=stub" >> $config_host_mak
5193fi
5194
5195# TPM passthrough support?
5196if test "$tpm" = "yes"; then
5197  echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
5198  if test "$tpm_passthrough" = "yes"; then
5199    echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
5200  fi
5201fi
5202
5203echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5204if have_backend "nop"; then
5205  echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
5206fi
5207if have_backend "simple"; then
5208  echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5209  # Set the appropriate trace file.
5210  trace_file="\"$trace_file-\" FMT_pid"
5211fi
5212if have_backend "stderr"; then
5213  echo "CONFIG_TRACE_STDERR=y" >> $config_host_mak
5214fi
5215if have_backend "ust"; then
5216  echo "CONFIG_TRACE_UST=y" >> $config_host_mak
5217fi
5218if have_backend "dtrace"; then
5219  echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
5220  if test "$trace_backend_stap" = "yes" ; then
5221    echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
5222  fi
5223fi
5224if have_backend "ftrace"; then
5225  if test "$linux" = "yes" ; then
5226    echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
5227  else
5228    feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
5229  fi
5230fi
5231echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
5232
5233if test "$rdma" = "yes" ; then
5234  echo "CONFIG_RDMA=y" >> $config_host_mak
5235fi
5236
5237# Hold two types of flag:
5238#   CONFIG_THREAD_SETNAME_BYTHREAD  - we've got a way of setting the name on
5239#                                     a thread we have a handle to
5240#   CONFIG_PTHREAD_SETNAME_NP       - A way of doing it on a particular
5241#                                     platform
5242if test "$pthread_setname_np" = "yes" ; then
5243  echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
5244  echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
5245fi
5246
5247if test "$tcg_interpreter" = "yes"; then
5248  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5249elif test "$ARCH" = "sparc64" ; then
5250  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5251elif test "$ARCH" = "s390x" ; then
5252  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
5253elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
5254  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
5255elif test "$ARCH" = "ppc64" ; then
5256  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5257else
5258  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5259fi
5260QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
5261
5262echo "TOOLS=$tools" >> $config_host_mak
5263echo "ROMS=$roms" >> $config_host_mak
5264echo "MAKE=$make" >> $config_host_mak
5265echo "INSTALL=$install" >> $config_host_mak
5266echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
5267echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
5268if test -n "$libtool"; then
5269  echo "INSTALL_PROG=\$(LIBTOOL) --mode=install $install -c -m 0755" >> $config_host_mak
5270  echo "INSTALL_LIB=\$(LIBTOOL) --mode=install $install -c -m 0644" >> $config_host_mak
5271else
5272  echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
5273  echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
5274fi
5275echo "PYTHON=$python" >> $config_host_mak
5276echo "CC=$cc" >> $config_host_mak
5277if $iasl -h > /dev/null 2>&1; then
5278  echo "IASL=$iasl" >> $config_host_mak
5279fi
5280echo "CC_I386=$cc_i386" >> $config_host_mak
5281echo "HOST_CC=$host_cc" >> $config_host_mak
5282echo "CXX=$cxx" >> $config_host_mak
5283echo "OBJCC=$objcc" >> $config_host_mak
5284echo "AR=$ar" >> $config_host_mak
5285echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
5286echo "AS=$as" >> $config_host_mak
5287echo "CPP=$cpp" >> $config_host_mak
5288echo "OBJCOPY=$objcopy" >> $config_host_mak
5289echo "LD=$ld" >> $config_host_mak
5290echo "NM=$nm" >> $config_host_mak
5291echo "WINDRES=$windres" >> $config_host_mak
5292echo "LIBTOOL=$libtool" >> $config_host_mak
5293echo "CFLAGS=$CFLAGS" >> $config_host_mak
5294echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
5295echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
5296echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
5297if test "$sparse" = "yes" ; then
5298  echo "CC           := REAL_CC=\"\$(CC)\" cgcc"       >> $config_host_mak
5299  echo "CPP          := REAL_CC=\"\$(CPP)\" cgcc"      >> $config_host_mak
5300  echo "CXX          := REAL_CC=\"\$(CXX)\" cgcc"      >> $config_host_mak
5301  echo "HOST_CC      := REAL_CC=\"\$(HOST_CC)\" cgcc"  >> $config_host_mak
5302  echo "QEMU_CFLAGS  += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
5303fi
5304if test "$cross_prefix" != ""; then
5305  echo "AUTOCONF_HOST := --host=${cross_prefix%-}"     >> $config_host_mak
5306else
5307  echo "AUTOCONF_HOST := "                             >> $config_host_mak
5308fi
5309echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
5310echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
5311echo "LIBTOOLFLAGS=$LIBTOOLFLAGS" >> $config_host_mak
5312echo "LIBS+=$LIBS" >> $config_host_mak
5313echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
5314echo "EXESUF=$EXESUF" >> $config_host_mak
5315echo "DSOSUF=$DSOSUF" >> $config_host_mak
5316echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
5317echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
5318echo "TEST_LIBS=$test_libs" >> $config_host_mak
5319echo "TEST_CFLAGS=$test_cflags" >> $config_host_mak
5320echo "POD2MAN=$POD2MAN" >> $config_host_mak
5321echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
5322if test "$gcov" = "yes" ; then
5323  echo "CONFIG_GCOV=y" >> $config_host_mak
5324  echo "GCOV=$gcov_tool" >> $config_host_mak
5325fi
5326
5327# use included Linux headers
5328if test "$linux" = "yes" ; then
5329  mkdir -p linux-headers
5330  case "$cpu" in
5331  i386|x86_64|x32)
5332    linux_arch=x86
5333    ;;
5334  ppcemb|ppc|ppc64)
5335    linux_arch=powerpc
5336    ;;
5337  s390x)
5338    linux_arch=s390
5339    ;;
5340  aarch64)
5341    linux_arch=arm64
5342    ;;
5343  mips64)
5344    linux_arch=mips
5345    ;;
5346  *)
5347    # For most CPUs the kernel architecture name and QEMU CPU name match.
5348    linux_arch="$cpu"
5349    ;;
5350  esac
5351    # For non-KVM architectures we will not have asm headers
5352    if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
5353      symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
5354    fi
5355fi
5356
5357for target in $target_list; do
5358target_dir="$target"
5359config_target_mak=$target_dir/config-target.mak
5360target_name=`echo $target | cut -d '-' -f 1`
5361target_bigendian="no"
5362
5363case "$target_name" in
5364  armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
5365  target_bigendian=yes
5366  ;;
5367esac
5368target_softmmu="no"
5369target_user_only="no"
5370target_linux_user="no"
5371target_bsd_user="no"
5372case "$target" in
5373  ${target_name}-softmmu)
5374    target_softmmu="yes"
5375    ;;
5376  ${target_name}-linux-user)
5377    if test "$linux" != "yes" ; then
5378      error_exit "Target '$target' is only available on a Linux host"
5379    fi
5380    target_user_only="yes"
5381    target_linux_user="yes"
5382    ;;
5383  ${target_name}-bsd-user)
5384    if test "$bsd" != "yes" ; then
5385      error_exit "Target '$target' is only available on a BSD host"
5386    fi
5387    target_user_only="yes"
5388    target_bsd_user="yes"
5389    ;;
5390  *)
5391    error_exit "Target '$target' not recognised"
5392    exit 1
5393    ;;
5394esac
5395
5396mkdir -p $target_dir
5397echo "# Automatically generated by configure - do not modify" > $config_target_mak
5398
5399bflt="no"
5400interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_name/g"`
5401gdb_xml_files=""
5402
5403TARGET_ARCH="$target_name"
5404TARGET_BASE_ARCH=""
5405TARGET_ABI_DIR=""
5406
5407case "$target_name" in
5408  i386)
5409  ;;
5410  x86_64)
5411    TARGET_BASE_ARCH=i386
5412  ;;
5413  alpha)
5414  ;;
5415  arm|armeb)
5416    TARGET_ARCH=arm
5417    bflt="yes"
5418    gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5419  ;;
5420  aarch64)
5421    TARGET_BASE_ARCH=arm
5422    bflt="yes"
5423    gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5424  ;;
5425  cris)
5426  ;;
5427  lm32)
5428  ;;
5429  m68k)
5430    bflt="yes"
5431    gdb_xml_files="cf-core.xml cf-fp.xml"
5432  ;;
5433  microblaze|microblazeel)
5434    TARGET_ARCH=microblaze
5435    bflt="yes"
5436  ;;
5437  mips|mipsel)
5438    TARGET_ARCH=mips
5439    echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
5440  ;;
5441  mipsn32|mipsn32el)
5442    TARGET_ARCH=mips64
5443    TARGET_BASE_ARCH=mips
5444    echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
5445    echo "TARGET_ABI32=y" >> $config_target_mak
5446  ;;
5447  mips64|mips64el)
5448    TARGET_ARCH=mips64
5449    TARGET_BASE_ARCH=mips
5450    echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
5451  ;;
5452  moxie)
5453  ;;
5454  or32)
5455    TARGET_ARCH=openrisc
5456    TARGET_BASE_ARCH=openrisc
5457  ;;
5458  ppc)
5459    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5460  ;;
5461  ppcemb)
5462    TARGET_BASE_ARCH=ppc
5463    TARGET_ABI_DIR=ppc
5464    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5465  ;;
5466  ppc64)
5467    TARGET_BASE_ARCH=ppc
5468    TARGET_ABI_DIR=ppc
5469    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5470  ;;
5471  ppc64le)
5472    TARGET_ARCH=ppc64
5473    TARGET_BASE_ARCH=ppc
5474    TARGET_ABI_DIR=ppc
5475    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5476  ;;
5477  ppc64abi32)
5478    TARGET_ARCH=ppc64
5479    TARGET_BASE_ARCH=ppc
5480    TARGET_ABI_DIR=ppc
5481    echo "TARGET_ABI32=y" >> $config_target_mak
5482    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5483  ;;
5484  sh4|sh4eb)
5485    TARGET_ARCH=sh4
5486    bflt="yes"
5487  ;;
5488  sparc)
5489  ;;
5490  sparc64)
5491    TARGET_BASE_ARCH=sparc
5492  ;;
5493  sparc32plus)
5494    TARGET_ARCH=sparc64
5495    TARGET_BASE_ARCH=sparc
5496    TARGET_ABI_DIR=sparc
5497    echo "TARGET_ABI32=y" >> $config_target_mak
5498  ;;
5499  s390x)
5500    gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml s390-cr.xml s390-virt.xml"
5501  ;;
5502  tilegx)
5503  ;;
5504  tricore)
5505  ;;
5506  unicore32)
5507  ;;
5508  xtensa|xtensaeb)
5509    TARGET_ARCH=xtensa
5510  ;;
5511  *)
5512    error_exit "Unsupported target CPU"
5513  ;;
5514esac
5515# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
5516if [ "$TARGET_BASE_ARCH" = "" ]; then
5517  TARGET_BASE_ARCH=$TARGET_ARCH
5518fi
5519
5520symlink "$source_path/Makefile.target" "$target_dir/Makefile"
5521
5522upper() {
5523    echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
5524}
5525
5526target_arch_name="`upper $TARGET_ARCH`"
5527echo "TARGET_$target_arch_name=y" >> $config_target_mak
5528echo "TARGET_NAME=$target_name" >> $config_target_mak
5529echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
5530if [ "$TARGET_ABI_DIR" = "" ]; then
5531  TARGET_ABI_DIR=$TARGET_ARCH
5532fi
5533echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
5534if [ "$HOST_VARIANT_DIR" != "" ]; then
5535    echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
5536fi
5537case "$target_name" in
5538  i386|x86_64)
5539    if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
5540      echo "CONFIG_XEN=y" >> $config_target_mak
5541      if test "$xen_pci_passthrough" = yes; then
5542        echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
5543      fi
5544    fi
5545    ;;
5546  *)
5547esac
5548case "$target_name" in
5549  aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
5550    # Make sure the target and host cpus are compatible
5551    if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
5552      \( "$target_name" = "$cpu" -o \
5553      \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
5554      \( "$target_name" = "ppc64"  -a "$cpu" = "ppc" \) -o \
5555      \( "$target_name" = "ppc"    -a "$cpu" = "ppc64" \) -o \
5556      \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
5557      \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
5558      \( "$target_name" = "x86_64" -a "$cpu" = "i386"   \) -o \
5559      \( "$target_name" = "i386"   -a "$cpu" = "x86_64" \) -o \
5560      \( "$target_name" = "x86_64" -a "$cpu" = "x32"   \) -o \
5561      \( "$target_name" = "i386"   -a "$cpu" = "x32" \) \) ; then
5562      echo "CONFIG_KVM=y" >> $config_target_mak
5563      if test "$vhost_net" = "yes" ; then
5564        echo "CONFIG_VHOST_NET=y" >> $config_target_mak
5565      fi
5566    fi
5567esac
5568if test "$target_bigendian" = "yes" ; then
5569  echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
5570fi
5571if test "$target_softmmu" = "yes" ; then
5572  echo "CONFIG_SOFTMMU=y" >> $config_target_mak
5573fi
5574if test "$target_user_only" = "yes" ; then
5575  echo "CONFIG_USER_ONLY=y" >> $config_target_mak
5576  echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
5577fi
5578if test "$target_linux_user" = "yes" ; then
5579  echo "CONFIG_LINUX_USER=y" >> $config_target_mak
5580fi
5581list=""
5582if test ! -z "$gdb_xml_files" ; then
5583  for x in $gdb_xml_files; do
5584    list="$list $source_path/gdb-xml/$x"
5585  done
5586  echo "TARGET_XML_FILES=$list" >> $config_target_mak
5587fi
5588
5589if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
5590  echo "TARGET_HAS_BFLT=y" >> $config_target_mak
5591fi
5592if test "$target_bsd_user" = "yes" ; then
5593  echo "CONFIG_BSD_USER=y" >> $config_target_mak
5594fi
5595
5596# generate QEMU_CFLAGS/LDFLAGS for targets
5597
5598cflags=""
5599ldflags=""
5600
5601disas_config() {
5602  echo "CONFIG_${1}_DIS=y" >> $config_target_mak
5603  echo "CONFIG_${1}_DIS=y" >> config-all-disas.mak
5604}
5605
5606for i in $ARCH $TARGET_BASE_ARCH ; do
5607  case "$i" in
5608  alpha)
5609    disas_config "ALPHA"
5610  ;;
5611  aarch64)
5612    if test -n "${cxx}"; then
5613      disas_config "ARM_A64"
5614    fi
5615  ;;
5616  arm)
5617    disas_config "ARM"
5618    if test -n "${cxx}"; then
5619      disas_config "ARM_A64"
5620    fi
5621  ;;
5622  cris)
5623    disas_config "CRIS"
5624  ;;
5625  hppa)
5626    disas_config "HPPA"
5627  ;;
5628  i386|x86_64|x32)
5629    disas_config "I386"
5630  ;;
5631  ia64*)
5632    disas_config "IA64"
5633  ;;
5634  lm32)
5635    disas_config "LM32"
5636  ;;
5637  m68k)
5638    disas_config "M68K"
5639  ;;
5640  microblaze*)
5641    disas_config "MICROBLAZE"
5642  ;;
5643  mips*)
5644    disas_config "MIPS"
5645  ;;
5646  moxie*)
5647    disas_config "MOXIE"
5648  ;;
5649  or32)
5650    disas_config "OPENRISC"
5651  ;;
5652  ppc*)
5653    disas_config "PPC"
5654  ;;
5655  s390*)
5656    disas_config "S390"
5657  ;;
5658  sh4)
5659    disas_config "SH4"
5660  ;;
5661  sparc*)
5662    disas_config "SPARC"
5663  ;;
5664  xtensa*)
5665    disas_config "XTENSA"
5666  ;;
5667  esac
5668done
5669if test "$tcg_interpreter" = "yes" ; then
5670  disas_config "TCI"
5671fi
5672
5673case "$ARCH" in
5674alpha)
5675  # Ensure there's only a single GP
5676  cflags="-msmall-data $cflags"
5677;;
5678esac
5679
5680if test "$gprof" = "yes" ; then
5681  echo "TARGET_GPROF=yes" >> $config_target_mak
5682  if test "$target_linux_user" = "yes" ; then
5683    cflags="-p $cflags"
5684    ldflags="-p $ldflags"
5685  fi
5686  if test "$target_softmmu" = "yes" ; then
5687    ldflags="-p $ldflags"
5688    echo "GPROF_CFLAGS=-p" >> $config_target_mak
5689  fi
5690fi
5691
5692if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
5693  ldflags="$ldflags $textseg_ldflags"
5694fi
5695
5696echo "LDFLAGS+=$ldflags" >> $config_target_mak
5697echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
5698
5699done # for target in $targets
5700
5701if [ "$pixman" = "internal" ]; then
5702  echo "config-host.h: subdir-pixman" >> $config_host_mak
5703fi
5704
5705if [ "$dtc_internal" = "yes" ]; then
5706  echo "config-host.h: subdir-dtc" >> $config_host_mak
5707fi
5708
5709if test "$numa" = "yes"; then
5710  echo "CONFIG_NUMA=y" >> $config_host_mak
5711fi
5712
5713if test "$ccache_cpp2" = "yes"; then
5714  echo "export CCACHE_CPP2=y" >> $config_host_mak
5715fi
5716
5717# build tree in object directory in case the source is not in the current directory
5718DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
5719DIRS="$DIRS fsdev"
5720DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
5721DIRS="$DIRS roms/seabios roms/vgabios"
5722DIRS="$DIRS qapi-generated"
5723FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
5724FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
5725FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
5726FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
5727FILES="$FILES pc-bios/spapr-rtas/Makefile"
5728FILES="$FILES pc-bios/s390-ccw/Makefile"
5729FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
5730FILES="$FILES pc-bios/qemu-icon.bmp"
5731for bios_file in \
5732    $source_path/pc-bios/*.bin \
5733    $source_path/pc-bios/*.aml \
5734    $source_path/pc-bios/*.rom \
5735    $source_path/pc-bios/*.dtb \
5736    $source_path/pc-bios/*.img \
5737    $source_path/pc-bios/openbios-* \
5738    $source_path/pc-bios/u-boot.* \
5739    $source_path/pc-bios/palcode-*
5740do
5741    FILES="$FILES pc-bios/`basename $bios_file`"
5742done
5743for test_file in `find $source_path/tests/acpi-test-data -type f`
5744do
5745    FILES="$FILES tests/acpi-test-data`echo $test_file | sed -e 's/.*acpi-test-data//'`"
5746done
5747mkdir -p $DIRS
5748for f in $FILES ; do
5749    if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
5750        symlink "$source_path/$f" "$f"
5751    fi
5752done
5753
5754# temporary config to build submodules
5755for rom in seabios vgabios ; do
5756    config_mak=roms/$rom/config.mak
5757    echo "# Automatically generated by configure - do not modify" > $config_mak
5758    echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
5759    echo "AS=$as" >> $config_mak
5760    echo "CC=$cc" >> $config_mak
5761    echo "BCC=bcc" >> $config_mak
5762    echo "CPP=$cpp" >> $config_mak
5763    echo "OBJCOPY=objcopy" >> $config_mak
5764    echo "IASL=$iasl" >> $config_mak
5765    echo "LD=$ld" >> $config_mak
5766done
5767
5768# set up qemu-iotests in this build directory
5769iotests_common_env="tests/qemu-iotests/common.env"
5770iotests_check="tests/qemu-iotests/check"
5771
5772echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
5773echo >> "$iotests_common_env"
5774echo "export PYTHON='$python'" >> "$iotests_common_env"
5775
5776if [ ! -e "$iotests_check" ]; then
5777    symlink "$source_path/$iotests_check" "$iotests_check"
5778fi
5779
5780# Save the configure command line for later reuse.
5781cat <<EOD >config.status
5782#!/bin/sh
5783# Generated by configure.
5784# Run this file to recreate the current configuration.
5785# Compiler output produced by configure, useful for debugging
5786# configure, is in config.log if it exists.
5787EOD
5788printf "exec" >>config.status
5789printf " '%s'" "$0" "$@" >>config.status
5790echo >>config.status
5791chmod +x config.status
5792
5793rm -r "$TMPDIR1"
5794