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