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