dnl########################################################################
dnl                                                                      ##
dnl                 Language Technologies Institute                      ##
dnl                    Carnegie Mellon University                        ##
dnl                     Copyright (c) 1999-2008                          ##
dnl                       All Rights Reserved.                           ##
dnl                                                                      ##
dnl Permission is hereby granted, free of charge, to use and distribute  ##
dnl this software and its documentation without restriction, including   ##
dnl without limitation the rights to use, copy, modify, merge, publish,  ##
dnl distribute, sublicense, and/or sell copies of this work, and to      ##
dnl permit persons to whom this work is furnished to do so, subject to   ##
dnl the following conditions:                                            ##
dnl  1. The code must retain the above copyright notice, this list of    ##
dnl     conditions and the following disclaimer.                         ##
dnl  2. Any modifications must be clearly marked as such.                ##
dnl  3. Original authors' names are not deleted.                         ##
dnl  4. The authors' names are not used to endorse or promote products   ##
dnl     derived from this software without specific prior written        ##
dnl     permission.                                                      ##
dnl                                                                      ##
dnl CARNEGIE MELLON UNIVERSITY AND THE CONTRIBUTORS TO THIS WORK         ##
dnl DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING      ##
dnl ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT   ##
dnl SHALL CARNEGIE MELLON UNIVERSITY NOR THE CONTRIBUTORS BE LIABLE      ##
dnl FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES    ##
dnl WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN   ##
dnl AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,          ##
dnl ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF       ##
dnl THIS SOFTWARE.                                                       ##
dnl                                                                      ##
dnl########################################################################
AC_INIT(include/flite.h)

AC_CANONICAL_SYSTEM
AC_PROG_CC
AC_PROG_RANLIB
AC_PROG_INSTALL
AC_CHECK_TOOL(AR, ar)
AC_C_BIGENDIAN

if test "x$GCC" = "xyes"; then
	CFLAGS="$CFLAGS -Wall"
fi
AC_ARG_ENABLE( shared, 
               [  --disable-shared     without shared library support],
	       [case "${enableval}" in
                 yes) shared=true ;;
                 no) shared=false ;;
                 *) AC_MSG_ERROR(bad value ${enableval} for shared options) ;;
                 esac],
               [shared=false])

case "$target_cpu" in
     i386|i486|i586|i686)
	TARGET_CPU=i386
     ;;
     *)
        TARGET_CPU=$target_cpu
     ;;
esac     
TARGET_OS=$target_os

M68KCC=
M68KCLAGS=
WINDRES=

case "$target_os" in
        palmos*)
		shared=false
     	        CFLAGS="$CFLAGS -DCST_NO_SOCKETS"
		# PalmOS Apps are always in M68K
		M68KCC=/usr/m68k-palmos/bin/gcc
		# Generic build is ARM or M68K (probably ARM though)
                CC="/usr/$TARGET_CPU-palmos/bin/gcc"
		if test "$target_cpu" = "arm" 
                then
                   CC="$CC -fPIC -march=armv4t"
                fi
                RANLIB=/usr/$TARGET_CPU-palmos/bin/ranlib
                AR=/usr/$TARGET_CPU-palmos/bin/ar
		LEXDEFS="-DCST_NO_STATIC_LEX -DCST_NO_STATIC_LTS_MODEL"
		VOXDEFS="-DCST_NO_STATIC_VOX"
        ;;
