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