#!/bin/sh
#
# qemu configure script (c) 2003 Fabrice Bellard
#
# set temporary file name
if test ! -z "$TMPDIR" ; then
    TMPDIR1="${TMPDIR}"
elif test ! -z "$TEMPDIR" ; then
    TMPDIR1="${TEMPDIR}"
else
    TMPDIR1="/tmp"
fi

TMPC="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.c"
TMPO="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.o"
TMPE="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}"
TMPS="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.S"
TMPI="${TMPDIR1}/qemu-conf-${RANDOM}-$$-${RANDOM}.i"
TMPSDLLOG="${TMPDIR1}/qemu-conf-sdl-$$-${RANDOM}.log"

trap "rm -f $TMPC $TMPO $TMPE $TMPS $TMPI $TMPSDLLOG; exit" 0 2 3 15

# default parameters
prefix=""
interp_prefix="/usr/gnemul/qemu-%M"
static="no"
cross_prefix=""
cc="gcc"
audio_drv_list=""
audio_card_list="ac97 es1370 sb16"
audio_possible_cards="ac97 es1370 sb16 cs4231a adlib gus"
host_cc="gcc"
ar="ar"
make="make"
install="install"
strip="strip"

# parse CC options first
for opt do
  optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
  case "$opt" in
  --cross-prefix=*) cross_prefix="$optarg"
  ;;
  --cc=*) cc="$optarg"
  ;;
  esac
done

# OS specific
# Using uname is really, really broken.  Once we have the right set of checks
# we can eliminate it's usage altogether

cc="${cross_prefix}${cc}"
ar="${cross_prefix}${ar}"
strip="${cross_prefix}${strip}"

# check that the C compiler works.
cat > $TMPC <<EOF
int main(void) {}
EOF

if $cc $ARCH_CFLAGS -c -o $TMPO $TMPC > /dev/null 2> /dev/null ; then
  : C compiler works ok
else
    echo "ERROR: \"$cc\" either does not exist or does not work"
    exit 1
fi

check_define() {
cat > $TMPC <<EOF
#if !defined($1)
#error Not defined
#endif
int main(void) { return 0; }
EOF
  $cc $ARCH_CFLAGS -c -o $TMPO $TMPC > /dev/null 2> /dev/null
}

if check_define __i386__ ; then
  cpu="i386"
elif check_define __x86_64__ ; then
  cpu="x86_64"
elif check_define __sparc__ ; then
  # We can't check for 64 bit (when gcc is biarch) or V8PLUSA
  # They must be specified using --sparc_cpu
  if check_define __arch64__ ; then
    cpu="sparc64"
  else
    cpu="sparc"
  fi
elif check_define _ARCH_PPC ; then
  if check_define _ARCH_PPC64 ; then
    cpu="ppc64"
  else
    cpu="ppc"
  fi
else
  cpu=`uname -m`
fi

target_list=""
case "$cpu" in
  i386|i486|i586|i686|i86pc|BePC)
    cpu="i386"
  ;;
  x86_64|amd64)
    cpu="x86_64"
  ;;
  alpha)
    cpu="alpha"
  ;;
  armv*b)
    cpu="armv4b"
  ;;
  armv*l)
    cpu="armv4l"
  ;;
  cris)
    cpu="cris"
  ;;
  parisc|parisc64)
    cpu="hppa"
  ;;
  ia64)
    cpu="ia64"
  ;;
  m68k)
    cpu="m68k"
  ;;
  mips)
    cpu="mips"
  ;;
  mips64)
    cpu="mips64"
  ;;
  ppc)
    cpu="ppc"
  ;;
  ppc64)
    cpu="ppc64"
  ;;
  s390*)
    cpu="s390"
  ;;
  sparc|sun4[cdmuv])
    cpu="sparc"
  ;;
  sparc64)
    cpu="sparc64"
  ;;
  *)
    cpu="unknown"
  ;;
esac
gprof="no"
sparse="no"
bigendian="no"
mingw32="no"
EXESUF=""
gdbstub="yes"
slirp="yes"
vde="yes"
fmod_lib=""
fmod_inc=""
oss_lib=""
vnc_tls="yes"
bsd="no"
linux="no"
solaris="no"
kqemu="no"
profiler="no"
cocoa="no"
check_gfx="yes"
softmmu="yes"
linux_user="no"
darwin_user="no"
bsd_user="no"
build_docs="no"
uname_release=""
curses="yes"
aio="yes"
nptl="yes"
mixemu="no"
bluez="yes"
kvm="yes"
kerneldir=""
aix="no"
blobs="yes"
fdt="yes"

# OS specific
if check_define __linux__ ; then
  targetos="Linux"
elif check_define _WIN32 ; then
  targetos='MINGW32'
else
  targetos=`uname -s`
fi
case $targetos in
CYGWIN*)
mingw32="yes"
OS_CFLAGS="-mno-cygwin"
if [ "$cpu" = "i386" ] ; then
    kqemu="yes"
fi
audio_possible_drivers="sdl"
;;
MINGW32*)
mingw32="yes"
if [ "$cpu" = "i386" ] ; then
    kqemu="yes"
fi
audio_possible_drivers="dsound sdl fmod"
;;
GNU/kFreeBSD)
audio_drv_list="oss"
audio_possible_drivers="oss sdl esd pa"
if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
    kqemu="yes"
fi
;;
FreeBSD)
bsd="yes"
audio_drv_list="oss"
audio_possible_drivers="oss sdl esd pa"
if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
    kqemu="yes"
fi
;;
NetBSD)
bsd="yes"
audio_drv_list="oss"
audio_possible_drivers="oss sdl esd"
oss_lib="-lossaudio"
;;
OpenBSD)
bsd="yes"
openbsd="yes"
audio_drv_list="oss"
audio_possible_drivers="oss sdl esd"
oss_lib="-lossaudio"
;;
Darwin)
bsd="yes"
darwin="yes"
# on Leopard most of the system is 32-bit, so we have to ask the kernel it if we can run 64-bit userspace code
is_x86_64=`sysctl -n hw.optional.x86_64`
if [ "$is_x86_64" = "1" ]; then
    cpu=x86_64
fi
if [ "$cpu" = "x86_64" ] ; then
    OS_CFLAGS="-arch x86_64"
    LDFLAGS="-arch x86_64"
else
    OS_CFLAGS="-mdynamic-no-pic"
fi
darwin_user="yes"
cocoa="yes"
audio_drv_list="coreaudio"
audio_possible_drivers="coreaudio sdl fmod"
OS_LDFLAGS="-framework CoreFoundation -framework IOKit"
;;
SunOS)
    solaris="yes"
    make="gmake"
    install="ginstall"
    needs_libsunmath="no"
    solarisrev=`uname -r | cut -f2 -d.`
    # have to select again, because `uname -m` returns i86pc
    # even on an x86_64 box.
    solariscpu=`isainfo -k`
    if test "${solariscpu}" = "amd64" ; then
        cpu="x86_64"
    fi
    if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
        if test "$solarisrev" -le 9 ; then
            if test -f /opt/SUNWspro/prod/lib/libsunmath.so.1; then
                needs_libsunmath="yes"
            else
                echo "QEMU will not link correctly on Solaris 8/X86 or 9/x86 without"
                echo "libsunmath from the Sun Studio compilers tools, due to a lack of"
                echo "C99 math features in libm.so in Solaris 8/x86 and Solaris 9/x86"
                echo "Studio 11 can be downloaded from www.sun.com."
                exit 1
            fi
        fi
        if test "$solarisrev" -ge 9 ; then
            kqemu="yes"
        fi
    fi
    if test -f /usr/include/sys/soundcard.h ; then
        audio_drv_list="oss"
    fi
    audio_possible_drivers="oss sdl"
;;
AIX)
aix="yes"
make="gmake"
;;
*)
audio_drv_list="oss"
audio_possible_drivers="oss alsa sdl esd pa"
linux="yes"
linux_user="yes"
usb="linux"
if [ "$cpu" = "i386" -o "$cpu" = "x86_64" ] ; then
    kqemu="yes"
    audio_possible_drivers="$audio_possible_drivers fmod"
fi
;;
esac

