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