dnl         wince*)
dnl                 # For the GNUWINCE environment
dnl                 # http://win-ce.voxware.com:28575/Development%20Tools/
dnl 		shared=false
dnl      	        CFLAGS="$CFLAGS -DCST_NO_SOCKETS -march=armv4 -mapcs-32 -malignment-traps -DNEWLIB -DSARM -DWIN32 -DGNUWINCE"
dnl                 CC="/usr/local/wince/bin/arm-wince-pe-gcc"
dnl                 RANLIB=/usr/local/wince/bin/arm-wince-pe-ranlib
dnl                 AR=/usr/local/wince/bin/arm-wince-pe-ar
dnl         ;;
        wince*)
                # For the CEGCC environment (mingw32ce)
                # http://cegcc.sourceforge.net/
		shared=false
                # cegcc
     	        # CFLAGS="$CFLAGS -DCST_NO_SOCKETS -DUNDER_CE -DNEWLIB -DSARM -DWIN32 -DGNUWINCE"
                # CC="/opt/cegcc/bin/arm-cegcc-gcc"
                # RANLIB="/opt/cegcc/bin/arm-cegcc-ranlib"
                # AR="/opt/cegcc/bin/arm-cegcc-ar"
                # mingw32ce
     	        CFLAGS="$CFLAGS -DCST_NO_SOCKETS -DUNDER_CE -DSARM -DWIN32"
                if test -f "/opt/mingw32ce/bin/arm-mingw32ce-gcc" 
                then
                    MINGW32CEPREF="/opt/mingw32ce/bin/arm-mingw32ce-"
                else
                    MINGW32CEPREF="/opt/mingw32ce/bin/arm-wince-mingw32ce-"
                fi
                CC="${MINGW32CEPREF}gcc"
                RANLIB="${MINGW32CEPREF}ranlib"
                AR="${MINGW32CEPREF}ar"
                SIZE="${MINGW32CEPREF}size"
                STRIP="${MINGW32CEPREF}strip"
                WINDRES="${MINGW32CEPREF}windres"
                DLLTOOL="${MINGW32CEPREF}dlltool"
                DLLWRAP="${MINGW32CEPREF}dllwrap"
                NM="${MINGW32CEPREF}nm"
        ;;
        mingw*)
                # For the Windows under mingw32 environment
                # http://www.mingw.org
		shared=false
     	        CFLAGS="$CFLAGS -DCST_NO_SOCKETS -DUNDER_WINDOWS -DWIN32 -shared"
                MINGWPREF="i386-mingw32-"
                CC="${MINGWPREF}gcc"
                RANLIB="${MINGWPREF}ranlib"
                AR="${MINGWPREF}ar"
                WINDRES="${MINGWPREF}windres"
                DLLTOOL="${MINGWPREF}dlltool"
                DLLWRAP="${MINGWPREF}dllwrap"
                NM="${MINGWPREF}nm"
        ;;
        uclinux*)
                LDFLAGS="$LDFLAGS -Wl,-elf2flt"
        ;;
	darwin*)
		CFLAGS="$CFLAGS -no-cpp-precomp"
	;;
esac

AC_SUBST(TARGET_OS)
AC_SUBST(TARGET_CPU)
AC_SUBST(M68KCC)
AC_SUBST(WINDRES)
AC_SUBST(SIZE)
AC_SUBST(STRIP)
AC_SUBST(DLLTOOL)
AC_SUBST(DLLWRAP)
AC_SUBST(NM)
AC_SUBST(LEXDEFS)
AC_SUBST(VOXDEFS)

case "$host_cpu" in
     i386|i486|i586|i686)
	HOST_CPU=i386
     ;;
     *)
        HOST_CPU=$host_cpu
     ;;
esac     
HOST_OS=$host_os

AC_SUBST(HOST_OS)
AC_SUBST(HOST_CPU)

SHFLAGS=
OTHERLIBS=
if test "$shared" = true; then
   case "$target_os" in
	linux*|k*bsd*-gnu|gnu*)
		SHFLAGS="-fPIC"
        ;;
	solaris*)
		SHFLAGS="-fPIC"
		OTHERLIBS="-lsocket -ldl"
        ;;
	*)
	;;
   esac
fi
case "$target_os" in
     wince*)
        # cegcc
        #OTHERLIBS="-lc -lgcc -lwinsock -lcoredll"
        # mingw32ce
        OTHERLIBS=
     ;;
     *)
     ;;
esac

AC_SUBST(OTHERLIBS)
AC_SUBST(SHFLAGS)

AC_ARG_ENABLE( sockets, 
               [  --disable-sockets     without socket support],
	       [case "${enableval}" in
                 yes) sockets=true ;;
                 no) sockets=false ;;
                 *) AC_MSG_ERROR(bad value ${enableval} for sockets options) ;;
                 esac],
               [sockets=true])
if test "$sockets" = false; then
   AC_DEFINE(CST_NO_SOCKETS)
fi

dnl
dnl Does this compiler support initialization of unions
dnl
AC_TRY_COMPILE([#include <stdio.h>],
               [ struct a { union { float b; int c; } d; };
                 const struct a e = { .d={ .b=3.14 } }; ],
               [unioninit=yes],
               [unioninit=no])
if test "$unioninit" = no; then
   AC_DEFINE(NO_UNION_INITIALIZATION)
fi

dnl
dnl Does this platform support mmap(2)
dnl Note we don't use AC_FUNC_MMAP because we really only care whether
dnl read-only mappings work.
dnl
AC_CHECK_FUNC(mmap,MMAPTYPE=posix)

dnl AC_CHECK_FUNC doesn't seem to work for Win32 API calls...
if test "x$MMAPTYPE" = x; then
   case "$target_os" in
	cygwin*|mingw*)
		MMAPTYPE=win32
	;;
 	*)
		MMAPTYPE=none
	;;
   esac