if [ "$bsd" = "yes" ] ; then
  if [ "$darwin" != "yes" ] ; then
    make="gmake"
    usb="bsd"
  fi
  bsd_user="yes"
fi

# find source path
source_path=`dirname "$0"`
source_path_used="no"
workdir=`pwd`
if [ -z "$source_path" ]; then
    source_path=$workdir
else
    source_path=`cd "$source_path"; pwd`
fi
[ -f "$workdir/vl.c" ] || source_path_used="yes"

werror="no"
# generate compile errors on warnings for development builds
#if grep cvs $source_path/VERSION > /dev/null 2>&1 ; then
#werror="yes";
#fi

for opt do
  optarg=`expr "x$opt" : 'x[^=]*=\(.*\)'`
  case "$opt" in
  --help|-h) show_help=yes
  ;;
  --prefix=*) prefix="$optarg"
  ;;
  --interp-prefix=*) interp_prefix="$optarg"
  ;;
  --source-path=*) source_path="$optarg"
  source_path_used="yes"
  ;;
  --cross-prefix=*)
  ;;
  --cc=*)
  ;;
  --host-cc=*) host_cc="$optarg"
  ;;
  --make=*) make="$optarg"
  ;;
  --install=*) install="$optarg"
  ;;
  --extra-cflags=*) CFLAGS="$optarg"
  ;;
  --extra-ldflags=*) LDFLAGS="$optarg"
  ;;
  --cpu=*) cpu="$optarg"
  ;;
  --target-list=*) target_list="$optarg"
  ;;
  --enable-gprof) gprof="yes"
  ;;
  --static) static="yes"
  ;;
  --disable-sdl) sdl="no"
  ;;
  --fmod-lib=*) fmod_lib="$optarg"
  ;;
  --fmod-inc=*) fmod_inc="$optarg"
  ;;
  --oss-lib=*) oss_lib="$optarg"
  ;;
  --audio-card-list=*) audio_card_list=`echo "$optarg" | sed -e 's/,/ /g'`
  ;;
  --audio-drv-list=*) audio_drv_list="$optarg"
  ;;
  --enable-sparse) sparse="yes"
  ;;
  --disable-sparse) sparse="no"
  ;;
  --disable-vnc-tls) vnc_tls="no"
  ;;
  --disable-slirp) slirp="no"
  ;;
  --disable-vde) vde="no"
  ;;
  --disable-kqemu) kqemu="no"
  ;;
  --disable-brlapi) brlapi="no"
  ;;
  --disable-bluez) bluez="no"
  ;;
  --disable-kvm) kvm="no"
  ;;
  --enable-profiler) profiler="yes"
  ;;
  --enable-cocoa)
      cocoa="yes" ;
      sdl="no" ;
      audio_drv_list="coreaudio `echo $audio_drv_list | sed s,coreaudio,,g`"
  ;;
  --disable-gfx-check) check_gfx="no"
  ;;
  --disable-system) softmmu="no"
  ;;
  --enable-system) softmmu="yes"
  ;;
  --disable-linux-user) linux_user="no"
  ;;
  --enable-linux-user) linux_user="yes"
  ;;
  --disable-darwin-user) darwin_user="no"
  ;;
  --enable-darwin-user) darwin_user="yes"
  ;;
  --disable-bsd-user) bsd_user="no"
  ;;
  --enable-bsd-user) bsd_user="yes"
  ;;
  --enable-uname-release=*) uname_release="$optarg"
  ;;
  --sparc_cpu=*)
      sparc_cpu="$optarg"
      case $sparc_cpu in
        v7|v8) SP_CFLAGS="-m32 -mcpu=${sparc_cpu} -D__sparc_${sparc_cpu}__"; SP_LDFLAGS="-m32"
                 target_cpu="sparc"; cpu="sparc" ;;
        v8plus|v8plusa) SP_CFLAGS="-m32 -mcpu=ultrasparc -D__sparc_${sparc_cpu}__"; SP_LDFLAGS="-m32"
                 target_cpu="sparc"; cpu="sparc" ;;
        v9)    SP_CFLAGS="-m64 -mcpu=ultrasparc -D__sparc_${sparc_cpu}__"; SP_LDFLAGS="-m64"
                 target_cpu="sparc64"; cpu="sparc64" ;;
        *)     echo "undefined SPARC architecture. Exiting";exit 1;;
      esac
  ;;
  --enable-werror) werror="yes"
  ;;
  --disable-werror) werror="no"
  ;;
  --disable-curses) curses="no"
  ;;
  --disable-nptl) nptl="no"
  ;;
  --enable-mixemu) mixemu="yes"
  ;;
  --disable-aio) aio="no"
  ;;
  --disable-blobs) blobs="no"
  ;;
  --kerneldir=*) kerneldir="$optarg"
  ;;
  *) echo "ERROR: unknown option $opt"; show_help="yes"
  ;;
  esac
done

# default flags for all hosts
CFLAGS="$CFLAGS -O2 -g -fno-strict-aliasing"
CFLAGS="$CFLAGS -Wall -Wundef -Wendif-labels -Wwrite-strings -Wmissing-prototypes -Wstrict-prototypes -Wredundant-decls"
LDFLAGS="$LDFLAGS -g"
if test "$werror" = "yes" ; then
CFLAGS="$CFLAGS -Werror"
fi

if test "$solaris" = "no" ; then
    if ld --version 2>/dev/null | grep "GNU ld" >/dev/null 2>/dev/null ; then
        LDFLAGS="$LDFLAGS -Wl,--warn-common"
    fi
fi

#
# If cpu ~= sparc and  sparc_cpu hasn't been defined, plug in the right
# ARCH_CFLAGS/ARCH_LDFLAGS (assume sparc_v8plus for 32-bit and sparc_v9 for 64-bit)
#
case "$cpu" in
    sparc) if test -z "$sparc_cpu" ; then
               ARCH_CFLAGS="-m32 -mcpu=ultrasparc -D__sparc_v8plus__"
               ARCH_LDFLAGS="-m32"
           else
               ARCH_CFLAGS="${SP_CFLAGS}"
               ARCH_LDFLAGS="${SP_LDFLAGS}"
           fi
           ;;
    sparc64) if test -z "$sparc_cpu" ; then
               ARCH_CFLAGS="-m64 -mcpu=ultrasparc -D__sparc_v9__"
               ARCH_LDFLAGS="-m64"
           else
               ARCH_CFLAGS="${SP_CFLAGS}"
               ARCH_LDFLAGS="${SP_LDFLAGS}"
           fi
           ;;
    s390)
           ARCH_CFLAGS="-march=z900"
           ;;
    i386)
           ARCH_CFLAGS="-m32"
           ARCH_LDFLAGS="-m32"
           ;;
    x86_64)
           ARCH_CFLAGS="-m64"
           ARCH_LDFLAGS="-m64"
           ;;
esac

if test x"$show_help" = x"yes" ; then
cat << EOF

Usage: configure [options]
Options: [defaults in brackets after descriptions]

