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