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