EOF
echo "Standard options:"
echo "  --help                   print this message"
echo "  --prefix=PREFIX          install in PREFIX [$prefix]"
echo "  --interp-prefix=PREFIX   where to find shared libraries, etc."
echo "                           use %M for cpu name [$interp_prefix]"
echo "  --target-list=LIST       set target list [$target_list]"
echo ""
echo "kqemu kernel acceleration support:"
echo "  --disable-kqemu          disable kqemu support"
echo ""
echo "Advanced options (experts only):"
echo "  --source-path=PATH       path of source code [$source_path]"
echo "  --cross-prefix=PREFIX    use PREFIX for compile tools [$cross_prefix]"
echo "  --cc=CC                  use C compiler CC [$cc]"
echo "  --host-cc=CC             use C compiler CC [$host_cc] for dyngen etc."
echo "  --make=MAKE              use specified make [$make]"
echo "  --install=INSTALL        use specified install [$install]"
echo "  --static                 enable static build [$static]"
echo "  --enable-sparse          enable sparse checker"
echo "  --disable-sparse         disable sparse checker (default)"
echo "  --disable-werror         disable compilation abort on warning"
echo "  --disable-sdl            disable SDL"
echo "  --enable-cocoa           enable COCOA (Mac OS X only)"
echo "  --audio-drv-list=LIST    set audio drivers list:"
echo "                           Available drivers: $audio_possible_drivers"
echo "  --audio-card-list=LIST   set list of emulated audio cards [$audio_card_list]"
echo "                           Available cards: $audio_possible_cards"
echo "  --enable-mixemu          enable mixer emulation"
echo "  --disable-brlapi         disable BrlAPI"
echo "  --disable-vnc-tls        disable TLS encryption for VNC server"
echo "  --disable-curses         disable curses output"
echo "  --disable-bluez          disable bluez stack connectivity"
echo "  --disable-kvm            disable KVM acceleration support"
echo "  --disable-nptl           disable usermode NPTL support"
echo "  --enable-system          enable all system emulation targets"
echo "  --disable-system         disable all system emulation targets"
echo "  --enable-linux-user      enable all linux usermode emulation targets"
echo "  --disable-linux-user     disable all linux usermode emulation targets"
echo "  --enable-darwin-user     enable all darwin usermode emulation targets"
echo "  --disable-darwin-user    disable all darwin usermode emulation targets"
echo "  --enable-bsd-user        enable all BSD usermode emulation targets"
echo "  --disable-bsd-user       disable all BSD usermode emulation targets"
echo "  --fmod-lib               path to FMOD library"
echo "  --fmod-inc               path to FMOD includes"
echo "  --oss-lib                path to OSS library"
echo "  --enable-uname-release=R Return R for uname -r in usermode emulation"
echo "  --sparc_cpu=V            Build qemu for Sparc architecture v7, v8, v8plus, v8plusa, v9"
echo "  --disable-vde            disable support for vde network"
echo "  --disable-aio            disable AIO support"
echo "  --disable-blobs          disable installing provided firmware blobs"
echo "  --kerneldir=PATH         look for kernel includes in PATH"
echo ""
echo "NOTE: The object files are built at the place where configure is launched"
exit 1
fi

if test "$mingw32" = "yes" ; then
    linux="no"
    EXESUF=".exe"
    oss="no"
    linux_user="no"
    bsd_user="no"
fi

if test ! -x "$(which cgcc 2>/dev/null)"; then
    sparse="no"
fi

#
# Solaris specific configure tool chain decisions
#
if test "$solaris" = "yes" ; then
  solinst=`which $install 2> /dev/null | /usr/bin/grep -v "no $install in"`
  if test -z "$solinst" ; then
    echo "Solaris install program not found. Use --install=/usr/ucb/install or"
    echo "install fileutils from www.blastwave.org using pkg-get -i fileutils"
    echo "to get ginstall which is used by default (which lives in /opt/csw/bin)"
    exit 1
  fi
  if test "$solinst" = "/usr/sbin/install" ; then
    echo "Error: Solaris /usr/sbin/install is not an appropriate install program."
    echo "try ginstall from the GNU fileutils available from www.blastwave.org"
    echo "using pkg-get -i fileutils, or use --install=/usr/ucb/install"
    exit 1
  fi
  sol_ar=`which ar 2> /dev/null | /usr/bin/grep -v "no ar in"`
  if test -z "$sol_ar" ; then
    echo "Error: No path includes ar"
    if test -f /usr/ccs/bin/ar ; then
      echo "Add /usr/ccs/bin to your path and rerun configure"
    fi
    exit 1
  fi
fi


if test -z "$target_list" ; then
# these targets are portable
    if [ "$softmmu" = "yes" ] ; then
        target_list="\
i386-softmmu \
x86_64-softmmu \
arm-softmmu \
cris-softmmu \
m68k-softmmu \
mips-softmmu \
mipsel-softmmu \
mips64-softmmu \
mips64el-softmmu \
ppc-softmmu \
ppcemb-softmmu \
ppc64-softmmu \
sh4-softmmu \
sh4eb-softmmu \
sparc-softmmu \
"
    fi
# the following are Linux specific
    if [ "$linux_user" = "yes" ] ; then
        target_list="${target_list}\
i386-linux-user \
x86_64-linux-user \
alpha-linux-user \
arm-linux-user \
armeb-linux-user \
cris-linux-user \
m68k-linux-user \
mips-linux-user \
mipsel-linux-user \
ppc-linux-user \
ppc64-linux-user \
ppc64abi32-linux-user \
sh4-linux-user \
sh4eb-linux-user \
sparc-linux-user \
sparc64-linux-user \
sparc32plus-linux-user \
"
    fi
# the following are Darwin specific
    if [ "$darwin_user" = "yes" ] ; then
        target_list="$target_list i386-darwin-user ppc-darwin-user "
    fi
# the following are BSD specific
    if [ "$bsd_user" = "yes" ] ; then
        target_list="${target_list}\
sparc64-bsd-user \
"
    fi
else
    target_list=`echo "$target_list" | sed -e 's/,/ /g'`
fi
if test -z "$target_list" ; then
    echo "No targets enabled"
    exit 1
fi

if test -z "$cross_prefix" ; then

# ---
# big/little endian test
cat > $TMPC << EOF
#include <inttypes.h>
int main(int argc, char ** argv){
        volatile uint32_t i=0x01234567;
        return (*((uint8_t*)(&i))) == 0x67;
}
EOF

if $cc $ARCH_CFLAGS -o $TMPE $TMPC > /dev/null 2> /dev/null ; then
$TMPE && bigendian="yes"
else
echo big/little test failed
fi

else

# if cross compiling, cannot launch a program, so make a static guess
if test "$cpu" = "armv4b" \
     -o "$cpu" = "hppa" \
     -o "$cpu" = "m68k" \
     -o "$cpu" = "mips" \
     -o "$cpu" = "mips64" \
     -o "$cpu" = "ppc" \
     -o "$cpu" = "ppc64" \
     -o "$cpu" = "s390" \
     -o "$cpu" = "sparc" \
     -o "$cpu" = "sparc64"; then
    bigendian="yes"
fi

fi

# host long bits test
hostlongbits="32"
if test "$cpu" = "x86_64" \
     -o "$cpu" = "alpha" \
     -o "$cpu" = "ia64" \
     -o "$cpu" = "sparc64" \
     -o "$cpu" = "ppc64"; then
    hostlongbits="64"
fi

# check gcc options support
cat > $TMPC <<EOF
int main(void) {
}
EOF

# Check host NPTL support
cat > $TMPC <<EOF
#include <sched.h>
#include <linux/futex.h>
void foo()
{
#if !defined(CLONE_SETTLS) || !defined(FUTEX_WAIT)
#error bork
#endif
}
EOF

if $cc $ARCH_CFLAGS -c -o $TMPO $TMPC > /dev/null 2> /dev/null ; then
  :
else
   nptl="no"
fi

##########################################
# zlib check

cat > $TMPC << EOF
#include <zlib.h>
int main(void) { zlibVersion(); return 0; }
EOF
if $cc $ARCH_CFLAGS -o $TMPE ${OS_CFLAGS} $TMPC -lz > /dev/null 2> /dev/null ; then
    :
else
    echo
    echo "Error: zlib check failed"
    echo "Make sure to have the zlib libs and headers installed."
    echo
    exit 1
fi

##########################################
# SDL probe

sdl_too_old=no

if test -z "$sdl" ; then
    sdl_config="sdl-config"
    sdl=no
    sdl_static=no

cat > $TMPC << EOF
#include <SDL.h>
#undef main /* We don't want SDL to override our main() */
int main( void ) { return SDL_Init (SDL_INIT_VIDEO); }
EOF
    if $cc $ARCH_CFLAGS -o $TMPE ${OS_CFLAGS} `$sdl_config --cflags 2> /dev/null` $TMPC `$sdl_config --libs 2> /dev/null` > $TMPSDLLOG 2>&1 ; then
        _sdlversion=`$sdl_config --version | sed 's/[^0-9]//g'`
        if test "$_sdlversion" -lt 121 ; then
            sdl_too_old=yes
        else
            if test "$cocoa" = "no" ; then
                sdl=yes
            fi
        fi

        # static link with sdl ?
        if test "$sdl" = "yes" ; then
            aa="no"
            `$sdl_config --static-libs 2>/dev/null | grep \\\-laa > /dev/null` && aa="yes"
            sdl_static_libs=`$sdl_config --static-libs 2>/dev/null`
            if [ "$aa" = "yes" ] ; then
                sdl_static_libs="$sdl_static_libs `aalib-config --static-libs`"
            fi

            if $cc -o $TMPE ${OS_CFLAGS} `$sdl_config --cflags 2> /dev/null` $TMPC $sdl_static_libs > /dev/null 2> /dev/null; then
                sdl_static=yes
            fi
        fi # static link
    fi # sdl compile test
