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