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