else
    # Make sure to disable cocoa if sdl was set
    if test "$sdl" = "yes" ; then
       cocoa="no"
       audio_drv_list="`echo $audio_drv_list | sed s,coreaudio,,g`"
    fi
fi # -z $sdl

##########################################
# VNC TLS detection
if test "$vnc_tls" = "yes" ; then
cat > $TMPC <<EOF
#include <gnutls/gnutls.h>
int main(void) { gnutls_session_t s; gnutls_init(&s, GNUTLS_SERVER); return 0; }
EOF
    vnc_tls_cflags=`pkg-config --cflags gnutls 2> /dev/null`
    vnc_tls_libs=`pkg-config --libs gnutls 2> /dev/null`
    if $cc $ARCH_CFLAGS -o $TMPE ${OS_CFLAGS} $vnc_tls_cflags $TMPC \
           $vnc_tls_libs > /dev/null 2> /dev/null ; then
	:
    else
	vnc_tls="no"
    fi
fi

##########################################
# vde libraries probe
if test "$vde" = "yes" ; then
  cat > $TMPC << EOF
#include <libvdeplug.h>
int main(void)
{
    struct vde_open_args a = {0, 0, 0};
    vde_open("", "", &a);
    return 0;
}
EOF
    if $cc $ARCH_CFLAGS -o $TMPE $TMPC -lvdeplug > /dev/null 2> /dev/null ; then
        :
    else
        vde="no"
    fi
fi

##########################################
# Sound support libraries probe

audio_drv_probe()
{
    drv=$1
    hdr=$2
    lib=$3
    exp=$4
    cfl=$5
        cat > $TMPC << EOF
#include <$hdr>
int main(void) { $exp }
EOF
    if $cc $ARCH_CFLAGS $cfl -o $TMPE $TMPC $lib > /dev/null 2> /dev/null ; then
        :
    else
        echo
        echo "Error: $drv check failed"
        echo "Make sure to have the $drv libs and headers installed."
        echo
        exit 1
    fi
}

audio_drv_list=`echo "$audio_drv_list" | sed -e 's/,/ /g'`
for drv in $audio_drv_list; do
    case $drv in
    alsa)
    audio_drv_probe $drv alsa/asoundlib.h -lasound \
        "snd_pcm_t **handle; return snd_pcm_close(*handle);"
    ;;

    fmod)
    if test -z $fmod_lib || test -z $fmod_inc; then
        echo
        echo "Error: You must specify path to FMOD library and headers"
        echo "Example: --fmod-inc=/path/include/fmod --fmod-lib=/path/lib/libfmod-3.74.so"
        echo
        exit 1
    fi
    audio_drv_probe $drv fmod.h $fmod_lib "return FSOUND_GetVersion();" "-I $fmod_inc"
    ;;

    esd)
    audio_drv_probe $drv esd.h -lesd 'return esd_play_stream(0, 0, "", 0);'
    ;;

    pa)
    audio_drv_probe $drv pulse/simple.h -lpulse-simple \
        "pa_simple *s = NULL; pa_simple_free(s); return 0;"
    ;;

    oss|sdl|core|wav|dsound)
    # XXX: Probes for CoreAudio, DirectSound, SDL(?)
    ;;

    *)
    echo "$audio_possible_drivers" | grep -q "\<$drv\>" || {
        echo
        echo "Error: Unknown driver '$drv' selected"
        echo "Possible drivers are: $audio_possible_drivers"
        echo
        exit 1
    }
    ;;
    esac
done

##########################################
# BrlAPI probe

if test -z "$brlapi" ; then
    brlapi=no
cat > $TMPC << EOF
#include <brlapi.h>
int main( void ) { return brlapi__openConnection (NULL, NULL, NULL); }
EOF
    if $cc ${ARCH_CFLAGS} -o $TMPE ${OS_CFLAGS} $TMPC -lbrlapi > /dev/null 2> /dev/null ; then
	    brlapi=yes
    fi # brlapi compile test
fi # -z $brlapi

##########################################
# curses probe

if test "$curses" = "yes" ; then
  curses=no
  cat > $TMPC << EOF
#include <curses.h>
int main(void) { return curses_version(); }
EOF
  if $cc $ARCH_CFLAGS -o $TMPE $TMPC -lcurses > /dev/null 2> /dev/null ; then
    curses=yes
  fi
fi # test "$curses"

##########################################
# bluez support probe
if test "$bluez" = "yes" ; then
  `pkg-config bluez` || bluez="no"
fi
if test "$bluez" = "yes" ; then
  cat > $TMPC << EOF
#include <bluetooth/bluetooth.h>
int main(void) { return bt_error(0); }
EOF
  bluez_cflags=`pkg-config --cflags bluez`
  bluez_libs=`pkg-config --libs bluez`
  if $cc $ARCH_CFLAGS -o $TMPE ${OS_CFLAGS} $bluez_cflags $TMPC \
      $bluez_libs > /dev/null 2> /dev/null ; then
    :
  else
    bluez="no"
  fi
fi

##########################################
# kvm probe
if test "$kvm" = "yes" ; then
    cat > $TMPC <<EOF
#include <linux/kvm.h>
#if !defined(KVM_API_VERSION) || KVM_API_VERSION < 12 || KVM_API_VERSION > 12
#error Invalid KVM version
#endif
#if !defined(KVM_CAP_USER_MEMORY)
#error Missing KVM capability KVM_CAP_USER_MEMORY
#endif
#if !defined(KVM_CAP_SET_TSS_ADDR)
#error Missing KVM capability KVM_CAP_SET_TSS_ADDR
#endif
#if !defined(KVM_CAP_DESTROY_MEMORY_REGION_WORKS)
#error Missing KVM capability KVM_CAP_DESTROY_MEMORY_REGION_WORKS
#endif
int main(void) { return 0; }
EOF
  if test "$kerneldir" != "" ; then
      kvm_cflags=-I"$kerneldir"/include
      if test \( "$cpu" = "i386" -o "$cpu" = "x86_64" \) \
         -a -d "$kerneldir/arch/x86/include" ; then
            kvm_cflags="$kvm_cflags -I$kerneldir/arch/x86/include"
	elif test "$cpu" = "ppc" -a -d "$kerneldir/arch/powerpc/include" ; then
	    kvm_cflags="$kvm_cflags -I$kerneldir/arch/powerpc/include"
        elif test -d "$kerneldir/arch/$cpu/include" ; then
            kvm_cflags="$kvm_cflags -I$kerneldir/arch/$cpu/include"
      fi
  else
      kvm_cflags=""
  fi
  if $cc $ARCH_CFLAGS -o $TMPE ${OS_CFLAGS} $kvm_cflags $TMPC \
      > /dev/null 2>/dev/null ; then
    :
  else
    kvm="no";
    if [ -x "`which awk 2>/dev/null`" ] && \
       [ -x "`which grep 2>/dev/null`" ]; then
      kvmerr=`$cc $ARCH_CFLAGS -o $TMPE ${OS_CFLAGS} $kvm_cflags $TMPC 2>&1 \
	| grep "error: " \
	| awk -F "error: " '{if (NR>1) printf(", "); printf("%s",$2);}'`
      if test "$kvmerr" != "" ; then
        kvm="no - (${kvmerr})"
      fi
    fi
  fi
fi

##########################################
# AIO probe
AIOLIBS=""

if test "$aio" = "yes" ; then
  aio=no
  cat > $TMPC << EOF
#include <pthread.h>
int main(void) { pthread_mutex_t lock;  return 0; }
EOF
  if $cc $ARCH_CFLAGS -o $TMPE $AIOLIBS $TMPC 2> /dev/null ; then
    aio=yes
    AIOLIBS="-lpthread"
  fi
fi

