shithub: flite

ref: baaa888c574e075222ad70b002fe6a140a19098b
dir: flite/configure.in

View raw version
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(ENDIANDEFS=-DWORDS_BIGENDIAN=1,,)

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=

CHROMEBIN_PREFIX=

if test "$target_os" = "chrome" ; then
    case "$TARGET_CPU" in
	i386*)
	    CFLAGS="$CFLAGS -m32"
	    CHROMEBIN_PREFIX=" $CHROME_NDK/toolchain/linux_x86_newlib/bin/i686-nacl"
	    ;;
	x86_64*)
	    CFLAGS="$CFLAGS -m64"
	    CHROMEBIN_PREFIX=" $CHROME_NDK/toolchain/linux_x86_newlib/bin/x86_64-nacl"
esac
fi

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"
                PREFLEN=`expr match "$CC" ".*-gcc"`
                if expr $PREFLEN != 0 > /dev/null; then
                    # When $CC includes "-gcc", use the preceding
                    # charactors + '-' as MINGPREF.
                    # for example:
                    #   CC=x86_64-w64-mingw32-gcc.exe
                    #   --> MINGWPREF=x86_64-w64-mingw32-
                    PREFLEN=`expr $PREFLEN - 3`
                    MINGPREF=`expr substr $CC 1 $PREFLEN`
                fi
                WINDRES="${MINGWPREF}windres"
                DLLTOOL="${MINGWPREF}dlltool"
                DLLWRAP="${MINGWPREF}dllwrap"
                NM="${MINGWPREF}nm"
        ;;
        android*)
                # For Android with Android NDK
                # http://developer.android.com/sdk/ndk/index.html
		shared=false

		# We target our compilation to android-14 (4.0) platform
		ANDROID_NDK_PLATFORM_PATH="$ANDROID_NDK/platforms/android-14"

		ANDROID_GCC_VERSION=4.6

		if test "$target_cpu" = "armeabi" 
                then
		   ANDROID_TOOLCHAIN="arm-linux-androideabi-$ANDROID_GCC_VERSION"
		   ANDROID_NDK_SYSROOT="$ANDROID_NDK_PLATFORM_PATH/arch-arm"
		   ANDROIDBIN="$ANDROID_NDK/toolchains/arm-linux-androideabi-$ANDROID_GCC_VERSION/prebuilt/linux-x86/bin/arm-linux-androideabi"
      		   CFLAGS="$CFLAGS -fpic -mthumb -O3 -DANDROID --sysroot=$ANDROID_NDK_SYSROOT"
                fi

		if test "$target_cpu" = "armeabiv7a" 
                then
		   ANDROID_TOOLCHAIN="arm-linux-androideabi-$ANDROID_GCC_VERSION"
		   ANDROID_NDK_SYSROOT="$ANDROID_NDK_PLATFORM_PATH/arch-arm"
		   ANDROIDBIN="$ANDROID_NDK/toolchains/arm-linux-androideabi-$ANDROID_GCC_VERSION/prebuilt/linux-x86/bin/arm-linux-androideabi"
      		   CFLAGS="$CFLAGS -fpic -march=armv7-a -mfloat-abi=softfp -O3 -DANDROID --sysroot=$ANDROID_NDK_SYSROOT"
		   LDFLAGS="$LDFLAGS -Wl,--fix-cortex-a8"
                fi

		if test "$target_cpu" = "x86"
		then
		   ANDROID_TOOLCHAIN="x86-$ANDROID_GCC_VERSION"
		   ANDROID_NDK_SYSROOT="$ANDROID_NDK_PLATFORM_PATH/arch-x86"
		   ANDROIDBIN="$ANDROID_NDK/toolchains/x86-$ANDROID_GCC_VERSION/prebuilt/linux-x86/bin/i686-linux-android"
      		   CFLAGS="$CFLAGS -fpic -O3 -DANDROID --sysroot=$ANDROID_NDK_SYSROOT"
		fi

		if test "$target_cpu" = "mips"
		then
		   ANDROID_TOOLCHAIN="mipsel-linux-android-$ANDROID_GCC_VERSION"
		   ANDROID_NDK_SYSROOT="$ANDROID_NDK_PLATFORM_PATH/arch-mips"
		   ANDROIDBIN="$ANDROID_NDK/toolchains/mipsel-linux-android-$ANDROID_GCC_VERSION/prebuilt/linux-x86/bin/mipsel-linux-android"
      		   CFLAGS="$CFLAGS -fpic -O3 -DANDROID --sysroot=$ANDROID_NDK_SYSROOT"
		fi

		# Common to all android variants
                CC="${ANDROIDBIN}-gcc"
                RANLIB="${ANDROIDBIN}-ranlib"
                AR="${ANDROIDBIN}-ar"
                NM="${ANDROIDBIN}-nm"

        ;;
        chrome*)
		shared=false
		CFLAGS="$CFLAGS -DCST_NO_SOCKETS"
                CC="${CHROMEBIN_PREFIX}-gcc"
                RANLIB="${CHROMEBIN_PREFIX}-ranlib"
                AR="${CHROMEBIN_PREFIX}-ar"
                NM="${CHROMEBIN_PREFIX}-nm"
        ;;
        uclinux*)
                LDFLAGS="$LDFLAGS -Wl,-elf2flt"
        ;;
	darwin*)
		CFLAGS="$CFLAGS -no-cpp-precomp"
	;;
        wasi*)
		CFLAGS="$CFLAGS -DDIE_ON_ERROR -DCST_NO_SOCKETS -DWASM32_WASI"
        ;;
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)
AC_SUBST(ENDIANDEFS)

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=

