xref: /openbmc/qemu/configure (revision 4f4f6976)
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_gcrypt=no
2120gnutls_nettle=no
2121if test "$gnutls" != "no"; then
2122    if $pkg_config --exists "gnutls"; then
2123        gnutls_cflags=`$pkg_config --cflags gnutls`
2124        gnutls_libs=`$pkg_config --libs gnutls`
2125        libs_softmmu="$gnutls_libs $libs_softmmu"
2126        libs_tools="$gnutls_libs $libs_tools"
2127	QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2128        gnutls="yes"
2129
2130	# gnutls_hash_init requires >= 2.9.10
2131	if $pkg_config --exists "gnutls >= 2.9.10"; then
2132            gnutls_hash="yes"
2133	else
2134	    gnutls_hash="no"
2135	fi
2136
2137	if $pkg_config --exists 'gnutls >= 3.0'; then
2138	    gnutls_gcrypt=no
2139	    gnutls_nettle=yes
2140	elif $pkg_config --exists 'gnutls >= 2.12'; then
2141	    case `$pkg_config --libs --static gnutls` in
2142		*gcrypt*)
2143		    gnutls_gcrypt=yes
2144		    gnutls_nettle=no
2145		    ;;
2146		*nettle*)
2147		    gnutls_gcrypt=no
2148		    gnutls_nettle=yes
2149		    ;;
2150		*)
2151		    gnutls_gcrypt=yes
2152		    gnutls_nettle=no
2153		    ;;
2154	    esac
2155	else
2156	    gnutls_gcrypt=yes
2157	    gnutls_nettle=no
2158	fi
2159    elif test "$gnutls" = "yes"; then
2160	feature_not_found "gnutls" "Install gnutls devel"
2161    else
2162        gnutls="no"
2163        gnutls_hash="no"
2164    fi
2165else
2166    gnutls_hash="no"
2167fi
2168
2169if test "$gnutls_gcrypt" != "no"; then
2170    if has "libgcrypt-config"; then
2171        gcrypt_cflags=`libgcrypt-config --cflags`
2172        gcrypt_libs=`libgcrypt-config --libs`
2173        libs_softmmu="$gcrypt_libs $libs_softmmu"
2174        libs_tools="$gcrypt_libs $libs_tools"
2175        QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
2176    else
2177        feature_not_found "gcrypt" "Install gcrypt devel"
2178    fi
2179fi
2180
2181
2182if test "$gnutls_nettle" != "no"; then
2183    if $pkg_config --exists "nettle"; then
2184        nettle_cflags=`$pkg_config --cflags nettle`
2185        nettle_libs=`$pkg_config --libs nettle`
2186        libs_softmmu="$nettle_libs $libs_softmmu"
2187        libs_tools="$nettle_libs $libs_tools"
2188        QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2189    else
2190        feature_not_found "nettle" "Install nettle devel"
2191    fi
2192fi
2193
2194
2195##########################################
2196# VTE probe
2197
2198if test "$vte" != "no"; then
2199    if test "$gtkabi" = "3.0"; then
2200      vtepackage="vte-2.90"
2201      vteversion="0.32.0"
2202    else
2203      vtepackage="vte"
2204      vteversion="0.24.0"
2205    fi
2206    if $pkg_config --exists "$vtepackage >= $vteversion"; then
2207        vte_cflags=`$pkg_config --cflags $vtepackage`
2208        vte_libs=`$pkg_config --libs $vtepackage`
2209        libs_softmmu="$vte_libs $libs_softmmu"
2210        vte="yes"
2211    elif test "$vte" = "yes"; then
2212        if test "$gtkabi" = "3.0"; then
2213            feature_not_found "vte" "Install libvte-2.90 devel"
2214        else
2215            feature_not_found "vte" "Install libvte devel"
2216        fi
2217    else
2218        vte="no"
2219    fi
2220fi
2221
2222##########################################
2223# SDL probe
2224
2225# Look for sdl configuration program (pkg-config or sdl-config).  Try
2226# sdl-config even without cross prefix, and favour pkg-config over sdl-config.
2227
2228if test $sdlabi = "2.0"; then
2229    sdl_config=$sdl2_config
2230    sdlname=sdl2
2231    sdlconfigname=sdl2_config
2232else
2233    sdlname=sdl
2234    sdlconfigname=sdl_config
2235fi
2236
2237if test "`basename $sdl_config`" != $sdlconfigname && ! has ${sdl_config}; then
2238  sdl_config=$sdlconfigname
2239fi
2240
2241if $pkg_config $sdlname --exists; then
2242  sdlconfig="$pkg_config $sdlname"
2243  _sdlversion=`$sdlconfig --modversion 2>/dev/null | sed 's/[^0-9]//g'`
2244elif has ${sdl_config}; then
2245  sdlconfig="$sdl_config"
2246  _sdlversion=`$sdlconfig --version | sed 's/[^0-9]//g'`
2247else
2248  if test "$sdl" = "yes" ; then
2249    feature_not_found "sdl" "Install SDL devel"
2250  fi
2251  sdl=no
2252fi
2253if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl-config; then
2254  echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
2255fi
2256
2257sdl_too_old=no
2258if test "$sdl" != "no" ; then
2259  cat > $TMPC << EOF
2260#include <SDL.h>
2261#undef main /* We don't want SDL to override our main() */
2262int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
2263EOF
2264  sdl_cflags=`$sdlconfig --cflags 2> /dev/null`
2265  if test "$static" = "yes" ; then
2266    sdl_libs=`$sdlconfig --static-libs 2>/dev/null`
2267  else
2268    sdl_libs=`$sdlconfig --libs 2> /dev/null`
2269  fi
2270  if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2271    if test "$_sdlversion" -lt 121 ; then
2272      sdl_too_old=yes
2273    else
2274      if test "$cocoa" = "no" ; then
2275        sdl=yes
2276      fi
2277    fi
2278
2279    # static link with sdl ? (note: sdl.pc's --static --libs is broken)
2280    if test "$sdl" = "yes" -a "$static" = "yes" ; then
2281      if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
2282         sdl_libs="$sdl_libs `aalib-config --static-libs 2>/dev/null`"
2283         sdl_cflags="$sdl_cflags `aalib-config --cflags 2>/dev/null`"
2284      fi
2285      if compile_prog "$sdl_cflags" "$sdl_libs" ; then
2286	:
2287      else
2288        sdl=no
2289      fi
2290    fi # static link
2291  else # sdl not found
2292    if test "$sdl" = "yes" ; then
2293      feature_not_found "sdl" "Install SDL devel"
2294    fi
2295    sdl=no
2296  fi # sdl compile test
2297fi
2298
2299if test "$sdl" = "yes" ; then
2300  cat > $TMPC <<EOF
2301#include <SDL.h>
2302#if defined(SDL_VIDEO_DRIVER_X11)
2303#include <X11/XKBlib.h>
2304#else
2305#error No x11 support
2306#endif
2307int main(void) { return 0; }
2308EOF
2309  if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
2310    sdl_cflags="$sdl_cflags $x11_cflags"
2311    sdl_libs="$sdl_libs $x11_libs"
2312  fi
2313  libs_softmmu="$sdl_libs $libs_softmmu"
2314fi
2315
2316##########################################
2317# RDMA needs OpenFabrics libraries
2318if test "$rdma" != "no" ; then
2319  cat > $TMPC <<EOF
2320#include <rdma/rdma_cma.h>
2321int main(void) { return 0; }
2322EOF
2323  rdma_libs="-lrdmacm -libverbs"
2324  if compile_prog "" "$rdma_libs" ; then
2325    rdma="yes"
2326    libs_softmmu="$libs_softmmu $rdma_libs"
2327  else
2328    if test "$rdma" = "yes" ; then
2329        error_exit \
2330            " OpenFabrics librdmacm/libibverbs not present." \
2331            " Your options:" \
2332            "  (1) Fast: Install infiniband packages from your distro." \
2333            "  (2) Cleanest: Install libraries from www.openfabrics.org" \
2334            "  (3) Also: Install softiwarp if you don't have RDMA hardware"
2335    fi
2336    rdma="no"
2337  fi
2338fi
2339
2340##########################################
2341# VNC TLS/WS detection
2342if test "$vnc" = "yes" -a "$vnc_tls" != "no" ; then
2343  cat > $TMPC <<EOF
2344#include <gnutls/gnutls.h>
2345int main(void) { gnutls_session_t s; gnutls_init(&s, GNUTLS_SERVER); return 0; }
2346EOF
2347  vnc_tls_cflags=`$pkg_config --cflags gnutls 2> /dev/null`
2348  vnc_tls_libs=`$pkg_config --libs gnutls 2> /dev/null`
2349  if compile_prog "$vnc_tls_cflags" "$vnc_tls_libs" ; then
2350    if test "$vnc_tls" != "no" ; then
2351      vnc_tls=yes
2352    fi
2353    libs_softmmu="$vnc_tls_libs $libs_softmmu"
2354    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_tls_cflags"
2355  else
2356    if test "$vnc_tls" = "yes" ; then
2357      feature_not_found "vnc-tls" "Install gnutls devel"
2358    fi
2359    vnc_tls=no
2360  fi
2361fi
2362
2363##########################################
2364# VNC SASL detection
2365if test "$vnc" = "yes" -a "$vnc_sasl" != "no" ; then
2366  cat > $TMPC <<EOF
2367#include <sasl/sasl.h>
2368#include <stdio.h>
2369int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
2370EOF
2371  # Assuming Cyrus-SASL installed in /usr prefix
2372  vnc_sasl_cflags=""
2373  vnc_sasl_libs="-lsasl2"
2374  if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
2375    vnc_sasl=yes
2376    libs_softmmu="$vnc_sasl_libs $libs_softmmu"
2377    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
2378  else
2379    if test "$vnc_sasl" = "yes" ; then
2380      feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
2381    fi
2382    vnc_sasl=no
2383  fi
2384fi
2385
2386##########################################
2387# VNC JPEG detection
2388if test "$vnc" = "yes" -a "$vnc_jpeg" != "no" ; then
2389cat > $TMPC <<EOF
2390#include <stdio.h>
2391#include <jpeglib.h>
2392int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
2393EOF
2394    vnc_jpeg_cflags=""
2395    vnc_jpeg_libs="-ljpeg"
2396  if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
2397    vnc_jpeg=yes
2398    libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
2399    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
2400  else
2401    if test "$vnc_jpeg" = "yes" ; then
2402      feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
2403    fi
2404    vnc_jpeg=no
2405  fi
2406fi
2407
2408##########################################
2409# VNC PNG detection
2410if test "$vnc" = "yes" -a "$vnc_png" != "no" ; then
2411cat > $TMPC <<EOF
2412//#include <stdio.h>
2413#include <png.h>
2414#include <stddef.h>
2415int main(void) {
2416    png_structp png_ptr;
2417    png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
2418    return png_ptr != 0;
2419}
2420EOF
2421  if $pkg_config libpng --exists; then
2422    vnc_png_cflags=`$pkg_config libpng --cflags`
2423    vnc_png_libs=`$pkg_config libpng --libs`
2424  else
2425    vnc_png_cflags=""
2426    vnc_png_libs="-lpng"
2427  fi
2428  if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
2429    vnc_png=yes
2430    libs_softmmu="$vnc_png_libs $libs_softmmu"
2431    QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
2432  else
2433    if test "$vnc_png" = "yes" ; then
2434      feature_not_found "vnc-png" "Install libpng devel"
2435    fi
2436    vnc_png=no
2437  fi
2438fi
2439
2440##########################################
2441# fnmatch() probe, used for ACL routines
2442fnmatch="no"
2443cat > $TMPC << EOF
2444#include <fnmatch.h>
2445int main(void)
2446{
2447    fnmatch("foo", "foo", 0);
2448    return 0;
2449}
2450EOF
2451if compile_prog "" "" ; then
2452   fnmatch="yes"
2453fi
2454
2455##########################################
2456# uuid_generate() probe, used for vdi block driver
2457# Note that on some systems (notably MacOSX) no extra library
2458# need be linked to get the uuid functions.
2459if test "$uuid" != "no" ; then
2460  uuid_libs="-luuid"
2461  cat > $TMPC << EOF
2462#include <uuid/uuid.h>
2463int main(void)
2464{
2465    uuid_t my_uuid;
2466    uuid_generate(my_uuid);
2467    return 0;
2468}
2469EOF
2470  if compile_prog "" "" ; then
2471    uuid="yes"
2472  elif compile_prog "" "$uuid_libs" ; then
2473    uuid="yes"
2474    libs_softmmu="$uuid_libs $libs_softmmu"
2475    libs_tools="$uuid_libs $libs_tools"
2476  else
2477    if test "$uuid" = "yes" ; then
2478      feature_not_found "uuid" "Install libuuid devel"
2479    fi
2480    uuid=no
2481  fi
2482fi
2483
2484if test "$vhdx" = "yes" ; then
2485    if test "$uuid" = "no" ; then
2486        error_exit "uuid required for VHDX support"
2487    fi
2488elif test "$vhdx" != "no" ; then
2489    if test "$uuid" = "yes" ; then
2490        vhdx=yes
2491    else
2492        vhdx=no
2493    fi
2494fi
2495
2496##########################################
2497# xfsctl() probe, used for raw-posix
2498if test "$xfs" != "no" ; then
2499  cat > $TMPC << EOF
2500#include <stddef.h>  /* NULL */
2501#include <xfs/xfs.h>
2502int main(void)
2503{
2504    xfsctl(NULL, 0, 0, NULL);
2505    return 0;
2506}
2507EOF
2508  if compile_prog "" "" ; then
2509    xfs="yes"
2510  else
2511    if test "$xfs" = "yes" ; then
2512      feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
2513    fi
2514    xfs=no
2515  fi
2516fi
2517
2518##########################################
2519# vde libraries probe
2520if test "$vde" != "no" ; then
2521  vde_libs="-lvdeplug"
2522  cat > $TMPC << EOF
2523#include <libvdeplug.h>
2524int main(void)
2525{
2526    struct vde_open_args a = {0, 0, 0};
2527    char s[] = "";
2528    vde_open(s, s, &a);
2529    return 0;
2530}
2531EOF
2532  if compile_prog "" "$vde_libs" ; then
2533    vde=yes
2534    libs_softmmu="$vde_libs $libs_softmmu"
2535    libs_tools="$vde_libs $libs_tools"
2536  else
2537    if test "$vde" = "yes" ; then
2538      feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
2539    fi
2540    vde=no
2541  fi
2542fi
2543
2544##########################################
2545# netmap support probe
2546# Apart from looking for netmap headers, we make sure that the host API version
2547# supports the netmap backend (>=11). The upper bound (15) is meant to simulate
2548# a minor/major version number. Minor new features will be marked with values up
2549# to 15, and if something happens that requires a change to the backend we will
2550# move above 15, submit the backend fixes and modify this two bounds.
2551if test "$netmap" != "no" ; then
2552  cat > $TMPC << EOF
2553#include <inttypes.h>
2554#include <net/if.h>
2555#include <net/netmap.h>
2556#include <net/netmap_user.h>
2557#if (NETMAP_API < 11) || (NETMAP_API > 15)
2558#error
2559#endif
2560int main(void) { return 0; }
2561EOF
2562  if compile_prog "" "" ; then
2563    netmap=yes
2564  else
2565    if test "$netmap" = "yes" ; then
2566      feature_not_found "netmap"
2567    fi
2568    netmap=no
2569  fi
2570fi
2571
2572##########################################
2573# libcap-ng library probe
2574if test "$cap_ng" != "no" ; then
2575  cap_libs="-lcap-ng"
2576  cat > $TMPC << EOF
2577#include <cap-ng.h>
2578int main(void)
2579{
2580    capng_capability_to_name(CAPNG_EFFECTIVE);
2581    return 0;
2582}
2583EOF
2584  if compile_prog "" "$cap_libs" ; then
2585    cap_ng=yes
2586    libs_tools="$cap_libs $libs_tools"
2587  else
2588    if test "$cap_ng" = "yes" ; then
2589      feature_not_found "cap_ng" "Install libcap-ng devel"
2590    fi
2591    cap_ng=no
2592  fi
2593fi
2594
2595##########################################
2596# Sound support libraries probe
2597
2598audio_drv_probe()
2599{
2600    drv=$1
2601    hdr=$2
2602    lib=$3
2603    exp=$4
2604    cfl=$5
2605        cat > $TMPC << EOF
2606#include <$hdr>
2607int main(void) { $exp }
2608EOF
2609    if compile_prog "$cfl" "$lib" ; then
2610        :
2611    else
2612        error_exit "$drv check failed" \
2613            "Make sure to have the $drv libs and headers installed."
2614    fi
2615}
2616
2617audio_drv_list=`echo "$audio_drv_list" | sed -e 's/,/ /g'`
2618for drv in $audio_drv_list; do
2619    case $drv in
2620    alsa)
2621    audio_drv_probe $drv alsa/asoundlib.h -lasound \
2622        "return snd_pcm_close((snd_pcm_t *)0);"
2623    libs_softmmu="-lasound $libs_softmmu"
2624    ;;
2625
2626    pa)
2627    audio_drv_probe $drv pulse/mainloop.h "-lpulse" \
2628        "pa_mainloop *m = 0; pa_mainloop_free (m); return 0;"
2629    libs_softmmu="-lpulse $libs_softmmu"
2630    audio_pt_int="yes"
2631    ;;
2632
2633    coreaudio)
2634      libs_softmmu="-framework CoreAudio $libs_softmmu"
2635    ;;
2636
2637    dsound)
2638      libs_softmmu="-lole32 -ldxguid $libs_softmmu"
2639      audio_win_int="yes"
2640    ;;
2641
2642    oss)
2643      libs_softmmu="$oss_lib $libs_softmmu"
2644    ;;
2645
2646    sdl|wav)
2647    # XXX: Probes for CoreAudio, DirectSound, SDL(?)
2648    ;;
2649
2650    *)
2651    echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
2652        error_exit "Unknown driver '$drv' selected" \
2653            "Possible drivers are: $audio_possible_drivers"
2654    }
2655    ;;
2656    esac
2657done
2658
2659##########################################
2660# BrlAPI probe
2661
2662if test "$brlapi" != "no" ; then
2663  brlapi_libs="-lbrlapi"
2664  cat > $TMPC << EOF
2665#include <brlapi.h>
2666#include <stddef.h>
2667int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
2668EOF
2669  if compile_prog "" "$brlapi_libs" ; then
2670    brlapi=yes
2671    libs_softmmu="$brlapi_libs $libs_softmmu"
2672  else
2673    if test "$brlapi" = "yes" ; then
2674      feature_not_found "brlapi" "Install brlapi devel"
2675    fi
2676    brlapi=no
2677  fi
2678fi
2679
2680##########################################
2681# curses probe
2682if test "$curses" != "no" ; then
2683  if test "$mingw32" = "yes" ; then
2684    curses_list="-lpdcurses"
2685  else
2686    curses_list="$($pkg_config --libs ncurses 2>/dev/null):-lncurses:-lcurses"
2687  fi
2688  curses_found=no
2689  cat > $TMPC << EOF
2690#include <curses.h>
2691int main(void) {
2692  const char *s = curses_version();
2693  resize_term(0, 0);
2694  return s != 0;
2695}
2696EOF
2697  IFS=:
2698  for curses_lib in $curses_list; do
2699    unset IFS
2700    if compile_prog "" "$curses_lib" ; then
2701      curses_found=yes
2702      libs_softmmu="$curses_lib $libs_softmmu"
2703      break
2704    fi
2705  done
2706  unset IFS
2707  if test "$curses_found" = "yes" ; then
2708    curses=yes
2709  else
2710    if test "$curses" = "yes" ; then
2711      feature_not_found "curses" "Install ncurses devel"
2712    fi
2713    curses=no
2714  fi
2715fi
2716
2717##########################################
2718# curl probe
2719if test "$curl" != "no" ; then
2720  if $pkg_config libcurl --exists; then
2721    curlconfig="$pkg_config libcurl"
2722  else
2723    curlconfig=curl-config
2724  fi
2725  cat > $TMPC << EOF
2726#include <curl/curl.h>
2727int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
2728EOF
2729  curl_cflags=`$curlconfig --cflags 2>/dev/null`
2730  curl_libs=`$curlconfig --libs 2>/dev/null`
2731  if compile_prog "$curl_cflags" "$curl_libs" ; then
2732    curl=yes
2733  else
2734    if test "$curl" = "yes" ; then
2735      feature_not_found "curl" "Install libcurl devel"
2736    fi
2737    curl=no
2738  fi
2739fi # test "$curl"
2740
2741##########################################
2742# bluez support probe
2743if test "$bluez" != "no" ; then
2744  cat > $TMPC << EOF
2745#include <bluetooth/bluetooth.h>
2746int main(void) { return bt_error(0); }
2747EOF
2748  bluez_cflags=`$pkg_config --cflags bluez 2> /dev/null`
2749  bluez_libs=`$pkg_config --libs bluez 2> /dev/null`
2750  if compile_prog "$bluez_cflags" "$bluez_libs" ; then
2751    bluez=yes
2752    libs_softmmu="$bluez_libs $libs_softmmu"
2753  else
2754    if test "$bluez" = "yes" ; then
2755      feature_not_found "bluez" "Install bluez-libs/libbluetooth devel"
2756    fi
2757    bluez="no"
2758  fi
2759fi
2760
2761##########################################
2762# glib support probe
2763
2764glib_req_ver=2.22
2765glib_modules=gthread-2.0
2766if test "$modules" = yes; then
2767    glib_modules="$glib_modules gmodule-2.0"
2768fi
2769
2770for i in $glib_modules; do
2771    if $pkg_config --atleast-version=$glib_req_ver $i; then
2772        glib_cflags=`$pkg_config --cflags $i`
2773        glib_libs=`$pkg_config --libs $i`
2774        CFLAGS="$glib_cflags $CFLAGS"
2775        LIBS="$glib_libs $LIBS"
2776        libs_qga="$glib_libs $libs_qga"
2777    else
2778        error_exit "glib-$glib_req_ver $i is required to compile QEMU"
2779    fi
2780done
2781
2782# g_test_trap_subprocess added in 2.38. Used by some tests.
2783glib_subprocess=yes
2784if ! $pkg_config --atleast-version=2.38 glib-2.0; then
2785    glib_subprocess=no
2786fi
2787
2788# Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
2789cat > $TMPC << EOF
2790#include <glib.h>
2791int main(void) { return 0; }
2792EOF
2793if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
2794    if cc_has_warning_flag "-Wno-unknown-attributes"; then
2795        glib_cflags="-Wno-unknown-attributes $glib_cflags"
2796        CFLAGS="-Wno-unknown-attributes $CFLAGS"
2797    fi
2798fi
2799
2800##########################################
2801# SHA command probe for modules
2802if test "$modules" = yes; then
2803    shacmd_probe="sha1sum sha1 shasum"
2804    for c in $shacmd_probe; do
2805        if has $c; then
2806            shacmd="$c"
2807            break
2808        fi
2809    done
2810    if test "$shacmd" = ""; then
2811        error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
2812    fi
2813fi
2814
2815##########################################
2816# pixman support probe
2817
2818if test "$pixman" = ""; then
2819  if test "$want_tools" = "no" -a "$softmmu" = "no"; then
2820    pixman="none"
2821  elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
2822    pixman="system"
2823  else
2824    pixman="internal"
2825  fi
2826fi
2827if test "$pixman" = "none"; then
2828  if test "$want_tools" != "no" -o "$softmmu" != "no"; then
2829    error_exit "pixman disabled but system emulation or tools build" \
2830        "enabled.  You can turn off pixman only if you also" \
2831        "disable all system emulation targets and the tools" \
2832        "build with '--disable-tools --disable-system'."
2833  fi
2834  pixman_cflags=
2835  pixman_libs=
2836elif test "$pixman" = "system"; then
2837  # pixman version has been checked above
2838  pixman_cflags=`$pkg_config --cflags pixman-1`
2839  pixman_libs=`$pkg_config --libs pixman-1`
2840else
2841  if test ! -d ${source_path}/pixman/pixman; then
2842    error_exit "pixman >= 0.21.8 not present. Your options:" \
2843        "  (1) Preferred: Install the pixman devel package (any recent" \
2844        "      distro should have packages as Xorg needs pixman too)." \
2845        "  (2) Fetch the pixman submodule, using:" \
2846        "      git submodule update --init pixman"
2847  fi
2848  mkdir -p pixman/pixman
2849  pixman_cflags="-I\$(SRC_PATH)/pixman/pixman -I\$(BUILD_DIR)/pixman/pixman"
2850  pixman_libs="-L\$(BUILD_DIR)/pixman/pixman/.libs -lpixman-1"
2851fi
2852
2853##########################################
2854# libcap probe
2855
2856if test "$cap" != "no" ; then
2857  cat > $TMPC <<EOF
2858#include <stdio.h>
2859#include <sys/capability.h>
2860int main(void) { cap_t caps; caps = cap_init(); return caps != NULL; }
2861EOF
2862  if compile_prog "" "-lcap" ; then
2863    cap=yes
2864  else
2865    cap=no
2866  fi
2867fi
2868
2869##########################################
2870# pthread probe
2871PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
2872
2873pthread=no
2874cat > $TMPC << EOF
2875#include <pthread.h>
2876static void *f(void *p) { return NULL; }
2877int main(void) {
2878  pthread_t thread;
2879  pthread_create(&thread, 0, f, 0);
2880  return 0;
2881}
2882EOF
2883if compile_prog "" "" ; then
2884  pthread=yes
2885else
2886  for pthread_lib in $PTHREADLIBS_LIST; do
2887    if compile_prog "" "$pthread_lib" ; then
2888      pthread=yes
2889      found=no
2890      for lib_entry in $LIBS; do
2891        if test "$lib_entry" = "$pthread_lib"; then
2892          found=yes
2893          break
2894        fi
2895      done
2896      if test "$found" = "no"; then
2897        LIBS="$pthread_lib $LIBS"
2898      fi
2899      break
2900    fi
2901  done
2902fi
2903
2904if test "$mingw32" != yes -a "$pthread" = no; then
2905  error_exit "pthread check failed" \
2906      "Make sure to have the pthread libs and headers installed."
2907fi
2908
2909# check for pthread_setname_np
2910pthread_setname_np=no
2911cat > $TMPC << EOF
2912#include <pthread.h>
2913
2914static void *f(void *p) { return NULL; }
2915int main(void)
2916{
2917    pthread_t thread;
2918    pthread_create(&thread, 0, f, 0);
2919    pthread_setname_np(thread, "QEMU");
2920    return 0;
2921}
2922EOF
2923if compile_prog "" "$pthread_lib" ; then
2924  pthread_setname_np=yes
2925fi
2926
2927##########################################
2928# rbd probe
2929if test "$rbd" != "no" ; then
2930  cat > $TMPC <<EOF
2931#include <stdio.h>
2932#include <rbd/librbd.h>
2933int main(void) {
2934    rados_t cluster;
2935    rados_create(&cluster, NULL);
2936    return 0;
2937}
2938EOF
2939  rbd_libs="-lrbd -lrados"
2940  if compile_prog "" "$rbd_libs" ; then
2941    rbd=yes
2942  else
2943    if test "$rbd" = "yes" ; then
2944      feature_not_found "rados block device" "Install librbd/ceph devel"
2945    fi
2946    rbd=no
2947  fi
2948fi
2949
2950##########################################
2951# libssh2 probe
2952min_libssh2_version=1.2.8
2953if test "$libssh2" != "no" ; then
2954  if $pkg_config --atleast-version=$min_libssh2_version libssh2; then
2955    libssh2_cflags=`$pkg_config libssh2 --cflags`
2956    libssh2_libs=`$pkg_config libssh2 --libs`
2957    libssh2=yes
2958  else
2959    if test "$libssh2" = "yes" ; then
2960      error_exit "libssh2 >= $min_libssh2_version required for --enable-libssh2"
2961    fi
2962    libssh2=no
2963  fi
2964fi
2965
2966##########################################
2967# libssh2_sftp_fsync probe
2968
2969if test "$libssh2" = "yes"; then
2970  cat > $TMPC <<EOF
2971#include <stdio.h>
2972#include <libssh2.h>
2973#include <libssh2_sftp.h>
2974int main(void) {
2975    LIBSSH2_SESSION *session;
2976    LIBSSH2_SFTP *sftp;
2977    LIBSSH2_SFTP_HANDLE *sftp_handle;
2978    session = libssh2_session_init ();
2979    sftp = libssh2_sftp_init (session);
2980    sftp_handle = libssh2_sftp_open (sftp, "/", 0, 0);
2981    libssh2_sftp_fsync (sftp_handle);
2982    return 0;
2983}
2984EOF
2985  # libssh2_cflags/libssh2_libs defined in previous test.
2986  if compile_prog "$libssh2_cflags" "$libssh2_libs" ; then
2987    QEMU_CFLAGS="-DHAS_LIBSSH2_SFTP_FSYNC $QEMU_CFLAGS"
2988  fi
2989fi
2990
2991##########################################
2992# linux-aio probe
2993
2994if test "$linux_aio" != "no" ; then
2995  cat > $TMPC <<EOF
2996#include <libaio.h>
2997#include <sys/eventfd.h>
2998#include <stddef.h>
2999int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
3000EOF
3001  if compile_prog "" "-laio" ; then
3002    linux_aio=yes
3003  else
3004    if test "$linux_aio" = "yes" ; then
3005      feature_not_found "linux AIO" "Install libaio devel"
3006    fi
3007    linux_aio=no
3008  fi
3009fi
3010
3011##########################################
3012# TPM passthrough is only on x86 Linux
3013
3014if test "$targetos" = Linux && test "$cpu" = i386 -o "$cpu" = x86_64; then
3015  tpm_passthrough=$tpm
3016else
3017  tpm_passthrough=no
3018fi
3019
3020##########################################
3021# attr probe
3022
3023if test "$attr" != "no" ; then
3024  cat > $TMPC <<EOF
3025#include <stdio.h>
3026#include <sys/types.h>
3027#ifdef CONFIG_LIBATTR
3028#include <attr/xattr.h>
3029#else
3030#include <sys/xattr.h>
3031#endif
3032int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
3033EOF
3034  if compile_prog "" "" ; then
3035    attr=yes
3036  # Older distros have <attr/xattr.h>, and need -lattr:
3037  elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
3038    attr=yes
3039    LIBS="-lattr $LIBS"
3040    libattr=yes
3041  else
3042    if test "$attr" = "yes" ; then
3043      feature_not_found "ATTR" "Install libc6 or libattr devel"
3044    fi
3045    attr=no
3046  fi
3047fi
3048
3049##########################################
3050# iovec probe
3051cat > $TMPC <<EOF
3052#include <sys/types.h>
3053#include <sys/uio.h>
3054#include <unistd.h>
3055int main(void) { return sizeof(struct iovec); }
3056EOF
3057iovec=no
3058if compile_prog "" "" ; then
3059  iovec=yes
3060fi
3061
3062##########################################
3063# preadv probe
3064cat > $TMPC <<EOF
3065#include <sys/types.h>
3066#include <sys/uio.h>
3067#include <unistd.h>
3068int main(void) { return preadv(0, 0, 0, 0); }
3069EOF
3070preadv=no
3071if compile_prog "" "" ; then
3072  preadv=yes
3073fi
3074
3075##########################################
3076# fdt probe
3077# fdt support is mandatory for at least some target architectures,
3078# so insist on it if we're building those system emulators.
3079fdt_required=no
3080for target in $target_list; do
3081  case $target in
3082    aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu)
3083      fdt_required=yes
3084    ;;
3085  esac
3086done
3087
3088if test "$fdt_required" = "yes"; then
3089  if test "$fdt" = "no"; then
3090    error_exit "fdt disabled but some requested targets require it." \
3091      "You can turn off fdt only if you also disable all the system emulation" \
3092      "targets which need it (by specifying a cut down --target-list)."
3093  fi
3094  fdt=yes
3095fi
3096
3097if test "$fdt" != "no" ; then
3098  fdt_libs="-lfdt"
3099  # explicitly check for libfdt_env.h as it is missing in some stable installs
3100  # and test for required functions to make sure we are on a version >= 1.4.0
3101  cat > $TMPC << EOF
3102#include <libfdt.h>
3103#include <libfdt_env.h>
3104int main(void) { fdt_get_property_by_offset(0, 0, 0); return 0; }
3105EOF
3106  if compile_prog "" "$fdt_libs" ; then
3107    # system DTC is good - use it
3108    fdt=yes
3109  elif test -d ${source_path}/dtc/libfdt ; then
3110    # have submodule DTC - use it
3111    fdt=yes
3112    dtc_internal="yes"
3113    mkdir -p dtc
3114    if [ "$pwd_is_source_path" != "y" ] ; then
3115       symlink "$source_path/dtc/Makefile" "dtc/Makefile"
3116       symlink "$source_path/dtc/scripts" "dtc/scripts"
3117    fi
3118    fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
3119    fdt_libs="-L\$(BUILD_DIR)/dtc/libfdt $fdt_libs"
3120  elif test "$fdt" = "yes" ; then
3121    # have neither and want - prompt for system/submodule install
3122    error_exit "DTC (libfdt) version >= 1.4.0 not present. Your options:" \
3123        "  (1) Preferred: Install the DTC (libfdt) devel package" \
3124        "  (2) Fetch the DTC submodule, using:" \
3125        "      git submodule update --init dtc"
3126  else
3127    # don't have and don't want
3128    fdt_libs=
3129    fdt=no
3130  fi
3131fi
3132
3133libs_softmmu="$libs_softmmu $fdt_libs"
3134
3135##########################################
3136# opengl probe (for sdl2, milkymist-tmu2)
3137
3138# GLX probe, used by milkymist-tmu2
3139# this is temporary, code will be switched to egl mid-term.
3140cat > $TMPC << EOF
3141#include <X11/Xlib.h>
3142#include <GL/gl.h>
3143#include <GL/glx.h>
3144int main(void) { glBegin(0); glXQueryVersion(0,0,0); return 0; }
3145EOF
3146if compile_prog "" "-lGL -lX11" ; then
3147  have_glx=yes
3148else
3149  have_glx=no
3150fi
3151
3152if test "$opengl" != "no" ; then
3153  opengl_pkgs="gl glesv2 epoxy egl"
3154  if $pkg_config $opengl_pkgs x11 && test "$have_glx" = "yes"; then
3155    opengl_cflags="$($pkg_config --cflags $opengl_pkgs) $x11_cflags"
3156    opengl_libs="$($pkg_config --libs $opengl_pkgs) $x11_libs"
3157    opengl=yes
3158  else
3159    if test "$opengl" = "yes" ; then
3160      feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
3161    fi
3162    opengl_cflags=""
3163    opengl_libs=""
3164    opengl=no
3165  fi
3166fi
3167
3168
3169##########################################
3170# archipelago probe
3171if test "$archipelago" != "no" ; then
3172    cat > $TMPC <<EOF
3173#include <stdio.h>
3174#include <xseg/xseg.h>
3175#include <xseg/protocol.h>
3176int main(void) {
3177    xseg_initialize();
3178    return 0;
3179}
3180EOF
3181    archipelago_libs=-lxseg
3182    if compile_prog "" "$archipelago_libs"; then
3183        archipelago="yes"
3184        libs_tools="$archipelago_libs $libs_tools"
3185        libs_softmmu="$archipelago_libs $libs_softmmu"
3186
3187	echo "WARNING: Please check the licenses of QEMU and libxseg carefully."
3188	echo "GPLv3 versions of libxseg may not be compatible with QEMU's"
3189	echo "license and therefore prevent redistribution."
3190	echo
3191	echo "To disable Archipelago, use --disable-archipelago"
3192    else
3193      if test "$archipelago" = "yes" ; then
3194        feature_not_found "Archipelago backend support" "Install libxseg devel"
3195      fi
3196      archipelago="no"
3197    fi
3198fi
3199
3200
3201##########################################
3202# glusterfs probe
3203if test "$glusterfs" != "no" ; then
3204  if $pkg_config --atleast-version=3 glusterfs-api; then
3205    glusterfs="yes"
3206    glusterfs_cflags=`$pkg_config --cflags glusterfs-api`
3207    glusterfs_libs=`$pkg_config --libs glusterfs-api`
3208    if $pkg_config --atleast-version=5 glusterfs-api; then
3209      glusterfs_discard="yes"
3210    fi
3211    if $pkg_config --atleast-version=6 glusterfs-api; then
3212      glusterfs_zerofill="yes"
3213    fi
3214  else
3215    if test "$glusterfs" = "yes" ; then
3216      feature_not_found "GlusterFS backend support" \
3217          "Install glusterfs-api devel >= 3"
3218    fi
3219    glusterfs="no"
3220  fi
3221fi
3222
3223# Check for inotify functions when we are building linux-user
3224# emulator.  This is done because older glibc versions don't
3225# have syscall stubs for these implemented.  In that case we
3226# don't provide them even if kernel supports them.
3227#
3228inotify=no
3229cat > $TMPC << EOF
3230#include <sys/inotify.h>
3231
3232int
3233main(void)
3234{
3235	/* try to start inotify */
3236	return inotify_init();
3237}
3238EOF
3239if compile_prog "" "" ; then
3240  inotify=yes
3241fi
3242
3243inotify1=no
3244cat > $TMPC << EOF
3245#include <sys/inotify.h>
3246
3247int
3248main(void)
3249{
3250    /* try to start inotify */
3251    return inotify_init1(0);
3252}
3253EOF
3254if compile_prog "" "" ; then
3255  inotify1=yes
3256fi
3257
3258# check if utimensat and futimens are supported
3259utimens=no
3260cat > $TMPC << EOF
3261#define _ATFILE_SOURCE
3262#include <stddef.h>
3263#include <fcntl.h>
3264#include <sys/stat.h>
3265
3266int main(void)
3267{
3268    utimensat(AT_FDCWD, "foo", NULL, 0);
3269    futimens(0, NULL);
3270    return 0;
3271}
3272EOF
3273if compile_prog "" "" ; then
3274  utimens=yes
3275fi
3276
3277# check if pipe2 is there
3278pipe2=no
3279cat > $TMPC << EOF
3280#include <unistd.h>
3281#include <fcntl.h>
3282
3283int main(void)
3284{
3285    int pipefd[2];
3286    return pipe2(pipefd, O_CLOEXEC);
3287}
3288EOF
3289if compile_prog "" "" ; then
3290  pipe2=yes
3291fi
3292
3293# check if accept4 is there
3294accept4=no
3295cat > $TMPC << EOF
3296#include <sys/socket.h>
3297#include <stddef.h>
3298
3299int main(void)
3300{
3301    accept4(0, NULL, NULL, SOCK_CLOEXEC);
3302    return 0;
3303}
3304EOF
3305if compile_prog "" "" ; then
3306  accept4=yes
3307fi
3308
3309# check if tee/splice is there. vmsplice was added same time.
3310splice=no
3311cat > $TMPC << EOF
3312#include <unistd.h>
3313#include <fcntl.h>
3314#include <limits.h>
3315
3316int main(void)
3317{
3318    int len, fd = 0;
3319    len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
3320    splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
3321    return 0;
3322}
3323EOF
3324if compile_prog "" "" ; then
3325  splice=yes
3326fi
3327
3328##########################################
3329# libnuma probe
3330
3331if test "$numa" != "no" ; then
3332  cat > $TMPC << EOF
3333#include <numa.h>
3334int main(void) { return numa_available(); }
3335EOF
3336
3337  if compile_prog "" "-lnuma" ; then
3338    numa=yes
3339    libs_softmmu="-lnuma $libs_softmmu"
3340  else
3341    if test "$numa" = "yes" ; then
3342      feature_not_found "numa" "install numactl devel"
3343    fi
3344    numa=no
3345  fi
3346fi
3347
3348##########################################
3349# tcmalloc probe
3350
3351if test "$tcmalloc" = "yes" ; then
3352  cat > $TMPC << EOF
3353#include <stdlib.h>
3354int main(void) { malloc(1); return 0; }
3355EOF
3356
3357  if compile_prog "" "-ltcmalloc" ; then
3358    LIBS="-ltcmalloc $LIBS"
3359  else
3360    feature_not_found "tcmalloc" "install gperftools devel"
3361  fi
3362fi
3363
3364##########################################
3365# signalfd probe
3366signalfd="no"
3367cat > $TMPC << EOF
3368#include <unistd.h>
3369#include <sys/syscall.h>
3370#include <signal.h>
3371int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
3372EOF
3373
3374if compile_prog "" "" ; then
3375  signalfd=yes
3376fi
3377
3378# check if eventfd is supported
3379eventfd=no
3380cat > $TMPC << EOF
3381#include <sys/eventfd.h>
3382
3383int main(void)
3384{
3385    return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
3386}
3387EOF
3388if compile_prog "" "" ; then
3389  eventfd=yes
3390fi
3391
3392# check for fallocate
3393fallocate=no
3394cat > $TMPC << EOF
3395#include <fcntl.h>
3396
3397int main(void)
3398{
3399    fallocate(0, 0, 0, 0);
3400    return 0;
3401}
3402EOF
3403if compile_prog "" "" ; then
3404  fallocate=yes
3405fi
3406
3407# check for fallocate hole punching
3408fallocate_punch_hole=no
3409cat > $TMPC << EOF
3410#include <fcntl.h>
3411#include <linux/falloc.h>
3412
3413int main(void)
3414{
3415    fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
3416    return 0;
3417}
3418EOF
3419if compile_prog "" "" ; then
3420  fallocate_punch_hole=yes
3421fi
3422
3423# check that fallocate supports range zeroing inside the file
3424fallocate_zero_range=no
3425cat > $TMPC << EOF
3426#include <fcntl.h>
3427#include <linux/falloc.h>
3428
3429int main(void)
3430{
3431    fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
3432    return 0;
3433}
3434EOF
3435if compile_prog "" "" ; then
3436  fallocate_zero_range=yes
3437fi
3438
3439# check for posix_fallocate
3440posix_fallocate=no
3441cat > $TMPC << EOF
3442#include <fcntl.h>
3443
3444int main(void)
3445{
3446    posix_fallocate(0, 0, 0);
3447    return 0;
3448}
3449EOF
3450if compile_prog "" "" ; then
3451    posix_fallocate=yes
3452fi
3453
3454# check for sync_file_range
3455sync_file_range=no
3456cat > $TMPC << EOF
3457#include <fcntl.h>
3458
3459int main(void)
3460{
3461    sync_file_range(0, 0, 0, 0);
3462    return 0;
3463}
3464EOF
3465if compile_prog "" "" ; then
3466  sync_file_range=yes
3467fi
3468
3469# check for linux/fiemap.h and FS_IOC_FIEMAP
3470fiemap=no
3471cat > $TMPC << EOF
3472#include <sys/ioctl.h>
3473#include <linux/fs.h>
3474#include <linux/fiemap.h>
3475
3476int main(void)
3477{
3478    ioctl(0, FS_IOC_FIEMAP, 0);
3479    return 0;
3480}
3481EOF
3482if compile_prog "" "" ; then
3483  fiemap=yes
3484fi
3485
3486# check for dup3
3487dup3=no
3488cat > $TMPC << EOF
3489#include <unistd.h>
3490
3491int main(void)
3492{
3493    dup3(0, 0, 0);
3494    return 0;
3495}
3496EOF
3497if compile_prog "" "" ; then
3498  dup3=yes
3499fi
3500
3501# check for ppoll support
3502ppoll=no
3503cat > $TMPC << EOF
3504#include <poll.h>
3505
3506int main(void)
3507{
3508    struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
3509    ppoll(&pfd, 1, 0, 0);
3510    return 0;
3511}
3512EOF
3513if compile_prog "" "" ; then
3514  ppoll=yes
3515fi
3516
3517# check for prctl(PR_SET_TIMERSLACK , ... ) support
3518prctl_pr_set_timerslack=no
3519cat > $TMPC << EOF
3520#include <sys/prctl.h>
3521
3522int main(void)
3523{
3524    prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
3525    return 0;
3526}
3527EOF
3528if compile_prog "" "" ; then
3529  prctl_pr_set_timerslack=yes
3530fi
3531
3532# check for epoll support
3533epoll=no
3534cat > $TMPC << EOF
3535#include <sys/epoll.h>
3536
3537int main(void)
3538{
3539    epoll_create(0);
3540    return 0;
3541}
3542EOF
3543if compile_prog "" "" ; then
3544  epoll=yes
3545fi
3546
3547# epoll_create1 and epoll_pwait are later additions
3548# so we must check separately for their presence
3549epoll_create1=no
3550cat > $TMPC << EOF
3551#include <sys/epoll.h>
3552
3553int main(void)
3554{
3555    /* Note that we use epoll_create1 as a value, not as
3556     * a function being called. This is necessary so that on
3557     * old SPARC glibc versions where the function was present in
3558     * the library but not declared in the header file we will
3559     * fail the configure check. (Otherwise we will get a compiler
3560     * warning but not an error, and will proceed to fail the
3561     * qemu compile where we compile with -Werror.)
3562     */
3563    return (int)(uintptr_t)&epoll_create1;
3564}
3565EOF
3566if compile_prog "" "" ; then
3567  epoll_create1=yes
3568fi
3569
3570epoll_pwait=no
3571cat > $TMPC << EOF
3572#include <sys/epoll.h>
3573
3574int main(void)
3575{
3576    epoll_pwait(0, 0, 0, 0, 0);
3577    return 0;
3578}
3579EOF
3580if compile_prog "" "" ; then
3581  epoll_pwait=yes
3582fi
3583
3584# check for sendfile support
3585sendfile=no
3586cat > $TMPC << EOF
3587#include <sys/sendfile.h>
3588
3589int main(void)
3590{
3591    return sendfile(0, 0, 0, 0);
3592}
3593EOF
3594if compile_prog "" "" ; then
3595  sendfile=yes
3596fi
3597
3598# check for timerfd support (glibc 2.8 and newer)
3599timerfd=no
3600cat > $TMPC << EOF
3601#include <sys/timerfd.h>
3602
3603int main(void)
3604{
3605    return(timerfd_create(CLOCK_REALTIME, 0));
3606}
3607EOF
3608if compile_prog "" "" ; then
3609  timerfd=yes
3610fi
3611
3612# check for setns and unshare support
3613setns=no
3614cat > $TMPC << EOF
3615#include <sched.h>
3616
3617int main(void)
3618{
3619    int ret;
3620    ret = setns(0, 0);
3621    ret = unshare(0);
3622    return ret;
3623}
3624EOF
3625if compile_prog "" "" ; then
3626  setns=yes
3627fi
3628
3629# Check if tools are available to build documentation.
3630if test "$docs" != "no" ; then
3631  if has makeinfo && has pod2man; then
3632    docs=yes
3633  else
3634    if test "$docs" = "yes" ; then
3635      feature_not_found "docs" "Install texinfo and Perl/perl-podlators"
3636    fi
3637    docs=no
3638  fi
3639fi
3640
3641# Search for bswap_32 function
3642byteswap_h=no
3643cat > $TMPC << EOF
3644#include <byteswap.h>
3645int main(void) { return bswap_32(0); }
3646EOF
3647if compile_prog "" "" ; then
3648  byteswap_h=yes
3649fi
3650
3651# Search for bswap32 function
3652bswap_h=no
3653cat > $TMPC << EOF
3654#include <sys/endian.h>
3655#include <sys/types.h>
3656#include <machine/bswap.h>
3657int main(void) { return bswap32(0); }
3658EOF
3659if compile_prog "" "" ; then
3660  bswap_h=yes
3661fi
3662
3663##########################################
3664# Do we have libiscsi >= 1.9.0
3665if test "$libiscsi" != "no" ; then
3666  if $pkg_config --atleast-version=1.9.0 libiscsi; then
3667    libiscsi="yes"
3668    libiscsi_cflags=$($pkg_config --cflags libiscsi)
3669    libiscsi_libs=$($pkg_config --libs libiscsi)
3670  else
3671    if test "$libiscsi" = "yes" ; then
3672      feature_not_found "libiscsi" "Install libiscsi >= 1.9.0"
3673    fi
3674    libiscsi="no"
3675  fi
3676fi
3677
3678##########################################
3679# Do we need libm
3680cat > $TMPC << EOF
3681#include <math.h>
3682int main(int argc, char **argv) { return isnan(sin((double)argc)); }
3683EOF
3684if compile_prog "" "" ; then
3685  :
3686elif compile_prog "" "-lm" ; then
3687  LIBS="-lm $LIBS"
3688  libs_qga="-lm $libs_qga"
3689else
3690  error_exit "libm check failed"
3691fi
3692
3693##########################################
3694# Do we need librt
3695# uClibc provides 2 versions of clock_gettime(), one with realtime
3696# support and one without. This means that the clock_gettime() don't
3697# need -lrt. We still need it for timer_create() so we check for this
3698# function in addition.
3699cat > $TMPC <<EOF
3700#include <signal.h>
3701#include <time.h>
3702int main(void) {
3703  timer_create(CLOCK_REALTIME, NULL, NULL);
3704  return clock_gettime(CLOCK_REALTIME, NULL);
3705}
3706EOF
3707
3708if compile_prog "" "" ; then
3709  :
3710# we need pthread for static linking. use previous pthread test result
3711elif compile_prog "" "$pthread_lib -lrt" ; then
3712  LIBS="$LIBS -lrt"
3713  libs_qga="$libs_qga -lrt"
3714fi
3715
3716if test "$darwin" != "yes" -a "$mingw32" != "yes" -a "$solaris" != yes -a \
3717        "$aix" != "yes" -a "$haiku" != "yes" ; then
3718    libs_softmmu="-lutil $libs_softmmu"
3719fi
3720
3721##########################################
3722# spice probe
3723if test "$spice" != "no" ; then
3724  cat > $TMPC << EOF
3725#include <spice.h>
3726int main(void) { spice_server_new(); return 0; }
3727EOF
3728  spice_cflags=$($pkg_config --cflags spice-protocol spice-server 2>/dev/null)
3729  spice_libs=$($pkg_config --libs spice-protocol spice-server 2>/dev/null)
3730  if $pkg_config --atleast-version=0.12.0 spice-server && \
3731     $pkg_config --atleast-version=0.12.3 spice-protocol && \
3732     compile_prog "$spice_cflags" "$spice_libs" ; then
3733    spice="yes"
3734    libs_softmmu="$libs_softmmu $spice_libs"
3735    QEMU_CFLAGS="$QEMU_CFLAGS $spice_cflags"
3736    spice_protocol_version=$($pkg_config --modversion spice-protocol)
3737    spice_server_version=$($pkg_config --modversion spice-server)
3738  else
3739    if test "$spice" = "yes" ; then
3740      feature_not_found "spice" \
3741          "Install spice-server(>=0.12.0) and spice-protocol(>=0.12.3) devel"
3742    fi
3743    spice="no"
3744  fi
3745fi
3746
3747# check for libcacard for smartcard support
3748smartcard_cflags=""
3749# TODO - what's the minimal nss version we support?
3750if test "$smartcard_nss" != "no"; then
3751  cat > $TMPC << EOF
3752#include <pk11pub.h>
3753int main(void) { PK11_FreeSlot(0); return 0; }
3754EOF
3755    # FIXME: do not include $glib_* in here
3756    nss_libs="$($pkg_config --libs nss 2>/dev/null) $glib_libs"
3757    nss_cflags="$($pkg_config --cflags nss 2>/dev/null) $glib_cflags"
3758    test_cflags="$nss_cflags"
3759    # The header files in nss < 3.13.3 have a bug which causes them to
3760    # emit a warning. If we're going to compile QEMU with -Werror, then
3761    # test that the headers don't have this bug. Otherwise we would pass
3762    # the configure test but fail to compile QEMU later.
3763    if test "$werror" = "yes"; then
3764        test_cflags="-Werror $test_cflags"
3765    fi
3766    if test -n "$libtool" &&
3767       $pkg_config --atleast-version=3.12.8 nss && \
3768      compile_prog "$test_cflags" "$nss_libs"; then
3769        smartcard_nss="yes"
3770    else
3771        if test "$smartcard_nss" = "yes"; then
3772            feature_not_found "nss" "Install nss devel >= 3.12.8"
3773        fi
3774        smartcard_nss="no"
3775    fi
3776fi
3777
3778# check for libusb
3779if test "$libusb" != "no" ; then
3780    if $pkg_config --atleast-version=1.0.13 libusb-1.0; then
3781        libusb="yes"
3782        libusb_cflags=$($pkg_config --cflags libusb-1.0)
3783        libusb_libs=$($pkg_config --libs libusb-1.0)
3784        QEMU_CFLAGS="$QEMU_CFLAGS $libusb_cflags"
3785        libs_softmmu="$libs_softmmu $libusb_libs"
3786    else
3787        if test "$libusb" = "yes"; then
3788            feature_not_found "libusb" "Install libusb devel >= 1.0.13"
3789        fi
3790        libusb="no"
3791    fi
3792fi
3793
3794# check for usbredirparser for usb network redirection support
3795if test "$usb_redir" != "no" ; then
3796    if $pkg_config --atleast-version=0.6 libusbredirparser-0.5; then
3797        usb_redir="yes"
3798        usb_redir_cflags=$($pkg_config --cflags libusbredirparser-0.5)
3799        usb_redir_libs=$($pkg_config --libs libusbredirparser-0.5)
3800        QEMU_CFLAGS="$QEMU_CFLAGS $usb_redir_cflags"
3801        libs_softmmu="$libs_softmmu $usb_redir_libs"
3802    else
3803        if test "$usb_redir" = "yes"; then
3804            feature_not_found "usb-redir" "Install usbredir devel"
3805        fi
3806        usb_redir="no"
3807    fi
3808fi
3809
3810##########################################
3811# check if we have VSS SDK headers for win
3812
3813if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$vss_win32_sdk" != "no" ; then
3814  case "$vss_win32_sdk" in
3815    "")   vss_win32_include="-I$source_path" ;;
3816    *\ *) # The SDK is installed in "Program Files" by default, but we cannot
3817          # handle path with spaces. So we symlink the headers into ".sdk/vss".
3818          vss_win32_include="-I$source_path/.sdk/vss"
3819	  symlink "$vss_win32_sdk/inc" "$source_path/.sdk/vss/inc"
3820	  ;;
3821    *)    vss_win32_include="-I$vss_win32_sdk"
3822  esac
3823  cat > $TMPC << EOF
3824#define __MIDL_user_allocate_free_DEFINED__
3825#include <inc/win2003/vss.h>
3826int main(void) { return VSS_CTX_BACKUP; }
3827EOF
3828  if compile_prog "$vss_win32_include" "" ; then
3829    guest_agent_with_vss="yes"
3830    QEMU_CFLAGS="$QEMU_CFLAGS $vss_win32_include"
3831    libs_qga="-lole32 -loleaut32 -lshlwapi -luuid -lstdc++ -Wl,--enable-stdcall-fixup $libs_qga"
3832  else
3833    if test "$vss_win32_sdk" != "" ; then
3834      echo "ERROR: Please download and install Microsoft VSS SDK:"
3835      echo "ERROR:   http://www.microsoft.com/en-us/download/details.aspx?id=23490"
3836      echo "ERROR: On POSIX-systems, you can extract the SDK headers by:"
3837      echo "ERROR:   scripts/extract-vsssdk-headers setup.exe"
3838      echo "ERROR: The headers are extracted in the directory \`inc'."
3839      feature_not_found "VSS support"
3840    fi
3841    guest_agent_with_vss="no"
3842  fi
3843fi
3844
3845##########################################
3846# lookup Windows platform SDK (if not specified)
3847# The SDK is needed only to build .tlb (type library) file of guest agent
3848# VSS provider from the source. It is usually unnecessary because the
3849# pre-compiled .tlb file is included.
3850
3851if test "$mingw32" = "yes" -a "$guest_agent" != "no" -a "$guest_agent_with_vss" = "yes" ; then
3852  if test -z "$win_sdk"; then
3853    programfiles="$PROGRAMFILES"
3854    test -n "$PROGRAMW6432" && programfiles="$PROGRAMW6432"
3855    if test -n "$programfiles"; then
3856      win_sdk=$(ls -d "$programfiles/Microsoft SDKs/Windows/v"* | tail -1) 2>/dev/null
3857    else
3858      feature_not_found "Windows SDK"
3859    fi
3860  elif test "$win_sdk" = "no"; then
3861    win_sdk=""
3862  fi
3863fi
3864
3865##########################################
3866# check if mingw environment provides a recent ntddscsi.h
3867if test "$mingw32" = "yes" -a "$guest_agent" != "no"; then
3868  cat > $TMPC << EOF
3869#include <windows.h>
3870#include <ntddscsi.h>
3871int main(void) {
3872#if !defined(IOCTL_SCSI_GET_ADDRESS)
3873#error Missing required ioctl definitions
3874#endif
3875  SCSI_ADDRESS addr = { .Lun = 0, .TargetId = 0, .PathId = 0 };
3876  return addr.Lun;
3877}
3878EOF
3879  if compile_prog "" "" ; then
3880    guest_agent_ntddscsi=yes
3881    libs_qga="-lsetupapi $libs_qga"
3882  fi
3883fi
3884
3885##########################################
3886# Guest agent Window MSI  package
3887
3888if test "$guest_agent" != yes; then
3889  if test "$guest_agent_msi" = yes; then
3890    error_exit "MSI guest agent package requires guest agent enabled"
3891  fi
3892  guest_agent_msi=no
3893elif test "$mingw32" != "yes"; then
3894  if test "$guest_agent_msi" = "yes"; then
3895    error_exit "MSI guest agent package is available only for MinGW Windows cross-compilation"
3896  fi
3897  guest_agent_msi=no
3898elif ! has wixl; then
3899  if test "$guest_agent_msi" = "yes"; then
3900    error_exit "MSI guest agent package requires wixl tool installed ( usually from msitools package )"
3901  fi
3902  guest_agent_msi=no
3903fi
3904
3905if test "$guest_agent_msi" != "no"; then
3906  if test "$guest_agent_with_vss" = "yes"; then
3907    QEMU_GA_MSI_WITH_VSS="-D InstallVss"
3908  fi
3909
3910  if test "$QEMU_GA_MANUFACTURER" = ""; then
3911    QEMU_GA_MANUFACTURER=QEMU
3912  fi
3913
3914  if test "$QEMU_GA_DISTRO" = ""; then
3915    QEMU_GA_DISTRO=Linux
3916  fi
3917
3918  if test "$QEMU_GA_VERSION" = ""; then
3919      QEMU_GA_VERSION=`cat $source_path/VERSION`
3920  fi
3921
3922  QEMU_GA_MSI_MINGW_DLL_PATH="-D Mingw_dlls=`$pkg_config --variable=prefix glib-2.0`/bin"
3923
3924  case "$cpu" in
3925  x86_64)
3926    QEMU_GA_MSI_ARCH="-a x64 -D Arch=64"
3927    ;;
3928  i386)
3929    QEMU_GA_MSI_ARCH="-D Arch=32"
3930    ;;
3931  *)
3932    error_exit "CPU $cpu not supported for building installation package"
3933    ;;
3934  esac
3935fi
3936
3937##########################################
3938# check if we have fdatasync
3939
3940fdatasync=no
3941cat > $TMPC << EOF
3942#include <unistd.h>
3943int main(void) {
3944#if defined(_POSIX_SYNCHRONIZED_IO) && _POSIX_SYNCHRONIZED_IO > 0
3945return fdatasync(0);
3946#else
3947#error Not supported
3948#endif
3949}
3950EOF
3951if compile_prog "" "" ; then
3952    fdatasync=yes
3953fi
3954
3955##########################################
3956# check if we have madvise
3957
3958madvise=no
3959cat > $TMPC << EOF
3960#include <sys/types.h>
3961#include <sys/mman.h>
3962#include <stddef.h>
3963int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
3964EOF
3965if compile_prog "" "" ; then
3966    madvise=yes
3967fi
3968
3969##########################################
3970# check if we have posix_madvise
3971
3972posix_madvise=no
3973cat > $TMPC << EOF
3974#include <sys/mman.h>
3975#include <stddef.h>
3976int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
3977EOF
3978if compile_prog "" "" ; then
3979    posix_madvise=yes
3980fi
3981
3982##########################################
3983# check if we have usable SIGEV_THREAD_ID
3984
3985sigev_thread_id=no
3986cat > $TMPC << EOF
3987#include <signal.h>
3988int main(void) {
3989  struct sigevent ev;
3990  ev.sigev_notify = SIGEV_THREAD_ID;
3991  ev._sigev_un._tid = 0;
3992  asm volatile("" : : "g"(&ev));
3993  return 0;
3994}
3995EOF
3996if compile_prog "" "" ; then
3997    sigev_thread_id=yes
3998fi
3999
4000##########################################
4001# check if trace backend exists
4002
4003$python "$source_path/scripts/tracetool.py" "--backends=$trace_backends" --check-backends  > /dev/null 2> /dev/null
4004if test "$?" -ne 0 ; then
4005  error_exit "invalid trace backends" \
4006      "Please choose supported trace backends."
4007fi
4008
4009##########################################
4010# For 'ust' backend, test if ust headers are present
4011if have_backend "ust"; then
4012  cat > $TMPC << EOF
4013#include <lttng/tracepoint.h>
4014int main(void) { return 0; }
4015EOF
4016  if compile_prog "" "" ; then
4017    if $pkg_config lttng-ust --exists; then
4018      lttng_ust_libs=`$pkg_config --libs lttng-ust`
4019    else
4020      lttng_ust_libs="-llttng-ust"
4021    fi
4022    if $pkg_config liburcu-bp --exists; then
4023      urcu_bp_libs=`$pkg_config --libs liburcu-bp`
4024    else
4025      urcu_bp_libs="-lurcu-bp"
4026    fi
4027
4028    LIBS="$lttng_ust_libs $urcu_bp_libs $LIBS"
4029    libs_qga="$lttng_ust_libs $urcu_bp_libs $libs_qga"
4030  else
4031    error_exit "Trace backend 'ust' missing lttng-ust header files"
4032  fi
4033fi
4034
4035##########################################
4036# For 'dtrace' backend, test if 'dtrace' command is present
4037if have_backend "dtrace"; then
4038  if ! has 'dtrace' ; then
4039    error_exit "dtrace command is not found in PATH $PATH"
4040  fi
4041  trace_backend_stap="no"
4042  if has 'stap' ; then
4043    trace_backend_stap="yes"
4044  fi
4045fi
4046
4047##########################################
4048# check and set a backend for coroutine
4049
4050# We prefer ucontext, but it's not always possible. The fallback
4051# is sigcontext. gthread is not selectable except explicitly, because
4052# it is not functional enough to run QEMU proper. (It is occasionally
4053# useful for debugging purposes.)  On Windows the only valid backend
4054# is the Windows-specific one.
4055
4056ucontext_works=no
4057if test "$darwin" != "yes"; then
4058  cat > $TMPC << EOF
4059#include <ucontext.h>
4060#ifdef __stub_makecontext
4061#error Ignoring glibc stub makecontext which will always fail
4062#endif
4063int main(void) { makecontext(0, 0, 0); return 0; }
4064EOF
4065  if compile_prog "" "" ; then
4066    ucontext_works=yes
4067  fi
4068fi
4069
4070if test "$coroutine" = ""; then
4071  if test "$mingw32" = "yes"; then
4072    coroutine=win32
4073  elif test "$ucontext_works" = "yes"; then
4074    coroutine=ucontext
4075  else
4076    coroutine=sigaltstack
4077  fi
4078else
4079  case $coroutine in
4080  windows)
4081    if test "$mingw32" != "yes"; then
4082      error_exit "'windows' coroutine backend only valid for Windows"
4083    fi
4084    # Unfortunately the user visible backend name doesn't match the
4085    # coroutine-*.c filename for this case, so we have to adjust it here.
4086    coroutine=win32
4087    ;;
4088  ucontext)
4089    if test "$ucontext_works" != "yes"; then
4090      feature_not_found "ucontext"
4091    fi
4092    ;;
4093  gthread|sigaltstack)
4094    if test "$mingw32" = "yes"; then
4095      error_exit "only the 'windows' coroutine backend is valid for Windows"
4096    fi
4097    ;;
4098  *)
4099    error_exit "unknown coroutine backend $coroutine"
4100    ;;
4101  esac
4102fi
4103
4104if test "$coroutine_pool" = ""; then
4105  if test "$coroutine" = "gthread"; then
4106    coroutine_pool=no
4107  else
4108    coroutine_pool=yes
4109  fi
4110fi
4111if test "$coroutine" = "gthread" -a "$coroutine_pool" = "yes"; then
4112  error_exit "'gthread' coroutine backend does not support pool (use --disable-coroutine-pool)"
4113fi
4114
4115##########################################
4116# check if we have open_by_handle_at
4117
4118open_by_handle_at=no
4119cat > $TMPC << EOF
4120#include <fcntl.h>
4121#if !defined(AT_EMPTY_PATH)
4122# error missing definition
4123#else
4124int main(void) { struct file_handle fh; return open_by_handle_at(0, &fh, 0); }
4125#endif
4126EOF
4127if compile_prog "" "" ; then
4128    open_by_handle_at=yes
4129fi
4130
4131########################################
4132# check if we have linux/magic.h
4133
4134linux_magic_h=no
4135cat > $TMPC << EOF
4136#include <linux/magic.h>
4137int main(void) {
4138  return 0;
4139}
4140EOF
4141if compile_prog "" "" ; then
4142    linux_magic_h=yes
4143fi
4144
4145########################################
4146# check whether we can disable warning option with a pragma (this is needed
4147# to silence warnings in the headers of some versions of external libraries).
4148# This test has to be compiled with -Werror as otherwise an unknown pragma is
4149# only a warning.
4150#
4151# If we can't selectively disable warning in the code, disable -Werror so that
4152# the build doesn't fail anyway.
4153
4154pragma_disable_unused_but_set=no
4155cat > $TMPC << EOF
4156#pragma GCC diagnostic push
4157#pragma GCC diagnostic ignored "-Wunused-but-set-variable"
4158#pragma GCC diagnostic ignored "-Wstrict-prototypes"
4159#pragma GCC diagnostic pop
4160
4161int main(void) {
4162    return 0;
4163}
4164EOF
4165if compile_prog "-Werror" "" ; then
4166    pragma_diagnostic_available=yes
4167else
4168    werror=no
4169fi
4170
4171########################################
4172# check if we have valgrind/valgrind.h
4173
4174valgrind_h=no
4175cat > $TMPC << EOF
4176#include <valgrind/valgrind.h>
4177int main(void) {
4178  return 0;
4179}
4180EOF
4181if compile_prog "" "" ; then
4182    valgrind_h=yes
4183fi
4184
4185########################################
4186# check if environ is declared
4187
4188has_environ=no
4189cat > $TMPC << EOF
4190#include <unistd.h>
4191int main(void) {
4192    environ = 0;
4193    return 0;
4194}
4195EOF
4196if compile_prog "" "" ; then
4197    has_environ=yes
4198fi
4199
4200########################################
4201# check if cpuid.h is usable.
4202
4203cpuid_h=no
4204cat > $TMPC << EOF
4205#include <cpuid.h>
4206int main(void) {
4207    unsigned a, b, c, d;
4208    int max = __get_cpuid_max(0, 0);
4209
4210    if (max >= 1) {
4211        __cpuid(1, a, b, c, d);
4212    }
4213
4214    if (max >= 7) {
4215        __cpuid_count(7, 0, a, b, c, d);
4216    }
4217
4218    return 0;
4219}
4220EOF
4221if compile_prog "" "" ; then
4222    cpuid_h=yes
4223fi
4224
4225########################################
4226# check if __[u]int128_t is usable.
4227
4228int128=no
4229cat > $TMPC << EOF
4230#if defined(__clang_major__) && defined(__clang_minor__)
4231# if ((__clang_major__ < 3) || (__clang_major__ == 3) && (__clang_minor__ < 2))
4232#  error __int128_t does not work in CLANG before 3.2
4233# endif
4234#endif
4235__int128_t a;
4236__uint128_t b;
4237int main (void) {
4238  a = a + b;
4239  b = a * b;
4240  a = a * a;
4241  return 0;
4242}
4243EOF
4244if compile_prog "" "" ; then
4245    int128=yes
4246fi
4247
4248########################################
4249# check if getauxval is available.
4250
4251getauxval=no
4252cat > $TMPC << EOF
4253#include <sys/auxv.h>
4254int main(void) {
4255  return getauxval(AT_HWCAP) == 0;
4256}
4257EOF
4258if compile_prog "" "" ; then
4259    getauxval=yes
4260fi
4261
4262########################################
4263# check if ccache is interfering with
4264# semantic analysis of macros
4265
4266ccache_cpp2=no
4267cat > $TMPC << EOF
4268static const int Z = 1;
4269#define fn() ({ Z; })
4270#define TAUT(X) ((X) == Z)
4271#define PAREN(X, Y) (X == Y)
4272#define ID(X) (X)
4273int main(int argc, char *argv[])
4274{
4275    int x = 0, y = 0;
4276    x = ID(x);
4277    x = fn();
4278    fn();
4279    if (PAREN(x, y)) return 0;
4280    if (TAUT(Z)) return 0;
4281    return 0;
4282}
4283EOF
4284
4285if ! compile_object "-Werror"; then
4286    ccache_cpp2=yes
4287fi
4288
4289##########################################
4290# End of CC checks
4291# After here, no more $cc or $ld runs
4292
4293if test "$gcov" = "yes" ; then
4294  CFLAGS="-fprofile-arcs -ftest-coverage -g $CFLAGS"
4295  LDFLAGS="-fprofile-arcs -ftest-coverage $LDFLAGS"
4296elif test "$debug" = "no" ; then
4297  CFLAGS="-O2 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 $CFLAGS"
4298fi
4299
4300##########################################
4301# Do we have libnfs
4302if test "$libnfs" != "no" ; then
4303  if $pkg_config --atleast-version=1.9.3 libnfs; then
4304    libnfs="yes"
4305    libnfs_libs=$($pkg_config --libs libnfs)
4306    LIBS="$LIBS $libnfs_libs"
4307  else
4308    if test "$libnfs" = "yes" ; then
4309      feature_not_found "libnfs" "Install libnfs devel >= 1.9.3"
4310    fi
4311    libnfs="no"
4312  fi
4313fi
4314
4315# Disable zero malloc errors for official releases unless explicitly told to
4316# enable/disable
4317if test -z "$zero_malloc" ; then
4318    if test "$z_version" = "50" ; then
4319	zero_malloc="no"
4320    else
4321	zero_malloc="yes"
4322    fi
4323fi
4324
4325# Now we've finished running tests it's OK to add -Werror to the compiler flags
4326if test "$werror" = "yes"; then
4327    QEMU_CFLAGS="-Werror $QEMU_CFLAGS"
4328fi
4329
4330if test "$solaris" = "no" ; then
4331    if $ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
4332        LDFLAGS="-Wl,--warn-common $LDFLAGS"
4333    fi
4334fi
4335
4336# test if pod2man has --utf8 option
4337if pod2man --help | grep -q utf8; then
4338    POD2MAN="pod2man --utf8"
4339else
4340    POD2MAN="pod2man"
4341fi
4342
4343# Use ASLR, no-SEH and DEP if available
4344if test "$mingw32" = "yes" ; then
4345    for flag in --dynamicbase --no-seh --nxcompat; do
4346        if $ld --help 2>/dev/null | grep ".$flag" >/dev/null 2>/dev/null ; then
4347            LDFLAGS="-Wl,$flag $LDFLAGS"
4348        fi
4349    done
4350fi
4351
4352qemu_confdir=$sysconfdir$confsuffix
4353qemu_moddir=$libdir$confsuffix
4354qemu_datadir=$datadir$confsuffix
4355qemu_localedir="$datadir/locale"
4356
4357tools=""
4358if test "$want_tools" = "yes" ; then
4359  tools="qemu-img\$(EXESUF) qemu-io\$(EXESUF) $tools"
4360  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" ] ; then
4361    tools="qemu-nbd\$(EXESUF) $tools"
4362  fi
4363fi
4364if test "$softmmu" = yes ; then
4365  if test "$virtfs" != no ; then
4366    if test "$cap" = yes && test "$linux" = yes && test "$attr" = yes ; then
4367      virtfs=yes
4368      tools="$tools fsdev/virtfs-proxy-helper\$(EXESUF)"
4369    else
4370      if test "$virtfs" = yes; then
4371        error_exit "VirtFS is supported only on Linux and requires libcap-devel and libattr-devel"
4372      fi
4373      virtfs=no
4374    fi
4375  fi
4376fi
4377if [ "$guest_agent" != "no" ]; then
4378  if [ "$linux" = "yes" -o "$bsd" = "yes" -o "$solaris" = "yes" -o "$mingw32" = "yes" ] ; then
4379      tools="qemu-ga\$(EXESUF) $tools"
4380      if [ "$mingw32" = "yes" -a "$guest_agent_with_vss" = "yes" ]; then
4381        tools="qga/vss-win32/qga-vss.dll qga/vss-win32/qga-vss.tlb $tools"
4382      fi
4383      guest_agent=yes
4384  elif [ "$guest_agent" != yes ]; then
4385      guest_agent=no
4386  else
4387      error_exit "Guest agent is not supported on this platform"
4388  fi
4389fi
4390
4391# Mac OS X ships with a broken assembler
4392roms=
4393if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) -a \
4394        "$targetos" != "Darwin" -a "$targetos" != "SunOS" -a \
4395        "$softmmu" = yes ; then
4396  roms="optionrom"
4397fi
4398if test "$cpu" = "ppc64" -a "$targetos" != "Darwin" ; then
4399  roms="$roms spapr-rtas"
4400fi
4401
4402if test "$cpu" = "s390x" ; then
4403  roms="$roms s390-ccw"
4404fi
4405
4406# Probe for the need for relocating the user-only binary.
4407if test "$pie" = "no" ; then
4408  textseg_addr=
4409  case "$cpu" in
4410    arm | i386 | ppc* | s390* | sparc* | x86_64 | x32)
4411      # ??? Rationale for choosing this address
4412      textseg_addr=0x60000000
4413      ;;
4414    mips)
4415      # A 256M aligned address, high in the address space, with enough
4416      # room for the code_gen_buffer above it before the stack.
4417      textseg_addr=0x60000000
4418      ;;
4419  esac
4420  if [ -n "$textseg_addr" ]; then
4421    cat > $TMPC <<EOF
4422    int main(void) { return 0; }
4423EOF
4424    textseg_ldflags="-Wl,-Ttext-segment=$textseg_addr"
4425    if ! compile_prog "" "$textseg_ldflags"; then
4426      # In case ld does not support -Ttext-segment, edit the default linker
4427      # script via sed to set the .text start addr.  This is needed on FreeBSD
4428      # at least.
4429      $ld --verbose | sed \
4430        -e '1,/==================================================/d' \
4431        -e '/==================================================/,$d' \
4432        -e "s/[.] = [0-9a-fx]* [+] SIZEOF_HEADERS/. = $textseg_addr + SIZEOF_HEADERS/" \
4433        -e "s/__executable_start = [0-9a-fx]*/__executable_start = $textseg_addr/" > config-host.ld
4434      textseg_ldflags="-Wl,-T../config-host.ld"
4435    fi
4436  fi
4437fi
4438
4439# prepend pixman and ftd flags after all config tests are done
4440QEMU_CFLAGS="$pixman_cflags $fdt_cflags $QEMU_CFLAGS"
4441libs_softmmu="$pixman_libs $libs_softmmu"
4442
4443echo "Install prefix    $prefix"
4444echo "BIOS directory    `eval echo $qemu_datadir`"
4445echo "binary directory  `eval echo $bindir`"
4446echo "library directory `eval echo $libdir`"
4447echo "module directory  `eval echo $qemu_moddir`"
4448echo "libexec directory `eval echo $libexecdir`"
4449echo "include directory `eval echo $includedir`"
4450echo "config directory  `eval echo $sysconfdir`"
4451if test "$mingw32" = "no" ; then
4452echo "local state directory   `eval echo $local_statedir`"
4453echo "Manual directory  `eval echo $mandir`"
4454echo "ELF interp prefix $interp_prefix"
4455else
4456echo "local state directory   queried at runtime"
4457echo "Windows SDK       $win_sdk"
4458fi
4459echo "Source path       $source_path"
4460echo "C compiler        $cc"
4461echo "Host C compiler   $host_cc"
4462echo "C++ compiler      $cxx"
4463echo "Objective-C compiler $objcc"
4464echo "ARFLAGS           $ARFLAGS"
4465echo "CFLAGS            $CFLAGS"
4466echo "QEMU_CFLAGS       $QEMU_CFLAGS"
4467echo "LDFLAGS           $LDFLAGS"
4468echo "make              $make"
4469echo "install           $install"
4470echo "python            $python"
4471if test "$slirp" = "yes" ; then
4472    echo "smbd              $smbd"
4473fi
4474echo "module support    $modules"
4475echo "host CPU          $cpu"
4476echo "host big endian   $bigendian"
4477echo "target list       $target_list"
4478echo "tcg debug enabled $debug_tcg"
4479echo "gprof enabled     $gprof"
4480echo "sparse enabled    $sparse"
4481echo "strip binaries    $strip_opt"
4482echo "profiler          $profiler"
4483echo "static build      $static"
4484if test "$darwin" = "yes" ; then
4485    echo "Cocoa support     $cocoa"
4486fi
4487echo "pixman            $pixman"
4488echo "SDL support       $sdl"
4489echo "GTK support       $gtk"
4490echo "GNUTLS support    $gnutls"
4491echo "GNUTLS hash       $gnutls_hash"
4492echo "GNUTLS gcrypt     $gnutls_gcrypt"
4493echo "GNUTLS nettle     $gnutls_nettle"
4494echo "VTE support       $vte"
4495echo "curses support    $curses"
4496echo "curl support      $curl"
4497echo "mingw32 support   $mingw32"
4498echo "Audio drivers     $audio_drv_list"
4499echo "Block whitelist (rw) $block_drv_rw_whitelist"
4500echo "Block whitelist (ro) $block_drv_ro_whitelist"
4501echo "VirtFS support    $virtfs"
4502echo "VNC support       $vnc"
4503if test "$vnc" = "yes" ; then
4504    echo "VNC TLS support   $vnc_tls"
4505    echo "VNC SASL support  $vnc_sasl"
4506    echo "VNC JPEG support  $vnc_jpeg"
4507    echo "VNC PNG support   $vnc_png"
4508fi
4509if test -n "$sparc_cpu"; then
4510    echo "Target Sparc Arch $sparc_cpu"
4511fi
4512echo "xen support       $xen"
4513if test "$xen" = "yes" ; then
4514  echo "xen ctrl version  $xen_ctrl_version"
4515fi
4516echo "brlapi support    $brlapi"
4517echo "bluez  support    $bluez"
4518echo "Documentation     $docs"
4519echo "GUEST_BASE        $guest_base"
4520echo "PIE               $pie"
4521echo "vde support       $vde"
4522echo "netmap support    $netmap"
4523echo "Linux AIO support $linux_aio"
4524echo "ATTR/XATTR support $attr"
4525echo "Install blobs     $blobs"
4526echo "KVM support       $kvm"
4527echo "RDMA support      $rdma"
4528echo "TCG interpreter   $tcg_interpreter"
4529echo "fdt support       $fdt"
4530echo "preadv support    $preadv"
4531echo "fdatasync         $fdatasync"
4532echo "madvise           $madvise"
4533echo "posix_madvise     $posix_madvise"
4534echo "sigev_thread_id   $sigev_thread_id"
4535echo "uuid support      $uuid"
4536echo "libcap-ng support $cap_ng"
4537echo "vhost-net support $vhost_net"
4538echo "vhost-scsi support $vhost_scsi"
4539echo "Trace backends    $trace_backends"
4540if test "$trace_backend" = "simple"; then
4541echo "Trace output file $trace_file-<pid>"
4542fi
4543if test "$spice" = "yes"; then
4544echo "spice support     $spice ($spice_protocol_version/$spice_server_version)"
4545else
4546echo "spice support     $spice"
4547fi
4548echo "rbd support       $rbd"
4549echo "xfsctl support    $xfs"
4550echo "nss used          $smartcard_nss"
4551echo "libusb            $libusb"
4552echo "usb net redir     $usb_redir"
4553echo "OpenGL support    $opengl"
4554echo "libiscsi support  $libiscsi"
4555echo "libnfs support    $libnfs"
4556echo "build guest agent $guest_agent"
4557echo "QGA VSS support   $guest_agent_with_vss"
4558echo "QGA w32 disk info $guest_agent_ntddscsi"
4559echo "seccomp support   $seccomp"
4560echo "coroutine backend $coroutine"
4561echo "coroutine pool    $coroutine_pool"
4562echo "GlusterFS support $glusterfs"
4563echo "Archipelago support $archipelago"
4564echo "gcov              $gcov_tool"
4565echo "gcov enabled      $gcov"
4566echo "TPM support       $tpm"
4567echo "libssh2 support   $libssh2"
4568echo "TPM passthrough   $tpm_passthrough"
4569echo "QOM debugging     $qom_cast_debug"
4570echo "vhdx              $vhdx"
4571echo "lzo support       $lzo"
4572echo "snappy support    $snappy"
4573echo "bzip2 support     $bzip2"
4574echo "NUMA host support $numa"
4575echo "tcmalloc support  $tcmalloc"
4576
4577if test "$sdl_too_old" = "yes"; then
4578echo "-> Your SDL version is too old - please upgrade to have SDL support"
4579fi
4580
4581config_host_mak="config-host.mak"
4582
4583echo "# Automatically generated by configure - do not modify" >config-all-disas.mak
4584
4585echo "# Automatically generated by configure - do not modify" > $config_host_mak
4586echo >> $config_host_mak
4587
4588echo all: >> $config_host_mak
4589echo "prefix=$prefix" >> $config_host_mak
4590echo "bindir=$bindir" >> $config_host_mak
4591echo "libdir=$libdir" >> $config_host_mak
4592echo "libexecdir=$libexecdir" >> $config_host_mak
4593echo "includedir=$includedir" >> $config_host_mak
4594echo "mandir=$mandir" >> $config_host_mak
4595echo "sysconfdir=$sysconfdir" >> $config_host_mak
4596echo "qemu_confdir=$qemu_confdir" >> $config_host_mak
4597echo "qemu_datadir=$qemu_datadir" >> $config_host_mak
4598echo "qemu_docdir=$qemu_docdir" >> $config_host_mak
4599echo "qemu_moddir=$qemu_moddir" >> $config_host_mak
4600if test "$mingw32" = "no" ; then
4601  echo "qemu_localstatedir=$local_statedir" >> $config_host_mak
4602fi
4603echo "qemu_helperdir=$libexecdir" >> $config_host_mak
4604echo "extra_cflags=$EXTRA_CFLAGS" >> $config_host_mak
4605echo "extra_ldflags=$EXTRA_LDFLAGS" >> $config_host_mak
4606echo "qemu_localedir=$qemu_localedir" >> $config_host_mak
4607echo "libs_softmmu=$libs_softmmu" >> $config_host_mak
4608
4609echo "ARCH=$ARCH" >> $config_host_mak
4610
4611if test "$debug_tcg" = "yes" ; then
4612  echo "CONFIG_DEBUG_TCG=y" >> $config_host_mak
4613fi
4614if test "$strip_opt" = "yes" ; then
4615  echo "STRIP=${strip}" >> $config_host_mak
4616fi
4617if test "$bigendian" = "yes" ; then
4618  echo "HOST_WORDS_BIGENDIAN=y" >> $config_host_mak
4619fi
4620if test "$mingw32" = "yes" ; then
4621  echo "CONFIG_WIN32=y" >> $config_host_mak
4622  rc_version=`cat $source_path/VERSION`
4623  version_major=${rc_version%%.*}
4624  rc_version=${rc_version#*.}
4625  version_minor=${rc_version%%.*}
4626  rc_version=${rc_version#*.}
4627  version_subminor=${rc_version%%.*}
4628  version_micro=0
4629  echo "CONFIG_FILEVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4630  echo "CONFIG_PRODUCTVERSION=$version_major,$version_minor,$version_subminor,$version_micro" >> $config_host_mak
4631  if test "$guest_agent_with_vss" = "yes" ; then
4632    echo "CONFIG_QGA_VSS=y" >> $config_host_mak
4633    echo "WIN_SDK=\"$win_sdk\"" >> $config_host_mak
4634  fi
4635  if test "$guest_agent_ntddscsi" = "yes" ; then
4636    echo "CONFIG_QGA_NTDDDISK=y" >> $config_host_mak
4637  fi
4638  if test "$guest_agent_msi" != "no"; then
4639    echo "QEMU_GA_MSI_ENABLED=yes" >> $config_host_mak
4640    echo "QEMU_GA_MSI_MINGW_DLL_PATH=${QEMU_GA_MSI_MINGW_DLL_PATH}" >> $config_host_mak
4641    echo "QEMU_GA_MSI_WITH_VSS=${QEMU_GA_MSI_WITH_VSS}" >> $config_host_mak
4642    echo "QEMU_GA_MSI_ARCH=${QEMU_GA_MSI_ARCH}" >> $config_host_mak
4643    echo "QEMU_GA_MANUFACTURER=${QEMU_GA_MANUFACTURER}" >> $config_host_mak
4644    echo "QEMU_GA_DISTRO=${QEMU_GA_DISTRO}" >> $config_host_mak
4645    echo "QEMU_GA_VERSION=${QEMU_GA_VERSION}" >> $config_host_mak
4646  fi
4647else
4648  echo "CONFIG_POSIX=y" >> $config_host_mak
4649fi
4650
4651if test "$linux" = "yes" ; then
4652  echo "CONFIG_LINUX=y" >> $config_host_mak
4653fi
4654
4655if test "$darwin" = "yes" ; then
4656  echo "CONFIG_DARWIN=y" >> $config_host_mak
4657fi
4658
4659if test "$aix" = "yes" ; then
4660  echo "CONFIG_AIX=y" >> $config_host_mak
4661fi
4662
4663if test "$solaris" = "yes" ; then
4664  echo "CONFIG_SOLARIS=y" >> $config_host_mak
4665  echo "CONFIG_SOLARIS_VERSION=$solarisrev" >> $config_host_mak
4666  if test "$needs_libsunmath" = "yes" ; then
4667    echo "CONFIG_NEEDS_LIBSUNMATH=y" >> $config_host_mak
4668  fi
4669fi
4670if test "$haiku" = "yes" ; then
4671  echo "CONFIG_HAIKU=y" >> $config_host_mak
4672fi
4673if test "$static" = "yes" ; then
4674  echo "CONFIG_STATIC=y" >> $config_host_mak
4675fi
4676if test "$profiler" = "yes" ; then
4677  echo "CONFIG_PROFILER=y" >> $config_host_mak
4678fi
4679if test "$slirp" = "yes" ; then
4680  echo "CONFIG_SLIRP=y" >> $config_host_mak
4681  echo "CONFIG_SMBD_COMMAND=\"$smbd\"" >> $config_host_mak
4682fi
4683if test "$vde" = "yes" ; then
4684  echo "CONFIG_VDE=y" >> $config_host_mak
4685fi
4686if test "$netmap" = "yes" ; then
4687  echo "CONFIG_NETMAP=y" >> $config_host_mak
4688fi
4689if test "$l2tpv3" = "yes" ; then
4690  echo "CONFIG_L2TPV3=y" >> $config_host_mak
4691fi
4692if test "$cap_ng" = "yes" ; then
4693  echo "CONFIG_LIBCAP=y" >> $config_host_mak
4694fi
4695echo "CONFIG_AUDIO_DRIVERS=$audio_drv_list" >> $config_host_mak
4696for drv in $audio_drv_list; do
4697    def=CONFIG_`echo $drv | LC_ALL=C tr '[a-z]' '[A-Z]'`
4698    echo "$def=y" >> $config_host_mak
4699done
4700if test "$audio_pt_int" = "yes" ; then
4701  echo "CONFIG_AUDIO_PT_INT=y" >> $config_host_mak
4702fi
4703if test "$audio_win_int" = "yes" ; then
4704  echo "CONFIG_AUDIO_WIN_INT=y" >> $config_host_mak
4705fi
4706echo "CONFIG_BDRV_RW_WHITELIST=$block_drv_rw_whitelist" >> $config_host_mak
4707echo "CONFIG_BDRV_RO_WHITELIST=$block_drv_ro_whitelist" >> $config_host_mak
4708if test "$vnc" = "yes" ; then
4709  echo "CONFIG_VNC=y" >> $config_host_mak
4710fi
4711if test "$vnc_tls" = "yes" ; then
4712  echo "CONFIG_VNC_TLS=y" >> $config_host_mak
4713fi
4714if test "$vnc_sasl" = "yes" ; then
4715  echo "CONFIG_VNC_SASL=y" >> $config_host_mak
4716fi
4717if test "$vnc_jpeg" = "yes" ; then
4718  echo "CONFIG_VNC_JPEG=y" >> $config_host_mak
4719fi
4720if test "$vnc_png" = "yes" ; then
4721  echo "CONFIG_VNC_PNG=y" >> $config_host_mak
4722fi
4723if test "$fnmatch" = "yes" ; then
4724  echo "CONFIG_FNMATCH=y" >> $config_host_mak
4725fi
4726if test "$uuid" = "yes" ; then
4727  echo "CONFIG_UUID=y" >> $config_host_mak
4728fi
4729if test "$xfs" = "yes" ; then
4730  echo "CONFIG_XFS=y" >> $config_host_mak
4731fi
4732qemu_version=`head $source_path/VERSION`
4733echo "VERSION=$qemu_version" >>$config_host_mak
4734echo "PKGVERSION=$pkgversion" >>$config_host_mak
4735echo "SRC_PATH=$source_path" >> $config_host_mak
4736echo "TARGET_DIRS=$target_list" >> $config_host_mak
4737if [ "$docs" = "yes" ] ; then
4738  echo "BUILD_DOCS=yes" >> $config_host_mak
4739fi
4740if test "$modules" = "yes"; then
4741  # $shacmd can generate a hash started with digit, which the compiler doesn't
4742  # like as an symbol. So prefix it with an underscore
4743  echo "CONFIG_STAMP=_`(echo $qemu_version; echo $pkgversion; cat $0) | $shacmd - | cut -f1 -d\ `" >> $config_host_mak
4744  echo "CONFIG_MODULES=y" >> $config_host_mak
4745fi
4746if test "$sdl" = "yes" ; then
4747  echo "CONFIG_SDL=y" >> $config_host_mak
4748  echo "CONFIG_SDLABI=$sdlabi" >> $config_host_mak
4749  echo "SDL_CFLAGS=$sdl_cflags" >> $config_host_mak
4750fi
4751if test "$cocoa" = "yes" ; then
4752  echo "CONFIG_COCOA=y" >> $config_host_mak
4753fi
4754if test "$curses" = "yes" ; then
4755  echo "CONFIG_CURSES=y" >> $config_host_mak
4756fi
4757if test "$utimens" = "yes" ; then
4758  echo "CONFIG_UTIMENSAT=y" >> $config_host_mak
4759fi
4760if test "$pipe2" = "yes" ; then
4761  echo "CONFIG_PIPE2=y" >> $config_host_mak
4762fi
4763if test "$accept4" = "yes" ; then
4764  echo "CONFIG_ACCEPT4=y" >> $config_host_mak
4765fi
4766if test "$splice" = "yes" ; then
4767  echo "CONFIG_SPLICE=y" >> $config_host_mak
4768fi
4769if test "$eventfd" = "yes" ; then
4770  echo "CONFIG_EVENTFD=y" >> $config_host_mak
4771fi
4772if test "$fallocate" = "yes" ; then
4773  echo "CONFIG_FALLOCATE=y" >> $config_host_mak
4774fi
4775if test "$fallocate_punch_hole" = "yes" ; then
4776  echo "CONFIG_FALLOCATE_PUNCH_HOLE=y" >> $config_host_mak
4777fi
4778if test "$fallocate_zero_range" = "yes" ; then
4779  echo "CONFIG_FALLOCATE_ZERO_RANGE=y" >> $config_host_mak
4780fi
4781if test "$posix_fallocate" = "yes" ; then
4782  echo "CONFIG_POSIX_FALLOCATE=y" >> $config_host_mak
4783fi
4784if test "$sync_file_range" = "yes" ; then
4785  echo "CONFIG_SYNC_FILE_RANGE=y" >> $config_host_mak
4786fi
4787if test "$fiemap" = "yes" ; then
4788  echo "CONFIG_FIEMAP=y" >> $config_host_mak
4789fi
4790if test "$dup3" = "yes" ; then
4791  echo "CONFIG_DUP3=y" >> $config_host_mak
4792fi
4793if test "$ppoll" = "yes" ; then
4794  echo "CONFIG_PPOLL=y" >> $config_host_mak
4795fi
4796if test "$prctl_pr_set_timerslack" = "yes" ; then
4797  echo "CONFIG_PRCTL_PR_SET_TIMERSLACK=y" >> $config_host_mak
4798fi
4799if test "$epoll" = "yes" ; then
4800  echo "CONFIG_EPOLL=y" >> $config_host_mak
4801fi
4802if test "$epoll_create1" = "yes" ; then
4803  echo "CONFIG_EPOLL_CREATE1=y" >> $config_host_mak
4804fi
4805if test "$epoll_pwait" = "yes" ; then
4806  echo "CONFIG_EPOLL_PWAIT=y" >> $config_host_mak
4807fi
4808if test "$sendfile" = "yes" ; then
4809  echo "CONFIG_SENDFILE=y" >> $config_host_mak
4810fi
4811if test "$timerfd" = "yes" ; then
4812  echo "CONFIG_TIMERFD=y" >> $config_host_mak
4813fi
4814if test "$setns" = "yes" ; then
4815  echo "CONFIG_SETNS=y" >> $config_host_mak
4816fi
4817if test "$inotify" = "yes" ; then
4818  echo "CONFIG_INOTIFY=y" >> $config_host_mak
4819fi
4820if test "$inotify1" = "yes" ; then
4821  echo "CONFIG_INOTIFY1=y" >> $config_host_mak
4822fi
4823if test "$byteswap_h" = "yes" ; then
4824  echo "CONFIG_BYTESWAP_H=y" >> $config_host_mak
4825fi
4826if test "$bswap_h" = "yes" ; then
4827  echo "CONFIG_MACHINE_BSWAP_H=y" >> $config_host_mak
4828fi
4829if test "$curl" = "yes" ; then
4830  echo "CONFIG_CURL=m" >> $config_host_mak
4831  echo "CURL_CFLAGS=$curl_cflags" >> $config_host_mak
4832  echo "CURL_LIBS=$curl_libs" >> $config_host_mak
4833fi
4834if test "$brlapi" = "yes" ; then
4835  echo "CONFIG_BRLAPI=y" >> $config_host_mak
4836fi
4837if test "$bluez" = "yes" ; then
4838  echo "CONFIG_BLUEZ=y" >> $config_host_mak
4839  echo "BLUEZ_CFLAGS=$bluez_cflags" >> $config_host_mak
4840fi
4841if test "$glib_subprocess" = "yes" ; then
4842  echo "CONFIG_HAS_GLIB_SUBPROCESS_TESTS=y" >> $config_host_mak
4843fi
4844echo "GLIB_CFLAGS=$glib_cflags" >> $config_host_mak
4845if test "$gtk" = "yes" ; then
4846  echo "CONFIG_GTK=y" >> $config_host_mak
4847  echo "CONFIG_GTKABI=$gtkabi" >> $config_host_mak
4848  echo "GTK_CFLAGS=$gtk_cflags" >> $config_host_mak
4849fi
4850if test "$gnutls" = "yes" ; then
4851  echo "CONFIG_GNUTLS=y" >> $config_host_mak
4852fi
4853if test "$gnutls_hash" = "yes" ; then
4854  echo "CONFIG_GNUTLS_HASH=y" >> $config_host_mak
4855fi
4856if test "$gnutls_gcrypt" = "yes" ; then
4857  echo "CONFIG_GNUTLS_GCRYPT=y" >> $config_host_mak
4858fi
4859if test "$gnutls_nettle" = "yes" ; then
4860  echo "CONFIG_GNUTLS_NETTLE=y" >> $config_host_mak
4861fi
4862if test "$vte" = "yes" ; then
4863  echo "CONFIG_VTE=y" >> $config_host_mak
4864  echo "VTE_CFLAGS=$vte_cflags" >> $config_host_mak
4865fi
4866if test "$xen" = "yes" ; then
4867  echo "CONFIG_XEN_BACKEND=y" >> $config_host_mak
4868  echo "CONFIG_XEN_CTRL_INTERFACE_VERSION=$xen_ctrl_version" >> $config_host_mak
4869fi
4870if test "$linux_aio" = "yes" ; then
4871  echo "CONFIG_LINUX_AIO=y" >> $config_host_mak
4872fi
4873if test "$attr" = "yes" ; then
4874  echo "CONFIG_ATTR=y" >> $config_host_mak
4875fi
4876if test "$libattr" = "yes" ; then
4877  echo "CONFIG_LIBATTR=y" >> $config_host_mak
4878fi
4879if test "$virtfs" = "yes" ; then
4880  echo "CONFIG_VIRTFS=y" >> $config_host_mak
4881fi
4882if test "$vhost_scsi" = "yes" ; then
4883  echo "CONFIG_VHOST_SCSI=y" >> $config_host_mak
4884fi
4885if test "$vhost_net" = "yes" ; then
4886  echo "CONFIG_VHOST_NET_USED=y" >> $config_host_mak
4887fi
4888if test "$blobs" = "yes" ; then
4889  echo "INSTALL_BLOBS=yes" >> $config_host_mak
4890fi
4891if test "$iovec" = "yes" ; then
4892  echo "CONFIG_IOVEC=y" >> $config_host_mak
4893fi
4894if test "$preadv" = "yes" ; then
4895  echo "CONFIG_PREADV=y" >> $config_host_mak
4896fi
4897if test "$fdt" = "yes" ; then
4898  echo "CONFIG_FDT=y" >> $config_host_mak
4899fi
4900if test "$signalfd" = "yes" ; then
4901  echo "CONFIG_SIGNALFD=y" >> $config_host_mak
4902fi
4903if test "$tcg_interpreter" = "yes" ; then
4904  echo "CONFIG_TCG_INTERPRETER=y" >> $config_host_mak
4905fi
4906if test "$fdatasync" = "yes" ; then
4907  echo "CONFIG_FDATASYNC=y" >> $config_host_mak
4908fi
4909if test "$madvise" = "yes" ; then
4910  echo "CONFIG_MADVISE=y" >> $config_host_mak
4911fi
4912if test "$posix_madvise" = "yes" ; then
4913  echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
4914fi
4915if test "$sigev_thread_id" = "yes" ; then
4916  echo "CONFIG_SIGEV_THREAD_ID=y" >> $config_host_mak
4917fi
4918
4919if test "$spice" = "yes" ; then
4920  echo "CONFIG_SPICE=y" >> $config_host_mak
4921fi
4922
4923if test "$smartcard_nss" = "yes" ; then
4924  echo "CONFIG_SMARTCARD_NSS=y" >> $config_host_mak
4925  echo "NSS_LIBS=$nss_libs" >> $config_host_mak
4926  echo "NSS_CFLAGS=$nss_cflags" >> $config_host_mak
4927fi
4928
4929if test "$libusb" = "yes" ; then
4930  echo "CONFIG_USB_LIBUSB=y" >> $config_host_mak
4931fi
4932
4933if test "$usb_redir" = "yes" ; then
4934  echo "CONFIG_USB_REDIR=y" >> $config_host_mak
4935fi
4936
4937if test "$opengl" = "yes" ; then
4938  echo "CONFIG_OPENGL=y" >> $config_host_mak
4939  echo "OPENGL_CFLAGS=$opengl_cflags" >> $config_host_mak
4940  echo "OPENGL_LIBS=$opengl_libs" >> $config_host_mak
4941fi
4942
4943if test "$lzo" = "yes" ; then
4944  echo "CONFIG_LZO=y" >> $config_host_mak
4945fi
4946
4947if test "$snappy" = "yes" ; then
4948  echo "CONFIG_SNAPPY=y" >> $config_host_mak
4949fi
4950
4951if test "$bzip2" = "yes" ; then
4952  echo "CONFIG_BZIP2=y" >> $config_host_mak
4953  echo "BZIP2_LIBS=-lbz2" >> $config_host_mak
4954fi
4955
4956if test "$libiscsi" = "yes" ; then
4957  echo "CONFIG_LIBISCSI=m" >> $config_host_mak
4958  echo "LIBISCSI_CFLAGS=$libiscsi_cflags" >> $config_host_mak
4959  echo "LIBISCSI_LIBS=$libiscsi_libs" >> $config_host_mak
4960fi
4961
4962if test "$libnfs" = "yes" ; then
4963  echo "CONFIG_LIBNFS=y" >> $config_host_mak
4964fi
4965
4966if test "$seccomp" = "yes"; then
4967  echo "CONFIG_SECCOMP=y" >> $config_host_mak
4968fi
4969
4970# XXX: suppress that
4971if [ "$bsd" = "yes" ] ; then
4972  echo "CONFIG_BSD=y" >> $config_host_mak
4973fi
4974
4975if test "$zero_malloc" = "yes" ; then
4976  echo "CONFIG_ZERO_MALLOC=y" >> $config_host_mak
4977fi
4978if test "$qom_cast_debug" = "yes" ; then
4979  echo "CONFIG_QOM_CAST_DEBUG=y" >> $config_host_mak
4980fi
4981if test "$rbd" = "yes" ; then
4982  echo "CONFIG_RBD=m" >> $config_host_mak
4983  echo "RBD_CFLAGS=$rbd_cflags" >> $config_host_mak
4984  echo "RBD_LIBS=$rbd_libs" >> $config_host_mak
4985fi
4986
4987echo "CONFIG_COROUTINE_BACKEND=$coroutine" >> $config_host_mak
4988if test "$coroutine_pool" = "yes" ; then
4989  echo "CONFIG_COROUTINE_POOL=1" >> $config_host_mak
4990else
4991  echo "CONFIG_COROUTINE_POOL=0" >> $config_host_mak
4992fi
4993
4994if test "$open_by_handle_at" = "yes" ; then
4995  echo "CONFIG_OPEN_BY_HANDLE=y" >> $config_host_mak
4996fi
4997
4998if test "$linux_magic_h" = "yes" ; then
4999  echo "CONFIG_LINUX_MAGIC_H=y" >> $config_host_mak
5000fi
5001
5002if test "$pragma_diagnostic_available" = "yes" ; then
5003  echo "CONFIG_PRAGMA_DIAGNOSTIC_AVAILABLE=y" >> $config_host_mak
5004fi
5005
5006if test "$valgrind_h" = "yes" ; then
5007  echo "CONFIG_VALGRIND_H=y" >> $config_host_mak
5008fi
5009
5010if test "$has_environ" = "yes" ; then
5011  echo "CONFIG_HAS_ENVIRON=y" >> $config_host_mak
5012fi
5013
5014if test "$cpuid_h" = "yes" ; then
5015  echo "CONFIG_CPUID_H=y" >> $config_host_mak
5016fi
5017
5018if test "$int128" = "yes" ; then
5019  echo "CONFIG_INT128=y" >> $config_host_mak
5020fi
5021
5022if test "$getauxval" = "yes" ; then
5023  echo "CONFIG_GETAUXVAL=y" >> $config_host_mak
5024fi
5025
5026if test "$glusterfs" = "yes" ; then
5027  echo "CONFIG_GLUSTERFS=m" >> $config_host_mak
5028  echo "GLUSTERFS_CFLAGS=$glusterfs_cflags" >> $config_host_mak
5029  echo "GLUSTERFS_LIBS=$glusterfs_libs" >> $config_host_mak
5030fi
5031
5032if test "$glusterfs_discard" = "yes" ; then
5033  echo "CONFIG_GLUSTERFS_DISCARD=y" >> $config_host_mak
5034fi
5035
5036if test "$glusterfs_zerofill" = "yes" ; then
5037  echo "CONFIG_GLUSTERFS_ZEROFILL=y" >> $config_host_mak
5038fi
5039
5040if test "$archipelago" = "yes" ; then
5041  echo "CONFIG_ARCHIPELAGO=m" >> $config_host_mak
5042  echo "ARCHIPELAGO_LIBS=$archipelago_libs" >> $config_host_mak
5043fi
5044
5045if test "$libssh2" = "yes" ; then
5046  echo "CONFIG_LIBSSH2=m" >> $config_host_mak
5047  echo "LIBSSH2_CFLAGS=$libssh2_cflags" >> $config_host_mak
5048  echo "LIBSSH2_LIBS=$libssh2_libs" >> $config_host_mak
5049fi
5050
5051if test "$vhdx" = "yes" ; then
5052  echo "CONFIG_VHDX=y" >> $config_host_mak
5053fi
5054
5055# USB host support
5056if test "$libusb" = "yes"; then
5057  echo "HOST_USB=libusb legacy" >> $config_host_mak
5058else
5059  echo "HOST_USB=stub" >> $config_host_mak
5060fi
5061
5062# TPM passthrough support?
5063if test "$tpm" = "yes"; then
5064  echo 'CONFIG_TPM=$(CONFIG_SOFTMMU)' >> $config_host_mak
5065  if test "$tpm_passthrough" = "yes"; then
5066    echo "CONFIG_TPM_PASSTHROUGH=y" >> $config_host_mak
5067  fi
5068fi
5069
5070echo "TRACE_BACKENDS=$trace_backends" >> $config_host_mak
5071if have_backend "nop"; then
5072  echo "CONFIG_TRACE_NOP=y" >> $config_host_mak
5073fi
5074if have_backend "simple"; then
5075  echo "CONFIG_TRACE_SIMPLE=y" >> $config_host_mak
5076  # Set the appropriate trace file.
5077  trace_file="\"$trace_file-\" FMT_pid"
5078fi
5079if have_backend "stderr"; then
5080  echo "CONFIG_TRACE_STDERR=y" >> $config_host_mak
5081fi
5082if have_backend "ust"; then
5083  echo "CONFIG_TRACE_UST=y" >> $config_host_mak
5084fi
5085if have_backend "dtrace"; then
5086  echo "CONFIG_TRACE_DTRACE=y" >> $config_host_mak
5087  if test "$trace_backend_stap" = "yes" ; then
5088    echo "CONFIG_TRACE_SYSTEMTAP=y" >> $config_host_mak
5089  fi
5090fi
5091if have_backend "ftrace"; then
5092  if test "$linux" = "yes" ; then
5093    echo "CONFIG_TRACE_FTRACE=y" >> $config_host_mak
5094  else
5095    feature_not_found "ftrace(trace backend)" "ftrace requires Linux"
5096  fi
5097fi
5098echo "CONFIG_TRACE_FILE=$trace_file" >> $config_host_mak
5099
5100if test "$rdma" = "yes" ; then
5101  echo "CONFIG_RDMA=y" >> $config_host_mak
5102fi
5103
5104# Hold two types of flag:
5105#   CONFIG_THREAD_SETNAME_BYTHREAD  - we've got a way of setting the name on
5106#                                     a thread we have a handle to
5107#   CONFIG_PTHREAD_SETNAME_NP       - A way of doing it on a particular
5108#                                     platform
5109if test "$pthread_setname_np" = "yes" ; then
5110  echo "CONFIG_THREAD_SETNAME_BYTHREAD=y" >> $config_host_mak
5111  echo "CONFIG_PTHREAD_SETNAME_NP=y" >> $config_host_mak
5112fi
5113
5114if test "$tcg_interpreter" = "yes"; then
5115  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/tci $QEMU_INCLUDES"
5116elif test "$ARCH" = "sparc64" ; then
5117  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/sparc $QEMU_INCLUDES"
5118elif test "$ARCH" = "s390x" ; then
5119  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/s390 $QEMU_INCLUDES"
5120elif test "$ARCH" = "x86_64" -o "$ARCH" = "x32" ; then
5121  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/i386 $QEMU_INCLUDES"
5122elif test "$ARCH" = "ppc64" ; then
5123  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/ppc $QEMU_INCLUDES"
5124else
5125  QEMU_INCLUDES="-I\$(SRC_PATH)/tcg/\$(ARCH) $QEMU_INCLUDES"
5126fi
5127QEMU_INCLUDES="-I\$(SRC_PATH)/tcg $QEMU_INCLUDES"
5128
5129echo "TOOLS=$tools" >> $config_host_mak
5130echo "ROMS=$roms" >> $config_host_mak
5131echo "MAKE=$make" >> $config_host_mak
5132echo "INSTALL=$install" >> $config_host_mak
5133echo "INSTALL_DIR=$install -d -m 0755" >> $config_host_mak
5134echo "INSTALL_DATA=$install -c -m 0644" >> $config_host_mak
5135if test -n "$libtool"; then
5136  echo "INSTALL_PROG=\$(LIBTOOL) --mode=install $install -c -m 0755" >> $config_host_mak
5137  echo "INSTALL_LIB=\$(LIBTOOL) --mode=install $install -c -m 0644" >> $config_host_mak
5138else
5139  echo "INSTALL_PROG=$install -c -m 0755" >> $config_host_mak
5140  echo "INSTALL_LIB=$install -c -m 0644" >> $config_host_mak
5141fi
5142echo "PYTHON=$python" >> $config_host_mak
5143echo "CC=$cc" >> $config_host_mak
5144if $iasl -h > /dev/null 2>&1; then
5145  echo "IASL=$iasl" >> $config_host_mak
5146fi
5147echo "CC_I386=$cc_i386" >> $config_host_mak
5148echo "HOST_CC=$host_cc" >> $config_host_mak
5149echo "CXX=$cxx" >> $config_host_mak
5150echo "OBJCC=$objcc" >> $config_host_mak
5151echo "AR=$ar" >> $config_host_mak
5152echo "ARFLAGS=$ARFLAGS" >> $config_host_mak
5153echo "AS=$as" >> $config_host_mak
5154echo "CPP=$cpp" >> $config_host_mak
5155echo "OBJCOPY=$objcopy" >> $config_host_mak
5156echo "LD=$ld" >> $config_host_mak
5157echo "NM=$nm" >> $config_host_mak
5158echo "WINDRES=$windres" >> $config_host_mak
5159echo "LIBTOOL=$libtool" >> $config_host_mak
5160echo "CFLAGS=$CFLAGS" >> $config_host_mak
5161echo "CFLAGS_NOPIE=$CFLAGS_NOPIE" >> $config_host_mak
5162echo "QEMU_CFLAGS=$QEMU_CFLAGS" >> $config_host_mak
5163echo "QEMU_INCLUDES=$QEMU_INCLUDES" >> $config_host_mak
5164if test "$sparse" = "yes" ; then
5165  echo "CC           := REAL_CC=\"\$(CC)\" cgcc"       >> $config_host_mak
5166  echo "CPP          := REAL_CC=\"\$(CPP)\" cgcc"      >> $config_host_mak
5167  echo "CXX          := REAL_CC=\"\$(CXX)\" cgcc"      >> $config_host_mak
5168  echo "HOST_CC      := REAL_CC=\"\$(HOST_CC)\" cgcc"  >> $config_host_mak
5169  echo "QEMU_CFLAGS  += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_host_mak
5170fi
5171if test "$cross_prefix" != ""; then
5172  echo "AUTOCONF_HOST := --host=${cross_prefix%-}"     >> $config_host_mak
5173else
5174  echo "AUTOCONF_HOST := "                             >> $config_host_mak
5175fi
5176echo "LDFLAGS=$LDFLAGS" >> $config_host_mak
5177echo "LDFLAGS_NOPIE=$LDFLAGS_NOPIE" >> $config_host_mak
5178echo "LIBTOOLFLAGS=$LIBTOOLFLAGS" >> $config_host_mak
5179echo "LIBS+=$LIBS" >> $config_host_mak
5180echo "LIBS_TOOLS+=$libs_tools" >> $config_host_mak
5181echo "EXESUF=$EXESUF" >> $config_host_mak
5182echo "DSOSUF=$DSOSUF" >> $config_host_mak
5183echo "LDFLAGS_SHARED=$LDFLAGS_SHARED" >> $config_host_mak
5184echo "LIBS_QGA+=$libs_qga" >> $config_host_mak
5185echo "POD2MAN=$POD2MAN" >> $config_host_mak
5186echo "TRANSLATE_OPT_CFLAGS=$TRANSLATE_OPT_CFLAGS" >> $config_host_mak
5187if test "$gcov" = "yes" ; then
5188  echo "CONFIG_GCOV=y" >> $config_host_mak
5189  echo "GCOV=$gcov_tool" >> $config_host_mak
5190fi
5191
5192# use included Linux headers
5193if test "$linux" = "yes" ; then
5194  mkdir -p linux-headers
5195  case "$cpu" in
5196  i386|x86_64|x32)
5197    linux_arch=x86
5198    ;;
5199  ppcemb|ppc|ppc64)
5200    linux_arch=powerpc
5201    ;;
5202  s390x)
5203    linux_arch=s390
5204    ;;
5205  aarch64)
5206    linux_arch=arm64
5207    ;;
5208  mips64)
5209    linux_arch=mips
5210    ;;
5211  *)
5212    # For most CPUs the kernel architecture name and QEMU CPU name match.
5213    linux_arch="$cpu"
5214    ;;
5215  esac
5216    # For non-KVM architectures we will not have asm headers
5217    if [ -e "$source_path/linux-headers/asm-$linux_arch" ]; then
5218      symlink "$source_path/linux-headers/asm-$linux_arch" linux-headers/asm
5219    fi
5220fi
5221
5222for target in $target_list; do
5223target_dir="$target"
5224config_target_mak=$target_dir/config-target.mak
5225target_name=`echo $target | cut -d '-' -f 1`
5226target_bigendian="no"
5227
5228case "$target_name" in
5229  armeb|lm32|m68k|microblaze|mips|mipsn32|mips64|moxie|or32|ppc|ppcemb|ppc64|ppc64abi32|s390x|sh4eb|sparc|sparc64|sparc32plus|xtensaeb)
5230  target_bigendian=yes
5231  ;;
5232esac
5233target_softmmu="no"
5234target_user_only="no"
5235target_linux_user="no"
5236target_bsd_user="no"
5237case "$target" in
5238  ${target_name}-softmmu)
5239    target_softmmu="yes"
5240    ;;
5241  ${target_name}-linux-user)
5242    if test "$linux" != "yes" ; then
5243      error_exit "Target '$target' is only available on a Linux host"
5244    fi
5245    target_user_only="yes"
5246    target_linux_user="yes"
5247    ;;
5248  ${target_name}-bsd-user)
5249    if test "$bsd" != "yes" ; then
5250      error_exit "Target '$target' is only available on a BSD host"
5251    fi
5252    target_user_only="yes"
5253    target_bsd_user="yes"
5254    ;;
5255  *)
5256    error_exit "Target '$target' not recognised"
5257    exit 1
5258    ;;
5259esac
5260
5261mkdir -p $target_dir
5262echo "# Automatically generated by configure - do not modify" > $config_target_mak
5263
5264bflt="no"
5265interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_name/g"`
5266gdb_xml_files=""
5267
5268TARGET_ARCH="$target_name"
5269TARGET_BASE_ARCH=""
5270TARGET_ABI_DIR=""
5271
5272case "$target_name" in
5273  i386)
5274  ;;
5275  x86_64)
5276    TARGET_BASE_ARCH=i386
5277  ;;
5278  alpha)
5279  ;;
5280  arm|armeb)
5281    TARGET_ARCH=arm
5282    bflt="yes"
5283    gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5284  ;;
5285  aarch64)
5286    TARGET_BASE_ARCH=arm
5287    bflt="yes"
5288    gdb_xml_files="aarch64-core.xml aarch64-fpu.xml arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
5289  ;;
5290  cris)
5291  ;;
5292  lm32)
5293  ;;
5294  m68k)
5295    bflt="yes"
5296    gdb_xml_files="cf-core.xml cf-fp.xml"
5297  ;;
5298  microblaze|microblazeel)
5299    TARGET_ARCH=microblaze
5300    bflt="yes"
5301  ;;
5302  mips|mipsel)
5303    TARGET_ARCH=mips
5304    echo "TARGET_ABI_MIPSO32=y" >> $config_target_mak
5305  ;;
5306  mipsn32|mipsn32el)
5307    TARGET_ARCH=mips64
5308    TARGET_BASE_ARCH=mips
5309    echo "TARGET_ABI_MIPSN32=y" >> $config_target_mak
5310    echo "TARGET_ABI32=y" >> $config_target_mak
5311  ;;
5312  mips64|mips64el)
5313    TARGET_ARCH=mips64
5314    TARGET_BASE_ARCH=mips
5315    echo "TARGET_ABI_MIPSN64=y" >> $config_target_mak
5316  ;;
5317  moxie)
5318  ;;
5319  or32)
5320    TARGET_ARCH=openrisc
5321    TARGET_BASE_ARCH=openrisc
5322  ;;
5323  ppc)
5324    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5325  ;;
5326  ppcemb)
5327    TARGET_BASE_ARCH=ppc
5328    TARGET_ABI_DIR=ppc
5329    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5330  ;;
5331  ppc64)
5332    TARGET_BASE_ARCH=ppc
5333    TARGET_ABI_DIR=ppc
5334    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5335  ;;
5336  ppc64le)
5337    TARGET_ARCH=ppc64
5338    TARGET_BASE_ARCH=ppc
5339    TARGET_ABI_DIR=ppc
5340    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5341  ;;
5342  ppc64abi32)
5343    TARGET_ARCH=ppc64
5344    TARGET_BASE_ARCH=ppc
5345    TARGET_ABI_DIR=ppc
5346    echo "TARGET_ABI32=y" >> $config_target_mak
5347    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
5348  ;;
5349  sh4|sh4eb)
5350    TARGET_ARCH=sh4
5351    bflt="yes"
5352  ;;
5353  sparc)
5354  ;;
5355  sparc64)
5356    TARGET_BASE_ARCH=sparc
5357  ;;
5358  sparc32plus)
5359    TARGET_ARCH=sparc64
5360    TARGET_BASE_ARCH=sparc
5361    TARGET_ABI_DIR=sparc
5362    echo "TARGET_ABI32=y" >> $config_target_mak
5363  ;;
5364  s390x)
5365    gdb_xml_files="s390x-core64.xml s390-acr.xml s390-fpr.xml s390-vx.xml"
5366  ;;
5367  tricore)
5368  ;;
5369  unicore32)
5370  ;;
5371  xtensa|xtensaeb)
5372    TARGET_ARCH=xtensa
5373  ;;
5374  *)
5375    error_exit "Unsupported target CPU"
5376  ;;
5377esac
5378# TARGET_BASE_ARCH needs to be defined after TARGET_ARCH
5379if [ "$TARGET_BASE_ARCH" = "" ]; then
5380  TARGET_BASE_ARCH=$TARGET_ARCH
5381fi
5382
5383symlink "$source_path/Makefile.target" "$target_dir/Makefile"
5384
5385upper() {
5386    echo "$@"| LC_ALL=C tr '[a-z]' '[A-Z]'
5387}
5388
5389target_arch_name="`upper $TARGET_ARCH`"
5390echo "TARGET_$target_arch_name=y" >> $config_target_mak
5391echo "TARGET_NAME=$target_name" >> $config_target_mak
5392echo "TARGET_BASE_ARCH=$TARGET_BASE_ARCH" >> $config_target_mak
5393if [ "$TARGET_ABI_DIR" = "" ]; then
5394  TARGET_ABI_DIR=$TARGET_ARCH
5395fi
5396echo "TARGET_ABI_DIR=$TARGET_ABI_DIR" >> $config_target_mak
5397if [ "$HOST_VARIANT_DIR" != "" ]; then
5398    echo "HOST_VARIANT_DIR=$HOST_VARIANT_DIR" >> $config_target_mak
5399fi
5400case "$target_name" in
5401  i386|x86_64)
5402    if test "$xen" = "yes" -a "$target_softmmu" = "yes" ; then
5403      echo "CONFIG_XEN=y" >> $config_target_mak
5404      if test "$xen_pci_passthrough" = yes; then
5405        echo "CONFIG_XEN_PCI_PASSTHROUGH=y" >> "$config_target_mak"
5406      fi
5407    fi
5408    ;;
5409  *)
5410esac
5411case "$target_name" in
5412  aarch64|arm|i386|x86_64|ppcemb|ppc|ppc64|s390x|mipsel|mips)
5413    # Make sure the target and host cpus are compatible
5414    if test "$kvm" = "yes" -a "$target_softmmu" = "yes" -a \
5415      \( "$target_name" = "$cpu" -o \
5416      \( "$target_name" = "ppcemb" -a "$cpu" = "ppc" \) -o \
5417      \( "$target_name" = "ppc64"  -a "$cpu" = "ppc" \) -o \
5418      \( "$target_name" = "ppc"    -a "$cpu" = "ppc64" \) -o \
5419      \( "$target_name" = "ppcemb" -a "$cpu" = "ppc64" \) -o \
5420      \( "$target_name" = "mipsel" -a "$cpu" = "mips" \) -o \
5421      \( "$target_name" = "x86_64" -a "$cpu" = "i386"   \) -o \
5422      \( "$target_name" = "i386"   -a "$cpu" = "x86_64" \) -o \
5423      \( "$target_name" = "x86_64" -a "$cpu" = "x32"   \) -o \
5424      \( "$target_name" = "i386"   -a "$cpu" = "x32" \) \) ; then
5425      echo "CONFIG_KVM=y" >> $config_target_mak
5426      if test "$vhost_net" = "yes" ; then
5427        echo "CONFIG_VHOST_NET=y" >> $config_target_mak
5428      fi
5429    fi
5430esac
5431if test "$target_bigendian" = "yes" ; then
5432  echo "TARGET_WORDS_BIGENDIAN=y" >> $config_target_mak
5433fi
5434if test "$target_softmmu" = "yes" ; then
5435  echo "CONFIG_SOFTMMU=y" >> $config_target_mak
5436fi
5437if test "$target_user_only" = "yes" ; then
5438  echo "CONFIG_USER_ONLY=y" >> $config_target_mak
5439  echo "CONFIG_QEMU_INTERP_PREFIX=\"$interp_prefix1\"" >> $config_target_mak
5440fi
5441if test "$target_linux_user" = "yes" ; then
5442  echo "CONFIG_LINUX_USER=y" >> $config_target_mak
5443fi
5444list=""
5445if test ! -z "$gdb_xml_files" ; then
5446  for x in $gdb_xml_files; do
5447    list="$list $source_path/gdb-xml/$x"
5448  done
5449  echo "TARGET_XML_FILES=$list" >> $config_target_mak
5450fi
5451
5452if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
5453  echo "TARGET_HAS_BFLT=y" >> $config_target_mak
5454fi
5455if test "$target_user_only" = "yes" -a "$guest_base" = "yes"; then
5456  echo "CONFIG_USE_GUEST_BASE=y" >> $config_target_mak
5457fi
5458if test "$target_bsd_user" = "yes" ; then
5459  echo "CONFIG_BSD_USER=y" >> $config_target_mak
5460fi
5461
5462# generate QEMU_CFLAGS/LDFLAGS for targets
5463
5464cflags=""
5465ldflags=""
5466
5467for i in $ARCH $TARGET_BASE_ARCH ; do
5468  case "$i" in
5469  alpha)
5470    echo "CONFIG_ALPHA_DIS=y"  >> $config_target_mak
5471    echo "CONFIG_ALPHA_DIS=y"  >> config-all-disas.mak
5472  ;;
5473  aarch64)
5474    if test -n "${cxx}"; then
5475      echo "CONFIG_ARM_A64_DIS=y"  >> $config_target_mak
5476      echo "CONFIG_ARM_A64_DIS=y"  >> config-all-disas.mak
5477    fi
5478  ;;
5479  arm)
5480    echo "CONFIG_ARM_DIS=y"  >> $config_target_mak
5481    echo "CONFIG_ARM_DIS=y"  >> config-all-disas.mak
5482    if test -n "${cxx}"; then
5483      echo "CONFIG_ARM_A64_DIS=y"  >> $config_target_mak
5484      echo "CONFIG_ARM_A64_DIS=y"  >> config-all-disas.mak
5485    fi
5486  ;;
5487  cris)
5488    echo "CONFIG_CRIS_DIS=y"  >> $config_target_mak
5489    echo "CONFIG_CRIS_DIS=y"  >> config-all-disas.mak
5490  ;;
5491  hppa)
5492    echo "CONFIG_HPPA_DIS=y"  >> $config_target_mak
5493    echo "CONFIG_HPPA_DIS=y"  >> config-all-disas.mak
5494  ;;
5495  i386|x86_64|x32)
5496    echo "CONFIG_I386_DIS=y"  >> $config_target_mak
5497    echo "CONFIG_I386_DIS=y"  >> config-all-disas.mak
5498  ;;
5499  ia64*)
5500    echo "CONFIG_IA64_DIS=y"  >> $config_target_mak
5501    echo "CONFIG_IA64_DIS=y"  >> config-all-disas.mak
5502  ;;
5503  lm32)
5504    echo "CONFIG_LM32_DIS=y"  >> $config_target_mak
5505    echo "CONFIG_LM32_DIS=y"  >> config-all-disas.mak
5506  ;;
5507  m68k)
5508    echo "CONFIG_M68K_DIS=y"  >> $config_target_mak
5509    echo "CONFIG_M68K_DIS=y"  >> config-all-disas.mak
5510  ;;
5511  microblaze*)
5512    echo "CONFIG_MICROBLAZE_DIS=y"  >> $config_target_mak
5513    echo "CONFIG_MICROBLAZE_DIS=y"  >> config-all-disas.mak
5514  ;;
5515  mips*)
5516    echo "CONFIG_MIPS_DIS=y"  >> $config_target_mak
5517    echo "CONFIG_MIPS_DIS=y"  >> config-all-disas.mak
5518  ;;
5519  moxie*)
5520    echo "CONFIG_MOXIE_DIS=y"  >> $config_target_mak
5521    echo "CONFIG_MOXIE_DIS=y"  >> config-all-disas.mak
5522  ;;
5523  or32)
5524    echo "CONFIG_OPENRISC_DIS=y"  >> $config_target_mak
5525    echo "CONFIG_OPENRISC_DIS=y"  >> config-all-disas.mak
5526  ;;
5527  ppc*)
5528    echo "CONFIG_PPC_DIS=y"  >> $config_target_mak
5529    echo "CONFIG_PPC_DIS=y"  >> config-all-disas.mak
5530  ;;
5531  s390*)
5532    echo "CONFIG_S390_DIS=y"  >> $config_target_mak
5533    echo "CONFIG_S390_DIS=y"  >> config-all-disas.mak
5534  ;;
5535  sh4)
5536    echo "CONFIG_SH4_DIS=y"  >> $config_target_mak
5537    echo "CONFIG_SH4_DIS=y"  >> config-all-disas.mak
5538  ;;
5539  sparc*)
5540    echo "CONFIG_SPARC_DIS=y"  >> $config_target_mak
5541    echo "CONFIG_SPARC_DIS=y"  >> config-all-disas.mak
5542  ;;
5543  xtensa*)
5544    echo "CONFIG_XTENSA_DIS=y"  >> $config_target_mak
5545    echo "CONFIG_XTENSA_DIS=y"  >> config-all-disas.mak
5546  ;;
5547  esac
5548done
5549if test "$tcg_interpreter" = "yes" ; then
5550  echo "CONFIG_TCI_DIS=y"  >> $config_target_mak
5551  echo "CONFIG_TCI_DIS=y"  >> config-all-disas.mak
5552fi
5553
5554case "$ARCH" in
5555alpha)
5556  # Ensure there's only a single GP
5557  cflags="-msmall-data $cflags"
5558;;
5559esac
5560
5561if test "$gprof" = "yes" ; then
5562  echo "TARGET_GPROF=yes" >> $config_target_mak
5563  if test "$target_linux_user" = "yes" ; then
5564    cflags="-p $cflags"
5565    ldflags="-p $ldflags"
5566  fi
5567  if test "$target_softmmu" = "yes" ; then
5568    ldflags="-p $ldflags"
5569    echo "GPROF_CFLAGS=-p" >> $config_target_mak
5570  fi
5571fi
5572
5573if test "$target_linux_user" = "yes" -o "$target_bsd_user" = "yes" ; then
5574  ldflags="$ldflags $textseg_ldflags"
5575fi
5576
5577echo "LDFLAGS+=$ldflags" >> $config_target_mak
5578echo "QEMU_CFLAGS+=$cflags" >> $config_target_mak
5579
5580done # for target in $targets
5581
5582if [ "$pixman" = "internal" ]; then
5583  echo "config-host.h: subdir-pixman" >> $config_host_mak
5584fi
5585
5586if test "$rdma" = "yes" ; then
5587echo "CONFIG_RDMA=y" >> $config_host_mak
5588fi
5589
5590if [ "$dtc_internal" = "yes" ]; then
5591  echo "config-host.h: subdir-dtc" >> $config_host_mak
5592fi
5593
5594if test "$numa" = "yes"; then
5595  echo "CONFIG_NUMA=y" >> $config_host_mak
5596fi
5597
5598if test "$ccache_cpp2" = "yes"; then
5599  echo "export CCACHE_CPP2=y" >> $config_host_mak
5600fi
5601
5602# build tree in object directory in case the source is not in the current directory
5603DIRS="tests tests/tcg tests/tcg/cris tests/tcg/lm32 tests/libqos tests/qapi-schema tests/tcg/xtensa tests/qemu-iotests"
5604DIRS="$DIRS fsdev"
5605DIRS="$DIRS pc-bios/optionrom pc-bios/spapr-rtas pc-bios/s390-ccw"
5606DIRS="$DIRS roms/seabios roms/vgabios"
5607DIRS="$DIRS qapi-generated"
5608FILES="Makefile tests/tcg/Makefile qdict-test-data.txt"
5609FILES="$FILES tests/tcg/cris/Makefile tests/tcg/cris/.gdbinit"
5610FILES="$FILES tests/tcg/lm32/Makefile tests/tcg/xtensa/Makefile po/Makefile"
5611FILES="$FILES pc-bios/optionrom/Makefile pc-bios/keymaps"
5612FILES="$FILES pc-bios/spapr-rtas/Makefile"
5613FILES="$FILES pc-bios/s390-ccw/Makefile"
5614FILES="$FILES roms/seabios/Makefile roms/vgabios/Makefile"
5615FILES="$FILES pc-bios/qemu-icon.bmp"
5616for bios_file in \
5617    $source_path/pc-bios/*.bin \
5618    $source_path/pc-bios/*.aml \
5619    $source_path/pc-bios/*.rom \
5620    $source_path/pc-bios/*.dtb \
5621    $source_path/pc-bios/*.img \
5622    $source_path/pc-bios/openbios-* \
5623    $source_path/pc-bios/u-boot.* \
5624    $source_path/pc-bios/palcode-*
5625do
5626    FILES="$FILES pc-bios/`basename $bios_file`"
5627done
5628for test_file in `find $source_path/tests/acpi-test-data -type f`
5629do
5630    FILES="$FILES tests/acpi-test-data`echo $test_file | sed -e 's/.*acpi-test-data//'`"
5631done
5632mkdir -p $DIRS
5633for f in $FILES ; do
5634    if [ -e "$source_path/$f" ] && [ "$pwd_is_source_path" != "y" ]; then
5635        symlink "$source_path/$f" "$f"
5636    fi
5637done
5638
5639# temporary config to build submodules
5640for rom in seabios vgabios ; do
5641    config_mak=roms/$rom/config.mak
5642    echo "# Automatically generated by configure - do not modify" > $config_mak
5643    echo "SRC_PATH=$source_path/roms/$rom" >> $config_mak
5644    echo "AS=$as" >> $config_mak
5645    echo "CC=$cc" >> $config_mak
5646    echo "BCC=bcc" >> $config_mak
5647    echo "CPP=$cpp" >> $config_mak
5648    echo "OBJCOPY=objcopy" >> $config_mak
5649    echo "IASL=$iasl" >> $config_mak
5650    echo "LD=$ld" >> $config_mak
5651done
5652
5653# set up qemu-iotests in this build directory
5654iotests_common_env="tests/qemu-iotests/common.env"
5655iotests_check="tests/qemu-iotests/check"
5656
5657echo "# Automatically generated by configure - do not modify" > "$iotests_common_env"
5658echo >> "$iotests_common_env"
5659echo "export PYTHON='$python'" >> "$iotests_common_env"
5660
5661if [ ! -e "$iotests_check" ]; then
5662    symlink "$source_path/$iotests_check" "$iotests_check"
5663fi
5664
5665# Save the configure command line for later reuse.
5666cat <<EOD >config.status
5667#!/bin/sh
5668# Generated by configure.
5669# Run this file to recreate the current configuration.
5670# Compiler output produced by configure, useful for debugging
5671# configure, is in config.log if it exists.
5672EOD
5673printf "exec" >>config.status
5674printf " '%s'" "$0" "$@" >>config.status
5675echo >>config.status
5676chmod +x config.status
5677
5678rm -r "$TMPDIR1"
5679