##########################################
# iovec probe
cat > $TMPC <<EOF
#include <sys/types.h>
#include <sys/uio.h>
#include <unistd.h>
int main(void) { struct iovec iov; return 0; }
EOF
iovec=no
if $cc $ARCH_CFLAGS -o $TMPE $TMPC > /dev/null 2> /dev/null ; then
  iovec=yes
fi

##########################################
# fdt probe
if test "$fdt" = "yes" ; then
    fdt=no
    cat > $TMPC << EOF
int main(void) { return 0; }
EOF
  if $cc $ARCH_CFLAGS -o $TMPE ${OS_CFLAGS} $TMPC -lfdt 2> /dev/null ; then
    fdt=yes
  fi
fi

# Check if tools are available to build documentation.
if [ -x "`which texi2html 2>/dev/null`" ] && \
   [ -x "`which pod2man 2>/dev/null`" ]; then
  build_docs="yes"
fi

##########################################
# Do we need librt
cat > $TMPC <<EOF
#include <signal.h>
#include <time.h>
int main(void) { clockid_t id; return clock_gettime(id, NULL); }
EOF

rt=no
if $cc $ARCH_CFLAGS -o $TMPE $TMPC > /dev/null 2> /dev/null ; then
  :
elif $cc $ARCH_CFLAGS -o $TMPE $TMPC -lrt > /dev/null 2> /dev/null ; then
  rt=yes
fi

if test "$rt" = "yes" ; then
  # Hack, we should have a general purpose LIBS for this sort of thing
  AIOLIBS="$AIOLIBS -lrt"
fi

if test "$mingw32" = "yes" ; then
  if test -z "$prefix" ; then
      prefix="c:\\\\Program Files\\\\Qemu"
  fi
  mansuffix=""
  datasuffix=""
  docsuffix=""
  binsuffix=""
else
  if test -z "$prefix" ; then
      prefix="/usr/local"
  fi
  mansuffix="/share/man"
  datasuffix="/share/qemu"
  docsuffix="/share/doc/qemu"
  binsuffix="/bin"
fi

echo "Install prefix    $prefix"
echo "BIOS directory    $prefix$datasuffix"
echo "binary directory  $prefix$binsuffix"
if test "$mingw32" = "no" ; then
echo "Manual directory  $prefix$mansuffix"
echo "ELF interp prefix $interp_prefix"
fi
echo "Source path       $source_path"
echo "C compiler        $cc"
echo "Host C compiler   $host_cc"
echo "ARCH_CFLAGS       $ARCH_CFLAGS"
echo "make              $make"
echo "install           $install"
echo "host CPU          $cpu"
echo "host big endian   $bigendian"
echo "target list       $target_list"
echo "gprof enabled     $gprof"
echo "sparse enabled    $sparse"
echo "profiler          $profiler"
echo "static build      $static"
echo "-Werror enabled   $werror"
if test "$darwin" = "yes" ; then
    echo "Cocoa support     $cocoa"
fi
echo "SDL support       $sdl"
if test "$sdl" != "no" ; then
    echo "SDL static link   $sdl_static"
fi
echo "curses support    $curses"
echo "mingw32 support   $mingw32"
echo "Audio drivers     $audio_drv_list"
echo "Extra audio cards $audio_card_list"
echo "Mixer emulation   $mixemu"
echo "VNC TLS support   $vnc_tls"
if test "$vnc_tls" = "yes" ; then
    echo "    TLS CFLAGS    $vnc_tls_cflags"
    echo "    TLS LIBS      $vnc_tls_libs"
fi
if test -n "$sparc_cpu"; then
    echo "Target Sparc Arch $sparc_cpu"
fi
echo "kqemu support     $kqemu"
echo "brlapi support    $brlapi"
echo "Documentation     $build_docs"
[ ! -z "$uname_release" ] && \
echo "uname -r          $uname_release"
echo "NPTL support      $nptl"
echo "vde support       $vde"
echo "AIO support       $aio"
echo "Install blobs     $blobs"
echo "KVM support       $kvm"
echo "fdt support       $fdt"

if test $sdl_too_old = "yes"; then
echo "-> Your SDL version is too old - please upgrade to have SDL support"
fi
if [ -s $TMPSDLLOG ]; then
  echo "The error log from compiling the libSDL test is: "
  cat $TMPSDLLOG
fi
#if test "$sdl_static" = "no"; then
#  echo "WARNING: cannot compile statically with SDL - qemu-fast won't have a graphical output"
#fi
config_mak="config-host.mak"
config_h="config-host.h"

#echo "Creating $config_mak and $config_h"

test -f $config_h && mv $config_h ${config_h}~

echo "# Automatically generated by configure - do not modify" > $config_mak
printf "# Configured with:" >> $config_mak
printf " '%s'" "$0" "$@" >> $config_mak
echo >> $config_mak
echo "/* Automatically generated by configure - do not modify */" > $config_h

echo "prefix=$prefix" >> $config_mak
echo "bindir=\${prefix}$binsuffix" >> $config_mak
echo "mandir=\${prefix}$mansuffix" >> $config_mak
echo "datadir=\${prefix}$datasuffix" >> $config_mak
echo "docdir=\${prefix}$docsuffix" >> $config_mak
echo "#define CONFIG_QEMU_SHAREDIR \"$prefix$datasuffix\"" >> $config_h
echo "MAKE=$make" >> $config_mak
echo "INSTALL=$install" >> $config_mak
echo "CC=$cc" >> $config_mak
echo "HOST_CC=$host_cc" >> $config_mak
echo "AR=$ar" >> $config_mak
echo "STRIP=$strip -s -R .comment -R .note" >> $config_mak
# XXX: only use CFLAGS and LDFLAGS ?  
# XXX: should export HOST_CFLAGS and HOST_LDFLAGS for cross
# compilation of dyngen tool (useful for win32 build on Linux host)
echo "OS_CFLAGS=$OS_CFLAGS" >> $config_mak
echo "OS_LDFLAGS=$OS_LDFLAGS" >> $config_mak
echo "ARCH_CFLAGS=$ARCH_CFLAGS" >> $config_mak
echo "ARCH_LDFLAGS=$ARCH_LDFLAGS" >> $config_mak
echo "CFLAGS=$CFLAGS" >> $config_mak
echo "LDFLAGS=$LDFLAGS" >> $config_mak
echo "EXESUF=$EXESUF" >> $config_mak
echo "AIOLIBS=$AIOLIBS" >> $config_mak
case "$cpu" in
  i386)
    echo "ARCH=i386" >> $config_mak
    echo "#define HOST_I386 1" >> $config_h
  ;;
  x86_64)
    echo "ARCH=x86_64" >> $config_mak
    echo "#define HOST_X86_64 1" >> $config_h
  ;;
  alpha)
    echo "ARCH=alpha" >> $config_mak
    echo "#define HOST_ALPHA 1" >> $config_h
  ;;
  armv4b)
    echo "ARCH=arm" >> $config_mak
    echo "#define HOST_ARM 1" >> $config_h
  ;;
  armv4l)
    echo "ARCH=arm" >> $config_mak
    echo "#define HOST_ARM 1" >> $config_h
  ;;
  cris)
    echo "ARCH=cris" >> $config_mak
    echo "#define HOST_CRIS 1" >> $config_h
  ;;
  hppa)
    echo "ARCH=hppa" >> $config_mak
    echo "#define HOST_HPPA 1" >> $config_h
  ;;
  ia64)
    echo "ARCH=ia64" >> $config_mak
    echo "#define HOST_IA64 1" >> $config_h
  ;;
  m68k)
    echo "ARCH=m68k" >> $config_mak
    echo "#define HOST_M68K 1" >> $config_h
  ;;
  mips)
    echo "ARCH=mips" >> $config_mak
    echo "#define HOST_MIPS 1" >> $config_h
  ;;
  mips64)
    echo "ARCH=mips64" >> $config_mak
    echo "#define HOST_MIPS64 1" >> $config_h
  ;;
  ppc)
    echo "ARCH=ppc" >> $config_mak
    echo "#define HOST_PPC 1" >> $config_h
  ;;
  ppc64)
    echo "ARCH=ppc64" >> $config_mak
    echo "#define HOST_PPC64 1" >> $config_h
  ;;
  s390)
    echo "ARCH=s390" >> $config_mak
    echo "#define HOST_S390 1" >> $config_h
  ;;
  sparc)
    echo "ARCH=sparc" >> $config_mak
    echo "#define HOST_SPARC 1" >> $config_h
  ;;
  sparc64)
    echo "ARCH=sparc64" >> $config_mak
    echo "#define HOST_SPARC64 1" >> $config_h
  ;;
  *)
    echo "Unsupported CPU = $cpu"
    exit 1
  ;;
