OSDN Git Service

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