fi
AC_SUBST(MMAPTYPE)

dnl stdio type, palmos/wince are different
if test "$target_os" = "palmos"
then
    STDIOTYPE=palmos
else
   if test "$target_os" = "wince"
   then
      STDIOTYPE=wince
   else
      STDIOTYPE=stdio
   fi
fi
AC_SUBST(STDIOTYPE)

dnl
dnl determine audio type or use none if none supported on this platform
dnl
AUDIODRIVER=none
AC_CHECK_HEADER(sys/soundcard.h,
              [AUDIODRIVER="oss"
               AUDIODEFS=-DCST_AUDIO_LINUX])
AC_CHECK_HEADER(machine/soundcard.h,
              [AUDIODRIVER="oss"
               AUDIODEFS=-DCST_AUDIO_FREEBSD])
AC_CHECK_HEADER(sys/audioio.h,
              [AUDIODRIVER="sun"
               AUDIODEFS=-DCST_AUDIO_SUNOS])
# Seems the alsa code I have breaks on earlier versions
# I'm not sure what the threshold version is, but made this depend on
# the one I know -- you can still specific --with-audio=alsa
AC_TRY_COMPILE([#include <alsa/version.h>],
               [int j=
                #if SND_LIB_SUBMINOR >= 11
                3;
                #endif],
              [AUDIODRIVER="alsa"
	       AUDIODEFS=-DCST_AUDIO_ALSA
               AUDIOLIBS=-lasound])
AC_CHECK_HEADER(mmsystem.h,
	      [AUDIODRIVER="wince"
	       AUDIODEFS=-DCST_AUDIO_WINCE
	       AUDIOLIBS=-lwinmm])

dnl I don't care what you ask for, for wince you get wince
case "$target_os" in
     wince*)
        AUDIODRIVER="wince"
        AUDIODEFS=-DCST_AUDIO_WINCE
        AUDIOLIBS=
     ;;
     mingw*)
        AUDIODRIVER="none"
        AUDIODEFS=-DCST_AUDIO_NONE
        AUDIOLIBS=
     ;;
     *)
     ;;
esac

dnl
dnl allow the user to override the one detected above
dnl
AC_ARG_WITH( audio,
	[  --with-audio          with specific audio support (none linux freebsd etc) ],
        AUDIODRIVER=$with_audio )

if test "x$AUDIODEFS" = x; then
    case "$AUDIODRIVER" in
	linux|oss)
	    AUDIODRIVER=oss
	    AUDIODEFS=-DCST_AUDIO_LINUX
	    ;;
	alsa)
            AUDIODRIVER="alsa"
	    AUDIODEFS=-DCST_AUDIO_ALSA
            AUDIOLIBS=-lasound
	    ;;
	*bsd)
	    AUDIODRIVER=oss
	    AUDIODEFS=-DCST_AUDIO_FREEBSD
	    ;;
	qnx)
	    AUDIODRIVER=alsa
	    AUDIODEFS=-DCST_AUDIO_QNX
	    ;;
	none)
	    AUDIODEFS=-DCST_AUDIO_NONE
	    ;;
    esac
fi
AC_SUBST(AUDIODRIVER)
AC_SUBST(AUDIODEFS)
AC_SUBST(AUDIOLIBS)

dnl
dnl language/lexicon/voice parameters 
dnl
AC_ARG_WITH( lang, [  --with-lang           with language ],
        FL_LANG=$with_lang )
if test "x$with_lang" = "x"; then
        FL_LANG="usenglish"
fi
AC_SUBST(FL_LANG)

AC_ARG_WITH( vox, [  --with-vox            with vox ],
        FL_VOX=$with_vox )
if test "x$with_vox" = "x"; then
        FL_VOX="cmu_us_kal"
fi
AC_SUBST(FL_VOX)

AC_ARG_WITH( lex, [  --with-lex            with lexicon ],
        FL_LEX=$with_lex )
if test "x$with_lex" = "x"; then
        FL_LEX="cmulex"
fi
AC_SUBST(FL_LEX)
AC_SUBST(EXEEXT)

FL_LANGVOX="default"
AC_ARG_WITH( langvox,
	[  --with-langvox          with subsets of lang, lex and voices ],
        FL_LANGVOX=$with_langvox )
AC_SUBST(FL_LANGVOX)

AC_OUTPUT(config/config config/system.mak)