esac
if test "$sparse" = "yes" ; then
  echo "CC      := REAL_CC=\"\$(CC)\" cgcc"       >> $config_mak
  echo "HOST_CC := REAL_CC=\"\$(HOST_CC)\" cgcc"  >> $config_mak
  echo "CFLAGS  += -Wbitwise -Wno-transparent-union -Wno-old-initializer -Wno-non-pointer-null" >> $config_mak
fi
if test "$bigendian" = "yes" ; then
  echo "WORDS_BIGENDIAN=yes" >> $config_mak
  echo "#define WORDS_BIGENDIAN 1" >> $config_h
fi
echo "#define HOST_LONG_BITS $hostlongbits" >> $config_h
if test "$mingw32" = "yes" ; then
  echo "CONFIG_WIN32=yes" >> $config_mak
  echo "#define CONFIG_WIN32 1" >> $config_h
else
  cat > $TMPC << EOF
#include <byteswap.h>
int main(void) { return bswap_32(0); }
EOF
  if $cc $ARCH_CFLAGS -o $TMPE $TMPC >/dev/null 2> /dev/null ; then
    echo "#define HAVE_BYTESWAP_H 1" >> $config_h
  fi
  cat > $TMPC << EOF
#include <sys/endian.h>
#include <sys/types.h>
#include <machine/bswap.h>
int main(void) { return bswap32(0); }
EOF
  if $cc $ARCH_CFLAGS -o $TMPE $TMPC >/dev/null 2> /dev/null ; then
    echo "#define HAVE_MACHINE_BSWAP_H 1" >> $config_h
  fi
fi

if [ "$openbsd" = "yes" ] ; then
  echo "#define ENOTSUP 4096" >> $config_h
fi

if test "$darwin" = "yes" ; then
  echo "CONFIG_DARWIN=yes" >> $config_mak
  echo "#define CONFIG_DARWIN 1" >> $config_h
fi

if test "$aix" = "yes" ; then
  echo "CONFIG_AIX=yes" >> $config_mak
  echo "#define CONFIG_AIX 1" >> $config_h
fi

if test "$solaris" = "yes" ; then
  echo "CONFIG_SOLARIS=yes" >> $config_mak
  echo "#define HOST_SOLARIS $solarisrev" >> $config_h
  if test "$needs_libsunmath" = "yes" ; then
    echo "NEEDS_LIBSUNMATH=yes" >> $config_mak
    echo "#define NEEDS_LIBSUNMATH 1" >> $config_h
  fi
fi
if test -n "$sparc_cpu"; then
  echo "CONFIG__sparc_${sparc_cpu}__=yes" >> $config_mak
  echo "#define __sparc_${sparc_cpu}__ 1" >> $config_h
fi
if test "$gdbstub" = "yes" ; then
  echo "CONFIG_GDBSTUB=yes" >> $config_mak
  echo "#define CONFIG_GDBSTUB 1" >> $config_h
fi
if test "$gprof" = "yes" ; then
  echo "TARGET_GPROF=yes" >> $config_mak
  echo "#define HAVE_GPROF 1" >> $config_h
fi
if test "$static" = "yes" ; then
  echo "CONFIG_STATIC=yes" >> $config_mak
  echo "#define CONFIG_STATIC 1" >> $config_h
fi
if test $profiler = "yes" ; then
  echo "#define CONFIG_PROFILER 1" >> $config_h
fi
if test "$slirp" = "yes" ; then
  echo "CONFIG_SLIRP=yes" >> $config_mak
  echo "#define CONFIG_SLIRP 1" >> $config_h
fi
if test "$vde" = "yes" ; then
  echo "CONFIG_VDE=yes" >> $config_mak
  echo "#define CONFIG_VDE 1" >> $config_h
  echo "VDE_LIBS=-lvdeplug" >> $config_mak
fi
for card in $audio_card_list; do
    def=CONFIG_`echo $card | tr '[:lower:]' '[:upper:]'`
    echo "$def=yes" >> $config_mak
    echo "#define $def 1" >> $config_h
done
echo "#define AUDIO_DRIVERS \\" >> $config_h
for drv in $audio_drv_list; do
    echo "    &${drv}_audio_driver, \\" >>$config_h
    def=CONFIG_`echo $drv | tr '[:lower:]' '[:upper:]'`
    echo "$def=yes" >> $config_mak
    if test "$drv" = "fmod"; then
        echo "CONFIG_FMOD_LIB=$fmod_lib" >> $config_mak
        echo "CONFIG_FMOD_INC=$fmod_inc" >> $config_mak
    elif test "$drv" = "oss"; then
        echo "CONFIG_OSS_LIB=$oss_lib" >> $config_mak
    fi
done
echo "" >>$config_h
if test "$mixemu" = "yes" ; then
  echo "CONFIG_MIXEMU=yes" >> $config_mak
  echo "#define CONFIG_MIXEMU 1" >> $config_h
fi
if test "$vnc_tls" = "yes" ; then
  echo "CONFIG_VNC_TLS=yes" >> $config_mak
  echo "CONFIG_VNC_TLS_CFLAGS=$vnc_tls_cflags" >> $config_mak
  echo "CONFIG_VNC_TLS_LIBS=$vnc_tls_libs" >> $config_mak
  echo "#define CONFIG_VNC_TLS 1" >> $config_h
fi
qemu_version=`head $source_path/VERSION`
echo "VERSION=$qemu_version" >>$config_mak
echo "#define QEMU_VERSION \"$qemu_version\"" >> $config_h

echo "SRC_PATH=$source_path" >> $config_mak
if [ "$source_path_used" = "yes" ]; then
  echo "VPATH=$source_path" >> $config_mak
fi
echo "TARGET_DIRS=$target_list" >> $config_mak
if [ "$build_docs" = "yes" ] ; then
  echo "BUILD_DOCS=yes" >> $config_mak
fi
if test "$static" = "yes"; then
  sdl1=$sdl_static
else
  sdl1=$sdl
fi
if test "$sdl1" = "yes" ; then
  echo "#define CONFIG_SDL 1" >> $config_h
  echo "CONFIG_SDL=yes" >> $config_mak
  if test "$target_softmmu" = "no" -o "$static" = "yes"; then
    echo "SDL_LIBS=$sdl_static_libs" >> $config_mak
  else
    echo "SDL_LIBS=`$sdl_config --libs`" >> $config_mak
  fi
  if [ "${aa}" = "yes" ] ; then
    echo "SDL_CFLAGS=`$sdl_config --cflags` `aalib-config --cflags`" >> $config_mak
  else
    echo "SDL_CFLAGS=`$sdl_config --cflags`" >> $config_mak
  fi
fi
if test "$cocoa" = "yes" ; then
  echo "#define CONFIG_COCOA 1" >> $config_h
  echo "CONFIG_COCOA=yes" >> $config_mak
fi
if test "$curses" = "yes" ; then
  echo "#define CONFIG_CURSES 1" >> $config_h
  echo "CONFIG_CURSES=yes" >> $config_mak
  echo "CURSES_LIBS=-lcurses" >> $config_mak
fi
if test "$brlapi" = "yes" ; then
  echo "CONFIG_BRLAPI=yes" >> $config_mak
  echo "#define CONFIG_BRLAPI 1" >> $config_h
  echo "BRLAPI_LIBS=-lbrlapi" >> $config_mak
fi
if test "$bluez" = "yes" ; then
  echo "CONFIG_BLUEZ=yes" >> $config_mak
  echo "CONFIG_BLUEZ_CFLAGS=$bluez_cflags" >> $config_mak
  echo "CONFIG_BLUEZ_LIBS=$bluez_libs" >> $config_mak
  echo "#define CONFIG_BLUEZ 1" >> $config_h
