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