Files
espeak-ng/configure.ac
T
Samuel Thibault 3ce135ac2b Mark re-used buffers as undefined
These are global arrays reused several times. When using them msan and
valgrind thus believe they are always initialized, which reduces their
capacity to detect uninitialized values. We can however explicitly tell them
when they are reused, and thus to be considered as uninitialized.
2022-04-10 22:42:51 +02:00

377 lines
11 KiB
Plaintext

AC_PREREQ([2.63])
AC_INIT([eSpeak NG], [1.52-dev], [https://github.com/espeak-ng/espeak-ng/issues], [espeak-ng], [https://github.com/espeak-ng/espeak-ng])
AM_INIT_AUTOMAKE()
LT_INIT
m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES])
AM_SILENT_RULES([yes])
AC_CONFIG_SRCDIR([src])
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_HEADERS([config.h])
dnl ================================================================
dnl configure arguments
dnl ================================================================
AC_ARG_ENABLE([rpath],
[AS_HELP_STRING([--enable-rpath], [set hardcoded rpaths in the executable @<:@default=yes@:>@])],
[],
[enable_rpath=yes])
AC_ARG_WITH([gradle],
[AS_HELP_STRING([--with-gradle], [specify the gradle program to use @<:@default=gradle@:>@])],
[GRADLE=$with_gradle],
[GRADLE=gradle])
AC_ARG_WITH([pcaudiolib],
[AS_HELP_STRING([--with-pcaudiolib], [use the pcaudiolib library for audio output @<:@default=yes@:>@])],
[])
AC_ARG_WITH([klatt],
[AS_HELP_STRING([--with-klatt], [enable the Klatt formant synthesizer @<:@default=yes@:>@])],
[])
AC_ARG_WITH([speechplayer],
[AS_HELP_STRING([--with-speechplayer], [enable the speechPlayer Klatt implementation @<:@default=yes@:>@])],
[])
AC_ARG_WITH([mbrola],
[AS_HELP_STRING([--with-mbrola], [enable the MBROLA speech synthesizer @<:@default=yes@:>@])],
[])
AC_ARG_WITH([sonic],
[AS_HELP_STRING([--with-sonic], [enable the sonic library to speed up the audio @<:@default=yes@:>@])],
[])
AC_ARG_WITH([async],
[AS_HELP_STRING([--with-async], [enable support for async command processing @<:@default=yes@:>@])],
[])
AC_ARG_WITH([extdict-ru],
[AS_HELP_STRING([--with-extdict-ru], [use the extended Russian Dictionary file @<:@default=yes@:>@])],
[])
AC_ARG_WITH([extdict-cmn],
[AS_HELP_STRING([--with-extdict-cmn], [use the extended Mandarin Chinese Dictionary file @<:@default=yes@:>@])],
[])
AC_ARG_WITH([extdict-yue],
[AS_HELP_STRING([--with-extdict-yue], [use the extended Cantonese Chinese Dictionary file @<:@default=yes@:>@])],
[])
AC_ARG_WITH([libfuzzer],
[AS_HELP_STRING([--with-libfuzzer], [enable libFuzzer in the fuzzer tests @<:@default=no@:>@])],
[])
dnl ================================================================
dnl Program checks.
dnl ================================================================
AC_PROG_CC
AC_PROG_CXX
AC_PROG_MAKE_SET
AC_PROG_LIBTOOL
AC_PROG_LN_S
AC_CHECK_PROG(NDKBUILD_CHECK,[ndk-build],yes)
dnl ================================================================
dnl gradle checks.
dnl ================================================================
AC_MSG_CHECKING([for gradle])
if test -e ${GRADLE} ; then
AC_MSG_RESULT([${GRADLE}])
AM_CONDITIONAL(HAVE_GRADLE, [test 1 = 1])
else
AC_MSG_RESULT([no])
AM_CONDITIONAL(HAVE_GRADLE, [test 1 = 0])
fi
AC_SUBST(GRADLE)
dnl ================================================================
dnl C99 compiler checks.
dnl ================================================================
AC_LANG_PUSH(C)
AC_MSG_CHECKING([if $CC supports C99 without any flags])
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
[[static inline int c99_restrict(int *restrict c99_restrict) {}]],
[[]])],
[AC_MSG_RESULT([yes])
have_c99_native=yes],
[AC_MSG_RESULT([no])
have_c99_native=no])
AC_LANG_POP(C)
AC_LANG_PUSH(C)
TEMP_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -std=c99"
AC_MSG_CHECKING([if $CC supports C99 with the -std=c99 flag])
AC_COMPILE_IFELSE(
[AC_LANG_PROGRAM(
[[static inline int c99_restrict(int *restrict c99_restrict) {}]],
[[]])],
[AC_MSG_RESULT([yes])
have_c99_c99=yes],
[AC_MSG_RESULT([no])
have_c99_c99=no])
CFLAGS="$TEMP_CFLAGS"
AC_LANG_POP(C)
AC_MSG_CHECKING([if $CC supports C99])
if test "$have_c99_c99" = yes ; then
AC_MSG_RESULT([-std=c99])
CFLAGS="$CFLAGS -std=c99"
elif test "$have_c99_native" = yes ; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
AC_MSG_ERROR([C99 is not supported by $CC.])
fi
dnl ================================================================
dnl FreeBSD check.
dnl ================================================================
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#if ! defined(__FreeBSD__)
#error macro not defined
#endif
]])], [FREEBSD_FOUND="yes"], [FREEBSD_FOUND="no"])
AC_MSG_CHECKING([if targeting FreeBSD])
if test "$FREEBSD_FOUND" = "yes" ; then
AC_MSG_RESULT([-D__BSD_VISIBLE])
CFLAGS="$CFLAGS -D__BSD_VISIBLE"
else
AC_MSG_RESULT([no])
fi
dnl ================================================================
dnl library checks.
dnl ================================================================
AC_CHECK_HEADERS([endian.h]) dnl Linux
AC_CHECK_HEADERS([fcntl.h]) dnl POSIX
AC_CHECK_HEADERS([getopt.h]) dnl POSIX
AC_CHECK_HEADERS([locale.h]) dnl C89
AC_CHECK_HEADERS([stddef.h]) dnl C89
AC_CHECK_HEADERS([stdbool.h]) dnl C99
AC_CHECK_HEADERS([sys/endian.h]) dnl BSD
AC_CHECK_HEADERS([sys/time.h]) dnl POSIX
AC_CHECK_HEADERS([wchar.h]) dnl C89
AC_CHECK_HEADERS([wctype.h]) dnl C89
AC_TYPE_SIZE_T
AC_TYPE_SSIZE_T
AC_TYPE_UINT16_T
AC_TYPE_UINT32_T
AC_TYPE_UINT64_T
AC_FUNC_FORK
AC_FUNC_STRCOLL
AC_FUNC_ERROR_AT_LINE
AC_CHECK_FUNCS([dup2])
AC_CHECK_FUNCS([getopt_long])
AC_CHECK_FUNCS([gettimeofday])
AC_CHECK_FUNCS([malloc]) dnl Avoid "Undefined reference to rpl_malloc" when using AC_FUNC_MALLOC.
AC_CHECK_FUNCS([memchr])
AC_CHECK_FUNCS([memmove])
AC_CHECK_FUNCS([memset])
AC_CHECK_FUNCS([mkdir])
AC_CHECK_FUNCS([mkstemp])
AC_CHECK_FUNCS([pow])
AC_CHECK_FUNCS([realloc]) dnl Avoid "Undefined reference to rpl_malloc" when using AC_FUNC_REALLOC.
AC_CHECK_FUNCS([setlocale])
AC_CHECK_FUNCS([sqrt])
AC_CHECK_FUNCS([strchr])
AC_CHECK_FUNCS([strdup])
AC_CHECK_FUNCS([strerror])
AC_CHECK_FUNCS([strrchr])
AC_CHECK_FUNCS([strstr])
dnl ================================================================
dnl PCAudioLib checks.
dnl ================================================================
if test "$with_pcaudiolib" = "no"; then
echo "Disabling audio output support via pcaudiolib"
have_pcaudiolib=no
else
AC_CHECK_HEADERS([pcaudiolib/audio.h],
[
have_pcaudiolib=yes
PCAUDIOLIB_CFLAGS=
PCAUDIOLIB_LIBS=-lpcaudio
],[
have_pcaudiolib=no
])
fi
AC_SUBST(PCAUDIOLIB_CFLAGS)
AC_SUBST(PCAUDIOLIB_LIBS)
dnl ================================================================
dnl Optional compilation checks.
dnl ================================================================
if test "$with_klatt" = "no" ; then
have_klatt=no
else
have_klatt=yes
fi
if test "$with_speechplayer" = "no" ; then
have_speechplayer=no
else
have_speechplayer=yes
fi
if test "$with_mbrola" = "no" ; then
have_mbrola=no
else
have_mbrola=yes
fi
if test "$with_sonic" = "no" ; then
have_sonic=no
else
AC_CHECK_HEADERS([sonic.h],
[
AC_CHECK_LIB([sonic], [sonicCreateStream])
have_sonic=yes
],[
have_sonic=no
])
fi
AC_CHECK_HEADERS([valgrind/memcheck.h])
if test "$with_async" = "no" ; then
have_async=no
else
have_async=yes
fi
AM_CONDITIONAL(OPT_KLATT, [test x"$have_klatt" = xyes])
AM_CONDITIONAL(OPT_SPEECHPLAYER, [test x"$have_speechplayer" = xyes])
AM_CONDITIONAL(OPT_MBROLA, [test x"$have_mbrola" = xyes])
AM_CONDITIONAL(OPT_ASYNC, [test x"$have_async" = xyes])
dnl ================================================================
dnl ronn checks.
dnl ================================================================
AC_CHECK_PROG(RONN, ronn, ronn, no)
AM_CONDITIONAL(HAVE_RONN, [test ! x"$RONN" = xno])
AC_CHECK_PROG(KRAMDOWN, kramdown, kramdown, no)
dnl ================================================================
dnl Extended dictionary checks.
dnl ================================================================
if test "$with_extdict_ru" = "no" ; then
have_extdict_ru=no
else
have_extdict_ru=yes
fi
if test "$with_extdict_cmn" = "no" ; then
have_extdict_cmn=no
else
have_extdict_cmn=yes
fi
if test "$with_extdict_yue" = "no" ; then
have_extdict_yue=no
else
have_extdict_yue=yes
fi
AM_CONDITIONAL(HAVE_RU_EXTENDED_DICTIONARY, [test x"$have_extdict_ru" = xyes])
AM_CONDITIONAL(HAVE_CMN_EXTENDED_DICTIONARY, [test x"$have_extdict_cmn" = xyes])
AM_CONDITIONAL(HAVE_YUE_EXTENDED_DICTIONARY, [test x"$have_extdict_yue" = xyes])
dnl ================================================================
dnl Compiler warnings.
dnl
dnl Reference: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
dnl ================================================================
AX_CHECK_COMPILE_FLAG([-Wimplicit], [CFLAGS="-Wimplicit $CFLAGS"])
AX_CHECK_COMPILE_FLAG([-Wint-conversion], [CFLAGS="-Wint-conversion $CFLAGS"])
AX_CHECK_COMPILE_FLAG([-Wmissing-prototypes], [CFLAGS="-Wmissing-prototypes $CFLAGS"])
AX_CHECK_COMPILE_FLAG([-Wreturn-type], [CFLAGS="-Wreturn-type $CFLAGS"])
AX_CHECK_COMPILE_FLAG([-Wuninitialized], [CFLAGS="-Wuninitialized $CFLAGS"])
AX_CHECK_COMPILE_FLAG([-Wunused], [CFLAGS="-Wunused $CFLAGS"])
AX_CHECK_COMPILE_FLAG([-Wunused-parameter], [CFLAGS="-Wunused-parameter $CFLAGS"])
dnl ================================================================
dnl Enable two-complement signed integer wrapping
dnl
dnl Otherwise this is undefined behavior.
dnl ================================================================
AX_CHECK_COMPILE_FLAG([-fwrapv], [CFLAGS="-fwrapv $CFLAGS"])
dnl ================================================================
dnl libFuzzer checks.
dnl ================================================================
if test "$with_libfuzzer" = "yes" ; then
have_libfuzzer=yes
else
have_libfuzzer=no
fi
AM_CONDITIONAL(HAVE_LIBFUZZER, [test x"$have_libfuzzer" = xyes])
dnl ================================================================
dnl Generate output.
dnl ================================================================
AC_CONFIG_FILES([Makefile espeak-ng.pc])
AC_OUTPUT
if test "$enable_rpath" = "yes" ; then
true
else
# See https://old-en.opensuse.org/openSUSE:Packaging_Guidelines#Removing_Rpath
sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool
fi
AC_MSG_NOTICE([
Configuration for eSpeak NG complete.
Source code location: ${srcdir}
C99 Compiler: ${CC}
C99 Compiler flags: ${CFLAGS}
Sonic: ${have_sonic}
PCAudioLib: ${have_pcaudiolib}
gradle (Android): ${GRADLE}
ndk-build (Android): ${NDKBUILD_CHECK}
Klatt: ${have_klatt}
speechPlayer: ${have_speechplayer}
MBROLA: ${have_mbrola}
Async: ${have_async}
Extended Dictionaries:
Russian: ${have_extdict_ru}
Chinese (Mandarin): ${have_extdict_cmn}
Chinese (Cantonese): ${have_extdict_yue}
])