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