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