fi
if test "$aio" = "yes" ; then
  echo "#define CONFIG_AIO 1" >> $config_h
  echo "CONFIG_AIO=yes" >> $config_mak
fi
if test "$blobs" = "yes" ; then
  echo "INSTALL_BLOBS=yes" >> $config_mak
fi
if test "$iovec" = "yes" ; then
  echo "#define HAVE_IOVEC 1" >> $config_h
fi
if test "$fdt" = "yes" ; then
  echo "#define HAVE_FDT 1" >> $config_h
  echo "FDT_LIBS=-lfdt" >> $config_mak
fi

# XXX: suppress that
if [ "$bsd" = "yes" ] ; then
  echo "#define O_LARGEFILE 0" >> $config_h
  echo "#define MAP_ANONYMOUS MAP_ANON" >> $config_h
  echo "#define _BSD 1" >> $config_h
fi

echo "#define CONFIG_UNAME_RELEASE \"$uname_release\"" >> $config_h

# USB host support
case "$usb" in
linux)
  echo "HOST_USB=linux" >> $config_mak
;;
bsd)
  echo "HOST_USB=bsd" >> $config_mak
;;
*)
  echo "HOST_USB=stub" >> $config_mak
;;
esac

tools=
if test `expr "$target_list" : ".*softmmu.*"` != 0 ; then
  tools="qemu-img\$(EXESUF) $tools"
  if [ "$linux" = "yes" ] ; then
      tools="qemu-nbd\$(EXESUF) $tools"
  fi
fi
echo "TOOLS=$tools" >> $config_mak

test -f ${config_h}~ && cmp -s $config_h ${config_h}~ && mv ${config_h}~ $config_h

for target in $target_list; do
target_dir="$target"
config_mak=$target_dir/config.mak
config_h=$target_dir/config.h
target_cpu=`echo $target | cut -d '-' -f 1`
target_bigendian="no"
[ "$target_cpu" = "armeb" ] && target_bigendian=yes
[ "$target_cpu" = "m68k" ] && target_bigendian=yes
[ "$target_cpu" = "mips" ] && target_bigendian=yes
[ "$target_cpu" = "mipsn32" ] && target_bigendian=yes
[ "$target_cpu" = "mips64" ] && target_bigendian=yes
[ "$target_cpu" = "ppc" ] && target_bigendian=yes
[ "$target_cpu" = "ppcemb" ] && target_bigendian=yes
[ "$target_cpu" = "ppc64" ] && target_bigendian=yes
[ "$target_cpu" = "ppc64abi32" ] && target_bigendian=yes
[ "$target_cpu" = "sh4eb" ] && target_bigendian=yes
[ "$target_cpu" = "sparc" ] && target_bigendian=yes
[ "$target_cpu" = "sparc64" ] && target_bigendian=yes
[ "$target_cpu" = "sparc32plus" ] && target_bigendian=yes
target_softmmu="no"
target_user_only="no"
target_linux_user="no"
target_darwin_user="no"
target_bsd_user="no"
case "$target" in
  ${target_cpu}-softmmu)
    target_softmmu="yes"
    ;;
  ${target_cpu}-linux-user)
    target_user_only="yes"
    target_linux_user="yes"
    ;;
  ${target_cpu}-darwin-user)
    target_user_only="yes"
    target_darwin_user="yes"
    ;;
  ${target_cpu}-bsd-user)
    target_user_only="yes"
    target_bsd_user="yes"
    ;;
  *)
    echo "ERROR: Target '$target' not recognised"
    exit 1
    ;;
esac

if test "$target_user_only" = "no" -a "$check_gfx" = "yes" \
        -a "$sdl" = "no" -a "$cocoa" = "no" ; then
    echo "ERROR: QEMU requires SDL or Cocoa for graphical output"
    echo "To build QEMU without graphical output configure with --disable-gfx-check"
    echo "Note that this will disable all output from the virtual graphics card"
    echo "except through VNC or curses."
    exit 1;
fi

#echo "Creating $config_mak, $config_h and $target_dir/Makefile"

test -f $config_h && mv $config_h ${config_h}~

mkdir -p $target_dir
mkdir -p $target_dir/fpu
mkdir -p $target_dir/tcg
if test "$target" = "arm-linux-user" -o "$target" = "armeb-linux-user" -o "$target" = "arm-bsd-user" -o "$target" = "armeb-bsd-user" ; then
  mkdir -p $target_dir/nwfpe
fi

#
# don't use ln -sf as not all "ln -sf" over write the file/link
#
rm -f $target_dir/Makefile
ln -s $source_path/Makefile.target $target_dir/Makefile


echo "# Automatically generated by configure - do not modify" > $config_mak
echo "/* Automatically generated by configure - do not modify */" > $config_h


echo "include ../config-host.mak" >> $config_mak
echo "#include \"../config-host.h\"" >> $config_h

bflt="no"
elfload32="no"
target_nptl="no"
interp_prefix1=`echo "$interp_prefix" | sed "s/%M/$target_cpu/g"`
echo "#define CONFIG_QEMU_PREFIX \"$interp_prefix1\"" >> $config_h
gdb_xml_files=""

# Make sure the target and host cpus are compatible
if test "$kvm" = "yes" -a ! \( "$target_cpu" = "$cpu" -o \
  \( "$target_cpu" = "ppcemb" -a "$cpu" = "ppc" \) -o \
  \( "$target_cpu" = "x86_64" -a "$cpu" = "i386"   \) -o \
  \( "$target_cpu" = "i386"   -a "$cpu" = "x86_64" \) \) ; then
  kvm="no"
fi
# Disable KVM for linux-user
if test "$kvm" = "yes" -a "$target_softmmu" = "no" ; then
  kvm="no"
fi

