OSDN Git Service

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