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