dnl For OpenPandora and other (softfloat) ARMs with neon
if grep -q Pandora /proc/cpuinfo
then
   CFLAGS="$CFLAGS -DPANDORA -mcpu=cortex-a8 -mfpu=neon -mfloat-abi=softfp"
fi

withpic=false
AC_ARG_WITH( pic, [  --with-pic           with pic ],
        withpic=$with_pic )
if test "x$with_pic" = "xyes"; then
   case "$target_os" in
	linux*)
		CFLAGS="$CFLAGS -fPIC"
        ;;
	solaris*)
		CFLAGS="$CFLAGS -fPIC"
        ;;
	*)
		CFLAGS="$CFLAGS -fPIC"
	;;
   esac
fi

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 Force no mmap for chrome
if test "$target_os" = "chrome"
then
    MMAPTYPE=none
fi

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
	;;
	android*)
		MMAPTYPE=posix
	;;
 	*)
		MMAPTYPE=none
	;;
   esac
fi

dnl
dnl allow the user to override the one detected above
dnl
AC_ARG_WITH( mmap,
	[  --with-mmap          with specific mmap support (none posix win32) ],
        MMAPTYPE=$with_mmap )

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])
# We're going to make alsa the default now, if supported 
AC_CHECK_HEADER(alsa/asoundlib.h,
              [AUDIODRIVER="alsa"
	       AUDIODEFS=-DCST_AUDIO_ALSA
               AUDIOLIBS=`pkg-config --libs alsa`
               if test "$shared" = false; then
                   AUDIOLIBS=`pkg-config --libs --static alsa`
               fi])
AC_CHECK_HEADER(mmsystem.h,
	      [AUDIODRIVER="wince"
	       AUDIODEFS=-DCST_AUDIO_WINCE
	       AUDIOLIBS=-lwinmm],
	      [],
	      [#include <windows.h>])

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=
     ;;
     android*)
        AUDIODRIVER="none"
        AUDIODEFS=-DCST_AUDIO_NONE
        AUDIOLIBS=
     ;;
     chrome*)
	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
	AUDIODEFS="" )

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
	    ;;
	pa|pulseaudio)
            AUDIODRIVER="pulseaudio"
	    AUDIODEFS=-DCST_AUDIO_PULSEAUDIO
            AUDIOLIBS='-lpulse-simple -lpulse'
	    ;;
	*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)