case "$target_cpu" in
  i386)
    echo "TARGET_ARCH=i386" >> $config_mak
    echo "#define TARGET_ARCH \"i386\"" >> $config_h
    echo "#define TARGET_I386 1" >> $config_h
    if test $kqemu = "yes" -a "$target_softmmu" = "yes"
    then
      echo "#define USE_KQEMU 1" >> $config_h
    fi
    if test "$kvm" = "yes" ; then
      echo "CONFIG_KVM=yes" >> $config_mak
      echo "KVM_CFLAGS=$kvm_cflags" >> $config_mak
      echo "#define CONFIG_KVM 1" >> $config_h
    fi
  ;;
  x86_64)
    echo "TARGET_ARCH=x86_64" >> $config_mak
    echo "#define TARGET_ARCH \"x86_64\"" >> $config_h
    echo "#define TARGET_I386 1" >> $config_h
    echo "#define TARGET_X86_64 1" >> $config_h
    if test $kqemu = "yes" -a "$target_softmmu" = "yes" -a $cpu = "x86_64"
    then
      echo "#define USE_KQEMU 1" >> $config_h
    fi
    if test "$kvm" = "yes" ; then
      echo "CONFIG_KVM=yes" >> $config_mak
      echo "KVM_CFLAGS=$kvm_cflags" >> $config_mak
      echo "#define CONFIG_KVM 1" >> $config_h
    fi
  ;;
  alpha)
    echo "TARGET_ARCH=alpha" >> $config_mak
    echo "#define TARGET_ARCH \"alpha\"" >> $config_h
    echo "#define TARGET_ALPHA 1" >> $config_h
  ;;
  arm|armeb)
    echo "TARGET_ARCH=arm" >> $config_mak
    echo "#define TARGET_ARCH \"arm\"" >> $config_h
    echo "#define TARGET_ARM 1" >> $config_h
    bflt="yes"
    target_nptl="yes"
    gdb_xml_files="arm-core.xml arm-vfp.xml arm-vfp3.xml arm-neon.xml"
  ;;
  cris)
    echo "TARGET_ARCH=cris" >> $config_mak
    echo "#define TARGET_ARCH \"cris\"" >> $config_h
    echo "#define TARGET_CRIS 1" >> $config_h
    target_nptl="yes"
  ;;
  m68k)
    echo "TARGET_ARCH=m68k" >> $config_mak
    echo "#define TARGET_ARCH \"m68k\"" >> $config_h
    echo "#define TARGET_M68K 1" >> $config_h
    bflt="yes"
    gdb_xml_files="cf-core.xml cf-fp.xml"
  ;;
  mips|mipsel)
    echo "TARGET_ARCH=mips" >> $config_mak
    echo "#define TARGET_ARCH \"mips\"" >> $config_h
    echo "#define TARGET_MIPS 1" >> $config_h
    echo "#define TARGET_ABI_MIPSO32 1" >> $config_h
  ;;
  mipsn32|mipsn32el)
    echo "TARGET_ARCH=mipsn32" >> $config_mak
    echo "#define TARGET_ARCH \"mipsn32\"" >> $config_h
    echo "#define TARGET_MIPS 1" >> $config_h
    echo "#define TARGET_ABI_MIPSN32 1" >> $config_h
  ;;
  mips64|mips64el)
    echo "TARGET_ARCH=mips64" >> $config_mak
    echo "#define TARGET_ARCH \"mips64\"" >> $config_h
    echo "#define TARGET_MIPS 1" >> $config_h
    echo "#define TARGET_MIPS64 1" >> $config_h
    echo "#define TARGET_ABI_MIPSN64 1" >> $config_h
  ;;
  ppc)
    echo "TARGET_ARCH=ppc" >> $config_mak
    echo "#define TARGET_ARCH \"ppc\"" >> $config_h
    echo "#define TARGET_PPC 1" >> $config_h
    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
  ;;
  ppcemb)
    echo "TARGET_ARCH=ppcemb" >> $config_mak
    echo "TARGET_ABI_DIR=ppc" >> $config_mak
    echo "#define TARGET_ARCH \"ppcemb\"" >> $config_h
    echo "#define TARGET_PPC 1" >> $config_h
    echo "#define TARGET_PPCEMB 1" >> $config_h
    if test "$kvm" = "yes" ; then
      echo "CONFIG_KVM=yes" >> $config_mak
      echo "KVM_CFLAGS=$kvm_cflags" >> $config_mak
      echo "#define CONFIG_KVM 1" >> $config_h
    fi
    gdb_xml_files="power-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
  ;;
  ppc64)
    echo "TARGET_ARCH=ppc64" >> $config_mak
    echo "TARGET_ABI_DIR=ppc" >> $config_mak
    echo "#define TARGET_ARCH \"ppc64\"" >> $config_h
    echo "#define TARGET_PPC 1" >> $config_h
    echo "#define TARGET_PPC64 1" >> $config_h
    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
  ;;
  ppc64abi32)
    echo "TARGET_ARCH=ppc64" >> $config_mak
    echo "TARGET_ABI_DIR=ppc" >> $config_mak
    echo "TARGET_ARCH2=ppc64abi32" >> $config_mak
    echo "#define TARGET_ARCH \"ppc64\"" >> $config_h
    echo "#define TARGET_PPC 1" >> $config_h
    echo "#define TARGET_PPC64 1" >> $config_h
    echo "#define TARGET_ABI32 1" >> $config_h
    gdb_xml_files="power64-core.xml power-fpu.xml power-altivec.xml power-spe.xml"
  ;;
  sh4|sh4eb)
    echo "TARGET_ARCH=sh4" >> $config_mak
    echo "#define TARGET_ARCH \"sh4\"" >> $config_h
    echo "#define TARGET_SH4 1" >> $config_h
    bflt="yes"
    target_nptl="yes"
  ;;
  sparc)
    echo "TARGET_ARCH=sparc" >> $config_mak
    echo "#define TARGET_ARCH \"sparc\"" >> $config_h
    echo "#define TARGET_SPARC 1" >> $config_h
  ;;
  sparc64)
    echo "TARGET_ARCH=sparc64" >> $config_mak
    echo "#define TARGET_ARCH \"sparc64\"" >> $config_h
    echo "#define TARGET_SPARC 1" >> $config_h
    echo "#define TARGET_SPARC64 1" >> $config_h
    elfload32="yes"
  ;;
  sparc32plus)
    echo "TARGET_ARCH=sparc64" >> $config_mak
    echo "TARGET_ABI_DIR=sparc" >> $config_mak
    echo "TARGET_ARCH2=sparc32plus" >> $config_mak
    echo "#define TARGET_ARCH \"sparc64\"" >> $config_h
    echo "#define TARGET_SPARC 1" >> $config_h
    echo "#define TARGET_SPARC64 1" >> $config_h
    echo "#define TARGET_ABI32 1" >> $config_h
  ;;
  *)
    echo "Unsupported target CPU"
    exit 1
  ;;
esac
if test "$target_bigendian" = "yes" ; then
  echo "TARGET_WORDS_BIGENDIAN=yes" >> $config_mak
  echo "#define TARGET_WORDS_BIGENDIAN 1" >> $config_h
fi
if test "$target_softmmu" = "yes" ; then
  echo "CONFIG_SOFTMMU=yes" >> $config_mak
  echo "#define CONFIG_SOFTMMU 1" >> $config_h
fi
if test "$target_user_only" = "yes" ; then
  echo "CONFIG_USER_ONLY=yes" >> $config_mak
  echo "#define CONFIG_USER_ONLY 1" >> $config_h
fi
if test "$target_linux_user" = "yes" ; then
  echo "CONFIG_LINUX_USER=yes" >> $config_mak
  echo "#define CONFIG_LINUX_USER 1" >> $config_h
fi
if test "$target_darwin_user" = "yes" ; then
  echo "CONFIG_DARWIN_USER=yes" >> $config_mak
  echo "#define CONFIG_DARWIN_USER 1" >> $config_h
fi
list=""
if test ! -z "$gdb_xml_files" ; then
  for x in $gdb_xml_files; do
    list="$list $source_path/gdb-xml/$x"
  done
fi
echo "TARGET_XML_FILES=$list" >> $config_mak

if test "$target_cpu" = "arm" \
     -o "$target_cpu" = "armeb" \
     -o "$target_cpu" = "m68k" \
     -o "$target_cpu" = "mips" \
     -o "$target_cpu" = "mipsel" \
     -o "$target_cpu" = "mipsn32" \
     -o "$target_cpu" = "mipsn32el" \
     -o "$target_cpu" = "mips64" \
     -o "$target_cpu" = "mips64el" \
     -o "$target_cpu" = "ppc" \
     -o "$target_cpu" = "ppc64" \
     -o "$target_cpu" = "ppc64abi32" \
     -o "$target_cpu" = "ppcemb" \
     -o "$target_cpu" = "sparc" \
     -o "$target_cpu" = "sparc64" \
     -o "$target_cpu" = "sparc32plus"; then
  echo "CONFIG_SOFTFLOAT=yes" >> $config_mak
  echo "#define CONFIG_SOFTFLOAT 1" >> $config_h
fi
if test "$target_user_only" = "yes" -a "$bflt" = "yes"; then
  echo "TARGET_HAS_BFLT=yes" >> $config_mak
  echo "#define TARGET_HAS_BFLT 1" >> $config_h
fi
if test "$target_user_only" = "yes" \
        -a "$nptl" = "yes" -a "$target_nptl" = "yes"; then
  echo "#define USE_NPTL 1" >> $config_h
fi
# 32 bit ELF loader in addition to native 64 bit loader?
if test "$target_user_only" = "yes" -a "$elfload32" = "yes"; then
  echo "TARGET_HAS_ELFLOAD32=yes" >> $config_mak
  echo "#define TARGET_HAS_ELFLOAD32 1" >> $config_h
fi
if test "$target_bsd_user" = "yes" ; then
  echo "CONFIG_BSD_USER=yes" >> $config_mak
  echo "#define CONFIG_BSD_USER 1" >> $config_h
fi

test -f ${config_h}~ && cmp -s $config_h ${config_h}~ && mv ${config_h}~ $config_h

done # for target in $targets

# build tree in object directory if source path is different from current one
if test "$source_path_used" = "yes" ; then
    DIRS="tests tests/cris slirp audio"
    FILES="Makefile tests/Makefile"
    FILES="$FILES tests/cris/Makefile tests/cris/.gdbinit"
    FILES="$FILES tests/test-mmap.c"
    for dir in $DIRS ; do
            mkdir -p $dir
    done
    # remove the link and recreate it, as not all "ln -sf" overwrite the link
    for f in $FILES ; do
        rm -f $f
        ln -s $source_path/$f $f
    done
fi
