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