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