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