OSDN Git Service

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