eSpeak NG is an open source speech synthesizer that supports more than hundred languages and accents.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

configure.ac 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445
  1. AC_PREREQ([2.63])
  2. AC_INIT([eSpeak NG], [1.52.0], [https://github.com/espeak-ng/espeak-ng/issues], [espeak-ng], [https://github.com/espeak-ng/espeak-ng])
  3. AM_INIT_AUTOMAKE()
  4. LT_INIT
  5. m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES])
  6. AM_SILENT_RULES([yes])
  7. AC_CONFIG_SRCDIR([src])
  8. AC_CONFIG_MACRO_DIR([m4])
  9. AC_CONFIG_HEADERS([config.h])
  10. dnl ================================================================
  11. dnl configure arguments
  12. dnl ================================================================
  13. AC_ARG_ENABLE([rpath],
  14. [AS_HELP_STRING([--enable-rpath], [set hardcoded rpaths in the executable @<:@default=yes@:>@])],
  15. [],
  16. [enable_rpath=yes])
  17. AC_ARG_WITH([gradle],
  18. [AS_HELP_STRING([--with-gradle], [specify the gradle program to use @<:@default=gradle@:>@])],
  19. [GRADLE=$with_gradle],
  20. [GRADLE=gradle])
  21. AC_ARG_WITH([pcaudiolib],
  22. [AS_HELP_STRING([--with-pcaudiolib], [use the pcaudiolib library for audio output @<:@default=yes@:>@])],
  23. [])
  24. AC_ARG_WITH([klatt],
  25. [AS_HELP_STRING([--with-klatt], [enable the Klatt formant synthesizer @<:@default=yes@:>@])],
  26. [])
  27. AC_ARG_WITH([speechplayer],
  28. [AS_HELP_STRING([--with-speechplayer], [enable the speechPlayer Klatt implementation @<:@default=yes@:>@])],
  29. [])
  30. AC_ARG_WITH([mbrola],
  31. [AS_HELP_STRING([--with-mbrola], [enable the MBROLA speech synthesizer @<:@default=yes@:>@])],
  32. [])
  33. AC_ARG_WITH([sonic],
  34. [AS_HELP_STRING([--with-sonic], [enable the sonic library to speed up the audio @<:@default=yes@:>@])],
  35. [])
  36. AC_ARG_WITH([async],
  37. [AS_HELP_STRING([--with-async], [enable support for async command processing @<:@default=yes@:>@])],
  38. [])
  39. AC_ARG_WITH([extdict-ru],
  40. [AS_HELP_STRING([--with-extdict-ru], [use the extended Russian Dictionary file @<:@default=yes@:>@])],
  41. [])
  42. AC_ARG_WITH([extdict-cmn],
  43. [AS_HELP_STRING([--with-extdict-cmn], [use the extended Mandarin Chinese Dictionary file @<:@default=yes@:>@])],
  44. [])
  45. AC_ARG_WITH([extdict-yue],
  46. [AS_HELP_STRING([--with-extdict-yue], [use the extended Cantonese Chinese Dictionary file @<:@default=yes@:>@])],
  47. [])
  48. AC_ARG_WITH([libfuzzer],
  49. [AS_HELP_STRING([--with-libfuzzer], [enable libFuzzer in the fuzzer tests @<:@default=no@:>@])],
  50. [])
  51. AC_ARG_WITH([coverage],
  52. [AS_HELP_STRING([--with-coverage], [enable clang coverage in the fuzzer tests (also add coverage to lib sources) @<:@default=no@:>@])],
  53. [])
  54. dnl ================================================================
  55. dnl Program checks.
  56. dnl ================================================================
  57. AC_PROG_CC
  58. AC_PROG_CXX
  59. AC_PROG_MAKE_SET
  60. AC_PROG_LIBTOOL
  61. AC_PROG_LN_S
  62. dnl ================================================================
  63. dnl gradle checks.
  64. dnl ================================================================
  65. AC_MSG_CHECKING([for gradle])
  66. if command -v "$GRADLE" >/dev/null; then
  67. AC_MSG_RESULT([$GRADLE])
  68. else
  69. GRADLE=
  70. AC_MSG_RESULT([no])
  71. fi
  72. AM_CONDITIONAL(HAVE_GRADLE, [test x"$GRADLE" != x])
  73. AC_SUBST(GRADLE)
  74. dnl ================================================================
  75. dnl C99 compiler checks.
  76. dnl ================================================================
  77. AC_LANG_PUSH(C)
  78. AC_MSG_CHECKING([if $CC supports C99 without any flags])
  79. AC_COMPILE_IFELSE(
  80. [AC_LANG_PROGRAM(
  81. [[static inline void c99_restrict(int *restrict c99_restrict) {}]],
  82. [[]])],
  83. [AC_MSG_RESULT([yes])
  84. have_c99_native=yes],
  85. [AC_MSG_RESULT([no])
  86. have_c99_native=no])
  87. AC_LANG_POP(C)
  88. AC_LANG_PUSH(C)
  89. TEMP_CFLAGS="$CFLAGS"
  90. CFLAGS="$CFLAGS -std=c99"
  91. AC_MSG_CHECKING([if $CC supports C99 with the -std=c99 flag])
  92. AC_COMPILE_IFELSE(
  93. [AC_LANG_PROGRAM(
  94. [[static inline void c99_restrict(int *restrict c99_restrict) {}]],
  95. [[]])],
  96. [AC_MSG_RESULT([yes])
  97. have_c99_c99=yes],
  98. [AC_MSG_RESULT([no])
  99. have_c99_c99=no])
  100. CFLAGS="$TEMP_CFLAGS"
  101. AC_LANG_POP(C)
  102. AC_MSG_CHECKING([if $CC supports C99])
  103. if test "$have_c99_c99" = yes ; then
  104. AC_MSG_RESULT([-std=c99])
  105. CFLAGS="$CFLAGS -std=c99"
  106. elif test "$have_c99_native" = yes ; then
  107. AC_MSG_RESULT([yes])
  108. else
  109. AC_MSG_RESULT([no])
  110. AC_MSG_ERROR([C99 is not supported by $CC.])
  111. fi
  112. if test "$with_libfuzzer" = yes ; then
  113. AC_LANG_PUSH(C)
  114. TEMP_CFLAGS="$CFLAGS"
  115. TEMP_LIBS="$LIBS"
  116. HOST_CPU="`$CC -print-target-triple | sed -e 's/-.*//'`"
  117. LIBFUZZER_NO_MAIN="`$CC -print-file-name=libclang_rt.fuzzer_no_main-$HOST_CPU.a` -lstdc++ -lm"
  118. LIBFUZZER="`$CC -print-file-name=libclang_rt.fuzzer-$HOST_CPU.a` -lstdc++ -lm"
  119. CFLAGS="$CFLAGS -fsanitize=fuzzer-no-link"
  120. LIBS="$LIBS $LIBFUZZER_NO_MAIN"
  121. AC_MSG_CHECKING([if $CC supports fuzzer with the -fsanitize=fuzzer flag])
  122. AC_COMPILE_IFELSE(
  123. [AC_LANG_PROGRAM( [[]], [[]])],
  124. [have_fuzzer_fuzzer=yes],
  125. [have_fuzzer_fuzzer=no])
  126. AC_MSG_RESULT($have_fuzzer_fuzzer)
  127. if test "$have_fuzzer_fuzzer" != yes ; then
  128. CFLAGS="$TEMP_CFLAGS"
  129. LIBFUZZER_NO_MAIN=""
  130. LIBFUZZER=""
  131. fi
  132. AC_SUBST(LIBFUZZER_NO_MAIN)
  133. AC_SUBST(LIBFUZZER)
  134. LIBS="$TEMP_LIBS"
  135. AC_LANG_POP(C)
  136. fi
  137. dnl ================================================================
  138. dnl FreeBSD check.
  139. dnl ================================================================
  140. AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
  141. #if ! defined(__FreeBSD__)
  142. #error macro not defined
  143. #endif
  144. ]])], [FREEBSD_FOUND="yes"], [FREEBSD_FOUND="no"])
  145. AC_MSG_CHECKING([if targeting FreeBSD])
  146. if test "$FREEBSD_FOUND" = "yes" ; then
  147. AC_MSG_RESULT([-D__BSD_VISIBLE])
  148. CFLAGS="$CFLAGS -D__BSD_VISIBLE"
  149. else
  150. AC_MSG_RESULT([no])
  151. fi
  152. dnl ================================================================
  153. dnl library checks.
  154. dnl ================================================================
  155. AC_CHECK_HEADERS([endian.h]) dnl Linux
  156. AC_CHECK_HEADERS([fcntl.h]) dnl POSIX
  157. AC_CHECK_HEADERS([getopt.h]) dnl POSIX
  158. AC_CHECK_HEADERS([locale.h]) dnl C89
  159. AC_CHECK_HEADERS([stddef.h]) dnl C89
  160. AC_CHECK_HEADERS([stdbool.h]) dnl C99
  161. AC_CHECK_HEADERS([sys/endian.h]) dnl BSD
  162. AC_CHECK_HEADERS([sys/time.h]) dnl POSIX
  163. AC_CHECK_HEADERS([wchar.h]) dnl C89
  164. AC_CHECK_HEADERS([wctype.h]) dnl C89
  165. AC_TYPE_SIZE_T
  166. AC_TYPE_SSIZE_T
  167. AC_TYPE_UINT16_T
  168. AC_TYPE_UINT32_T
  169. AC_TYPE_UINT64_T
  170. AC_FUNC_FORK
  171. AC_FUNC_STRCOLL
  172. AC_FUNC_ERROR_AT_LINE
  173. AC_CHECK_FUNCS([dup2])
  174. AC_CHECK_FUNCS([getopt_long])
  175. AC_CHECK_FUNCS([gettimeofday])
  176. AC_CHECK_FUNCS([malloc]) dnl Avoid "Undefined reference to rpl_malloc" when using AC_FUNC_MALLOC.
  177. AC_CHECK_FUNCS([memchr])
  178. AC_CHECK_FUNCS([memmove])
  179. AC_CHECK_FUNCS([memset])
  180. AC_CHECK_FUNCS([mkdir])
  181. AC_CHECK_FUNCS([mkstemp])
  182. AC_CHECK_FUNCS([pow])
  183. AC_CHECK_FUNCS([realloc]) dnl Avoid "Undefined reference to rpl_malloc" when using AC_FUNC_REALLOC.
  184. AC_CHECK_FUNCS([setlocale])
  185. AC_CHECK_FUNCS([sqrt])
  186. AC_CHECK_FUNCS([strchr])
  187. AC_CHECK_FUNCS([strdup])
  188. AC_CHECK_FUNCS([strerror])
  189. AC_CHECK_FUNCS([strrchr])
  190. AC_CHECK_FUNCS([strstr])
  191. dnl ================================================================
  192. dnl JSON-C library checks.
  193. dnl ================================================================
  194. AC_CHECK_HEADERS([json-c/json.h],
  195. [
  196. have_jsonc=yes
  197. JSONC_CFLAGS=-DUSE_JSONC=1
  198. AC_CHECK_LIB([json-c], [json_object_from_file],
  199. [
  200. JSONC_LIBS=-ljson-c
  201. ],
  202. [
  203. have_jsonc=no
  204. AC_MSG_ERROR([json-c library is required for homograph support])
  205. ]
  206. )
  207. ],
  208. [
  209. have_jsonc=no
  210. AC_MSG_ERROR([json-c library is required for homograph support])
  211. ]
  212. )
  213. AC_SUBST(JSONC_CFLAGS)
  214. AC_SUBST(JSONC_LIBS)
  215. dnl ================================================================
  216. dnl PCAudioLib checks.
  217. dnl ================================================================
  218. if test "$with_pcaudiolib" = "no"; then
  219. echo "Disabling audio output support via pcaudiolib"
  220. have_pcaudiolib=no
  221. else
  222. AC_CHECK_HEADERS([pcaudiolib/audio.h],
  223. [
  224. have_pcaudiolib=yes
  225. PCAUDIOLIB_CFLAGS=-DUSE_LIBPCAUDIO=1
  226. PCAUDIOLIB_LIBS=-lpcaudio
  227. ],[
  228. have_pcaudiolib=no
  229. ])
  230. fi
  231. AC_SUBST(PCAUDIOLIB_CFLAGS)
  232. AC_SUBST(PCAUDIOLIB_LIBS)
  233. dnl ================================================================
  234. dnl Optional compilation checks.
  235. dnl ================================================================
  236. if test "$with_klatt" = "no" ; then
  237. have_klatt=no
  238. else
  239. have_klatt=yes
  240. fi
  241. if test "$with_speechplayer" = "no" ; then
  242. have_speechplayer=no
  243. else
  244. have_speechplayer=yes
  245. fi
  246. if test "$with_mbrola" = "no" ; then
  247. have_mbrola=no
  248. else
  249. have_mbrola=yes
  250. fi
  251. if test "$with_sonic" = "no" ; then
  252. have_sonic=no
  253. else
  254. AC_CHECK_HEADERS([sonic.h],
  255. [
  256. SONIC_CFLAGS=-DUSE_LIBSONIC=1
  257. AC_CHECK_LIB([sonic], [sonicCreateStream])
  258. have_sonic=yes
  259. ],[
  260. have_sonic=no
  261. ])
  262. fi
  263. AC_SUBST(SONIC_CFLAGS)
  264. AC_CHECK_HEADERS([valgrind/memcheck.h])
  265. if test "$with_async" = "no" ; then
  266. have_async=no
  267. else
  268. have_async=yes
  269. fi
  270. AM_CONDITIONAL(OPT_KLATT, [test x"$have_klatt" = xyes])
  271. AM_CONDITIONAL(OPT_SPEECHPLAYER, [test x"$have_speechplayer" = xyes])
  272. AM_CONDITIONAL(OPT_MBROLA, [test x"$have_mbrola" = xyes])
  273. AM_CONDITIONAL(OPT_ASYNC, [test x"$have_async" = xyes])
  274. dnl ================================================================
  275. dnl ronn checks.
  276. dnl ================================================================
  277. AC_CHECK_PROG(RONN, ronn, ronn, no)
  278. AM_CONDITIONAL(HAVE_RONN, [test ! x"$RONN" = xno])
  279. AC_CHECK_PROG(KRAMDOWN, kramdown, kramdown, no)
  280. dnl ================================================================
  281. dnl Extended dictionary checks.
  282. dnl ================================================================
  283. if test "$with_extdict_ru" = "no" ; then
  284. have_extdict_ru=no
  285. else
  286. have_extdict_ru=yes
  287. fi
  288. if test "$with_extdict_cmn" = "no" ; then
  289. have_extdict_cmn=no
  290. else
  291. have_extdict_cmn=yes
  292. fi
  293. if test "$with_extdict_yue" = "no" ; then
  294. have_extdict_yue=no
  295. else
  296. have_extdict_yue=yes
  297. fi
  298. AM_CONDITIONAL(HAVE_RU_EXTENDED_DICTIONARY, [test x"$have_extdict_ru" = xyes])
  299. AM_CONDITIONAL(HAVE_CMN_EXTENDED_DICTIONARY, [test x"$have_extdict_cmn" = xyes])
  300. AM_CONDITIONAL(HAVE_YUE_EXTENDED_DICTIONARY, [test x"$have_extdict_yue" = xyes])
  301. dnl ================================================================
  302. dnl Compiler warnings.
  303. dnl
  304. dnl Reference: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
  305. dnl ================================================================
  306. AX_CHECK_COMPILE_FLAG([-Wimplicit], [CFLAGS="-Wimplicit $CFLAGS"])
  307. AX_CHECK_COMPILE_FLAG([-Wint-conversion], [CFLAGS="-Wint-conversion $CFLAGS"])
  308. AX_CHECK_COMPILE_FLAG([-Wmissing-prototypes], [CFLAGS="-Wmissing-prototypes $CFLAGS"])
  309. AX_CHECK_COMPILE_FLAG([-Wreturn-type], [CFLAGS="-Wreturn-type $CFLAGS"])
  310. AX_CHECK_COMPILE_FLAG([-Wuninitialized], [CFLAGS="-Wuninitialized $CFLAGS"])
  311. AX_CHECK_COMPILE_FLAG([-Wunused], [CFLAGS="-Wunused $CFLAGS"])
  312. AX_CHECK_COMPILE_FLAG([-Wunused-parameter], [CFLAGS="-Wunused-parameter $CFLAGS"])
  313. dnl ================================================================
  314. dnl Enable two-complement signed integer wrapping
  315. dnl
  316. dnl Otherwise this is undefined behavior.
  317. dnl ================================================================
  318. AX_CHECK_COMPILE_FLAG([-fwrapv], [CFLAGS="-fwrapv $CFLAGS"])
  319. dnl ================================================================
  320. dnl libFuzzer checks.
  321. dnl ================================================================
  322. if test "$with_libfuzzer" = "yes" ; then
  323. have_libfuzzer=yes
  324. else
  325. have_libfuzzer=no
  326. fi
  327. AM_CONDITIONAL(HAVE_LIBFUZZER, [test x"$have_libfuzzer" = xyes -a x"$have_fuzzer_fuzzer" = xyes])
  328. dnl ================================================================
  329. dnl clang-coverage checks.
  330. dnl ================================================================
  331. if test "$with_coverage" = "yes" ; then
  332. use_coverage=yes
  333. else
  334. use_coverage=no
  335. fi
  336. AM_CONDITIONAL(USE_COVERAGE, [test x"$use_coverage" = xyes])
  337. dnl ================================================================
  338. dnl Generate output.
  339. dnl ================================================================
  340. AC_CONFIG_FILES([Makefile espeak-ng.pc])
  341. AC_OUTPUT
  342. if test "$enable_rpath" = "yes" ; then
  343. true
  344. else
  345. # See https://old-en.opensuse.org/openSUSE:Packaging_Guidelines#Removing_Rpath
  346. sed -i 's|^hardcode_libdir_flag_spec=.*|hardcode_libdir_flag_spec=""|g' libtool
  347. sed -i 's|^runpath_var=LD_RUN_PATH|runpath_var=DIE_RPATH_DIE|g' libtool
  348. fi
  349. AC_MSG_NOTICE([
  350. Configuration for eSpeak NG complete.
  351. Source code location: ${srcdir}
  352. C99 Compiler: ${CC}
  353. C99 Compiler flags: ${CFLAGS}
  354. Sonic: ${have_sonic}
  355. PCAudioLib: ${have_pcaudiolib}
  356. gradle (Android): ${GRADLE}
  357. Klatt: ${have_klatt}
  358. speechPlayer: ${have_speechplayer}
  359. MBROLA: ${have_mbrola}
  360. Async: ${have_async}
  361. Extended Dictionaries:
  362. Russian: ${have_extdict_ru}
  363. Chinese (Mandarin): ${have_extdict_cmn}
  364. Chinese (Cantonese): ${have_extdict_yue}
  365. ])