configure: Enable test and libs for zstd
[qemu.git] / configure
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.
8 CLICOLOR_FORCE= GREP_OPTIONS=
9 unset CLICOLOR_FORCE GREP_OPTIONS
10
11 # Don't allow CCACHE, if present, to use cached results of compile tests!
12 export 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.)
19 TMPDIR1="config-temp"
20 rm -rf "${TMPDIR1}"
21 mkdir -p "${TMPDIR1}"
22 if [ $? -ne 0 ]; then
23     echo "ERROR: failed to create temporary directory"
24     exit 1
25 fi
26
27 TMPB="qemu-conf"
28 TMPC="${TMPDIR1}/${TMPB}.c"
29 TMPO="${TMPDIR1}/${TMPB}.o"
30 TMPCXX="${TMPDIR1}/${TMPB}.cxx"
31 TMPE="${TMPDIR1}/${TMPB}.exe"
32 TMPMO="${TMPDIR1}/${TMPB}.mo"
33 TMPTXT="${TMPDIR1}/${TMPB}.txt"
34
35 rm -f config.log
36
37 # Print a helpful header at the top of config.log
38 echo "# QEMU configure log $(date)" >> config.log
39 printf "# Configured with:" >> config.log
40 printf " '%s'" "$0" "$@" >> config.log
41 echo >> config.log
42 echo "#" >> config.log
43
44 print_error() {
45     (echo
46     echo "ERROR: $1"
47     while test -n "$2"; do
48         echo "       $2"
49         shift
50     done
51     echo) >&2
52 }
53
54 error_exit() {
55     print_error "$@"
56     exit 1
57 }
58
59 do_compiler() {
60     # Run the compiler, capturing its output to the log. First argument
61     # is compiler binary to execute.
62     local compiler="$1"
63     shift
64     if test -n "$BASH_VERSION"; then eval '
65         echo >>config.log "
66 funcs: ${FUNCNAME[*]}
67 lines: ${BASH_LINENO[*]}"
68     '; fi
69     echo $compiler "$@" >> config.log
70     $compiler "$@" >> config.log 2>&1 || return $?
71     # Test passed. If this is an --enable-werror build, rerun
72     # the test with -Werror and bail out if it fails. This
73     # makes warning-generating-errors in configure test code
74     # obvious to developers.
75     if test "$werror" != "yes"; then
76         return 0
77     fi
78     # Don't bother rerunning the compile if we were already using -Werror
79     case "$*" in
80         *-Werror*)
81            return 0
82         ;;
83     esac
84     echo $compiler -Werror "$@" >> config.log
85     $compiler -Werror "$@" >> config.log 2>&1 && return $?
86     error_exit "configure test passed without -Werror but failed with -Werror." \
87         "This is probably a bug in the configure script. The failing command" \
88         "will be at the bottom of config.log." \
89         "You can run configure with --disable-werror to bypass this check."
90 }
91
92 do_cc() {
93     do_compiler "$cc" "$@"
94 }
95
96 do_cxx() {
97     do_compiler "$cxx" "$@"
98 }
99
100 update_cxxflags() {
101     # Set QEMU_CXXFLAGS from QEMU_CFLAGS by filtering out those
102     # options which some versions of GCC's C++ compiler complain about
103     # because they only make sense for C programs.
104     QEMU_CXXFLAGS="$QEMU_CXXFLAGS -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS"
105
106     for arg in $QEMU_CFLAGS; do
107         case $arg in
108             -Wstrict-prototypes|-Wmissing-prototypes|-Wnested-externs|\
109             -Wold-style-declaration|-Wold-style-definition|-Wredundant-decls)
110                 ;;
111             -std=gnu99)
112                 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }"-std=gnu++98"
113                 ;;
114             *)
115                 QEMU_CXXFLAGS=${QEMU_CXXFLAGS:+$QEMU_CXXFLAGS }$arg
116                 ;;
117         esac
118     done
119 }
120
121 compile_object() {
122   local_cflags="$1"
123   do_cc $QEMU_CFLAGS $local_cflags -c -o $TMPO $TMPC
124 }
125
126 compile_prog() {
127   local_cflags="$1"
128   local_ldflags="$2"
129   do_cc $QEMU_CFLAGS $local_cflags -o $TMPE $TMPC $QEMU_LDFLAGS $local_ldflags
130 }
131
132 # symbolically link $1 to $2.  Portable version of "ln -sf".
133 symlink() {
134   rm -rf "$2"
135   mkdir -p "$(dirname "$2")"
136   ln -s "$1" "$2"
137 }
138
139 # check whether a command is available to this shell (may be either an
140 # executable or a builtin)
141 has() {
142     type "$1" >/dev/null 2>&1
143 }
144
145 # search for an executable in PATH
146 path_of() {
147     local_command="$1"
148     local_ifs="$IFS"
149     local_dir=""
150
151     # pathname has a dir component?
152     if [ "${local_command#*/}" != "$local_command" ]; then
153         if [ -x "$local_command" ] && [ ! -d "$local_command" ]; then
154             echo "$local_command"
155             return 0
156         fi
157     fi
158     if [ -z "$local_command" ]; then
159         return 1
160     fi
161
162     IFS=:
163     for local_dir in $PATH; do
164         if [ -x "$local_dir/$local_command" ] && [ ! -d "$local_dir/$local_command" ]; then
165             echo "$local_dir/$local_command"
166             IFS="${local_ifs:-$(printf ' \t\n')}"
167             return 0
168         fi
169     done
170     # not found
171     IFS="${local_ifs:-$(printf ' \t\n')}"
172     return 1
173 }
174
175 have_backend () {
176     echo "$trace_backends" | grep "$1" >/dev/null
177 }
178
179 glob() {
180     eval test -z '"${1#'"$2"'}"'
181 }
182
183 supported_hax_target() {
184     test "$hax" = "yes" || return 1
185     glob "$1" "*-softmmu" || return 1
186     case "${1%-softmmu}" in
187         i386|x86_64)
188             return 0
189         ;;
190     esac
191     return 1
192 }
193
194 supported_kvm_target() {
195     test "$kvm" = "yes" || return 1
196     glob "$1" "*-softmmu" || return 1
197     case "${1%-softmmu}:$cpu" in
198         arm:arm | aarch64:aarch64 | \
199         i386:i386 | i386:x86_64 | i386:x32 | \
200         x86_64:i386 | x86_64:x86_64 | x86_64:x32 | \
201         mips:mips | mipsel:mips | \
202         ppc:ppc | ppc64:ppc | ppc:ppc64 | ppc64:ppc64 | ppc64:ppc64le | \
203         s390x:s390x)
204             return 0
205         ;;
206     esac
207     return 1
208 }
209
210 supported_xen_target() {
211     test "$xen" = "yes" || return 1
212     glob "$1" "*-softmmu" || return 1
213     # Only i386 and x86_64 provide the xenpv machine.
214     case "${1%-softmmu}" in
215         i386|x86_64)
216             return 0
217         ;;
218     esac
219     return 1
220 }
221
222 supported_hvf_target() {
223     test "$hvf" = "yes" || return 1
224     glob "$1" "*-softmmu" || return 1
225     case "${1%-softmmu}" in
226         x86_64)
227             return 0
228         ;;
229     esac
230     return 1
231 }
232
233 supported_whpx_target() {
234     test "$whpx" = "yes" || return 1
235     glob "$1" "*-softmmu" || return 1
236     case "${1%-softmmu}" in
237         i386|x86_64)
238             return 0
239         ;;
240     esac
241     return 1
242 }
243
244 supported_target() {
245     case "$1" in
246         *-softmmu)
247             ;;
248         *-linux-user)
249             if test "$linux" != "yes"; then
250                 print_error "Target '$target' is only available on a Linux host"
251                 return 1
252             fi
253             ;;
254         *-bsd-user)
255             if test "$bsd" != "yes"; then
256                 print_error "Target '$target' is only available on a BSD host"
257                 return 1
258             fi
259             ;;
260         *)
261             print_error "Invalid target name '$target'"
262             return 1
263             ;;
264     esac
265     test "$tcg" = "yes" && return 0
266     supported_kvm_target "$1" && return 0
267     supported_xen_target "$1" && return 0
268     supported_hax_target "$1" && return 0
269     supported_hvf_target "$1" && return 0
270     supported_whpx_target "$1" && return 0
271     print_error "TCG disabled, but hardware accelerator not available for '$target'"
272     return 1
273 }
274
275
276 ld_has() {
277     $ld --help 2>/dev/null | grep ".$1" >/dev/null 2>&1
278 }
279
280 # make source path absolute
281 source_path=$(cd "$(dirname -- "$0")"; pwd)
282
283 if printf %s\\n "$source_path" "$PWD" | grep -q "[[:space:]:]";
284 then
285   error_exit "main directory cannot contain spaces nor colons"
286 fi
287
288 # default parameters
289 cpu=""
290 iasl="iasl"
291 interp_prefix="/usr/gnemul/qemu-%M"
292 static="no"
293 cross_prefix=""
294 audio_drv_list=""
295 block_drv_rw_whitelist=""
296 block_drv_ro_whitelist=""
297 host_cc="cc"
298 libs_cpu=""
299 libs_softmmu=""
300 libs_tools=""
301 audio_win_int=""
302 libs_qga=""
303 debug_info="yes"
304 stack_protector=""
305 use_containers="yes"
306
307 if test -e "$source_path/.git"
308 then
309     git_update=yes
310     git_submodules="ui/keycodemapdb"
311     git_submodules="$git_submodules tests/fp/berkeley-testfloat-3"
312     git_submodules="$git_submodules tests/fp/berkeley-softfloat-3"
313 else
314     git_update=no
315     git_submodules=""
316
317     if ! test -f "$source_path/ui/keycodemapdb/README"
318     then
319         echo
320         echo "ERROR: missing file $source_path/ui/keycodemapdb/README"
321         echo
322         echo "This is not a GIT checkout but module content appears to"
323         echo "be missing. Do not use 'git archive' or GitHub download links"
324         echo "to acquire QEMU source archives. Non-GIT builds are only"
325         echo "supported with source archives linked from:"
326         echo
327         echo "  https://www.qemu.org/download/#source"
328         echo
329         echo "Developers working with GIT can use scripts/archive-source.sh"
330         echo "if they need to create valid source archives."
331         echo
332         exit 1
333     fi
334 fi
335 git="git"
336
337 # Don't accept a target_list environment variable.
338 unset target_list
339 unset target_list_exclude
340
341 # Default value for a variable defining feature "foo".
342 #  * foo="no"  feature will only be used if --enable-foo arg is given
343 #  * foo=""    feature will be searched for, and if found, will be used
344 #              unless --disable-foo is given
345 #  * foo="yes" this value will only be set by --enable-foo flag.
346 #              feature will searched for,
347 #              if not found, configure exits with error
348 #
349 # Always add --enable-foo and --disable-foo command line args.
350 # Distributions want to ensure that several features are compiled in, and it
351 # is impossible without a --enable-foo that exits if a feature is not found.
352
353 brlapi=""
354 curl=""
355 curses=""
356 docs=""
357 fdt=""
358 netmap="no"
359 sdl=""
360 sdl_image=""
361 virtfs=""
362 mpath=""
363 vnc="yes"
364 sparse="no"
365 vde=""
366 vnc_sasl=""
367 vnc_jpeg=""
368 vnc_png=""
369 xkbcommon=""
370 xen=""
371 xen_ctrl_version=""
372 xen_pci_passthrough=""
373 linux_aio=""
374 linux_io_uring=""
375 cap_ng=""
376 attr=""
377 libattr=""
378 xfs=""
379 tcg="yes"
380 membarrier=""
381 vhost_net=""
382 vhost_crypto=""
383 vhost_scsi=""
384 vhost_vsock=""
385 vhost_user=""
386 vhost_user_fs=""
387 kvm="no"
388 hax="no"
389 hvf="no"
390 whpx="no"
391 rdma=""
392 pvrdma=""
393 gprof="no"
394 debug_tcg="no"
395 debug="no"
396 sanitizers="no"
397 fortify_source=""
398 strip_opt="yes"
399 tcg_interpreter="no"
400 bigendian="no"
401 mingw32="no"
402 gcov="no"
403 gcov_tool="gcov"
404 EXESUF=""
405 DSOSUF=".so"
406 LDFLAGS_SHARED="-shared"
407 modules="no"
408 prefix="/usr/local"
409 mandir="\${prefix}/share/man"
410 datadir="\${prefix}/share"
411 firmwarepath="\${prefix}/share/qemu-firmware"
412 qemu_docdir="\${prefix}/share/doc/qemu"
413 bindir="\${prefix}/bin"
414 libdir="\${prefix}/lib"
415 libexecdir="\${prefix}/libexec"
416 includedir="\${prefix}/include"
417 sysconfdir="\${prefix}/etc"
418 local_statedir="\${prefix}/var"
419 confsuffix="/qemu"
420 slirp=""
421 oss_lib=""
422 bsd="no"
423 linux="no"
424 solaris="no"
425 profiler="no"
426 cocoa="no"
427 softmmu="yes"
428 linux_user="no"
429 bsd_user="no"
430 blobs="yes"
431 edk2_blobs="no"
432 pkgversion=""
433 pie=""
434 qom_cast_debug="yes"
435 trace_backends="log"
436 trace_file="trace"
437 spice=""
438 rbd=""
439 smartcard=""
440 libusb=""
441 usb_redir=""
442 opengl=""
443 opengl_dmabuf="no"
444 cpuid_h="no"
445 avx2_opt=""
446 zlib="yes"
447 capstone=""
448 lzo=""
449 snappy=""
450 bzip2=""
451 lzfse=""
452 zstd=""
453 guest_agent=""
454 guest_agent_with_vss="no"
455 guest_agent_ntddscsi="no"
456 guest_agent_msi=""
457 vss_win32_sdk=""
458 win_sdk="no"
459 want_tools=""
460 libiscsi=""
461 libnfs=""
462 coroutine=""
463 coroutine_pool=""
464 debug_stack_usage="no"
465 crypto_afalg="no"
466 seccomp=""
467 glusterfs=""
468 glusterfs_xlator_opt="no"
469 glusterfs_discard="no"
470 glusterfs_fallocate="no"
471 glusterfs_zerofill="no"
472 glusterfs_ftruncate_has_stat="no"
473 glusterfs_iocb_has_stat="no"
474 gtk=""
475 gtk_gl="no"
476 tls_priority="NORMAL"
477 gnutls=""
478 nettle=""
479 nettle_xts="no"
480 gcrypt=""
481 gcrypt_hmac="no"
482 gcrypt_xts="no"
483 qemu_private_xts="yes"
484 auth_pam=""
485 vte=""
486 virglrenderer=""
487 tpm=""
488 libssh=""
489 live_block_migration="yes"
490 numa=""
491 tcmalloc="no"
492 jemalloc="no"
493 replication="yes"
494 vxhs=""
495 bochs="yes"
496 cloop="yes"
497 dmg="yes"
498 qcow1="yes"
499 vdi="yes"
500 vvfat="yes"
501 qed="yes"
502 parallels="yes"
503 sheepdog="yes"
504 libxml2=""
505 debug_mutex="no"
506 libpmem=""
507 default_devices="yes"
508 plugins="no"
509 fuzzing="no"
510
511 supported_cpu="no"
512 supported_os="no"
513 bogus_os="no"
514 malloc_trim=""
515
516 # parse CC options first
517 for opt do
518   optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
519   case "$opt" in
520   --cross-prefix=*) cross_prefix="$optarg"
521   ;;
522   --cc=*) CC="$optarg"
523   ;;
524   --cxx=*) CXX="$optarg"
525   ;;
526   --cpu=*) cpu="$optarg"
527   ;;
528   --extra-cflags=*) QEMU_CFLAGS="$QEMU_CFLAGS $optarg"
529                     QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
530   ;;
531   --extra-cxxflags=*) QEMU_CXXFLAGS="$QEMU_CXXFLAGS $optarg"
532   ;;
533   --extra-ldflags=*) QEMU_LDFLAGS="$QEMU_LDFLAGS $optarg"
534                      EXTRA_LDFLAGS="$optarg"
535   ;;
536   --enable-debug-info) debug_info="yes"
537   ;;
538   --disable-debug-info) debug_info="no"
539   ;;
540   --cross-cc-*[!a-zA-Z0-9_-]*=*) error_exit "Passed bad --cross-cc-FOO option"
541   ;;
542   --cross-cc-cflags-*) cc_arch=${opt#--cross-cc-flags-}; cc_arch=${cc_arch%%=*}
543                       eval "cross_cc_cflags_${cc_arch}=\$optarg"
544                       cross_cc_vars="$cross_cc_vars cross_cc_cflags_${cc_arch}"
545   ;;
546   --cross-cc-*) cc_arch=${opt#--cross-cc-}; cc_arch=${cc_arch%%=*}
547                 cc_archs="$cc_archs $cc_arch"
548                 eval "cross_cc_${cc_arch}=\$optarg"
549                 cross_cc_vars="$cross_cc_vars cross_cc_${cc_arch}"
550   ;;
551   esac
552 done
553 # OS specific
554 # Using uname is really, really broken.  Once we have the right set of checks
555 # we can eliminate its usage altogether.
556
557 # Preferred compiler:
558 #  ${CC} (if set)
559 #  ${cross_prefix}gcc (if cross-prefix specified)
560 #  system compiler
561 if test -z "${CC}${cross_prefix}"; then
562   cc="$host_cc"
563 else
564   cc="${CC-${cross_prefix}gcc}"
565 fi
566
567 if test -z "${CXX}${cross_prefix}"; then
568   cxx="c++"
569 else
570   cxx="${CXX-${cross_prefix}g++}"
571 fi
572
573 ar="${AR-${cross_prefix}ar}"
574 as="${AS-${cross_prefix}as}"
575 ccas="${CCAS-$cc}"
576 cpp="${CPP-$cc -E}"
577 objcopy="${OBJCOPY-${cross_prefix}objcopy}"
578 ld="${LD-${cross_prefix}ld}"
579 ranlib="${RANLIB-${cross_prefix}ranlib}"
580 nm="${NM-${cross_prefix}nm}"
581 strip="${STRIP-${cross_prefix}strip}"
582 windres="${WINDRES-${cross_prefix}windres}"
583 pkg_config_exe="${PKG_CONFIG-${cross_prefix}pkg-config}"
584 query_pkg_config() {
585     "${pkg_config_exe}" ${QEMU_PKG_CONFIG_FLAGS} "$@"
586 }
587 pkg_config=query_pkg_config
588 sdl2_config="${SDL2_CONFIG-${cross_prefix}sdl2-config}"
589
590 # If the user hasn't specified ARFLAGS, default to 'rv', just as make does.
591 ARFLAGS="${ARFLAGS-rv}"
592
593 # default flags for all hosts
594 # We use -fwrapv to tell the compiler that we require a C dialect where
595 # left shift of signed integers is well defined and has the expected
596 # 2s-complement style results. (Both clang and gcc agree that it
597 # provides these semantics.)
598 QEMU_CFLAGS="-fno-strict-aliasing -fno-common -fwrapv -std=gnu99 $QEMU_CFLAGS"
599 QEMU_CFLAGS="-Wall -Wundef -Wwrite-strings -Wmissing-prototypes $QEMU_CFLAGS"
600 QEMU_CFLAGS="-Wstrict-prototypes -Wredundant-decls $QEMU_CFLAGS"
601 QEMU_CFLAGS="-D_GNU_SOURCE -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE $QEMU_CFLAGS"
602 QEMU_INCLUDES="-iquote . -iquote \$(SRC_PATH) -iquote \$(SRC_PATH)/accel/tcg -iquote \$(SRC_PATH)/include"
603 QEMU_INCLUDES="$QEMU_INCLUDES -iquote \$(SRC_PATH)/disas/libvixl"
604 if test "$debug_info" = "yes"; then
605     CFLAGS="-g $CFLAGS"
606 fi
607
608 # running configure in the source tree?
609 # we know that's the case if configure is there.
610 if test -f "./configure"; then
611     pwd_is_source_path="y"
612 else
613     pwd_is_source_path="n"
614 fi
615
616 check_define() {
617 cat > $TMPC <<EOF
618 #if !defined($1)
619 #error $1 not defined
620 #endif
621 int main(void) { return 0; }
622 EOF
623   compile_object
624 }
625
626 check_include() {
627 cat > $TMPC <<EOF
628 #include <$1>
629 int main(void) { return 0; }
630 EOF
631   compile_object
632 }
633
634 write_c_skeleton() {
635     cat > $TMPC <<EOF
636 int main(void) { return 0; }
637 EOF
638 }
639
640 write_c_fuzzer_skeleton() {
641     cat > $TMPC <<EOF
642 #include <stdint.h>
643 #include <sys/types.h>
644 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size);
645 int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { return 0; }
646 EOF
647 }
648
649 if check_define __linux__ ; then
650   targetos="Linux"
651 elif check_define _WIN32 ; then
652   targetos='MINGW32'
653 elif check_define __OpenBSD__ ; then
654   targetos='OpenBSD'
655 elif check_define __sun__ ; then
656   targetos='SunOS'
657 elif check_define __HAIKU__ ; then
658   targetos='Haiku'
659 elif check_define __FreeBSD__ ; then
660   targetos='FreeBSD'
661 elif check_define __FreeBSD_kernel__ && check_define __GLIBC__; then
662   targetos='GNU/kFreeBSD'
663 elif check_define __DragonFly__ ; then
664   targetos='DragonFly'
665 elif check_define __NetBSD__; then
666   targetos='NetBSD'
667 elif check_define __APPLE__; then
668   targetos='Darwin'
669 else
670   # This is a fatal error, but don't report it yet, because we
671   # might be going to just print the --help text, or it might
672   # be the result of a missing compiler.
673   targetos='bogus'
674   bogus_os='yes'
675 fi
676
677 # Some host OSes need non-standard checks for which CPU to use.
678 # Note that these checks are broken for cross-compilation: if you're
679 # cross-compiling to one of these OSes then you'll need to specify
680 # the correct CPU with the --cpu option.
681 case $targetos in
682 Darwin)
683   # on Leopard most of the system is 32-bit, so we have to ask the kernel if we can
684   # run 64-bit userspace code.
685   # If the user didn't specify a CPU explicitly and the kernel says this is
686   # 64 bit hw, then assume x86_64. Otherwise fall through to the usual detection code.
687   if test -z "$cpu" && test "$(sysctl -n hw.optional.x86_64)" = "1"; then
688     cpu="x86_64"
689   fi
690   ;;
691 SunOS)
692   # $(uname -m) returns i86pc even on an x86_64 box, so default based on isainfo
693   if test -z "$cpu" && test "$(isainfo -k)" = "amd64"; then
694     cpu="x86_64"
695   fi
696 esac
697
698 if test ! -z "$cpu" ; then
699   # command line argument
700   :
701 elif check_define __i386__ ; then
702   cpu="i386"
703 elif check_define __x86_64__ ; then
704   if check_define __ILP32__ ; then
705     cpu="x32"
706   else
707     cpu="x86_64"
708   fi
709 elif check_define __sparc__ ; then
710   if check_define __arch64__ ; then
711     cpu="sparc64"
712   else
713     cpu="sparc"
714   fi
715 elif check_define _ARCH_PPC ; then
716   if check_define _ARCH_PPC64 ; then
717     if check_define _LITTLE_ENDIAN ; then
718       cpu="ppc64le"
719     else
720       cpu="ppc64"
721     fi
722   else
723     cpu="ppc"
724   fi
725 elif check_define __mips__ ; then
726   cpu="mips"
727 elif check_define __s390__ ; then
728   if check_define __s390x__ ; then
729     cpu="s390x"
730   else
731     cpu="s390"
732   fi
733 elif check_define __riscv ; then
734   if check_define _LP64 ; then
735     cpu="riscv64"
736   else
737     cpu="riscv32"
738   fi
739 elif check_define __arm__ ; then
740   cpu="arm"
741 elif check_define __aarch64__ ; then
742   cpu="aarch64"
743 else
744   cpu=$(uname -m)
745 fi
746
747 ARCH=
748 # Normalise host CPU name and set ARCH.
749 # Note that this case should only have supported host CPUs, not guests.
750 case "$cpu" in
751   ppc|ppc64|s390x|sparc64|x32|riscv32|riscv64)
752     supported_cpu="yes"
753   ;;
754   ppc64le)
755     ARCH="ppc64"
756     supported_cpu="yes"
757   ;;
758   i386|i486|i586|i686|i86pc|BePC)
759     cpu="i386"
760     supported_cpu="yes"
761   ;;
762   x86_64|amd64)
763     cpu="x86_64"
764     supported_cpu="yes"
765   ;;
766   armv*b|armv*l|arm)
767     cpu="arm"
768     supported_cpu="yes"
769   ;;
770   aarch64)
771     cpu="aarch64"
772     supported_cpu="yes"
773   ;;
774   mips*)
775     cpu="mips"
776     supported_cpu="yes"
777   ;;
778   sparc|sun4[cdmuv])
779     cpu="sparc"
780     supported_cpu="yes"
781   ;;
782   *)
783     # This will result in either an error or falling back to TCI later
784     ARCH=unknown
785   ;;
786 esac
787 if test -z "$ARCH"; then
788   ARCH="$cpu"
789 fi
790
791 # OS specific
792
793 # host *BSD for user mode
794 HOST_VARIANT_DIR=""
795
796 case $targetos in
797 MINGW32*)
798   mingw32="yes"
799   hax="yes"
800   vhost_user="no"
801   audio_possible_drivers="dsound sdl"
802   if check_include dsound.h; then
803     audio_drv_list="dsound"
804   else
805     audio_drv_list=""
806   fi
807   supported_os="yes"
808 ;;
809 GNU/kFreeBSD)
810   bsd="yes"
811   audio_drv_list="oss try-sdl"
812   audio_possible_drivers="oss sdl pa"
813 ;;
814 FreeBSD)
815   bsd="yes"
816   make="${MAKE-gmake}"
817   audio_drv_list="oss try-sdl"
818   audio_possible_drivers="oss sdl pa"
819   # needed for kinfo_getvmmap(3) in libutil.h
820   LIBS="-lutil $LIBS"
821   # needed for kinfo_getproc
822   libs_qga="-lutil $libs_qga"
823   netmap=""  # enable netmap autodetect
824   HOST_VARIANT_DIR="freebsd"
825   supported_os="yes"
826 ;;
827 DragonFly)
828   bsd="yes"
829   make="${MAKE-gmake}"
830   audio_drv_list="oss try-sdl"
831   audio_possible_drivers="oss sdl pa"
832   HOST_VARIANT_DIR="dragonfly"
833 ;;
834 NetBSD)
835   bsd="yes"
836   hax="yes"
837   make="${MAKE-gmake}"
838   audio_drv_list="oss try-sdl"
839   audio_possible_drivers="oss sdl"
840   oss_lib="-lossaudio"
841   HOST_VARIANT_DIR="netbsd"
842   supported_os="yes"
843 ;;
844 OpenBSD)
845   bsd="yes"
846   make="${MAKE-gmake}"
847   audio_drv_list="try-sdl"
848   audio_possible_drivers="sdl"
849   HOST_VARIANT_DIR="openbsd"
850   supported_os="yes"
851 ;;
852 Darwin)
853   bsd="yes"
854   darwin="yes"
855   hax="yes"
856   hvf="yes"
857   LDFLAGS_SHARED="-bundle -undefined dynamic_lookup"
858   if [ "$cpu" = "x86_64" ] ; then
859     QEMU_CFLAGS="-arch x86_64 $QEMU_CFLAGS"
860     QEMU_LDFLAGS="-arch x86_64 $QEMU_LDFLAGS"
861   fi
862   cocoa="yes"
863   audio_drv_list="coreaudio try-sdl"
864   audio_possible_drivers="coreaudio sdl"
865   QEMU_LDFLAGS="-framework CoreFoundation -framework IOKit $QEMU_LDFLAGS"
866   libs_softmmu="-F/System/Library/Frameworks -framework Cocoa -framework IOKit $libs_softmmu"
867   # Disable attempts to use ObjectiveC features in os/object.h since they
868   # won't work when we're compiling with gcc as a C compiler.
869   QEMU_CFLAGS="-DOS_OBJECT_USE_OBJC=0 $QEMU_CFLAGS"
870   HOST_VARIANT_DIR="darwin"
871   supported_os="yes"
872 ;;
873 SunOS)
874   solaris="yes"
875   make="${MAKE-gmake}"
876   install="${INSTALL-ginstall}"
877   smbd="${SMBD-/usr/sfw/sbin/smbd}"
878   if test -f /usr/include/sys/soundcard.h ; then
879     audio_drv_list="oss try-sdl"
880   fi
881   audio_possible_drivers="oss sdl"
882 # needed for CMSG_ macros in sys/socket.h
883   QEMU_CFLAGS="-D_XOPEN_SOURCE=600 $QEMU_CFLAGS"
884 # needed for TIOCWIN* defines in termios.h
885   QEMU_CFLAGS="-D__EXTENSIONS__ $QEMU_CFLAGS"
886   QEMU_CFLAGS="-std=gnu99 $QEMU_CFLAGS"
887   solarisnetlibs="-lsocket -lnsl -lresolv"
888   LIBS="$solarisnetlibs $LIBS"
889   libs_qga="$solarisnetlibs $libs_qga"
890 ;;
891 Haiku)
892   haiku="yes"
893   QEMU_CFLAGS="-DB_USE_POSITIVE_POSIX_ERRORS $QEMU_CFLAGS"
894   LIBS="-lposix_error_mapper -lnetwork $LIBS"
895 ;;
896 Linux)
897   audio_drv_list="try-pa oss"
898   audio_possible_drivers="oss alsa sdl pa"
899   linux="yes"
900   linux_user="yes"
901   kvm="yes"
902   QEMU_INCLUDES="-I\$(SRC_PATH)/linux-headers -I$PWD/linux-headers $QEMU_INCLUDES"
903   supported_os="yes"
904   libudev="yes"
905 ;;
906 esac
907
908 if [ "$bsd" = "yes" ] ; then
909   if [ "$darwin" != "yes" ] ; then
910     bsd_user="yes"
911   fi
912 fi
913
914 : ${make=${MAKE-make}}
915 : ${install=${INSTALL-install}}
916 # We prefer python 3.x. A bare 'python' is traditionally
917 # python 2.x, but some distros have it as python 3.x, so
918 # we check that too
919 python=
920 for binary in "${PYTHON-python3}" python
921 do
922     if has "$binary"
923     then
924         python=$(command -v "$binary")
925         break
926     fi
927 done
928
929 sphinx_build=
930 for binary in sphinx-build-3 sphinx-build
931 do
932     if has "$binary"
933     then
934         sphinx_build=$(command -v "$binary")
935         break
936     fi
937 done
938
939 : ${smbd=${SMBD-/usr/sbin/smbd}}
940
941 # Default objcc to clang if available, otherwise use CC
942 if has clang; then
943   objcc=clang
944 else
945   objcc="$cc"
946 fi
947
948 if test "$mingw32" = "yes" ; then
949   EXESUF=".exe"
950   DSOSUF=".dll"
951   # MinGW needs -mthreads for TLS and macro _MT.
952   QEMU_CFLAGS="-mthreads $QEMU_CFLAGS"
953   LIBS="-lwinmm -lws2_32 $LIBS"
954   write_c_skeleton;
955   if compile_prog "" "-liberty" ; then
956     LIBS="-liberty $LIBS"
957   fi
958   prefix="c:/Program Files/QEMU"
959   mandir="\${prefix}"
960   datadir="\${prefix}"
961   qemu_docdir="\${prefix}"
962   bindir="\${prefix}"
963   sysconfdir="\${prefix}"
964   local_statedir=
965   confsuffix=""
966   libs_qga="-lws2_32 -lwinmm -lpowrprof -lwtsapi32 -lwininet -liphlpapi -lnetapi32 $libs_qga"
967 fi
968
969 werror=""
970
971 for opt do
972   optarg=$(expr "x$opt" : 'x[^=]*=\(.*\)')
973   case "$opt" in
974   --help|-h) show_help=yes
975   ;;
976   --version|-V) exec cat $source_path/VERSION
977   ;;
978   --prefix=*) prefix="$optarg"
979   ;;
980   --interp-prefix=*) interp_prefix="$optarg"
981   ;;
982   --cross-prefix=*)
983   ;;
984   --cc=*)
985   ;;
986   --host-cc=*) host_cc="$optarg"
987   ;;
988   --cxx=*)
989   ;;
990   --iasl=*) iasl="$optarg"
991   ;;
992   --objcc=*) objcc="$optarg"
993   ;;
994   --make=*) make="$optarg"
995   ;;
996   --install=*) install="$optarg"
997   ;;
998   --python=*) python="$optarg"
999   ;;
1000   --sphinx-build=*) sphinx_build="$optarg"
1001   ;;
1002   --gcov=*) gcov_tool="$optarg"
1003   ;;
1004   --smbd=*) smbd="$optarg"
1005   ;;
1006   --extra-cflags=*)
1007   ;;
1008   --extra-cxxflags=*)
1009   ;;
1010   --extra-ldflags=*)
1011   ;;
1012   --enable-debug-info)
1013   ;;
1014   --disable-debug-info)
1015   ;;
1016   --cross-cc-*)
1017   ;;
1018   --enable-modules)
1019       modules="yes"
1020   ;;
1021   --disable-modules)
1022       modules="no"
1023   ;;
1024   --cpu=*)
1025   ;;
1026   --target-list=*) target_list="$optarg"
1027                    if test "$target_list_exclude"; then
1028                        error_exit "Can't mix --target-list with --target-list-exclude"
1029                    fi
1030   ;;
1031   --target-list-exclude=*) target_list_exclude="$optarg"
1032                    if test "$target_list"; then
1033                        error_exit "Can't mix --target-list-exclude with --target-list"
1034                    fi
1035   ;;
1036   --enable-trace-backends=*) trace_backends="$optarg"
1037   ;;
1038   # XXX: backwards compatibility
1039   --enable-trace-backend=*) trace_backends="$optarg"
1040   ;;
1041   --with-trace-file=*) trace_file="$optarg"
1042   ;;
1043   --with-default-devices) default_devices="yes"
1044   ;;
1045   --without-default-devices) default_devices="no"
1046   ;;
1047   --enable-gprof) gprof="yes"
1048   ;;
1049   --enable-gcov) gcov="yes"
1050   ;;
1051   --static)
1052     static="yes"
1053     QEMU_LDFLAGS="-static $QEMU_LDFLAGS"
1054     QEMU_PKG_CONFIG_FLAGS="--static $QEMU_PKG_CONFIG_FLAGS"
1055   ;;
1056   --mandir=*) mandir="$optarg"
1057   ;;
1058   --bindir=*) bindir="$optarg"
1059   ;;
1060   --libdir=*) libdir="$optarg"
1061   ;;
1062   --libexecdir=*) libexecdir="$optarg"
1063   ;;
1064   --includedir=*) includedir="$optarg"
1065   ;;
1066   --datadir=*) datadir="$optarg"
1067   ;;
1068   --with-confsuffix=*) confsuffix="$optarg"
1069   ;;
1070   --docdir=*) qemu_docdir="$optarg"
1071   ;;
1072   --sysconfdir=*) sysconfdir="$optarg"
1073   ;;
1074   --localstatedir=*) local_statedir="$optarg"
1075   ;;
1076   --firmwarepath=*) firmwarepath="$optarg"
1077   ;;
1078   --host=*|--build=*|\
1079   --disable-dependency-tracking|\
1080   --sbindir=*|--sharedstatedir=*|\
1081   --oldincludedir=*|--datarootdir=*|--infodir=*|--localedir=*|\
1082   --htmldir=*|--dvidir=*|--pdfdir=*|--psdir=*)
1083     # These switches are silently ignored, for compatibility with
1084     # autoconf-generated configure scripts. This allows QEMU's
1085     # configure to be used by RPM and similar macros that set
1086     # lots of directory switches by default.
1087   ;;
1088   --disable-sdl) sdl="no"
1089   ;;
1090   --enable-sdl) sdl="yes"
1091   ;;
1092   --disable-sdl-image) sdl_image="no"
1093   ;;
1094   --enable-sdl-image) sdl_image="yes"
1095   ;;
1096   --disable-qom-cast-debug) qom_cast_debug="no"
1097   ;;
1098   --enable-qom-cast-debug) qom_cast_debug="yes"
1099   ;;
1100   --disable-virtfs) virtfs="no"
1101   ;;
1102   --enable-virtfs) virtfs="yes"
1103   ;;
1104   --disable-mpath) mpath="no"
1105   ;;
1106   --enable-mpath) mpath="yes"
1107   ;;
1108   --disable-vnc) vnc="no"
1109   ;;
1110   --enable-vnc) vnc="yes"
1111   ;;
1112   --oss-lib=*) oss_lib="$optarg"
1113   ;;
1114   --audio-drv-list=*) audio_drv_list="$optarg"
1115   ;;
1116   --block-drv-rw-whitelist=*|--block-drv-whitelist=*) block_drv_rw_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1117   ;;
1118   --block-drv-ro-whitelist=*) block_drv_ro_whitelist=$(echo "$optarg" | sed -e 's/,/ /g')
1119   ;;
1120   --enable-debug-tcg) debug_tcg="yes"
1121   ;;
1122   --disable-debug-tcg) debug_tcg="no"
1123   ;;
1124   --enable-debug)
1125       # Enable debugging options that aren't excessively noisy
1126       debug_tcg="yes"
1127       debug_mutex="yes"
1128       debug="yes"
1129       strip_opt="no"
1130       fortify_source="no"
1131   ;;
1132   --enable-sanitizers) sanitizers="yes"
1133   ;;
1134   --disable-sanitizers) sanitizers="no"
1135   ;;
1136   --enable-sparse) sparse="yes"
1137   ;;
1138   --disable-sparse) sparse="no"
1139   ;;
1140   --disable-strip) strip_opt="no"
1141   ;;
1142   --disable-vnc-sasl) vnc_sasl="no"
1143   ;;
1144   --enable-vnc-sasl) vnc_sasl="yes"
1145   ;;
1146   --disable-vnc-jpeg) vnc_jpeg="no"
1147   ;;
1148   --enable-vnc-jpeg) vnc_jpeg="yes"
1149   ;;
1150   --disable-vnc-png) vnc_png="no"
1151   ;;
1152   --enable-vnc-png) vnc_png="yes"
1153   ;;
1154   --disable-slirp) slirp="no"
1155   ;;
1156   --enable-slirp=git) slirp="git"
1157   ;;
1158   --enable-slirp=system) slirp="system"
1159   ;;
1160   --disable-vde) vde="no"
1161   ;;
1162   --enable-vde) vde="yes"
1163   ;;
1164   --disable-netmap) netmap="no"
1165   ;;
1166   --enable-netmap) netmap="yes"
1167   ;;
1168   --disable-xen) xen="no"
1169   ;;
1170   --enable-xen) xen="yes"
1171   ;;
1172   --disable-xen-pci-passthrough) xen_pci_passthrough="no"
1173   ;;
1174   --enable-xen-pci-passthrough) xen_pci_passthrough="yes"
1175   ;;
1176   --disable-brlapi) brlapi="no"
1177   ;;
1178   --enable-brlapi) brlapi="yes"
1179   ;;
1180   --disable-kvm) kvm="no"
1181   ;;
1182   --enable-kvm) kvm="yes"
1183   ;;
1184   --disable-hax) hax="no"
1185   ;;
1186   --enable-hax) hax="yes"
1187   ;;
1188   --disable-hvf) hvf="no"
1189   ;;
1190   --enable-hvf) hvf="yes"
1191   ;;
1192   --disable-whpx) whpx="no"
1193   ;;
1194   --enable-whpx) whpx="yes"
1195   ;;
1196   --disable-tcg-interpreter) tcg_interpreter="no"
1197   ;;
1198   --enable-tcg-interpreter) tcg_interpreter="yes"
1199   ;;
1200   --disable-cap-ng)  cap_ng="no"
1201   ;;
1202   --enable-cap-ng) cap_ng="yes"
1203   ;;
1204   --disable-tcg) tcg="no"
1205   ;;
1206   --enable-tcg) tcg="yes"
1207   ;;
1208   --disable-malloc-trim) malloc_trim="no"
1209   ;;
1210   --enable-malloc-trim) malloc_trim="yes"
1211   ;;
1212   --disable-spice) spice="no"
1213   ;;
1214   --enable-spice) spice="yes"
1215   ;;
1216   --disable-libiscsi) libiscsi="no"
1217   ;;
1218   --enable-libiscsi) libiscsi="yes"
1219   ;;
1220   --disable-libnfs) libnfs="no"
1221   ;;
1222   --enable-libnfs) libnfs="yes"
1223   ;;
1224   --enable-profiler) profiler="yes"
1225   ;;
1226   --disable-cocoa) cocoa="no"
1227   ;;
1228   --enable-cocoa)
1229       cocoa="yes" ;
1230       audio_drv_list="coreaudio $(echo $audio_drv_list | sed s,coreaudio,,g)"
1231   ;;
1232   --disable-system) softmmu="no"
1233   ;;
1234   --enable-system) softmmu="yes"
1235   ;;
1236   --disable-user)
1237       linux_user="no" ;
1238       bsd_user="no" ;
1239   ;;
1240   --enable-user) ;;
1241   --disable-linux-user) linux_user="no"
1242   ;;
1243   --enable-linux-user) linux_user="yes"
1244   ;;
1245   --disable-bsd-user) bsd_user="no"
1246   ;;
1247   --enable-bsd-user) bsd_user="yes"
1248   ;;
1249   --enable-pie) pie="yes"
1250   ;;
1251   --disable-pie) pie="no"
1252   ;;
1253   --enable-werror) werror="yes"
1254   ;;
1255   --disable-werror) werror="no"
1256   ;;
1257   --enable-stack-protector) stack_protector="yes"
1258   ;;
1259   --disable-stack-protector) stack_protector="no"
1260   ;;
1261   --disable-curses) curses="no"
1262   ;;
1263   --enable-curses) curses="yes"
1264   ;;
1265   --disable-iconv) iconv="no"
1266   ;;
1267   --enable-iconv) iconv="yes"
1268   ;;
1269   --disable-curl) curl="no"
1270   ;;
1271   --enable-curl) curl="yes"
1272   ;;
1273   --disable-fdt) fdt="no"
1274   ;;
1275   --enable-fdt) fdt="yes"
1276   ;;
1277   --disable-linux-aio) linux_aio="no"
1278   ;;
1279   --enable-linux-aio) linux_aio="yes"
1280   ;;
1281   --disable-linux-io-uring) linux_io_uring="no"
1282   ;;
1283   --enable-linux-io-uring) linux_io_uring="yes"
1284   ;;
1285   --disable-attr) attr="no"
1286   ;;
1287   --enable-attr) attr="yes"
1288   ;;
1289   --disable-membarrier) membarrier="no"
1290   ;;
1291   --enable-membarrier) membarrier="yes"
1292   ;;
1293   --disable-blobs) blobs="no"
1294   ;;
1295   --with-pkgversion=*) pkgversion="$optarg"
1296   ;;
1297   --with-coroutine=*) coroutine="$optarg"
1298   ;;
1299   --disable-coroutine-pool) coroutine_pool="no"
1300   ;;
1301   --enable-coroutine-pool) coroutine_pool="yes"
1302   ;;
1303   --enable-debug-stack-usage) debug_stack_usage="yes"
1304   ;;
1305   --enable-crypto-afalg) crypto_afalg="yes"
1306   ;;
1307   --disable-crypto-afalg) crypto_afalg="no"
1308   ;;
1309   --disable-docs) docs="no"
1310   ;;
1311   --enable-docs) docs="yes"
1312   ;;
1313   --disable-vhost-net) vhost_net="no"
1314   ;;
1315   --enable-vhost-net) vhost_net="yes"
1316   ;;
1317   --disable-vhost-crypto) vhost_crypto="no"
1318   ;;
1319   --enable-vhost-crypto) vhost_crypto="yes"
1320   ;;
1321   --disable-vhost-scsi) vhost_scsi="no"
1322   ;;
1323   --enable-vhost-scsi) vhost_scsi="yes"
1324   ;;
1325   --disable-vhost-vsock) vhost_vsock="no"
1326   ;;
1327   --enable-vhost-vsock) vhost_vsock="yes"
1328   ;;
1329   --disable-vhost-user-fs) vhost_user_fs="no"
1330   ;;
1331   --enable-vhost-user-fs) vhost_user_fs="yes"
1332   ;;
1333   --disable-opengl) opengl="no"
1334   ;;
1335   --enable-opengl) opengl="yes"
1336   ;;
1337   --disable-rbd) rbd="no"
1338   ;;
1339   --enable-rbd) rbd="yes"
1340   ;;
1341   --disable-xfsctl) xfs="no"
1342   ;;
1343   --enable-xfsctl) xfs="yes"
1344   ;;
1345   --disable-smartcard) smartcard="no"
1346   ;;
1347   --enable-smartcard) smartcard="yes"
1348   ;;
1349   --disable-libusb) libusb="no"
1350   ;;
1351   --enable-libusb) libusb="yes"
1352   ;;
1353   --disable-usb-redir) usb_redir="no"
1354   ;;
1355   --enable-usb-redir) usb_redir="yes"
1356   ;;
1357   --disable-zlib-test) zlib="no"
1358   ;;
1359   --disable-lzo) lzo="no"
1360   ;;
1361   --enable-lzo) lzo="yes"
1362   ;;
1363   --disable-snappy) snappy="no"
1364   ;;
1365   --enable-snappy) snappy="yes"
1366   ;;
1367   --disable-bzip2) bzip2="no"
1368   ;;
1369   --enable-bzip2) bzip2="yes"
1370   ;;
1371   --enable-lzfse) lzfse="yes"
1372   ;;
1373   --disable-lzfse) lzfse="no"
1374   ;;
1375   --disable-zstd) zstd="no"
1376   ;;
1377   --enable-zstd) zstd="yes"
1378   ;;
1379   --enable-guest-agent) guest_agent="yes"
1380   ;;
1381   --disable-guest-agent) guest_agent="no"
1382   ;;
1383   --enable-guest-agent-msi) guest_agent_msi="yes"
1384   ;;
1385   --disable-guest-agent-msi) guest_agent_msi="no"
1386   ;;
1387   --with-vss-sdk) vss_win32_sdk=""
1388   ;;
1389   --with-vss-sdk=*) vss_win32_sdk="$optarg"
1390   ;;
1391   --without-vss-sdk) vss_win32_sdk="no"
1392   ;;
1393   --with-win-sdk) win_sdk=""
1394   ;;
1395   --with-win-sdk=*) win_sdk="$optarg"
1396   ;;
1397   --without-win-sdk) win_sdk="no"
1398   ;;
1399   --enable-tools) want_tools="yes"
1400   ;;
1401   --disable-tools) want_tools="no"
1402   ;;
1403   --enable-seccomp) seccomp="yes"
1404   ;;
1405   --disable-seccomp) seccomp="no"
1406   ;;
1407   --disable-glusterfs) glusterfs="no"
1408   ;;
1409   --disable-avx2) avx2_opt="no"
1410   ;;
1411   --enable-avx2) avx2_opt="yes"
1412   ;;
1413   --enable-glusterfs) glusterfs="yes"
1414   ;;
1415   --disable-virtio-blk-data-plane|--enable-virtio-blk-data-plane)
1416       echo "$0: $opt is obsolete, virtio-blk data-plane is always on" >&2
1417   ;;
1418   --enable-vhdx|--disable-vhdx)
1419       echo "$0: $opt is obsolete, VHDX driver is always built" >&2
1420   ;;
1421   --enable-uuid|--disable-uuid)
1422       echo "$0: $opt is obsolete, UUID support is always built" >&2
1423   ;;
1424   --disable-gtk) gtk="no"
1425   ;;
1426   --enable-gtk) gtk="yes"
1427   ;;
1428   --tls-priority=*) tls_priority="$optarg"
1429   ;;
1430   --disable-gnutls) gnutls="no"
1431   ;;
1432   --enable-gnutls) gnutls="yes"
1433   ;;
1434   --disable-nettle) nettle="no"
1435   ;;
1436   --enable-nettle) nettle="yes"
1437   ;;
1438   --disable-gcrypt) gcrypt="no"
1439   ;;
1440   --enable-gcrypt) gcrypt="yes"
1441   ;;
1442   --disable-auth-pam) auth_pam="no"
1443   ;;
1444   --enable-auth-pam) auth_pam="yes"
1445   ;;
1446   --enable-rdma) rdma="yes"
1447   ;;
1448   --disable-rdma) rdma="no"
1449   ;;
1450   --enable-pvrdma) pvrdma="yes"
1451   ;;
1452   --disable-pvrdma) pvrdma="no"
1453   ;;
1454   --disable-vte) vte="no"
1455   ;;
1456   --enable-vte) vte="yes"
1457   ;;
1458   --disable-virglrenderer) virglrenderer="no"
1459   ;;
1460   --enable-virglrenderer) virglrenderer="yes"
1461   ;;
1462   --disable-tpm) tpm="no"
1463   ;;
1464   --enable-tpm) tpm="yes"
1465   ;;
1466   --disable-libssh) libssh="no"
1467   ;;
1468   --enable-libssh) libssh="yes"
1469   ;;
1470   --disable-live-block-migration) live_block_migration="no"
1471   ;;
1472   --enable-live-block-migration) live_block_migration="yes"
1473   ;;
1474   --disable-numa) numa="no"
1475   ;;
1476   --enable-numa) numa="yes"
1477   ;;
1478   --disable-libxml2) libxml2="no"
1479   ;;
1480   --enable-libxml2) libxml2="yes"
1481   ;;
1482   --disable-tcmalloc) tcmalloc="no"
1483   ;;
1484   --enable-tcmalloc) tcmalloc="yes"
1485   ;;
1486   --disable-jemalloc) jemalloc="no"
1487   ;;
1488   --enable-jemalloc) jemalloc="yes"
1489   ;;
1490   --disable-replication) replication="no"
1491   ;;
1492   --enable-replication) replication="yes"
1493   ;;
1494   --disable-vxhs) vxhs="no"
1495   ;;
1496   --enable-vxhs) vxhs="yes"
1497   ;;
1498   --disable-bochs) bochs="no"
1499   ;;
1500   --enable-bochs) bochs="yes"
1501   ;;
1502   --disable-cloop) cloop="no"
1503   ;;
1504   --enable-cloop) cloop="yes"
1505   ;;
1506   --disable-dmg) dmg="no"
1507   ;;
1508   --enable-dmg) dmg="yes"
1509   ;;
1510   --disable-qcow1) qcow1="no"
1511   ;;
1512   --enable-qcow1) qcow1="yes"
1513   ;;
1514   --disable-vdi) vdi="no"
1515   ;;
1516   --enable-vdi) vdi="yes"
1517   ;;
1518   --disable-vvfat) vvfat="no"
1519   ;;
1520   --enable-vvfat) vvfat="yes"
1521   ;;
1522   --disable-qed) qed="no"
1523   ;;
1524   --enable-qed) qed="yes"
1525   ;;
1526   --disable-parallels) parallels="no"
1527   ;;
1528   --enable-parallels) parallels="yes"
1529   ;;
1530   --disable-sheepdog) sheepdog="no"
1531   ;;
1532   --enable-sheepdog) sheepdog="yes"
1533   ;;
1534   --disable-vhost-user) vhost_user="no"
1535   ;;
1536   --enable-vhost-user) vhost_user="yes"
1537   ;;
1538   --disable-vhost-kernel) vhost_kernel="no"
1539   ;;
1540   --enable-vhost-kernel) vhost_kernel="yes"
1541   ;;
1542   --disable-capstone) capstone="no"
1543   ;;
1544   --enable-capstone) capstone="yes"
1545   ;;
1546   --enable-capstone=git) capstone="git"
1547   ;;
1548   --enable-capstone=system) capstone="system"
1549   ;;
1550   --with-git=*) git="$optarg"
1551   ;;
1552   --enable-git-update) git_update=yes
1553   ;;
1554   --disable-git-update) git_update=no
1555   ;;
1556   --enable-debug-mutex) debug_mutex=yes
1557   ;;
1558   --disable-debug-mutex) debug_mutex=no
1559   ;;
1560   --enable-libpmem) libpmem=yes
1561   ;;
1562   --disable-libpmem) libpmem=no
1563   ;;
1564   --enable-xkbcommon) xkbcommon=yes
1565   ;;
1566   --disable-xkbcommon) xkbcommon=no
1567   ;;
1568   --enable-plugins) plugins="yes"
1569   ;;
1570   --disable-plugins) plugins="no"
1571   ;;
1572   --enable-containers) use_containers="yes"
1573   ;;
1574   --disable-containers) use_containers="no"
1575   ;;
1576   --enable-fuzzing) fuzzing=yes
1577   ;;
1578   --disable-fuzzing) fuzzing=no
1579   ;;
1580   *)
1581       echo "ERROR: unknown option $opt"
1582       echo "Try '$0 --help' for more information"
1583       exit 1
1584   ;;
1585   esac
1586 done
1587
1588 case "$cpu" in
1589     ppc)
1590            CPU_CFLAGS="-m32"
1591            QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1592            ;;
1593     ppc64)
1594            CPU_CFLAGS="-m64"
1595            QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1596            ;;
1597     sparc)
1598            CPU_CFLAGS="-m32 -mv8plus -mcpu=ultrasparc"
1599            QEMU_LDFLAGS="-m32 -mv8plus $QEMU_LDFLAGS"
1600            ;;
1601     sparc64)
1602            CPU_CFLAGS="-m64 -mcpu=ultrasparc"
1603            QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1604            ;;
1605     s390)
1606            CPU_CFLAGS="-m31"
1607            QEMU_LDFLAGS="-m31 $QEMU_LDFLAGS"
1608            ;;
1609     s390x)
1610            CPU_CFLAGS="-m64"
1611            QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1612            ;;
1613     i386)
1614            CPU_CFLAGS="-m32"
1615            QEMU_LDFLAGS="-m32 $QEMU_LDFLAGS"
1616            ;;
1617     x86_64)
1618            # ??? Only extremely old AMD cpus do not have cmpxchg16b.
1619            # If we truly care, we should simply detect this case at
1620            # runtime and generate the fallback to serial emulation.
1621            CPU_CFLAGS="-m64 -mcx16"
1622            QEMU_LDFLAGS="-m64 $QEMU_LDFLAGS"
1623            ;;
1624     x32)
1625            CPU_CFLAGS="-mx32"
1626            QEMU_LDFLAGS="-mx32 $QEMU_LDFLAGS"
1627            ;;
1628     # No special flags required for other host CPUs
1629 esac
1630
1631 eval "cross_cc_${cpu}=\$host_cc"
1632 cross_cc_vars="$cross_cc_vars cross_cc_${cpu}"
1633 QEMU_CFLAGS="$CPU_CFLAGS $QEMU_CFLAGS"
1634
1635 # For user-mode emulation the host arch has to be one we explicitly
1636 # support, even if we're using TCI.
1637 if [ "$ARCH" = "unknown" ]; then
1638   bsd_user="no"
1639   linux_user="no"
1640 fi
1641
1642 default_target_list=""
1643
1644 mak_wilds=""
1645
1646 if [ "$softmmu" = "yes" ]; then
1647     mak_wilds="${mak_wilds} $source_path/default-configs/*-softmmu.mak"
1648 fi
1649 if [ "$linux_user" = "yes" ]; then
1650     mak_wilds="${mak_wilds} $source_path/default-configs/*-linux-user.mak"
1651 fi
1652 if [ "$bsd_user" = "yes" ]; then
1653     mak_wilds="${mak_wilds} $source_path/default-configs/*-bsd-user.mak"
1654 fi
1655
1656 if test -z "$target_list_exclude"; then
1657     for config in $mak_wilds; do
1658         default_target_list="${default_target_list} $(basename "$config" .mak)"
1659     done
1660 else
1661     exclude_list=$(echo "$target_list_exclude" | sed -e 's/,/ /g')
1662     for config in $mak_wilds; do
1663         target="$(basename "$config" .mak)"
1664         exclude="no"
1665         for excl in $exclude_list; do
1666             if test "$excl" = "$target"; then
1667                 exclude="yes"
1668                 break;
1669             fi
1670         done
1671         if test "$exclude" = "no"; then
1672             default_target_list="${default_target_list} $target"
1673         fi
1674     done
1675 fi
1676
1677 # Enumerate public trace backends for --help output
1678 trace_backend_list=$(echo $(grep -le '^PUBLIC = True$' "$source_path"/scripts/tracetool/backend/*.py | sed -e 's/^.*\/\(.*\)\.py$/\1/'))
1679
1680 if test x"$show_help" = x"yes" ; then
1681 cat << EOF
1682
1683 Usage: configure [options]
1684 Options: [defaults in brackets after descriptions]
1685
1686 Standard options:
1687   --help                   print this message
1688   --prefix=PREFIX          install in PREFIX [$prefix]
1689   --interp-prefix=PREFIX   where to find shared libraries, etc.
1690                            use %M for cpu name [$interp_prefix]
1691   --target-list=LIST       set target list (default: build everything)
1692 $(echo Available targets: $default_target_list | \
1693   fold -s -w 53 | sed -e 's/^/                           /')
1694   --target-list-exclude=LIST exclude a set of targets from the default target-list
1695
1696 Advanced options (experts only):
1697   --cross-prefix=PREFIX    use PREFIX for compile tools [$cross_prefix]
1698   --cc=CC                  use C compiler CC [$cc]
1699   --iasl=IASL              use ACPI compiler IASL [$iasl]
1700   --host-cc=CC             use C compiler CC [$host_cc] for code run at
1701                            build time
1702   --cxx=CXX                use C++ compiler CXX [$cxx]
1703   --objcc=OBJCC            use Objective-C compiler OBJCC [$objcc]
1704   --extra-cflags=CFLAGS    append extra C compiler flags QEMU_CFLAGS
1705   --extra-cxxflags=CXXFLAGS append extra C++ compiler flags QEMU_CXXFLAGS
1706   --extra-ldflags=LDFLAGS  append extra linker flags LDFLAGS
1707   --cross-cc-ARCH=CC       use compiler when building ARCH guest test cases
1708   --cross-cc-flags-ARCH=   use compiler flags when building ARCH guest tests
1709   --make=MAKE              use specified make [$make]
1710   --install=INSTALL        use specified install [$install]
1711   --python=PYTHON          use specified python [$python]
1712   --sphinx-build=SPHINX    use specified sphinx-build [$sphinx_build]
1713   --smbd=SMBD              use specified smbd [$smbd]
1714   --with-git=GIT           use specified git [$git]
1715   --static                 enable static build [$static]
1716   --mandir=PATH            install man pages in PATH
1717   --datadir=PATH           install firmware in PATH$confsuffix
1718   --docdir=PATH            install documentation in PATH$confsuffix
1719   --bindir=PATH            install binaries in PATH
1720   --libdir=PATH            install libraries in PATH
1721   --libexecdir=PATH        install helper binaries in PATH
1722   --sysconfdir=PATH        install config in PATH$confsuffix
1723   --localstatedir=PATH     install local state in PATH (set at runtime on win32)
1724   --firmwarepath=PATH      search PATH for firmware files
1725   --with-confsuffix=SUFFIX suffix for QEMU data inside datadir/libdir/sysconfdir [$confsuffix]
1726   --with-pkgversion=VERS   use specified string as sub-version of the package
1727   --enable-debug           enable common debug build options
1728   --enable-sanitizers      enable default sanitizers
1729   --disable-strip          disable stripping binaries
1730   --disable-werror         disable compilation abort on warning
1731   --disable-stack-protector disable compiler-provided stack protection
1732   --audio-drv-list=LIST    set audio drivers list:
1733                            Available drivers: $audio_possible_drivers
1734   --block-drv-whitelist=L  Same as --block-drv-rw-whitelist=L
1735   --block-drv-rw-whitelist=L
1736                            set block driver read-write whitelist
1737                            (affects only QEMU, not qemu-img)
1738   --block-drv-ro-whitelist=L
1739                            set block driver read-only whitelist
1740                            (affects only QEMU, not qemu-img)
1741   --enable-trace-backends=B Set trace backend
1742                            Available backends: $trace_backend_list
1743   --with-trace-file=NAME   Full PATH,NAME of file to store traces
1744                            Default:trace-<pid>
1745   --disable-slirp          disable SLIRP userspace network connectivity
1746   --enable-tcg-interpreter enable TCG with bytecode interpreter (TCI)
1747   --enable-malloc-trim     enable libc malloc_trim() for memory optimization
1748   --oss-lib                path to OSS library
1749   --cpu=CPU                Build for host CPU [$cpu]
1750   --with-coroutine=BACKEND coroutine backend. Supported options:
1751                            ucontext, sigaltstack, windows
1752   --enable-gcov            enable test coverage analysis with gcov
1753   --gcov=GCOV              use specified gcov [$gcov_tool]
1754   --disable-blobs          disable installing provided firmware blobs
1755   --with-vss-sdk=SDK-path  enable Windows VSS support in QEMU Guest Agent
1756   --with-win-sdk=SDK-path  path to Windows Platform SDK (to build VSS .tlb)
1757   --tls-priority           default TLS protocol/cipher priority string
1758   --enable-gprof           QEMU profiling with gprof
1759   --enable-profiler        profiler support
1760   --enable-debug-stack-usage
1761                            track the maximum stack usage of stacks created by qemu_alloc_stack
1762   --enable-plugins
1763                            enable plugins via shared library loading
1764   --disable-containers     don't use containers for cross-building
1765
1766 Optional features, enabled with --enable-FEATURE and
1767 disabled with --disable-FEATURE, default is enabled if available:
1768
1769   system          all system emulation targets
1770   user            supported user emulation targets
1771   linux-user      all linux usermode emulation targets
1772   bsd-user        all BSD usermode emulation targets
1773   docs            build documentation
1774   guest-agent     build the QEMU Guest Agent
1775   guest-agent-msi build guest agent Windows MSI installation package
1776   pie             Position Independent Executables
1777   modules         modules support (non-Windows)
1778   debug-tcg       TCG debugging (default is disabled)
1779   debug-info      debugging information
1780   sparse          sparse checker
1781
1782   gnutls          GNUTLS cryptography support
1783   nettle          nettle cryptography support
1784   gcrypt          libgcrypt cryptography support
1785   auth-pam        PAM access control
1786   sdl             SDL UI
1787   sdl-image       SDL Image support for icons
1788   gtk             gtk UI
1789   vte             vte support for the gtk UI
1790   curses          curses UI
1791   iconv           font glyph conversion support
1792   vnc             VNC UI support
1793   vnc-sasl        SASL encryption for VNC server
1794   vnc-jpeg        JPEG lossy compression for VNC server
1795   vnc-png         PNG compression for VNC server
1796   cocoa           Cocoa UI (Mac OS X only)
1797   virtfs          VirtFS
1798   mpath           Multipath persistent reservation passthrough
1799   xen             xen backend driver support
1800   xen-pci-passthrough    PCI passthrough support for Xen
1801   brlapi          BrlAPI (Braile)
1802   curl            curl connectivity
1803   membarrier      membarrier system call (for Linux 4.14+ or Windows)
1804   fdt             fdt device tree
1805   kvm             KVM acceleration support
1806   hax             HAX acceleration support
1807   hvf             Hypervisor.framework acceleration support
1808   whpx            Windows Hypervisor Platform acceleration support
1809   rdma            Enable RDMA-based migration
1810   pvrdma          Enable PVRDMA support
1811   vde             support for vde network
1812   netmap          support for netmap network
1813   linux-aio       Linux AIO support
1814   linux-io-uring  Linux io_uring support
1815   cap-ng          libcap-ng support
1816   attr            attr and xattr support
1817   vhost-net       vhost-net kernel acceleration support
1818   vhost-vsock     virtio sockets device support
1819   vhost-scsi      vhost-scsi kernel target support
1820   vhost-crypto    vhost-user-crypto backend support
1821   vhost-kernel    vhost kernel backend support
1822   vhost-user      vhost-user backend support
1823   spice           spice
1824   rbd             rados block device (rbd)
1825   libiscsi        iscsi support
1826   libnfs          nfs support
1827   smartcard       smartcard support (libcacard)
1828   libusb          libusb (for usb passthrough)
1829   live-block-migration   Block migration in the main migration stream
1830   usb-redir       usb network redirection support
1831   lzo             support of lzo compression library
1832   snappy          support of snappy compression library
1833   bzip2           support of bzip2 compression library
1834                   (for reading bzip2-compressed dmg images)
1835   lzfse           support of lzfse compression library
1836                   (for reading lzfse-compressed dmg images)
1837   zstd            support for zstd compression library
1838                   (for migration compression)
1839   seccomp         seccomp support
1840   coroutine-pool  coroutine freelist (better performance)
1841   glusterfs       GlusterFS backend
1842   tpm             TPM support
1843   libssh          ssh block device support
1844   numa            libnuma support
1845   libxml2         for Parallels image format
1846   tcmalloc        tcmalloc support
1847   jemalloc        jemalloc support
1848   avx2            AVX2 optimization support
1849   replication     replication support
1850   opengl          opengl support
1851   virglrenderer   virgl rendering support
1852   xfsctl          xfsctl support
1853   qom-cast-debug  cast debugging support
1854   tools           build qemu-io, qemu-nbd and qemu-img tools
1855   vxhs            Veritas HyperScale vDisk backend support
1856   bochs           bochs image format support
1857   cloop           cloop image format support
1858   dmg             dmg image format support
1859   qcow1           qcow v1 image format support
1860   vdi             vdi image format support
1861   vvfat           vvfat image format support
1862   qed             qed image format support
1863   parallels       parallels image format support
1864   sheepdog        sheepdog block driver support
1865   crypto-afalg    Linux AF_ALG crypto backend driver
1866   capstone        capstone disassembler support
1867   debug-mutex     mutex debugging support
1868   libpmem         libpmem support
1869   xkbcommon       xkbcommon support
1870
1871 NOTE: The object files are built at the place where configure is launched
1872 EOF
1873 exit 0
1874 fi
1875
1876 # Remove old dependency files to make sure that they get properly regenerated
1877 rm -f */config-devices.mak.d
1878
1879 if test -z "$python"
1880 then
1881     error_exit "Python not found. Use --python=/path/to/python"
1882 fi
1883
1884 # Note that if the Python conditional here evaluates True we will exit
1885 # with status 1 which is a shell 'false' value.
1886 if ! $python -c 'import sys; sys.exit(sys.version_info < (3,5))'; then
1887   error_exit "Cannot use '$python', Python >= 3.5 is required." \
1888       "Use --python=/path/to/python to specify a supported Python."
1889 fi
1890
1891 # Preserve python version since some functionality is dependent on it
1892 python_version=$($python -c 'import sys; print("%d.%d.%d" % (sys.version_info[0], sys.version_info[1], sys.version_info[2]))' 2>/dev/null)
1893
1894 # Suppress writing compiled files
1895 python="$python -B"
1896
1897 # Check that the C compiler works. Doing this here before testing
1898 # the host CPU ensures that we had a valid CC to autodetect the
1899 # $cpu var (and we should bail right here if that's not the case).
1900 # It also allows the help message to be printed without a CC.
1901 write_c_skeleton;
1902 if compile_object ; then
1903   : C compiler works ok
1904 else
1905     error_exit "\"$cc\" either does not exist or does not work"
1906 fi
1907 if ! compile_prog ; then
1908     error_exit "\"$cc\" cannot build an executable (is your linker broken?)"
1909 fi
1910
1911 # Now we have handled --enable-tcg-interpreter and know we're not just
1912 # printing the help message, bail out if the host CPU isn't supported.
1913 if test "$ARCH" = "unknown"; then
1914     if test "$tcg_interpreter" = "yes" ; then
1915         echo "Unsupported CPU = $cpu, will use TCG with TCI (experimental)"
1916     else
1917         error_exit "Unsupported CPU = $cpu, try --enable-tcg-interpreter"
1918     fi
1919 fi
1920
1921 # Consult white-list to determine whether to enable werror
1922 # by default.  Only enable by default for git builds
1923 if test -z "$werror" ; then
1924     if test -e "$source_path/.git" && \
1925         { test "$linux" = "yes" || test "$mingw32" = "yes"; }; then
1926         werror="yes"
1927     else
1928         werror="no"
1929     fi
1930 fi
1931
1932 if test "$bogus_os" = "yes"; then
1933     # Now that we know that we're not printing the help and that
1934     # the compiler works (so the results of the check_defines we used
1935     # to identify the OS are reliable), if we didn't recognize the
1936     # host OS we should stop now.
1937     error_exit "Unrecognized host OS (uname -s reports '$(uname -s)')"
1938 fi
1939
1940 # Check whether the compiler matches our minimum requirements:
1941 cat > $TMPC << EOF
1942 #if defined(__clang_major__) && defined(__clang_minor__)
1943 # ifdef __apple_build_version__
1944 #  if __clang_major__ < 5 || (__clang_major__ == 5 && __clang_minor__ < 1)
1945 #   error You need at least XCode Clang v5.1 to compile QEMU
1946 #  endif
1947 # else
1948 #  if __clang_major__ < 3 || (__clang_major__ == 3 && __clang_minor__ < 4)
1949 #   error You need at least Clang v3.4 to compile QEMU
1950 #  endif
1951 # endif
1952 #elif defined(__GNUC__) && defined(__GNUC_MINOR__)
1953 # if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 8)
1954 #  error You need at least GCC v4.8 to compile QEMU
1955 # endif
1956 #else
1957 # error You either need GCC or Clang to compiler QEMU
1958 #endif
1959 int main (void) { return 0; }
1960 EOF
1961 if ! compile_prog "" "" ; then
1962     error_exit "You need at least GCC v4.8 or Clang v3.4 (or XCode Clang v5.1)"
1963 fi
1964
1965 gcc_flags="-Wold-style-declaration -Wold-style-definition -Wtype-limits"
1966 gcc_flags="-Wformat-security -Wformat-y2k -Winit-self -Wignored-qualifiers $gcc_flags"
1967 gcc_flags="-Wno-missing-include-dirs -Wempty-body -Wnested-externs $gcc_flags"
1968 gcc_flags="-Wendif-labels -Wno-shift-negative-value $gcc_flags"
1969 gcc_flags="-Wno-initializer-overrides -Wexpansion-to-defined $gcc_flags"
1970 gcc_flags="-Wno-string-plus-int -Wno-typedef-redefinition $gcc_flags"
1971 # Note that we do not add -Werror to gcc_flags here, because that would
1972 # enable it for all configure tests. If a configure test failed due
1973 # to -Werror this would just silently disable some features,
1974 # so it's too error prone.
1975
1976 cc_has_warning_flag() {
1977     write_c_skeleton;
1978
1979     # Use the positive sense of the flag when testing for -Wno-wombat
1980     # support (gcc will happily accept the -Wno- form of unknown
1981     # warning options).
1982     optflag="$(echo $1 | sed -e 's/^-Wno-/-W/')"
1983     compile_prog "-Werror $optflag" ""
1984 }
1985
1986 for flag in $gcc_flags; do
1987     if cc_has_warning_flag $flag ; then
1988         QEMU_CFLAGS="$QEMU_CFLAGS $flag"
1989     fi
1990 done
1991
1992 if test "$stack_protector" != "no"; then
1993   cat > $TMPC << EOF
1994 int main(int argc, char *argv[])
1995 {
1996     char arr[64], *p = arr, *c = argv[0];
1997     while (*c) {
1998         *p++ = *c++;
1999     }
2000     return 0;
2001 }
2002 EOF
2003   gcc_flags="-fstack-protector-strong -fstack-protector-all"
2004   sp_on=0
2005   for flag in $gcc_flags; do
2006     # We need to check both a compile and a link, since some compiler
2007     # setups fail only on a .c->.o compile and some only at link time
2008     if do_cc $QEMU_CFLAGS -Werror $flag -c -o $TMPO $TMPC &&
2009        compile_prog "-Werror $flag" ""; then
2010       QEMU_CFLAGS="$QEMU_CFLAGS $flag"
2011       QEMU_LDFLAGS="$QEMU_LDFLAGS $flag"
2012       sp_on=1
2013       break
2014     fi
2015   done
2016   if test "$stack_protector" = yes; then
2017     if test $sp_on = 0; then
2018       error_exit "Stack protector not supported"
2019     fi
2020   fi
2021 fi
2022
2023 # Disable -Wmissing-braces on older compilers that warn even for
2024 # the "universal" C zero initializer {0}.
2025 cat > $TMPC << EOF
2026 struct {
2027   int a[2];
2028 } x = {0};
2029 EOF
2030 if compile_object "-Werror" "" ; then
2031   :
2032 else
2033   QEMU_CFLAGS="$QEMU_CFLAGS -Wno-missing-braces"
2034 fi
2035
2036 # Our module code doesn't support Windows
2037 if test "$modules" = "yes" && test "$mingw32" = "yes" ; then
2038   error_exit "Modules are not available for Windows"
2039 fi
2040
2041 # Static linking is not possible with modules or PIE
2042 if test "$static" = "yes" ; then
2043   if test "$modules" = "yes" ; then
2044     error_exit "static and modules are mutually incompatible"
2045   fi
2046   if test "$pie" = "yes" ; then
2047     error_exit "static and pie are mutually incompatible"
2048   else
2049     pie="no"
2050   fi
2051 fi
2052
2053 # Unconditional check for compiler __thread support
2054   cat > $TMPC << EOF
2055 static __thread int tls_var;
2056 int main(void) { return tls_var; }
2057 EOF
2058
2059 if ! compile_prog "-Werror" "" ; then
2060     error_exit "Your compiler does not support the __thread specifier for " \
2061         "Thread-Local Storage (TLS). Please upgrade to a version that does."
2062 fi
2063
2064 if test "$pie" = ""; then
2065   case "$cpu-$targetos" in
2066     i386-Linux|x86_64-Linux|x32-Linux|i386-OpenBSD|x86_64-OpenBSD)
2067       ;;
2068     *)
2069       pie="no"
2070       ;;
2071   esac
2072 fi
2073
2074 if test "$pie" != "no" ; then
2075   cat > $TMPC << EOF
2076
2077 #ifdef __linux__
2078 #  define THREAD __thread
2079 #else
2080 #  define THREAD
2081 #endif
2082
2083 static THREAD int tls_var;
2084
2085 int main(void) { return tls_var; }
2086
2087 EOF
2088   # check we support --no-pie first...
2089   if compile_prog "-Werror -fno-pie" "-no-pie"; then
2090     CFLAGS_NOPIE="-fno-pie"
2091     LDFLAGS_NOPIE="-nopie"
2092   fi
2093
2094   if compile_prog "-fPIE -DPIE" "-pie"; then
2095     QEMU_CFLAGS="-fPIE -DPIE $QEMU_CFLAGS"
2096     QEMU_LDFLAGS="-pie $QEMU_LDFLAGS"
2097     pie="yes"
2098     if compile_prog "" "-Wl,-z,relro -Wl,-z,now" ; then
2099       QEMU_LDFLAGS="-Wl,-z,relro -Wl,-z,now $QEMU_LDFLAGS"
2100     fi
2101   else
2102     if test "$pie" = "yes"; then
2103       error_exit "PIE not available due to missing toolchain support"
2104     else
2105       echo "Disabling PIE due to missing toolchain support"
2106       pie="no"
2107     fi
2108   fi
2109 fi
2110
2111 ##########################################
2112 # __sync_fetch_and_and requires at least -march=i486. Many toolchains
2113 # use i686 as default anyway, but for those that don't, an explicit
2114 # specification is necessary
2115
2116 if test "$cpu" = "i386"; then
2117   cat > $TMPC << EOF
2118 static int sfaa(int *ptr)
2119 {
2120   return __sync_fetch_and_and(ptr, 0);
2121 }
2122
2123 int main(void)
2124 {
2125   int val = 42;
2126   val = __sync_val_compare_and_swap(&val, 0, 1);
2127   sfaa(&val);
2128   return val;
2129 }
2130 EOF
2131   if ! compile_prog "" "" ; then
2132     QEMU_CFLAGS="-march=i486 $QEMU_CFLAGS"
2133   fi
2134 fi
2135
2136 #########################################
2137 # Solaris specific configure tool chain decisions
2138
2139 if test "$solaris" = "yes" ; then
2140   if has $install; then
2141     :
2142   else
2143     error_exit "Solaris install program not found. Use --install=/usr/ucb/install or" \
2144         "install fileutils from www.blastwave.org using pkg-get -i fileutils" \
2145         "to get ginstall which is used by default (which lives in /opt/csw/bin)"
2146   fi
2147   if test "$(path_of $install)" = "/usr/sbin/install" ; then
2148     error_exit "Solaris /usr/sbin/install is not an appropriate install program." \
2149         "try ginstall from the GNU fileutils available from www.blastwave.org" \
2150         "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
2151   fi
2152   if has ar; then
2153     :
2154   else
2155     if test -f /usr/ccs/bin/ar ; then
2156       error_exit "No path includes ar" \
2157           "Add /usr/ccs/bin to your path and rerun configure"
2158     fi
2159     error_exit "No path includes ar"
2160   fi
2161 fi
2162
2163 if test -z "${target_list+xxx}" ; then
2164     for target in $default_target_list; do
2165         supported_target $target 2>/dev/null && \
2166             target_list="$target_list $target"
2167     done
2168     target_list="${target_list# }"
2169 else
2170     target_list=$(echo "$target_list" | sed -e 's/,/ /g')
2171     for target in $target_list; do
2172         # Check that we recognised the target name; this allows a more
2173         # friendly error message than if we let it fall through.
2174         case " $default_target_list " in
2175             *" $target "*)
2176                 ;;
2177             *)
2178                 error_exit "Unknown target name '$target'"
2179                 ;;
2180         esac
2181         supported_target $target || exit 1
2182     done
2183 fi
2184
2185 # see if system emulation was really requested
2186 case " $target_list " in
2187   *"-softmmu "*) softmmu=yes
2188   ;;
2189   *) softmmu=no
2190   ;;
2191 esac
2192
2193 for target in $target_list; do
2194   case "$target" in
2195     arm-softmmu | aarch64-softmmu | i386-softmmu | x86_64-softmmu)
2196       edk2_blobs="yes"
2197       ;;
2198   esac
2199 done
2200 # The EDK2 binaries are compressed with bzip2
2201 if test "$edk2_blobs" = "yes" && ! has bzip2; then
2202   error_exit "The bzip2 program is required for building QEMU"
2203 fi
2204
2205 feature_not_found() {
2206   feature=$1
2207   remedy=$2
2208
2209   error_exit "User requested feature $feature" \
2210       "configure was not able to find it." \
2211       "$remedy"
2212 }
2213
2214 # ---
2215 # big/little endian test
2216 cat > $TMPC << EOF
2217 short big_endian[] = { 0x4269, 0x4765, 0x4e64, 0x4961, 0x4e00, 0, };
2218 short little_endian[] = { 0x694c, 0x7454, 0x654c, 0x6e45, 0x6944, 0x6e41, 0, };
2219 extern int foo(short *, short *);
2220 int main(int argc, char *argv[]) {
2221     return foo(big_endian, little_endian);
2222 }
2223 EOF
2224
2225 if compile_object ; then
2226     if strings -a $TMPO | grep -q BiGeNdIaN ; then
2227         bigendian="yes"
2228     elif strings -a $TMPO | grep -q LiTtLeEnDiAn ; then
2229         bigendian="no"
2230     else
2231         echo big/little test failed
2232     fi
2233 else
2234     echo big/little test failed
2235 fi
2236
2237 ##########################################
2238 # system tools
2239 if test -z "$want_tools"; then
2240     if test "$softmmu" = "no"; then
2241         want_tools=no
2242     else
2243         want_tools=yes
2244     fi
2245 fi
2246
2247 ##########################################
2248 # cocoa implies not SDL or GTK
2249 # (the cocoa UI code currently assumes it is always the active UI
2250 # and doesn't interact well with other UI frontend code)
2251 if test "$cocoa" = "yes"; then
2252     if test "$sdl" = "yes"; then
2253         error_exit "Cocoa and SDL UIs cannot both be enabled at once"
2254     fi
2255     if test "$gtk" = "yes"; then
2256         error_exit "Cocoa and GTK UIs cannot both be enabled at once"
2257     fi
2258     gtk=no
2259     sdl=no
2260 fi
2261
2262 # Some versions of Mac OS X incorrectly define SIZE_MAX
2263 cat > $TMPC << EOF
2264 #include <stdint.h>
2265 #include <stdio.h>
2266 int main(int argc, char *argv[]) {
2267     return printf("%zu", SIZE_MAX);
2268 }
2269 EOF
2270 have_broken_size_max=no
2271 if ! compile_object -Werror ; then
2272     have_broken_size_max=yes
2273 fi
2274
2275 ##########################################
2276 # L2TPV3 probe
2277
2278 cat > $TMPC <<EOF
2279 #include <sys/socket.h>
2280 #include <linux/ip.h>
2281 int main(void) { return sizeof(struct mmsghdr); }
2282 EOF
2283 if compile_prog "" "" ; then
2284   l2tpv3=yes
2285 else
2286   l2tpv3=no
2287 fi
2288
2289 #########################################
2290 # vhost interdependencies and host support
2291
2292 # vhost backends
2293 test "$vhost_user" = "" && vhost_user=yes
2294 if test "$vhost_user" = "yes" && test "$mingw32" = "yes"; then
2295   error_exit "vhost-user isn't available on win32"
2296 fi
2297 test "$vhost_kernel" = "" && vhost_kernel=$linux
2298 if test "$vhost_kernel" = "yes" && test "$linux" != "yes"; then
2299   error_exit "vhost-kernel is only available on Linux"
2300 fi
2301
2302 # vhost-kernel devices
2303 test "$vhost_scsi" = "" && vhost_scsi=$vhost_kernel
2304 if test "$vhost_scsi" = "yes" && test "$vhost_kernel" != "yes"; then
2305   error_exit "--enable-vhost-scsi requires --enable-vhost-kernel"
2306 fi
2307 test "$vhost_vsock" = "" && vhost_vsock=$vhost_kernel
2308 if test "$vhost_vsock" = "yes" && test "$vhost_kernel" != "yes"; then
2309   error_exit "--enable-vhost-vsock requires --enable-vhost-kernel"
2310 fi
2311
2312 # vhost-user backends
2313 test "$vhost_net_user" = "" && vhost_net_user=$vhost_user
2314 if test "$vhost_net_user" = "yes" && test "$vhost_user" = "no"; then
2315   error_exit "--enable-vhost-net-user requires --enable-vhost-user"
2316 fi
2317 test "$vhost_crypto" = "" && vhost_crypto=$vhost_user
2318 if test "$vhost_crypto" = "yes" && test "$vhost_user" = "no"; then
2319   error_exit "--enable-vhost-crypto requires --enable-vhost-user"
2320 fi
2321 test "$vhost_user_fs" = "" && vhost_user_fs=$vhost_user
2322 if test "$vhost_user_fs" = "yes" && test "$vhost_user" = "no"; then
2323   error_exit "--enable-vhost-user-fs requires --enable-vhost-user"
2324 fi
2325
2326 # OR the vhost-kernel and vhost-user values for simplicity
2327 if test "$vhost_net" = ""; then
2328   test "$vhost_net_user" = "yes" && vhost_net=yes
2329   test "$vhost_kernel" = "yes" && vhost_net=yes
2330 fi
2331
2332 ##########################################
2333 # MinGW / Mingw-w64 localtime_r/gmtime_r check
2334
2335 if test "$mingw32" = "yes"; then
2336     # Some versions of MinGW / Mingw-w64 lack localtime_r
2337     # and gmtime_r entirely.
2338     #
2339     # Some versions of Mingw-w64 define a macro for
2340     # localtime_r/gmtime_r.
2341     #
2342     # Some versions of Mingw-w64 will define functions
2343     # for localtime_r/gmtime_r, but only if you have
2344     # _POSIX_THREAD_SAFE_FUNCTIONS defined. For fun
2345     # though, unistd.h and pthread.h both define
2346     # that for you.
2347     #
2348     # So this #undef localtime_r and #include <unistd.h>
2349     # are not in fact redundant.
2350 cat > $TMPC << EOF
2351 #include <unistd.h>
2352 #include <time.h>
2353 #undef localtime_r
2354 int main(void) { localtime_r(NULL, NULL); return 0; }
2355 EOF
2356     if compile_prog "" "" ; then
2357         localtime_r="yes"
2358     else
2359         localtime_r="no"
2360     fi
2361 fi
2362
2363 ##########################################
2364 # pkg-config probe
2365
2366 if ! has "$pkg_config_exe"; then
2367   error_exit "pkg-config binary '$pkg_config_exe' not found"
2368 fi
2369
2370 ##########################################
2371 # NPTL probe
2372
2373 if test "$linux_user" = "yes"; then
2374   cat > $TMPC <<EOF
2375 #include <sched.h>
2376 #include <linux/futex.h>
2377 int main(void) {
2378 #if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
2379 #error bork
2380 #endif
2381   return 0;
2382 }
2383 EOF
2384   if ! compile_object ; then
2385     feature_not_found "nptl" "Install glibc and linux kernel headers."
2386   fi
2387 fi
2388
2389 ##########################################
2390 # lzo check
2391
2392 if test "$lzo" != "no" ; then
2393     cat > $TMPC << EOF
2394 #include <lzo/lzo1x.h>
2395 int main(void) { lzo_version(); return 0; }
2396 EOF
2397     if compile_prog "" "-llzo2" ; then
2398         libs_softmmu="$libs_softmmu -llzo2"
2399         lzo="yes"
2400     else
2401         if test "$lzo" = "yes"; then
2402             feature_not_found "liblzo2" "Install liblzo2 devel"
2403         fi
2404         lzo="no"
2405     fi
2406 fi
2407
2408 ##########################################
2409 # snappy check
2410
2411 if test "$snappy" != "no" ; then
2412     cat > $TMPC << EOF
2413 #include <snappy-c.h>
2414 int main(void) { snappy_max_compressed_length(4096); return 0; }
2415 EOF
2416     if compile_prog "" "-lsnappy" ; then
2417         libs_softmmu="$libs_softmmu -lsnappy"
2418         snappy="yes"
2419     else
2420         if test "$snappy" = "yes"; then
2421             feature_not_found "libsnappy" "Install libsnappy devel"
2422         fi
2423         snappy="no"
2424     fi
2425 fi
2426
2427 ##########################################
2428 # bzip2 check
2429
2430 if test "$bzip2" != "no" ; then
2431     cat > $TMPC << EOF
2432 #include <bzlib.h>
2433 int main(void) { BZ2_bzlibVersion(); return 0; }
2434 EOF
2435     if compile_prog "" "-lbz2" ; then
2436         bzip2="yes"
2437     else
2438         if test "$bzip2" = "yes"; then
2439             feature_not_found "libbzip2" "Install libbzip2 devel"
2440         fi
2441         bzip2="no"
2442     fi
2443 fi
2444
2445 ##########################################
2446 # lzfse check
2447
2448 if test "$lzfse" != "no" ; then
2449     cat > $TMPC << EOF
2450 #include <lzfse.h>
2451 int main(void) { lzfse_decode_scratch_size(); return 0; }
2452 EOF
2453     if compile_prog "" "-llzfse" ; then
2454         lzfse="yes"
2455     else
2456         if test "$lzfse" = "yes"; then
2457             feature_not_found "lzfse" "Install lzfse devel"
2458         fi
2459         lzfse="no"
2460     fi
2461 fi
2462
2463 ##########################################
2464 # zstd check
2465
2466 if test "$zstd" != "no" ; then
2467     if $pkg_config --exist libzstd ; then
2468         zstd_cflags="$($pkg_config --cflags libzstd)"
2469         zstd_libs="$($pkg_config --libs libzstd)"
2470         LIBS="$zstd_libs $LIBS"
2471         QEMU_CFLAGS="$QEMU_CFLAGS $zstd_cflags"
2472         zstd="yes"
2473     else
2474         if test "$zstd" = "yes" ; then
2475             feature_not_found "libzstd" "Install libzstd devel"
2476         fi
2477         zstd="no"
2478     fi
2479 fi
2480
2481 ##########################################
2482 # libseccomp check
2483
2484 if test "$seccomp" != "no" ; then
2485     libseccomp_minver="2.3.0"
2486     if $pkg_config --atleast-version=$libseccomp_minver libseccomp ; then
2487         seccomp_cflags="$($pkg_config --cflags libseccomp)"
2488         seccomp_libs="$($pkg_config --libs libseccomp)"
2489         seccomp="yes"
2490     else
2491         if test "$seccomp" = "yes" ; then
2492             feature_not_found "libseccomp" \
2493                  "Install libseccomp devel >= $libseccomp_minver"
2494         fi
2495         seccomp="no"
2496     fi
2497 fi
2498 ##########################################
2499 # xen probe
2500
2501 if test "$xen" != "no" ; then
2502   # Check whether Xen library path is specified via --extra-ldflags to avoid
2503   # overriding this setting with pkg-config output. If not, try pkg-config
2504   # to obtain all needed flags.
2505
2506   if ! echo $EXTRA_LDFLAGS | grep tools/libxc > /dev/null && \
2507      $pkg_config --exists xencontrol ; then
2508     xen_ctrl_version="$(printf '%d%02d%02d' \
2509       $($pkg_config --modversion xencontrol | sed 's/\./ /g') )"
2510     xen=yes
2511     xen_pc="xencontrol xenstore xenguest xenforeignmemory xengnttab"
2512     xen_pc="$xen_pc xenevtchn xendevicemodel"
2513     if $pkg_config --exists xentoolcore; then
2514       xen_pc="$xen_pc xentoolcore"
2515     fi
2516     QEMU_CFLAGS="$QEMU_CFLAGS $($pkg_config --cflags $xen_pc)"
2517     libs_softmmu="$($pkg_config --libs $xen_pc) $libs_softmmu"
2518   else
2519
2520     xen_libs="-lxenstore -lxenctrl -lxenguest"
2521     xen_stable_libs="-lxenforeignmemory -lxengnttab -lxenevtchn"
2522
2523     # First we test whether Xen headers and libraries are available.
2524     # If no, we are done and there is no Xen support.
2525     # If yes, more tests are run to detect the Xen version.
2526
2527     # Xen (any)
2528     cat > $TMPC <<EOF
2529 #include <xenctrl.h>
2530 int main(void) {
2531   return 0;
2532 }
2533 EOF
2534     if ! compile_prog "" "$xen_libs" ; then
2535       # Xen not found
2536       if test "$xen" = "yes" ; then
2537         feature_not_found "xen" "Install xen devel"
2538       fi
2539       xen=no
2540
2541     # Xen unstable
2542     elif
2543         cat > $TMPC <<EOF &&
2544 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2545 #define __XEN_TOOLS__
2546 #include <xendevicemodel.h>
2547 #include <xenforeignmemory.h>
2548 int main(void) {
2549   xendevicemodel_handle *xd;
2550   xenforeignmemory_handle *xfmem;
2551
2552   xd = xendevicemodel_open(0, 0);
2553   xendevicemodel_pin_memory_cacheattr(xd, 0, 0, 0, 0);
2554
2555   xfmem = xenforeignmemory_open(0, 0);
2556   xenforeignmemory_map_resource(xfmem, 0, 0, 0, 0, 0, NULL, 0, 0);
2557
2558   return 0;
2559 }
2560 EOF
2561         compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2562       then
2563       xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2564       xen_ctrl_version=41100
2565       xen=yes
2566     elif
2567         cat > $TMPC <<EOF &&
2568 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2569 #include <xenforeignmemory.h>
2570 #include <xentoolcore.h>
2571 int main(void) {
2572   xenforeignmemory_handle *xfmem;
2573
2574   xfmem = xenforeignmemory_open(0, 0);
2575   xenforeignmemory_map2(xfmem, 0, 0, 0, 0, 0, 0, 0);
2576   xentoolcore_restrict_all(0);
2577
2578   return 0;
2579 }
2580 EOF
2581         compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs -lxentoolcore"
2582       then
2583       xen_stable_libs="-lxendevicemodel $xen_stable_libs -lxentoolcore"
2584       xen_ctrl_version=41000
2585       xen=yes
2586     elif
2587         cat > $TMPC <<EOF &&
2588 #undef XC_WANT_COMPAT_DEVICEMODEL_API
2589 #define __XEN_TOOLS__
2590 #include <xendevicemodel.h>
2591 int main(void) {
2592   xendevicemodel_handle *xd;
2593
2594   xd = xendevicemodel_open(0, 0);
2595   xendevicemodel_close(xd);
2596
2597   return 0;
2598 }
2599 EOF
2600         compile_prog "" "$xen_libs -lxendevicemodel $xen_stable_libs"
2601       then
2602       xen_stable_libs="-lxendevicemodel $xen_stable_libs"
2603       xen_ctrl_version=40900
2604       xen=yes
2605     elif
2606         cat > $TMPC <<EOF &&
2607 /*
2608  * If we have stable libs the we don't want the libxc compat
2609  * layers, regardless of what CFLAGS we may have been given.
2610  *
2611  * Also, check if xengnttab_grant_copy_segment_t is defined and
2612  * grant copy operation is implemented.
2613  */
2614 #undef XC_WANT_COMPAT_EVTCHN_API
2615 #undef XC_WANT_COMPAT_GNTTAB_API
2616 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2617 #include <xenctrl.h>
2618 #include <xenstore.h>
2619 #include <xenevtchn.h>
2620 #include <xengnttab.h>
2621 #include <xenforeignmemory.h>
2622 #include <stdint.h>
2623 #include <xen/hvm/hvm_info_table.h>
2624 #if !defined(HVM_MAX_VCPUS)
2625 # error HVM_MAX_VCPUS not defined
2626 #endif
2627 int main(void) {
2628   xc_interface *xc = NULL;
2629   xenforeignmemory_handle *xfmem;
2630   xenevtchn_handle *xe;
2631   xengnttab_handle *xg;
2632   xengnttab_grant_copy_segment_t* seg = NULL;
2633
2634   xs_daemon_open();
2635
2636   xc = xc_interface_open(0, 0, 0);
2637   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2638   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2639   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2640   xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2641
2642   xfmem = xenforeignmemory_open(0, 0);
2643   xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2644
2645   xe = xenevtchn_open(0, 0);
2646   xenevtchn_fd(xe);
2647
2648   xg = xengnttab_open(0, 0);
2649   xengnttab_grant_copy(xg, 0, seg);
2650
2651   return 0;
2652 }
2653 EOF
2654         compile_prog "" "$xen_libs $xen_stable_libs"
2655       then
2656       xen_ctrl_version=40800
2657       xen=yes
2658     elif
2659         cat > $TMPC <<EOF &&
2660 /*
2661  * If we have stable libs the we don't want the libxc compat
2662  * layers, regardless of what CFLAGS we may have been given.
2663  */
2664 #undef XC_WANT_COMPAT_EVTCHN_API
2665 #undef XC_WANT_COMPAT_GNTTAB_API
2666 #undef XC_WANT_COMPAT_MAP_FOREIGN_API
2667 #include <xenctrl.h>
2668 #include <xenstore.h>
2669 #include <xenevtchn.h>
2670 #include <xengnttab.h>
2671 #include <xenforeignmemory.h>
2672 #include <stdint.h>
2673 #include <xen/hvm/hvm_info_table.h>
2674 #if !defined(HVM_MAX_VCPUS)
2675 # error HVM_MAX_VCPUS not defined
2676 #endif
2677 int main(void) {
2678   xc_interface *xc = NULL;
2679   xenforeignmemory_handle *xfmem;
2680   xenevtchn_handle *xe;
2681   xengnttab_handle *xg;
2682
2683   xs_daemon_open();
2684
2685   xc = xc_interface_open(0, 0, 0);
2686   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2687   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2688   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2689   xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2690
2691   xfmem = xenforeignmemory_open(0, 0);
2692   xenforeignmemory_map(xfmem, 0, 0, 0, 0, 0);
2693
2694   xe = xenevtchn_open(0, 0);
2695   xenevtchn_fd(xe);
2696
2697   xg = xengnttab_open(0, 0);
2698   xengnttab_map_grant_ref(xg, 0, 0, 0);
2699
2700   return 0;
2701 }
2702 EOF
2703         compile_prog "" "$xen_libs $xen_stable_libs"
2704       then
2705       xen_ctrl_version=40701
2706       xen=yes
2707
2708     # Xen 4.6
2709     elif
2710         cat > $TMPC <<EOF &&
2711 #include <xenctrl.h>
2712 #include <xenstore.h>
2713 #include <stdint.h>
2714 #include <xen/hvm/hvm_info_table.h>
2715 #if !defined(HVM_MAX_VCPUS)
2716 # error HVM_MAX_VCPUS not defined
2717 #endif
2718 int main(void) {
2719   xc_interface *xc;
2720   xs_daemon_open();
2721   xc = xc_interface_open(0, 0, 0);
2722   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2723   xc_gnttab_open(NULL, 0);
2724   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2725   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2726   xc_hvm_create_ioreq_server(xc, 0, HVM_IOREQSRV_BUFIOREQ_ATOMIC, NULL);
2727   xc_reserved_device_memory_map(xc, 0, 0, 0, 0, NULL, 0);
2728   return 0;
2729 }
2730 EOF
2731         compile_prog "" "$xen_libs"
2732       then
2733       xen_ctrl_version=40600
2734       xen=yes
2735
2736     # Xen 4.5
2737     elif
2738         cat > $TMPC <<EOF &&
2739 #include <xenctrl.h>
2740 #include <xenstore.h>
2741 #include <stdint.h>
2742 #include <xen/hvm/hvm_info_table.h>
2743 #if !defined(HVM_MAX_VCPUS)
2744 # error HVM_MAX_VCPUS not defined
2745 #endif
2746 int main(void) {
2747   xc_interface *xc;
2748   xs_daemon_open();
2749   xc = xc_interface_open(0, 0, 0);
2750   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2751   xc_gnttab_open(NULL, 0);
2752   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2753   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2754   xc_hvm_create_ioreq_server(xc, 0, 0, NULL);
2755   return 0;
2756 }
2757 EOF
2758         compile_prog "" "$xen_libs"
2759       then
2760       xen_ctrl_version=40500
2761       xen=yes
2762
2763     elif
2764         cat > $TMPC <<EOF &&
2765 #include <xenctrl.h>
2766 #include <xenstore.h>
2767 #include <stdint.h>
2768 #include <xen/hvm/hvm_info_table.h>
2769 #if !defined(HVM_MAX_VCPUS)
2770 # error HVM_MAX_VCPUS not defined
2771 #endif
2772 int main(void) {
2773   xc_interface *xc;
2774   xs_daemon_open();
2775   xc = xc_interface_open(0, 0, 0);
2776   xc_hvm_set_mem_type(0, 0, HVMMEM_ram_ro, 0, 0);
2777   xc_gnttab_open(NULL, 0);
2778   xc_domain_add_to_physmap(0, 0, XENMAPSPACE_gmfn, 0, 0);
2779   xc_hvm_inject_msi(xc, 0, 0xf0000000, 0x00000000);
2780   return 0;
2781 }
2782 EOF
2783         compile_prog "" "$xen_libs"
2784       then
2785       xen_ctrl_version=40200
2786       xen=yes
2787
2788     else
2789       if test "$xen" = "yes" ; then
2790         feature_not_found "xen (unsupported version)" \
2791                           "Install a supported xen (xen 4.2 or newer)"
2792       fi
2793       xen=no
2794     fi
2795
2796     if test "$xen" = yes; then
2797       if test $xen_ctrl_version -ge 40701  ; then
2798         libs_softmmu="$xen_stable_libs $libs_softmmu"
2799       fi
2800       libs_softmmu="$xen_libs $libs_softmmu"
2801     fi
2802   fi
2803 fi
2804
2805 if test "$xen_pci_passthrough" != "no"; then
2806   if test "$xen" = "yes" && test "$linux" = "yes"; then
2807     xen_pci_passthrough=yes
2808   else
2809     if test "$xen_pci_passthrough" = "yes"; then
2810       error_exit "User requested feature Xen PCI Passthrough" \
2811           " but this feature requires /sys from Linux"
2812     fi
2813     xen_pci_passthrough=no
2814   fi
2815 fi
2816
2817 ##########################################
2818 # Windows Hypervisor Platform accelerator (WHPX) check
2819 if test "$whpx" != "no" ; then
2820     if check_include "WinHvPlatform.h" && check_include "WinHvEmulation.h"; then
2821         whpx="yes"
2822     else
2823         if test "$whpx" = "yes"; then
2824             feature_not_found "WinHvPlatform" "WinHvEmulation is not installed"
2825         fi
2826         whpx="no"
2827     fi
2828 fi
2829
2830 ##########################################
2831 # Sparse probe
2832 if test "$sparse" != "no" ; then
2833   if has cgcc; then
2834     sparse=yes
2835   else
2836     if test "$sparse" = "yes" ; then
2837       feature_not_found "sparse" "Install sparse binary"
2838     fi
2839     sparse=no
2840   fi
2841 fi
2842
2843 ##########################################
2844 # X11 probe
2845 if $pkg_config --exists "x11"; then
2846     have_x11=yes
2847     x11_cflags=$($pkg_config --cflags x11)
2848     x11_libs=$($pkg_config --libs x11)
2849 fi
2850
2851 ##########################################
2852 # GTK probe
2853
2854 if test "$gtk" != "no"; then
2855     gtkpackage="gtk+-3.0"
2856     gtkx11package="gtk+-x11-3.0"
2857     gtkversion="3.14.0"
2858     if $pkg_config --exists "$gtkpackage >= $gtkversion"; then
2859         gtk_cflags=$($pkg_config --cflags $gtkpackage)
2860         gtk_libs=$($pkg_config --libs $gtkpackage)
2861         gtk_version=$($pkg_config --modversion $gtkpackage)
2862         if $pkg_config --exists "$gtkx11package >= $gtkversion"; then
2863             need_x11=yes
2864             gtk_cflags="$gtk_cflags $x11_cflags"
2865             gtk_libs="$gtk_libs $x11_libs"
2866         fi
2867         gtk="yes"
2868     elif test "$gtk" = "yes"; then
2869         feature_not_found "gtk" "Install gtk3-devel"
2870     else
2871         gtk="no"
2872     fi
2873 fi
2874
2875
2876 ##########################################
2877 # GNUTLS probe
2878
2879 if test "$gnutls" != "no"; then
2880     pass="no"
2881     if $pkg_config --exists "gnutls >= 3.1.18"; then
2882         gnutls_cflags=$($pkg_config --cflags gnutls)
2883         gnutls_libs=$($pkg_config --libs gnutls)
2884         # Packaging for the static libraries is not always correct.
2885         # At least ubuntu 18.04 ships only shared libraries.
2886         write_c_skeleton
2887         if compile_prog "" "$gnutls_libs" ; then
2888             LIBS="$gnutls_libs $LIBS"
2889             QEMU_CFLAGS="$QEMU_CFLAGS $gnutls_cflags"
2890             pass="yes"
2891         fi
2892     fi
2893     if test "$pass" = "no" && test "$gnutls" = "yes"; then
2894         feature_not_found "gnutls" "Install gnutls devel >= 3.1.18"
2895     else
2896         gnutls="$pass"
2897     fi
2898 fi
2899
2900
2901 # If user didn't give a --disable/enable-gcrypt flag,
2902 # then mark as disabled if user requested nettle
2903 # explicitly
2904 if test -z "$gcrypt"
2905 then
2906     if test "$nettle" = "yes"
2907     then
2908         gcrypt="no"
2909     fi
2910 fi
2911
2912 # If user didn't give a --disable/enable-nettle flag,
2913 # then mark as disabled if user requested gcrypt
2914 # explicitly
2915 if test -z "$nettle"
2916 then
2917     if test "$gcrypt" = "yes"
2918     then
2919         nettle="no"
2920     fi
2921 fi
2922
2923 has_libgcrypt() {
2924     if ! has "libgcrypt-config"
2925     then
2926         return 1
2927     fi
2928
2929     if test -n "$cross_prefix"
2930     then
2931         host=$(libgcrypt-config --host)
2932         if test "$host-" != $cross_prefix
2933         then
2934             return 1
2935         fi
2936     fi
2937
2938     maj=`libgcrypt-config --version | awk -F . '{print $1}'`
2939     min=`libgcrypt-config --version | awk -F . '{print $2}'`
2940
2941     if test $maj != 1 || test $min -lt 5
2942     then
2943        return 1
2944     fi
2945
2946     return 0
2947 }
2948
2949
2950 if test "$nettle" != "no"; then
2951     pass="no"
2952     if $pkg_config --exists "nettle >= 2.7.1"; then
2953         nettle_cflags=$($pkg_config --cflags nettle)
2954         nettle_libs=$($pkg_config --libs nettle)
2955         nettle_version=$($pkg_config --modversion nettle)
2956         # Link test to make sure the given libraries work (e.g for static).
2957         write_c_skeleton
2958         if compile_prog "" "$nettle_libs" ; then
2959             LIBS="$nettle_libs $LIBS"
2960             QEMU_CFLAGS="$QEMU_CFLAGS $nettle_cflags"
2961             if test -z "$gcrypt"; then
2962                gcrypt="no"
2963             fi
2964             pass="yes"
2965         fi
2966     fi
2967     if test "$pass" = "yes"
2968     then
2969         cat > $TMPC << EOF
2970 #include <nettle/xts.h>
2971 int main(void) {
2972   return 0;
2973 }
2974 EOF
2975         if compile_prog "$nettle_cflags" "$nettle_libs" ; then
2976             nettle_xts=yes
2977             qemu_private_xts=no
2978         fi
2979     fi
2980     if test "$pass" = "no" && test "$nettle" = "yes"; then
2981         feature_not_found "nettle" "Install nettle devel >= 2.7.1"
2982     else
2983         nettle="$pass"
2984     fi
2985 fi
2986
2987 if test "$gcrypt" != "no"; then
2988     pass="no"
2989     if has_libgcrypt; then
2990         gcrypt_cflags=$(libgcrypt-config --cflags)
2991         gcrypt_libs=$(libgcrypt-config --libs)
2992         # Debian has removed -lgpg-error from libgcrypt-config
2993         # as it "spreads unnecessary dependencies" which in
2994         # turn breaks static builds...
2995         if test "$static" = "yes"
2996         then
2997             gcrypt_libs="$gcrypt_libs -lgpg-error"
2998         fi
2999
3000         # Link test to make sure the given libraries work (e.g for static).
3001         write_c_skeleton
3002         if compile_prog "" "$gcrypt_libs" ; then
3003             LIBS="$gcrypt_libs $LIBS"
3004             QEMU_CFLAGS="$QEMU_CFLAGS $gcrypt_cflags"
3005             pass="yes"
3006         fi
3007     fi
3008     if test "$pass" = "yes"; then
3009         gcrypt="yes"
3010         cat > $TMPC << EOF
3011 #include <gcrypt.h>
3012 int main(void) {
3013   gcry_mac_hd_t handle;
3014   gcry_mac_open(&handle, GCRY_MAC_HMAC_MD5,
3015                 GCRY_MAC_FLAG_SECURE, NULL);
3016   return 0;
3017 }
3018 EOF
3019         if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3020             gcrypt_hmac=yes
3021         fi
3022         cat > $TMPC << EOF
3023 #include <gcrypt.h>
3024 int main(void) {
3025   gcry_cipher_hd_t handle;
3026   gcry_cipher_open(&handle, GCRY_CIPHER_AES, GCRY_CIPHER_MODE_XTS, 0);
3027   return 0;
3028 }
3029 EOF
3030         if compile_prog "$gcrypt_cflags" "$gcrypt_libs" ; then
3031             gcrypt_xts=yes
3032             qemu_private_xts=no
3033         fi
3034     elif test "$gcrypt" = "yes"; then
3035         feature_not_found "gcrypt" "Install gcrypt devel >= 1.5.0"
3036     else
3037         gcrypt="no"
3038     fi
3039 fi
3040
3041
3042 if test "$gcrypt" = "yes" && test "$nettle" = "yes"
3043 then
3044     error_exit "Only one of gcrypt & nettle can be enabled"
3045 fi
3046
3047 ##########################################
3048 # libtasn1 - only for the TLS creds/session test suite
3049
3050 tasn1=yes
3051 tasn1_cflags=""
3052 tasn1_libs=""
3053 if $pkg_config --exists "libtasn1"; then
3054     tasn1_cflags=$($pkg_config --cflags libtasn1)
3055     tasn1_libs=$($pkg_config --libs libtasn1)
3056 else
3057     tasn1=no
3058 fi
3059
3060
3061 ##########################################
3062 # PAM probe
3063
3064 if test "$auth_pam" != "no"; then
3065     cat > $TMPC <<EOF
3066 #include <security/pam_appl.h>
3067 #include <stdio.h>
3068 int main(void) {
3069    const char *service_name = "qemu";
3070    const char *user = "frank";
3071    const struct pam_conv pam_conv = { 0 };
3072    pam_handle_t *pamh = NULL;
3073    pam_start(service_name, user, &pam_conv, &pamh);
3074    return 0;
3075 }
3076 EOF
3077     if compile_prog "" "-lpam" ; then
3078         auth_pam=yes
3079     else
3080         if test "$auth_pam" = "yes"; then
3081             feature_not_found "PAM" "Install PAM development package"
3082         else
3083             auth_pam=no
3084         fi
3085     fi
3086 fi
3087
3088 ##########################################
3089 # getifaddrs (for tests/test-io-channel-socket )
3090
3091 have_ifaddrs_h=yes
3092 if ! check_include "ifaddrs.h" ; then
3093   have_ifaddrs_h=no
3094 fi
3095
3096 ##########################################
3097 # VTE probe
3098
3099 if test "$vte" != "no"; then
3100     vteminversion="0.32.0"
3101     if $pkg_config --exists "vte-2.91"; then
3102       vtepackage="vte-2.91"
3103     else
3104       vtepackage="vte-2.90"
3105     fi
3106     if $pkg_config --exists "$vtepackage >= $vteminversion"; then
3107         vte_cflags=$($pkg_config --cflags $vtepackage)
3108         vte_libs=$($pkg_config --libs $vtepackage)
3109         vteversion=$($pkg_config --modversion $vtepackage)
3110         vte="yes"
3111     elif test "$vte" = "yes"; then
3112         feature_not_found "vte" "Install libvte-2.90/2.91 devel"
3113     else
3114         vte="no"
3115     fi
3116 fi
3117
3118 ##########################################
3119 # SDL probe
3120
3121 # Look for sdl configuration program (pkg-config or sdl2-config).  Try
3122 # sdl2-config even without cross prefix, and favour pkg-config over sdl2-config.
3123
3124 sdl_probe ()
3125 {
3126   if $pkg_config sdl2 --exists; then
3127     sdlconfig="$pkg_config sdl2"
3128     sdlversion=$($sdlconfig --modversion 2>/dev/null)
3129   elif has "$sdl2_config"; then
3130     sdlconfig="$sdl2_config"
3131     sdlversion=$($sdlconfig --version)
3132   else
3133     if test "$sdl" = "yes" ; then
3134       feature_not_found "sdl" "Install SDL2-devel"
3135     fi
3136     sdl=no
3137     # no need to do the rest
3138     return
3139   fi
3140   if test -n "$cross_prefix" && test "$(basename "$sdlconfig")" = sdl2-config; then
3141     echo warning: using "\"$sdlconfig\"" to detect cross-compiled sdl >&2
3142   fi
3143
3144   cat > $TMPC << EOF
3145 #include <SDL.h>
3146 #undef main /* We don't want SDL to override our main() */
3147 int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
3148 EOF
3149   sdl_cflags=$($sdlconfig --cflags 2>/dev/null)
3150   sdl_cflags="$sdl_cflags -Wno-undef"  # workaround 2.0.8 bug
3151   if test "$static" = "yes" ; then
3152     if $pkg_config sdl2 --exists; then
3153       sdl_libs=$($pkg_config sdl2 --static --libs 2>/dev/null)
3154     else
3155       sdl_libs=$($sdlconfig --static-libs 2>/dev/null)
3156     fi
3157   else
3158     sdl_libs=$($sdlconfig --libs 2>/dev/null)
3159   fi
3160   if compile_prog "$sdl_cflags" "$sdl_libs" ; then
3161     sdl=yes
3162
3163     # static link with sdl ? (note: sdl.pc's --static --libs is broken)
3164     if test "$sdl" = "yes" && test "$static" = "yes" ; then
3165       if test $? = 0 && echo $sdl_libs | grep -- -laa > /dev/null; then
3166          sdl_libs="$sdl_libs $(aalib-config --static-libs 2>/dev/null)"
3167          sdl_cflags="$sdl_cflags $(aalib-config --cflags 2>/dev/null)"
3168       fi
3169       if compile_prog "$sdl_cflags" "$sdl_libs" ; then
3170         :
3171       else
3172         sdl=no
3173       fi
3174     fi # static link
3175   else # sdl not found
3176     if test "$sdl" = "yes" ; then
3177       feature_not_found "sdl" "Install SDL2 devel"
3178     fi
3179     sdl=no
3180   fi # sdl compile test
3181 }
3182
3183 sdl_image_probe ()
3184 {
3185     if test "$sdl_image" != "no" ; then
3186         if $pkg_config SDL2_image --exists; then
3187             if test "$static" = "yes"; then
3188                 sdl_image_libs=$($pkg_config SDL2_image --libs --static 2>/dev/null)
3189             else
3190                 sdl_image_libs=$($pkg_config SDL2_image --libs 2>/dev/null)
3191             fi
3192             sdl_image_cflags=$($pkg_config SDL2_image --cflags 2>/dev/null)
3193             sdl_image=yes
3194
3195             sdl_cflags="$sdl_cflags $sdl_image_cflags"
3196             sdl_libs="$sdl_libs $sdl_image_libs"
3197         else
3198             if test "$sdl_image" = "yes" ; then
3199                 feature_not_found "sdl_image" "Install SDL Image devel"
3200             else
3201                 sdl_image=no
3202             fi
3203         fi
3204     fi
3205 }
3206
3207 if test "$sdl" != "no" ; then
3208   sdl_probe
3209 fi
3210
3211 if test "$sdl" = "yes" ; then
3212   sdl_image_probe
3213 else
3214   if test "$sdl_image" = "yes"; then
3215     echo "warning: SDL Image requested, but SDL is not available, disabling"
3216   fi
3217   sdl_image=no
3218 fi
3219
3220 if test "$sdl" = "yes" ; then
3221   cat > $TMPC <<EOF
3222 #include <SDL.h>
3223 #if defined(SDL_VIDEO_DRIVER_X11)
3224 #include <X11/XKBlib.h>
3225 #else
3226 #error No x11 support
3227 #endif
3228 int main(void) { return 0; }
3229 EOF
3230   if compile_prog "$sdl_cflags $x11_cflags" "$sdl_libs $x11_libs" ; then
3231     need_x11=yes
3232     sdl_cflags="$sdl_cflags $x11_cflags"
3233     sdl_libs="$sdl_libs $x11_libs"
3234   fi
3235 fi
3236
3237 ##########################################
3238 # RDMA needs OpenFabrics libraries
3239 if test "$rdma" != "no" ; then
3240   cat > $TMPC <<EOF
3241 #include <rdma/rdma_cma.h>
3242 int main(void) { return 0; }
3243 EOF
3244   rdma_libs="-lrdmacm -libverbs -libumad"
3245   if compile_prog "" "$rdma_libs" ; then
3246     rdma="yes"
3247     libs_softmmu="$libs_softmmu $rdma_libs"
3248   else
3249     if test "$rdma" = "yes" ; then
3250         error_exit \
3251             " OpenFabrics librdmacm/libibverbs/libibumad not present." \
3252             " Your options:" \
3253             "  (1) Fast: Install infiniband packages (devel) from your distro." \
3254             "  (2) Cleanest: Install libraries from www.openfabrics.org" \
3255             "  (3) Also: Install softiwarp if you don't have RDMA hardware"
3256     fi
3257     rdma="no"
3258   fi
3259 fi
3260
3261 ##########################################
3262 # PVRDMA detection
3263
3264 cat > $TMPC <<EOF &&
3265 #include <sys/mman.h>
3266
3267 int
3268 main(void)
3269 {
3270     char buf = 0;
3271     void *addr = &buf;
3272     addr = mremap(addr, 0, 1, MREMAP_MAYMOVE | MREMAP_FIXED);
3273
3274     return 0;
3275 }
3276 EOF
3277
3278 if test "$rdma" = "yes" ; then
3279     case "$pvrdma" in
3280     "")
3281         if compile_prog "" ""; then
3282             pvrdma="yes"
3283         else
3284             pvrdma="no"
3285         fi
3286         ;;
3287     "yes")
3288         if ! compile_prog "" ""; then
3289             error_exit "PVRDMA is not supported since mremap is not implemented"
3290         fi
3291         pvrdma="yes"
3292         ;;
3293     "no")
3294         pvrdma="no"
3295         ;;
3296     esac
3297 else
3298     if test "$pvrdma" = "yes" ; then
3299         error_exit "PVRDMA requires rdma suppport"
3300     fi
3301     pvrdma="no"
3302 fi
3303
3304 # Let's see if enhanced reg_mr is supported
3305 if test "$pvrdma" = "yes" ; then
3306
3307 cat > $TMPC <<EOF &&
3308 #include <infiniband/verbs.h>
3309
3310 int
3311 main(void)
3312 {
3313     struct ibv_mr *mr;
3314     struct ibv_pd *pd = NULL;
3315     size_t length = 10;
3316     uint64_t iova = 0;
3317     int access = 0;
3318     void *addr = NULL;
3319
3320     mr = ibv_reg_mr_iova(pd, addr, length, iova, access);
3321
3322     ibv_dereg_mr(mr);
3323
3324     return 0;
3325 }
3326 EOF
3327     if ! compile_prog "" "-libverbs"; then
3328         QEMU_CFLAGS="$QEMU_CFLAGS -DLEGACY_RDMA_REG_MR"
3329     fi
3330 fi
3331
3332 ##########################################
3333 # VNC SASL detection
3334 if test "$vnc" = "yes" && test "$vnc_sasl" != "no" ; then
3335   cat > $TMPC <<EOF
3336 #include <sasl/sasl.h>
3337 #include <stdio.h>
3338 int main(void) { sasl_server_init(NULL, "qemu"); return 0; }
3339 EOF
3340   # Assuming Cyrus-SASL installed in /usr prefix
3341   vnc_sasl_cflags=""
3342   vnc_sasl_libs="-lsasl2"
3343   if compile_prog "$vnc_sasl_cflags" "$vnc_sasl_libs" ; then
3344     vnc_sasl=yes
3345     libs_softmmu="$vnc_sasl_libs $libs_softmmu"
3346     QEMU_CFLAGS="$QEMU_CFLAGS $vnc_sasl_cflags"
3347   else
3348     if test "$vnc_sasl" = "yes" ; then
3349       feature_not_found "vnc-sasl" "Install Cyrus SASL devel"
3350     fi
3351     vnc_sasl=no
3352   fi
3353 fi
3354
3355 ##########################################
3356 # VNC JPEG detection
3357 if test "$vnc" = "yes" && test "$vnc_jpeg" != "no" ; then
3358 cat > $TMPC <<EOF
3359 #include <stdio.h>
3360 #include <jpeglib.h>
3361 int main(void) { struct jpeg_compress_struct s; jpeg_create_compress(&s); return 0; }
3362 EOF
3363     vnc_jpeg_cflags=""
3364     vnc_jpeg_libs="-ljpeg"
3365   if compile_prog "$vnc_jpeg_cflags" "$vnc_jpeg_libs" ; then
3366     vnc_jpeg=yes
3367     libs_softmmu="$vnc_jpeg_libs $libs_softmmu"
3368     QEMU_CFLAGS="$QEMU_CFLAGS $vnc_jpeg_cflags"
3369   else
3370     if test "$vnc_jpeg" = "yes" ; then
3371       feature_not_found "vnc-jpeg" "Install libjpeg-turbo devel"
3372     fi
3373     vnc_jpeg=no
3374   fi
3375 fi
3376
3377 ##########################################
3378 # VNC PNG detection
3379 if test "$vnc" = "yes" && test "$vnc_png" != "no" ; then
3380 cat > $TMPC <<EOF
3381 //#include <stdio.h>
3382 #include <png.h>
3383 #include <stddef.h>
3384 int main(void) {
3385     png_structp png_ptr;
3386     png_ptr = png_create_write_struct(PNG_LIBPNG_VER_STRING, NULL, NULL, NULL);
3387     return png_ptr != 0;
3388 }
3389 EOF
3390   if $pkg_config libpng --exists; then
3391     vnc_png_cflags=$($pkg_config libpng --cflags)
3392     vnc_png_libs=$($pkg_config libpng --libs)
3393   else
3394     vnc_png_cflags=""
3395     vnc_png_libs="-lpng"
3396   fi
3397   if compile_prog "$vnc_png_cflags" "$vnc_png_libs" ; then
3398     vnc_png=yes
3399     libs_softmmu="$vnc_png_libs $libs_softmmu"
3400     QEMU_CFLAGS="$QEMU_CFLAGS $vnc_png_cflags"
3401   else
3402     if test "$vnc_png" = "yes" ; then
3403       feature_not_found "vnc-png" "Install libpng devel"
3404     fi
3405     vnc_png=no
3406   fi
3407 fi
3408
3409 ##########################################
3410 # xkbcommon probe
3411 if test "$xkbcommon" != "no" ; then
3412   if $pkg_config xkbcommon --exists; then
3413     xkbcommon_cflags=$($pkg_config xkbcommon --cflags)
3414     xkbcommon_libs=$($pkg_config xkbcommon --libs)
3415     xkbcommon=yes
3416   else
3417     if test "$xkbcommon" = "yes" ; then
3418       feature_not_found "xkbcommon" "Install libxkbcommon-devel"
3419     fi
3420     xkbcommon=no
3421   fi
3422 fi
3423
3424
3425 ##########################################
3426 # xfsctl() probe, used for file-posix.c
3427 if test "$xfs" != "no" ; then
3428   cat > $TMPC << EOF
3429 #include <stddef.h>  /* NULL */
3430 #include <xfs/xfs.h>
3431 int main(void)
3432 {
3433     xfsctl(NULL, 0, 0, NULL);
3434     return 0;
3435 }
3436 EOF
3437   if compile_prog "" "" ; then
3438     xfs="yes"
3439   else
3440     if test "$xfs" = "yes" ; then
3441       feature_not_found "xfs" "Instal xfsprogs/xfslibs devel"
3442     fi
3443     xfs=no
3444   fi
3445 fi
3446
3447 ##########################################
3448 # vde libraries probe
3449 if test "$vde" != "no" ; then
3450   vde_libs="-lvdeplug"
3451   cat > $TMPC << EOF
3452 #include <libvdeplug.h>
3453 int main(void)
3454 {
3455     struct vde_open_args a = {0, 0, 0};
3456     char s[] = "";
3457     vde_open(s, s, &a);
3458     return 0;
3459 }
3460 EOF
3461   if compile_prog "" "$vde_libs" ; then
3462     vde=yes
3463   else
3464     if test "$vde" = "yes" ; then
3465       feature_not_found "vde" "Install vde (Virtual Distributed Ethernet) devel"
3466     fi
3467     vde=no
3468   fi
3469 fi
3470
3471 ##########################################
3472 # netmap support probe
3473 # Apart from looking for netmap headers, we make sure that the host API version
3474 # supports the netmap backend (>=11). The upper bound (15) is meant to simulate
3475 # a minor/major version number. Minor new features will be marked with values up
3476 # to 15, and if something happens that requires a change to the backend we will
3477 # move above 15, submit the backend fixes and modify this two bounds.
3478 if test "$netmap" != "no" ; then
3479   cat > $TMPC << EOF
3480 #include <inttypes.h>
3481 #include <net/if.h>
3482 #include <net/netmap.h>
3483 #include <net/netmap_user.h>
3484 #if (NETMAP_API < 11) || (NETMAP_API > 15)
3485 #error
3486 #endif
3487 int main(void) { return 0; }
3488 EOF
3489   if compile_prog "" "" ; then
3490     netmap=yes
3491   else
3492     if test "$netmap" = "yes" ; then
3493       feature_not_found "netmap"
3494     fi
3495     netmap=no
3496   fi
3497 fi
3498
3499 ##########################################
3500 # libcap-ng library probe
3501 if test "$cap_ng" != "no" ; then
3502   cap_libs="-lcap-ng"
3503   cat > $TMPC << EOF
3504 #include <cap-ng.h>
3505 int main(void)
3506 {
3507     capng_capability_to_name(CAPNG_EFFECTIVE);
3508     return 0;
3509 }
3510 EOF
3511   if compile_prog "" "$cap_libs" ; then
3512     cap_ng=yes
3513     libs_tools="$cap_libs $libs_tools"
3514   else
3515     if test "$cap_ng" = "yes" ; then
3516       feature_not_found "cap_ng" "Install libcap-ng devel"
3517     fi
3518     cap_ng=no
3519   fi
3520 fi
3521
3522 ##########################################
3523 # Sound support libraries probe
3524
3525 audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/,/ /g')
3526 for drv in $audio_drv_list; do
3527     case $drv in
3528     alsa | try-alsa)
3529     if $pkg_config alsa --exists; then
3530         alsa_libs=$($pkg_config alsa --libs)
3531         if test "$drv" = "try-alsa"; then
3532             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa/alsa/')
3533         fi
3534     else
3535         if test "$drv" = "try-alsa"; then
3536             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-alsa//')
3537         else
3538             error_exit "$drv check failed" \
3539                 "Make sure to have the $drv libs and headers installed."
3540         fi
3541     fi
3542     ;;
3543
3544     pa | try-pa)
3545     if $pkg_config libpulse --exists; then
3546         pulse_libs=$($pkg_config libpulse --libs)
3547         if test "$drv" = "try-pa"; then
3548             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa/pa/')
3549         fi
3550     else
3551         if test "$drv" = "try-pa"; then
3552             audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-pa//')
3553         else
3554             error_exit "$drv check failed" \
3555                 "Make sure to have the $drv libs and headers installed."
3556         fi
3557     fi
3558     ;;
3559
3560     sdl)
3561     if test "$sdl" = "no"; then
3562         error_exit "sdl not found or disabled, can not use sdl audio driver"
3563     fi
3564     ;;
3565
3566     try-sdl)
3567     if test "$sdl" = "no"; then
3568         audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl//')
3569     else
3570         audio_drv_list=$(echo "$audio_drv_list" | sed -e 's/try-sdl/sdl/')
3571     fi
3572     ;;
3573
3574     coreaudio)
3575       coreaudio_libs="-framework CoreAudio"
3576     ;;
3577
3578     dsound)
3579       dsound_libs="-lole32 -ldxguid"
3580       audio_win_int="yes"
3581     ;;
3582
3583     oss)
3584       oss_libs="$oss_lib"
3585     ;;
3586
3587     *)
3588     echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
3589         error_exit "Unknown driver '$drv' selected" \
3590             "Possible drivers are: $audio_possible_drivers"
3591     }
3592     ;;
3593     esac
3594 done
3595
3596 ##########################################
3597 # BrlAPI probe
3598
3599 if test "$brlapi" != "no" ; then
3600   brlapi_libs="-lbrlapi"
3601   cat > $TMPC << EOF
3602 #include <brlapi.h>
3603 #include <stddef.h>
3604 int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
3605 EOF
3606   if compile_prog "" "$brlapi_libs" ; then
3607     brlapi=yes
3608   else
3609     if test "$brlapi" = "yes" ; then
3610       feature_not_found "brlapi" "Install brlapi devel"
3611     fi
3612     brlapi=no
3613   fi
3614 fi
3615
3616 ##########################################
3617 # iconv probe
3618 if test "$iconv" != "no" ; then
3619   cat > $TMPC << EOF
3620 #include <iconv.h>
3621 int main(void) {
3622   iconv_t conv = iconv_open("WCHAR_T", "UCS-2");
3623   return conv != (iconv_t) -1;
3624 }
3625 EOF
3626   iconv_prefix_list="/usr/local:/usr"
3627   iconv_lib_list=":-liconv"
3628   IFS=:
3629   for iconv_prefix in $iconv_prefix_list; do
3630     IFS=:
3631     iconv_cflags="-I$iconv_prefix/include"
3632     iconv_ldflags="-L$iconv_prefix/lib"
3633     for iconv_link in $iconv_lib_list; do
3634       unset IFS
3635       iconv_lib="$iconv_ldflags $iconv_link"
3636       echo "looking at iconv in '$iconv_cflags' '$iconv_lib'" >> config.log
3637       if compile_prog "$iconv_cflags" "$iconv_lib" ; then
3638         iconv_found=yes
3639         break
3640       fi
3641     done
3642     if test "$iconv_found" = yes ; then
3643       break
3644     fi
3645   done
3646   if test "$iconv_found" = "yes" ; then
3647     iconv=yes
3648   else
3649     if test "$iconv" = "yes" ; then
3650       feature_not_found "iconv" "Install iconv devel"
3651     fi
3652     iconv=no
3653   fi
3654 fi
3655
3656 ##########################################
3657 # curses probe
3658 if test "$iconv" = "no" ; then
3659   # curses will need iconv
3660   curses=no
3661 fi
3662 if test "$curses" != "no" ; then
3663   if test "$mingw32" = "yes" ; then
3664     curses_inc_list="$($pkg_config --cflags ncurses 2>/dev/null):"
3665     curses_lib_list="$($pkg_config --libs ncurses 2>/dev/null):-lpdcurses"
3666   else
3667     curses_inc_list="$($pkg_config --cflags ncursesw 2>/dev/null):-I/usr/include/ncursesw:"
3668     curses_lib_list="$($pkg_config --libs ncursesw 2>/dev/null):-lncursesw:-lcursesw"
3669   fi
3670   curses_found=no
3671   cat > $TMPC << EOF
3672 #include <locale.h>
3673 #include <curses.h>
3674 #include <wchar.h>
3675 #include <langinfo.h>
3676 int main(void) {
3677   const char *codeset;
3678   wchar_t wch = L'w';
3679   setlocale(LC_ALL, "");
3680   resize_term(0, 0);
3681   addwstr(L"wide chars\n");
3682   addnwstr(&wch, 1);
3683   add_wch(WACS_DEGREE);
3684   codeset = nl_langinfo(CODESET);
3685   return codeset != 0;
3686 }
3687 EOF
3688   IFS=:
3689   for curses_inc in $curses_inc_list; do
3690     # Make sure we get the wide character prototypes
3691     curses_inc="-DNCURSES_WIDECHAR $curses_inc"
3692     IFS=:
3693     for curses_lib in $curses_lib_list; do
3694       unset IFS
3695       if compile_prog "$curses_inc" "$curses_lib" ; then
3696         curses_found=yes
3697         break
3698       fi
3699     done
3700     if test "$curses_found" = yes ; then
3701       break
3702     fi
3703   done
3704   unset IFS
3705   if test "$curses_found" = "yes" ; then
3706     curses=yes
3707   else
3708     if test "$curses" = "yes" ; then
3709       feature_not_found "curses" "Install ncurses devel"
3710     fi
3711     curses=no
3712   fi
3713 fi
3714
3715 ##########################################
3716 # curl probe
3717 if test "$curl" != "no" ; then
3718   if $pkg_config libcurl --exists; then
3719     curlconfig="$pkg_config libcurl"
3720   else
3721     curlconfig=curl-config
3722   fi
3723   cat > $TMPC << EOF
3724 #include <curl/curl.h>
3725 int main(void) { curl_easy_init(); curl_multi_setopt(0, 0, 0); return 0; }
3726 EOF
3727   curl_cflags=$($curlconfig --cflags 2>/dev/null)
3728   curl_libs=$($curlconfig --libs 2>/dev/null)
3729   if compile_prog "$curl_cflags" "$curl_libs" ; then
3730     curl=yes
3731   else
3732     if test "$curl" = "yes" ; then
3733       feature_not_found "curl" "Install libcurl devel"
3734     fi
3735     curl=no
3736   fi
3737 fi # test "$curl"
3738
3739 ##########################################
3740 # glib support probe
3741
3742 glib_req_ver=2.48
3743 glib_modules=gthread-2.0
3744 if test "$modules" = yes; then
3745     glib_modules="$glib_modules gmodule-export-2.0"
3746 fi
3747 if test "$plugins" = yes; then
3748     glib_modules="$glib_modules gmodule-2.0"
3749 fi
3750
3751 # This workaround is required due to a bug in pkg-config file for glib as it
3752 # doesn't define GLIB_STATIC_COMPILATION for pkg-config --static
3753
3754 if test "$static" = yes && test "$mingw32" = yes; then
3755     QEMU_CFLAGS="-DGLIB_STATIC_COMPILATION $QEMU_CFLAGS"
3756 fi
3757
3758 for i in $glib_modules; do
3759     if $pkg_config --atleast-version=$glib_req_ver $i; then
3760         glib_cflags=$($pkg_config --cflags $i)
3761         glib_libs=$($pkg_config --libs $i)
3762         QEMU_CFLAGS="$glib_cflags $QEMU_CFLAGS"
3763         LIBS="$glib_libs $LIBS"
3764         libs_qga="$glib_libs $libs_qga"
3765     else
3766         error_exit "glib-$glib_req_ver $i is required to compile QEMU"
3767     fi
3768 done
3769
3770 if $pkg_config --atleast-version=$glib_req_ver gio-2.0; then
3771     gio=yes
3772     gio_cflags=$($pkg_config --cflags gio-2.0)
3773     gio_libs=$($pkg_config --libs gio-2.0)
3774     gdbus_codegen=$($pkg_config --variable=gdbus_codegen gio-2.0)
3775     if [ ! -x "$gdbus_codegen" ]; then
3776         gdbus_codegen=
3777     fi
3778 else
3779     gio=no
3780 fi
3781
3782 if $pkg_config --atleast-version=$glib_req_ver gio-unix-2.0; then
3783     gio_cflags="$gio_cflags $($pkg_config --cflags gio-unix-2.0)"
3784     gio_libs="$gio_libs $($pkg_config --libs gio-unix-2.0)"
3785 fi
3786
3787 # Sanity check that the current size_t matches the
3788 # size that glib thinks it should be. This catches
3789 # problems on multi-arch where people try to build
3790 # 32-bit QEMU while pointing at 64-bit glib headers
3791 cat > $TMPC <<EOF
3792 #include <glib.h>
3793 #include <unistd.h>
3794
3795 #define QEMU_BUILD_BUG_ON(x) \
3796   typedef char qemu_build_bug_on[(x)?-1:1] __attribute__((unused));
3797
3798 int main(void) {
3799    QEMU_BUILD_BUG_ON(sizeof(size_t) != GLIB_SIZEOF_SIZE_T);
3800    return 0;
3801 }
3802 EOF
3803
3804 if ! compile_prog "$CFLAGS" "$LIBS" ; then
3805     error_exit "sizeof(size_t) doesn't match GLIB_SIZEOF_SIZE_T."\
3806                "You probably need to set PKG_CONFIG_LIBDIR"\
3807                "to point to the right pkg-config files for your"\
3808                "build target"
3809 fi
3810
3811 # Silence clang 3.5.0 warnings about glib attribute __alloc_size__ usage
3812 cat > $TMPC << EOF
3813 #include <glib.h>
3814 int main(void) { return 0; }
3815 EOF
3816 if ! compile_prog "$glib_cflags -Werror" "$glib_libs" ; then
3817     if cc_has_warning_flag "-Wno-unknown-attributes"; then
3818         glib_cflags="-Wno-unknown-attributes $glib_cflags"
3819         CFLAGS="-Wno-unknown-attributes $CFLAGS"
3820     fi
3821 fi
3822
3823 #########################################
3824 # zlib check
3825
3826 if test "$zlib" != "no" ; then
3827     if $pkg_config --exists zlib; then
3828         zlib_cflags=$($pkg_config --cflags zlib)
3829         zlib_libs=$($pkg_config --libs zlib)
3830         QEMU_CFLAGS="$zlib_cflags $QEMU_CFLAGS"
3831         LIBS="$zlib_libs $LIBS"
3832     else
3833         cat > $TMPC << EOF
3834 #include <zlib.h>
3835 int main(void) { zlibVersion(); return 0; }
3836 EOF
3837         if compile_prog "" "-lz" ; then
3838             LIBS="$LIBS -lz"
3839         else
3840             error_exit "zlib check failed" \
3841                 "Make sure to have the zlib libs and headers installed."
3842         fi
3843     fi
3844 fi
3845
3846 ##########################################
3847 # SHA command probe for modules
3848 if test "$modules" = yes; then
3849     shacmd_probe="sha1sum sha1 shasum"
3850     for c in $shacmd_probe; do
3851         if has $c; then
3852             shacmd="$c"
3853             break
3854         fi
3855     done
3856     if test "$shacmd" = ""; then
3857         error_exit "one of the checksum commands is required to enable modules: $shacmd_probe"
3858     fi
3859 fi
3860
3861 ##########################################
3862 # pixman support probe
3863
3864 if test "$want_tools" = "no" && test "$softmmu" = "no"; then
3865   pixman_cflags=
3866   pixman_libs=
3867 elif $pkg_config --atleast-version=0.21.8 pixman-1 > /dev/null 2>&1; then
3868   pixman_cflags=$($pkg_config --cflags pixman-1)
3869   pixman_libs=$($pkg_config --libs pixman-1)
3870 else
3871   error_exit "pixman >= 0.21.8 not present." \
3872       "Please install the pixman devel package."
3873 fi
3874
3875 ##########################################
3876 # libmpathpersist probe
3877
3878 if test "$mpath" != "no" ; then
3879   # probe for the new API
3880   cat > $TMPC <<EOF
3881 #include <libudev.h>
3882 #include <mpath_persist.h>
3883 unsigned mpath_mx_alloc_len = 1024;
3884 int logsink;
3885 static struct config *multipath_conf;
3886 extern struct udev *udev;
3887 extern struct config *get_multipath_config(void);
3888 extern void put_multipath_config(struct config *conf);
3889 struct udev *udev;
3890 struct config *get_multipath_config(void) { return multipath_conf; }
3891 void put_multipath_config(struct config *conf) { }
3892
3893 int main(void) {
3894     udev = udev_new();
3895     multipath_conf = mpath_lib_init();
3896     return 0;
3897 }
3898 EOF
3899   if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3900     mpathpersist=yes
3901     mpathpersist_new_api=yes
3902   else
3903     # probe for the old API
3904     cat > $TMPC <<EOF
3905 #include <libudev.h>
3906 #include <mpath_persist.h>
3907 unsigned mpath_mx_alloc_len = 1024;
3908 int logsink;
3909 int main(void) {
3910     struct udev *udev = udev_new();
3911     mpath_lib_init(udev);
3912     return 0;
3913 }
3914 EOF
3915     if compile_prog "" "-ludev -lmultipath -lmpathpersist" ; then
3916       mpathpersist=yes
3917       mpathpersist_new_api=no
3918     else
3919       mpathpersist=no
3920     fi
3921   fi
3922 else
3923   mpathpersist=no
3924 fi
3925
3926 ##########################################
3927 # pthread probe
3928 PTHREADLIBS_LIST="-pthread -lpthread -lpthreadGC2"
3929
3930 pthread=no
3931 cat > $TMPC << EOF
3932 #include <pthread.h>
3933 static void *f(void *p) { return NULL; }
3934 int main(void) {
3935   pthread_t thread;
3936   pthread_create(&thread, 0, f, 0);
3937   return 0;
3938 }
3939 EOF
3940 if compile_prog "" "" ; then
3941   pthread=yes
3942 else
3943   for pthread_lib in $PTHREADLIBS_LIST; do
3944     if compile_prog "" "$pthread_lib" ; then
3945       pthread=yes
3946       found=no
3947       for lib_entry in $LIBS; do
3948         if test "$lib_entry" = "$pthread_lib"; then
3949           found=yes
3950           break
3951         fi
3952       done
3953       if test "$found" = "no"; then
3954         LIBS="$pthread_lib $LIBS"
3955         libs_qga="$pthread_lib $libs_qga"
3956       fi
3957       PTHREAD_LIB="$pthread_lib"
3958       break
3959     fi
3960   done
3961 fi
3962
3963 if test "$mingw32" != yes && test "$pthread" = no; then
3964   error_exit "pthread check failed" \
3965       "Make sure to have the pthread libs and headers installed."
3966 fi
3967
3968 # check for pthread_setname_np with thread id
3969 pthread_setname_np_w_tid=no
3970 cat > $TMPC << EOF
3971 #include <pthread.h>
3972
3973 static void *f(void *p) { return NULL; }
3974 int main(void)
3975 {
3976     pthread_t thread;
3977     pthread_create(&thread, 0, f, 0);
3978     pthread_setname_np(thread, "QEMU");
3979     return 0;
3980 }
3981 EOF
3982 if compile_prog "" "$pthread_lib" ; then
3983   pthread_setname_np_w_tid=yes
3984 fi
3985
3986 # check for pthread_setname_np without thread id
3987 pthread_setname_np_wo_tid=no
3988 cat > $TMPC << EOF
3989 #include <pthread.h>
3990
3991 static void *f(void *p) { pthread_setname_np("QEMU"); }
3992 int main(void)
3993 {
3994     pthread_t thread;
3995     pthread_create(&thread, 0, f, 0);
3996     return 0;
3997 }
3998 EOF
3999 if compile_prog "" "$pthread_lib" ; then
4000   pthread_setname_np_wo_tid=yes
4001 fi
4002
4003 ##########################################
4004 # rbd probe
4005 if test "$rbd" != "no" ; then
4006   cat > $TMPC <<EOF
4007 #include <stdio.h>
4008 #include <rbd/librbd.h>
4009 int main(void) {
4010     rados_t cluster;
4011     rados_create(&cluster, NULL);
4012     return 0;
4013 }
4014 EOF
4015   rbd_libs="-lrbd -lrados"
4016   if compile_prog "" "$rbd_libs" ; then
4017     rbd=yes
4018   else
4019     if test "$rbd" = "yes" ; then
4020       feature_not_found "rados block device" "Install librbd/ceph devel"
4021     fi
4022     rbd=no
4023   fi
4024 fi
4025
4026 ##########################################
4027 # libssh probe
4028 if test "$libssh" != "no" ; then
4029   if $pkg_config --exists libssh; then
4030     libssh_cflags=$($pkg_config libssh --cflags)
4031     libssh_libs=$($pkg_config libssh --libs)
4032     libssh=yes
4033   else
4034     if test "$libssh" = "yes" ; then
4035       error_exit "libssh required for --enable-libssh"
4036     fi
4037     libssh=no
4038   fi
4039 fi
4040
4041 ##########################################
4042 # Check for libssh 0.8
4043 # This is done like this instead of using the LIBSSH_VERSION_* and
4044 # SSH_VERSION_* macros because some distributions in the past shipped
4045 # snapshots of the future 0.8 from Git, and those snapshots did not
4046 # have updated version numbers (still referring to 0.7.0).
4047
4048 if test "$libssh" = "yes"; then
4049   cat > $TMPC <<EOF
4050 #include <libssh/libssh.h>
4051 int main(void) { return ssh_get_server_publickey(NULL, NULL); }
4052 EOF
4053   if compile_prog "$libssh_cflags" "$libssh_libs"; then
4054     libssh_cflags="-DHAVE_LIBSSH_0_8 $libssh_cflags"
4055   fi
4056 fi
4057
4058 ##########################################
4059 # linux-aio probe
4060
4061 if test "$linux_aio" != "no" ; then
4062   cat > $TMPC <<EOF
4063 #include <libaio.h>
4064 #include <sys/eventfd.h>
4065 #include <stddef.h>
4066 int main(void) { io_setup(0, NULL); io_set_eventfd(NULL, 0); eventfd(0, 0); return 0; }
4067 EOF
4068   if compile_prog "" "-laio" ; then
4069     linux_aio=yes
4070   else
4071     if test "$linux_aio" = "yes" ; then
4072       feature_not_found "linux AIO" "Install libaio devel"
4073     fi
4074     linux_aio=no
4075   fi
4076 fi
4077 ##########################################
4078 # linux-io-uring probe
4079
4080 if test "$linux_io_uring" != "no" ; then
4081   if $pkg_config liburing; then
4082     linux_io_uring_cflags=$($pkg_config --cflags liburing)
4083     linux_io_uring_libs=$($pkg_config --libs liburing)
4084     linux_io_uring=yes
4085   else
4086     if test "$linux_io_uring" = "yes" ; then
4087       feature_not_found "linux io_uring" "Install liburing devel"
4088     fi
4089     linux_io_uring=no
4090   fi
4091 fi
4092
4093 ##########################################
4094 # TPM emulation is only on POSIX
4095
4096 if test "$tpm" = ""; then
4097   if test "$mingw32" = "yes"; then
4098     tpm=no
4099   else
4100     tpm=yes
4101   fi
4102 elif test "$tpm" = "yes"; then
4103   if test "$mingw32" = "yes" ; then
4104     error_exit "TPM emulation only available on POSIX systems"
4105   fi
4106 fi
4107
4108 ##########################################
4109 # attr probe
4110
4111 if test "$attr" != "no" ; then
4112   cat > $TMPC <<EOF
4113 #include <stdio.h>
4114 #include <sys/types.h>
4115 #ifdef CONFIG_LIBATTR
4116 #include <attr/xattr.h>
4117 #else
4118 #include <sys/xattr.h>
4119 #endif
4120 int main(void) { getxattr(NULL, NULL, NULL, 0); setxattr(NULL, NULL, NULL, 0, 0); return 0; }
4121 EOF
4122   if compile_prog "" "" ; then
4123     attr=yes
4124   # Older distros have <attr/xattr.h>, and need -lattr:
4125   elif compile_prog "-DCONFIG_LIBATTR" "-lattr" ; then
4126     attr=yes
4127     LIBS="-lattr $LIBS"
4128     libattr=yes
4129   else
4130     if test "$attr" = "yes" ; then
4131       feature_not_found "ATTR" "Install libc6 or libattr devel"
4132     fi
4133     attr=no
4134   fi
4135 fi
4136
4137 ##########################################
4138 # iovec probe
4139 cat > $TMPC <<EOF
4140 #include <sys/types.h>
4141 #include <sys/uio.h>
4142 #include <unistd.h>
4143 int main(void) { return sizeof(struct iovec); }
4144 EOF
4145 iovec=no
4146 if compile_prog "" "" ; then
4147   iovec=yes
4148 fi
4149
4150 ##########################################
4151 # preadv probe
4152 cat > $TMPC <<EOF
4153 #include <sys/types.h>
4154 #include <sys/uio.h>
4155 #include <unistd.h>
4156 int main(void) { return preadv(0, 0, 0, 0); }
4157 EOF
4158 preadv=no
4159 if compile_prog "" "" ; then
4160   preadv=yes
4161 fi
4162
4163 ##########################################
4164 # fdt probe
4165 # fdt support is mandatory for at least some target architectures,
4166 # so insist on it if we're building those system emulators.
4167 fdt_required=no
4168 for target in $target_list; do
4169   case $target in
4170     aarch64*-softmmu|arm*-softmmu|ppc*-softmmu|microblaze*-softmmu|mips64el-softmmu|riscv*-softmmu)
4171       fdt_required=yes
4172     ;;
4173   esac
4174 done
4175
4176 if test "$fdt_required" = "yes"; then
4177   if test "$fdt" = "no"; then
4178     error_exit "fdt disabled but some requested targets require it." \
4179       "You can turn off fdt only if you also disable all the system emulation" \
4180       "targets which need it (by specifying a cut down --target-list)."
4181   fi
4182   fdt=yes
4183 elif test "$fdt" != "yes" ; then
4184   fdt=no
4185 fi
4186
4187 # fdt is only required when building softmmu targets
4188 if test -z "$fdt" -a "$softmmu" != "yes" ; then
4189     fdt="no"
4190 fi
4191
4192 if test "$fdt" != "no" ; then
4193   fdt_libs="-lfdt"
4194   # explicitly check for libfdt_env.h as it is missing in some stable installs
4195   # and test for required functions to make sure we are on a version >= 1.4.2
4196   cat > $TMPC << EOF
4197 #include <libfdt.h>
4198 #include <libfdt_env.h>
4199 int main(void) { fdt_check_full(NULL, 0); return 0; }
4200 EOF
4201   if compile_prog "" "$fdt_libs" ; then
4202     # system DTC is good - use it
4203     fdt=system
4204   else
4205       # have GIT checkout, so activate dtc submodule
4206       if test -e "${source_path}/.git" ; then
4207           git_submodules="${git_submodules} dtc"
4208       fi
4209       if test -d "${source_path}/dtc/libfdt" || test -e "${source_path}/.git" ; then
4210           fdt=git
4211           mkdir -p dtc
4212           if [ "$pwd_is_source_path" != "y" ] ; then
4213               symlink "$source_path/dtc/Makefile" "dtc/Makefile"
4214               symlink "$source_path/dtc/scripts" "dtc/scripts"
4215           fi
4216           fdt_cflags="-I\$(SRC_PATH)/dtc/libfdt"
4217           fdt_ldflags="-L\$(BUILD_DIR)/dtc/libfdt"
4218           fdt_libs="$fdt_libs"
4219       elif test "$fdt" = "yes" ; then
4220           # Not a git build & no libfdt found, prompt for system install
4221           error_exit "DTC (libfdt) version >= 1.4.2 not present." \
4222                      "Please install the DTC (libfdt) devel package"
4223       else
4224           # don't have and don't want
4225           fdt_libs=
4226           fdt=no
4227       fi
4228   fi
4229 fi
4230
4231 libs_softmmu="$libs_softmmu $fdt_libs"
4232
4233 ##########################################
4234 # opengl probe (for sdl2, gtk, milkymist-tmu2)
4235
4236 gbm="no"
4237 if $pkg_config gbm; then
4238     gbm_cflags="$($pkg_config --cflags gbm)"
4239     gbm_libs="$($pkg_config --libs gbm)"
4240     gbm="yes"
4241 fi
4242
4243 if test "$opengl" != "no" ; then
4244   opengl_pkgs="epoxy gbm"
4245   if $pkg_config $opengl_pkgs; then
4246     opengl_cflags="$($pkg_config --cflags $opengl_pkgs)"
4247     opengl_libs="$($pkg_config --libs $opengl_pkgs)"
4248     opengl=yes
4249     if test "$gtk" = "yes" && $pkg_config --exists "$gtkpackage >= 3.16"; then
4250         gtk_gl="yes"
4251     fi
4252     QEMU_CFLAGS="$QEMU_CFLAGS $opengl_cflags"
4253   else
4254     if test "$opengl" = "yes" ; then
4255       feature_not_found "opengl" "Please install opengl (mesa) devel pkgs: $opengl_pkgs"
4256     fi
4257     opengl_cflags=""
4258     opengl_libs=""
4259     opengl=no
4260   fi
4261 fi
4262
4263 if test "$opengl" = "yes"; then
4264   cat > $TMPC << EOF
4265 #include <epoxy/egl.h>
4266 #ifndef EGL_MESA_image_dma_buf_export
4267 # error mesa/epoxy lacks support for dmabufs (mesa 10.6+)
4268 #endif
4269 int main(void) { return 0; }
4270 EOF
4271   if compile_prog "" "" ; then
4272     opengl_dmabuf=yes
4273   fi
4274 fi
4275
4276 if test "$opengl" = "yes" && test "$have_x11" = "yes"; then
4277   for target in $target_list; do
4278     case $target in
4279       lm32-softmmu) # milkymist-tmu2 requires X11 and OpenGL
4280         need_x11=yes
4281       ;;
4282     esac
4283   done
4284 fi
4285
4286 ##########################################
4287 # libxml2 probe
4288 if test "$libxml2" != "no" ; then
4289     if $pkg_config --exists libxml-2.0; then
4290         libxml2="yes"
4291         libxml2_cflags=$($pkg_config --cflags libxml-2.0)
4292         libxml2_libs=$($pkg_config --libs libxml-2.0)
4293     else
4294         if test "$libxml2" = "yes"; then
4295             feature_not_found "libxml2" "Install libxml2 devel"
4296         fi
4297         libxml2="no"
4298     fi
4299 fi
4300
4301 ##########################################
4302 # glusterfs probe
4303 if test "$glusterfs" != "no" ; then
4304   if $pkg_config --atleast-version=3 glusterfs-api; then
4305     glusterfs="yes"
4306     glusterfs_cflags=$($pkg_config --cflags glusterfs-api)
4307     glusterfs_libs=$($pkg_config --libs glusterfs-api)
4308     if $pkg_config --atleast-version=4 glusterfs-api; then
4309       glusterfs_xlator_opt="yes"
4310     fi
4311     if $pkg_config --atleast-version=5 glusterfs-api; then
4312       glusterfs_discard="yes"
4313     fi
4314     if $pkg_config --atleast-version=6 glusterfs-api; then
4315       glusterfs_fallocate="yes"
4316       glusterfs_zerofill="yes"
4317     fi
4318     cat > $TMPC << EOF
4319 #include <glusterfs/api/glfs.h>
4320
4321 int
4322 main(void)
4323 {
4324         /* new glfs_ftruncate() passes two additional args */
4325         return glfs_ftruncate(NULL, 0, NULL, NULL);
4326 }
4327 EOF
4328     if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4329       glusterfs_ftruncate_has_stat="yes"
4330     fi
4331     cat > $TMPC << EOF
4332 #include <glusterfs/api/glfs.h>
4333
4334 /* new glfs_io_cbk() passes two additional glfs_stat structs */
4335 static void
4336 glusterfs_iocb(glfs_fd_t *fd, ssize_t ret, struct glfs_stat *prestat, struct glfs_stat *poststat, void *data)
4337 {}
4338
4339 int
4340 main(void)
4341 {
4342         glfs_io_cbk iocb = &glusterfs_iocb;
4343         iocb(NULL, 0 , NULL, NULL, NULL);
4344         return 0;
4345 }
4346 EOF
4347     if compile_prog "$glusterfs_cflags" "$glusterfs_libs" ; then
4348       glusterfs_iocb_has_stat="yes"
4349     fi
4350   else
4351     if test "$glusterfs" = "yes" ; then
4352       feature_not_found "GlusterFS backend support" \
4353           "Install glusterfs-api devel >= 3"
4354     fi
4355     glusterfs="no"
4356   fi
4357 fi
4358
4359 # Check for inotify functions when we are building linux-user
4360 # emulator.  This is done because older glibc versions don't
4361 # have syscall stubs for these implemented.  In that case we
4362 # don't provide them even if kernel supports them.
4363 #
4364 inotify=no
4365 cat > $TMPC << EOF
4366 #include <sys/inotify.h>
4367
4368 int
4369 main(void)
4370 {
4371         /* try to start inotify */
4372         return inotify_init();
4373 }
4374 EOF
4375 if compile_prog "" "" ; then
4376   inotify=yes
4377 fi
4378
4379 inotify1=no
4380 cat > $TMPC << EOF
4381 #include <sys/inotify.h>
4382
4383 int
4384 main(void)
4385 {
4386     /* try to start inotify */
4387     return inotify_init1(0);
4388 }
4389 EOF
4390 if compile_prog "" "" ; then
4391   inotify1=yes
4392 fi
4393
4394 # check if pipe2 is there
4395 pipe2=no
4396 cat > $TMPC << EOF
4397 #include <unistd.h>
4398 #include <fcntl.h>
4399
4400 int main(void)
4401 {
4402     int pipefd[2];
4403     return pipe2(pipefd, O_CLOEXEC);
4404 }
4405 EOF
4406 if compile_prog "" "" ; then
4407   pipe2=yes
4408 fi
4409
4410 # check if accept4 is there
4411 accept4=no
4412 cat > $TMPC << EOF
4413 #include <sys/socket.h>
4414 #include <stddef.h>
4415
4416 int main(void)
4417 {
4418     accept4(0, NULL, NULL, SOCK_CLOEXEC);
4419     return 0;
4420 }
4421 EOF
4422 if compile_prog "" "" ; then
4423   accept4=yes
4424 fi
4425
4426 # check if tee/splice is there. vmsplice was added same time.
4427 splice=no
4428 cat > $TMPC << EOF
4429 #include <unistd.h>
4430 #include <fcntl.h>
4431 #include <limits.h>
4432
4433 int main(void)
4434 {
4435     int len, fd = 0;
4436     len = tee(STDIN_FILENO, STDOUT_FILENO, INT_MAX, SPLICE_F_NONBLOCK);
4437     splice(STDIN_FILENO, NULL, fd, NULL, len, SPLICE_F_MOVE);
4438     return 0;
4439 }
4440 EOF
4441 if compile_prog "" "" ; then
4442   splice=yes
4443 fi
4444
4445 ##########################################
4446 # libnuma probe
4447
4448 if test "$numa" != "no" ; then
4449   cat > $TMPC << EOF
4450 #include <numa.h>
4451 int main(void) { return numa_available(); }
4452 EOF
4453
4454   if compile_prog "" "-lnuma" ; then
4455     numa=yes
4456     libs_softmmu="-lnuma $libs_softmmu"
4457   else
4458     if test "$numa" = "yes" ; then
4459       feature_not_found "numa" "install numactl devel"
4460     fi
4461     numa=no
4462   fi
4463 fi
4464
4465 if test "$tcmalloc" = "yes" && test "$jemalloc" = "yes" ; then
4466     echo "ERROR: tcmalloc && jemalloc can't be used at the same time"
4467     exit 1
4468 fi
4469
4470 # Even if malloc_trim() is available, these non-libc memory allocators
4471 # do not support it.
4472 if test "$tcmalloc" = "yes" || test "$jemalloc" = "yes" ; then
4473     if test "$malloc_trim" = "yes" ; then
4474         echo "Disabling malloc_trim with non-libc memory allocator"
4475     fi
4476     malloc_trim="no"
4477 fi
4478
4479 #######################################
4480 # malloc_trim
4481
4482 if test "$malloc_trim" != "no" ; then
4483     cat > $TMPC << EOF
4484 #include <malloc.h>
4485 int main(void) { malloc_trim(0); return 0; }
4486 EOF
4487     if compile_prog "" "" ; then
4488         malloc_trim="yes"
4489     else
4490         malloc_trim="no"
4491     fi
4492 fi
4493
4494 ##########################################
4495 # tcmalloc probe
4496
4497 if test "$tcmalloc" = "yes" ; then
4498   cat > $TMPC << EOF
4499 #include <stdlib.h>
4500 int main(void) { malloc(1); return 0; }
4501 EOF
4502
4503   if compile_prog "" "-ltcmalloc" ; then
4504     LIBS="-ltcmalloc $LIBS"
4505   else
4506     feature_not_found "tcmalloc" "install gperftools devel"
4507   fi
4508 fi
4509
4510 ##########################################
4511 # jemalloc probe
4512
4513 if test "$jemalloc" = "yes" ; then
4514   cat > $TMPC << EOF
4515 #include <stdlib.h>
4516 int main(void) { malloc(1); return 0; }
4517 EOF
4518
4519   if compile_prog "" "-ljemalloc" ; then
4520     LIBS="-ljemalloc $LIBS"
4521   else
4522     feature_not_found "jemalloc" "install jemalloc devel"
4523   fi
4524 fi
4525
4526 ##########################################
4527 # signalfd probe
4528 signalfd="no"
4529 cat > $TMPC << EOF
4530 #include <unistd.h>
4531 #include <sys/syscall.h>
4532 #include <signal.h>
4533 int main(void) { return syscall(SYS_signalfd, -1, NULL, _NSIG / 8); }
4534 EOF
4535
4536 if compile_prog "" "" ; then
4537   signalfd=yes
4538 fi
4539
4540 # check if optreset global is declared by <getopt.h>
4541 optreset="no"
4542 cat > $TMPC << EOF
4543 #include <getopt.h>
4544 int main(void) { return optreset; }
4545 EOF
4546
4547 if compile_prog "" "" ; then
4548   optreset=yes
4549 fi
4550
4551 # check if eventfd is supported
4552 eventfd=no
4553 cat > $TMPC << EOF
4554 #include <sys/eventfd.h>
4555
4556 int main(void)
4557 {
4558     return eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC);
4559 }
4560 EOF
4561 if compile_prog "" "" ; then
4562   eventfd=yes
4563 fi
4564
4565 # check if memfd is supported
4566 memfd=no
4567 cat > $TMPC << EOF
4568 #include <sys/mman.h>
4569
4570 int main(void)
4571 {
4572     return memfd_create("foo", MFD_ALLOW_SEALING);
4573 }
4574 EOF
4575 if compile_prog "" "" ; then
4576   memfd=yes
4577 fi
4578
4579 # check for usbfs
4580 have_usbfs=no
4581 if test "$linux_user" = "yes"; then
4582   cat > $TMPC << EOF
4583 #include <linux/usbdevice_fs.h>
4584
4585 #ifndef USBDEVFS_GET_CAPABILITIES
4586 #error "USBDEVFS_GET_CAPABILITIES undefined"
4587 #endif
4588
4589 #ifndef USBDEVFS_DISCONNECT_CLAIM
4590 #error "USBDEVFS_DISCONNECT_CLAIM undefined"
4591 #endif
4592
4593 int main(void)
4594 {
4595     return 0;
4596 }
4597 EOF
4598   if compile_prog "" ""; then
4599     have_usbfs=yes
4600   fi
4601 fi
4602
4603 # check for fallocate
4604 fallocate=no
4605 cat > $TMPC << EOF
4606 #include <fcntl.h>
4607
4608 int main(void)
4609 {
4610     fallocate(0, 0, 0, 0);
4611     return 0;
4612 }
4613 EOF
4614 if compile_prog "" "" ; then
4615   fallocate=yes
4616 fi
4617
4618 # check for fallocate hole punching
4619 fallocate_punch_hole=no
4620 cat > $TMPC << EOF
4621 #include <fcntl.h>
4622 #include <linux/falloc.h>
4623
4624 int main(void)
4625 {
4626     fallocate(0, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, 0, 0);
4627     return 0;
4628 }
4629 EOF
4630 if compile_prog "" "" ; then
4631   fallocate_punch_hole=yes
4632 fi
4633
4634 # check that fallocate supports range zeroing inside the file
4635 fallocate_zero_range=no
4636 cat > $TMPC << EOF
4637 #include <fcntl.h>
4638 #include <linux/falloc.h>
4639
4640 int main(void)
4641 {
4642     fallocate(0, FALLOC_FL_ZERO_RANGE, 0, 0);
4643     return 0;
4644 }
4645 EOF
4646 if compile_prog "" "" ; then
4647   fallocate_zero_range=yes
4648 fi
4649
4650 # check for posix_fallocate
4651 posix_fallocate=no
4652 cat > $TMPC << EOF
4653 #include <fcntl.h>
4654
4655 int main(void)
4656 {
4657     posix_fallocate(0, 0, 0);
4658     return 0;
4659 }
4660 EOF
4661 if compile_prog "" "" ; then
4662     posix_fallocate=yes
4663 fi
4664
4665 # check for sync_file_range
4666 sync_file_range=no
4667 cat > $TMPC << EOF
4668 #include <fcntl.h>
4669
4670 int main(void)
4671 {
4672     sync_file_range(0, 0, 0, 0);
4673     return 0;
4674 }
4675 EOF
4676 if compile_prog "" "" ; then
4677   sync_file_range=yes
4678 fi
4679
4680 # check for linux/fiemap.h and FS_IOC_FIEMAP
4681 fiemap=no
4682 cat > $TMPC << EOF
4683 #include <sys/ioctl.h>
4684 #include <linux/fs.h>
4685 #include <linux/fiemap.h>
4686
4687 int main(void)
4688 {
4689     ioctl(0, FS_IOC_FIEMAP, 0);
4690     return 0;
4691 }
4692 EOF
4693 if compile_prog "" "" ; then
4694   fiemap=yes
4695 fi
4696
4697 # check for dup3
4698 dup3=no
4699 cat > $TMPC << EOF
4700 #include <unistd.h>
4701
4702 int main(void)
4703 {
4704     dup3(0, 0, 0);
4705     return 0;
4706 }
4707 EOF
4708 if compile_prog "" "" ; then
4709   dup3=yes
4710 fi
4711
4712 # check for ppoll support
4713 ppoll=no
4714 cat > $TMPC << EOF
4715 #include <poll.h>
4716
4717 int main(void)
4718 {
4719     struct pollfd pfd = { .fd = 0, .events = 0, .revents = 0 };
4720     ppoll(&pfd, 1, 0, 0);
4721     return 0;
4722 }
4723 EOF
4724 if compile_prog "" "" ; then
4725   ppoll=yes
4726 fi
4727
4728 # check for prctl(PR_SET_TIMERSLACK , ... ) support
4729 prctl_pr_set_timerslack=no
4730 cat > $TMPC << EOF
4731 #include <sys/prctl.h>
4732
4733 int main(void)
4734 {
4735     prctl(PR_SET_TIMERSLACK, 1, 0, 0, 0);
4736     return 0;
4737 }
4738 EOF
4739 if compile_prog "" "" ; then
4740   prctl_pr_set_timerslack=yes
4741 fi
4742
4743 # check for epoll support
4744 epoll=no
4745 cat > $TMPC << EOF
4746 #include <sys/epoll.h>
4747
4748 int main(void)
4749 {
4750     epoll_create(0);
4751     return 0;
4752 }
4753 EOF
4754 if compile_prog "" "" ; then
4755   epoll=yes
4756 fi
4757
4758 # epoll_create1 is a later addition
4759 # so we must check separately for its presence
4760 epoll_create1=no
4761 cat > $TMPC << EOF
4762 #include <sys/epoll.h>
4763
4764 int main(void)
4765 {
4766     /* Note that we use epoll_create1 as a value, not as
4767      * a function being called. This is necessary so that on
4768      * old SPARC glibc versions where the function was present in
4769      * the library but not declared in the header file we will
4770      * fail the configure check. (Otherwise we will get a compiler
4771      * warning but not an error, and will proceed to fail the
4772      * qemu compile where we compile with -Werror.)
4773      */
4774     return (int)(uintptr_t)&epoll_create1;
4775 }
4776 EOF
4777 if compile_prog "" "" ; then
4778   epoll_create1=yes
4779 fi
4780
4781 # check for sendfile support
4782 sendfile=no
4783 cat > $TMPC << EOF
4784 #include <sys/sendfile.h>
4785
4786 int main(void)
4787 {
4788     return sendfile(0, 0, 0, 0);
4789 }
4790 EOF
4791 if compile_prog "" "" ; then
4792   sendfile=yes
4793 fi
4794
4795 # check for timerfd support (glibc 2.8 and newer)
4796 timerfd=no
4797 cat > $TMPC << EOF
4798 #include <sys/timerfd.h>
4799
4800 int main(void)
4801 {
4802     return(timerfd_create(CLOCK_REALTIME, 0));
4803 }
4804 EOF
4805 if compile_prog "" "" ; then
4806   timerfd=yes
4807 fi
4808
4809 # check for setns and unshare support
4810 setns=no
4811 cat > $TMPC << EOF
4812 #include <sched.h>
4813
4814 int main(void)
4815 {
4816     int ret;
4817     ret = setns(0, 0);
4818     ret = unshare(0);
4819     return ret;
4820 }
4821 EOF
4822 if compile_prog "" "" ; then
4823   setns=yes
4824 fi
4825
4826 # clock_adjtime probe
4827 clock_adjtime=no
4828 cat > $TMPC <<EOF
4829 #include <time.h>
4830
4831 int main(void)
4832 {
4833     return clock_adjtime(0, 0);
4834 }
4835 EOF
4836 clock_adjtime=no
4837 if compile_prog "" "" ; then
4838   clock_adjtime=yes
4839 fi
4840
4841 # syncfs probe
4842 syncfs=no
4843 cat > $TMPC <<EOF
4844 #include <unistd.h>
4845
4846 int main(void)
4847 {
4848     return syncfs(0);
4849 }
4850 EOF
4851 syncfs=no
4852 if compile_prog "" "" ; then
4853   syncfs=yes
4854 fi
4855
4856 # check for kcov support (kernel must be 4.4+, compiled with certain options)
4857 kcov=no
4858 if check_include sys/kcov.h ; then
4859     kcov=yes
4860 fi
4861
4862 # Check we have a new enough version of sphinx-build
4863 has_sphinx_build() {
4864     # This is a bit awkward but works: create a trivial document and
4865     # try to run it with our configuration file (which enforces a
4866     # version requirement). This will fail if either
4867     # sphinx-build doesn't exist at all or if it is too old.
4868     mkdir -p "$TMPDIR1/sphinx"
4869     touch "$TMPDIR1/sphinx/index.rst"
4870     "$sphinx_build" -c "$source_path/docs" -b html "$TMPDIR1/sphinx" "$TMPDIR1/sphinx/out" >/dev/null 2>&1
4871 }
4872