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