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