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