intl.m4 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305
  1. # intl.m4 serial 29 (gettext-0.19)
  2. dnl Copyright (C) 1995-2014, 2016 Free Software Foundation, Inc.
  3. dnl This file is free software; the Free Software Foundation
  4. dnl gives unlimited permission to copy and/or distribute it,
  5. dnl with or without modifications, as long as this notice is preserved.
  6. dnl
  7. dnl This file can be used in projects which are not available under
  8. dnl the GNU General Public License or the GNU Library General Public
  9. dnl License but which still want to provide support for the GNU gettext
  10. dnl functionality.
  11. dnl Please note that the actual code of the GNU gettext library is covered
  12. dnl by the GNU Library General Public License, and the rest of the GNU
  13. dnl gettext package is covered by the GNU General Public License.
  14. dnl They are *not* in the public domain.
  15. dnl Authors:
  16. dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
  17. dnl Bruno Haible <haible@clisp.cons.org>, 2000-2009.
  18. AC_PREREQ([2.60])
  19. dnl Checks for all prerequisites of the intl subdirectory,
  20. dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS,
  21. dnl USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL.
  22. AC_DEFUN([AM_INTL_SUBDIR],
  23. [
  24. AC_REQUIRE([AC_PROG_INSTALL])dnl
  25. AC_REQUIRE([AC_PROG_MKDIR_P])dnl
  26. AC_REQUIRE([AC_PROG_CC])dnl
  27. AC_REQUIRE([AC_CANONICAL_HOST])dnl
  28. AC_REQUIRE([gt_GLIBC2])dnl
  29. AC_REQUIRE([AC_PROG_RANLIB])dnl
  30. AC_REQUIRE([gl_VISIBILITY])dnl
  31. AC_REQUIRE([gt_INTL_SUBDIR_CORE])dnl
  32. AC_REQUIRE([AC_TYPE_LONG_LONG_INT])dnl
  33. AC_REQUIRE([gt_TYPE_WCHAR_T])dnl
  34. AC_REQUIRE([gt_TYPE_WINT_T])dnl
  35. AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
  36. AC_REQUIRE([gt_TYPE_INTMAX_T])
  37. AC_REQUIRE([gt_PRINTF_POSIX])
  38. AC_REQUIRE([gl_GLIBC21])dnl
  39. AC_REQUIRE([gl_XSIZE])dnl
  40. AC_REQUIRE([gl_FCNTL_O_FLAGS])dnl
  41. AC_REQUIRE([gt_INTL_MACOSX])dnl
  42. AC_REQUIRE([gl_EXTERN_INLINE])dnl
  43. AC_REQUIRE([gt_GL_ATTRIBUTE])dnl
  44. dnl Support for automake's --enable-silent-rules.
  45. case "$enable_silent_rules" in
  46. yes) INTL_DEFAULT_VERBOSITY=0;;
  47. no) INTL_DEFAULT_VERBOSITY=1;;
  48. *) INTL_DEFAULT_VERBOSITY=1;;
  49. esac
  50. AC_SUBST([INTL_DEFAULT_VERBOSITY])
  51. AC_CHECK_TYPE([ptrdiff_t], ,
  52. [AC_DEFINE([ptrdiff_t], [long],
  53. [Define as the type of the result of subtracting two pointers, if the system doesn't define it.])
  54. ])
  55. AC_CHECK_HEADERS([features.h stddef.h stdlib.h string.h])
  56. AC_CHECK_FUNCS([asprintf fwprintf newlocale putenv setenv setlocale \
  57. snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb])
  58. dnl Use the _snprintf function only if it is declared (because on NetBSD it
  59. dnl is defined as a weak alias of snprintf; we prefer to use the latter).
  60. AC_CHECK_DECLS([_snprintf, _snwprintf], , , [#include <stdio.h>])
  61. dnl Use the *_unlocked functions only if they are declared.
  62. dnl (because some of them were defined without being declared in Solaris
  63. dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built
  64. dnl on Solaris 2.5.1 to run on Solaris 2.6).
  65. AC_CHECK_DECLS([getc_unlocked], , , [#include <stdio.h>])
  66. case $gt_cv_func_printf_posix in
  67. *yes) HAVE_POSIX_PRINTF=1 ;;
  68. *) HAVE_POSIX_PRINTF=0 ;;
  69. esac
  70. AC_SUBST([HAVE_POSIX_PRINTF])
  71. if test "$ac_cv_func_asprintf" = yes; then
  72. HAVE_ASPRINTF=1
  73. else
  74. HAVE_ASPRINTF=0
  75. fi
  76. AC_SUBST([HAVE_ASPRINTF])
  77. if test "$ac_cv_func_snprintf" = yes; then
  78. HAVE_SNPRINTF=1
  79. else
  80. HAVE_SNPRINTF=0
  81. fi
  82. AC_SUBST([HAVE_SNPRINTF])
  83. if test "$ac_cv_func_newlocale" = yes; then
  84. HAVE_NEWLOCALE=1
  85. else
  86. HAVE_NEWLOCALE=0
  87. fi
  88. AC_SUBST([HAVE_NEWLOCALE])
  89. if test "$ac_cv_func_wprintf" = yes; then
  90. HAVE_WPRINTF=1
  91. else
  92. HAVE_WPRINTF=0
  93. fi
  94. AC_SUBST([HAVE_WPRINTF])
  95. AM_LANGINFO_CODESET
  96. gt_LC_MESSAGES
  97. dnl Compilation on mingw and Cygwin needs special Makefile rules, because
  98. dnl 1. when we install a shared library, we must arrange to export
  99. dnl auxiliary pointer variables for every exported variable,
  100. dnl 2. when we install a shared library and a static library simultaneously,
  101. dnl the include file specifies __declspec(dllimport) and therefore we
  102. dnl must arrange to define the auxiliary pointer variables for the
  103. dnl exported variables _also_ in the static library.
  104. if test "$enable_shared" = yes; then
  105. case "$host_os" in
  106. mingw* | cygwin*) is_woe32dll=yes ;;
  107. *) is_woe32dll=no ;;
  108. esac
  109. else
  110. is_woe32dll=no
  111. fi
  112. WOE32DLL=$is_woe32dll
  113. AC_SUBST([WOE32DLL])
  114. dnl On mingw and Cygwin, we can activate special Makefile rules which add
  115. dnl version information to the shared libraries and executables.
  116. case "$host_os" in
  117. mingw* | cygwin*) is_woe32=yes ;;
  118. *) is_woe32=no ;;
  119. esac
  120. WOE32=$is_woe32
  121. AC_SUBST([WOE32])
  122. if test $WOE32 = yes; then
  123. dnl Check for a program that compiles Windows resource files.
  124. AC_CHECK_TOOL([WINDRES], [windres])
  125. fi
  126. dnl Determine whether when creating a library, "-lc" should be passed to
  127. dnl libtool or not. On many platforms, it is required for the libtool option
  128. dnl -no-undefined to work. On HP-UX, however, the -lc - stored by libtool
  129. dnl in the *.la files - makes it impossible to create multithreaded programs,
  130. dnl because libtool also reorders the -lc to come before the -pthread, and
  131. dnl this disables pthread_create() <http://docs.hp.com/en/1896/pthreads.html>.
  132. case "$host_os" in
  133. hpux*) LTLIBC="" ;;
  134. *) LTLIBC="-lc" ;;
  135. esac
  136. AC_SUBST([LTLIBC])
  137. dnl Rename some macros and functions used for locking.
  138. AH_BOTTOM([
  139. #define __libc_lock_t gl_lock_t
  140. #define __libc_lock_define gl_lock_define
  141. #define __libc_lock_define_initialized gl_lock_define_initialized
  142. #define __libc_lock_init gl_lock_init
  143. #define __libc_lock_lock gl_lock_lock
  144. #define __libc_lock_unlock gl_lock_unlock
  145. #define __libc_lock_recursive_t gl_recursive_lock_t
  146. #define __libc_lock_define_recursive gl_recursive_lock_define
  147. #define __libc_lock_define_initialized_recursive gl_recursive_lock_define_initialized
  148. #define __libc_lock_init_recursive gl_recursive_lock_init
  149. #define __libc_lock_lock_recursive gl_recursive_lock_lock
  150. #define __libc_lock_unlock_recursive gl_recursive_lock_unlock
  151. #define glthread_in_use libintl_thread_in_use
  152. #define glthread_lock_init_func libintl_lock_init_func
  153. #define glthread_lock_lock_func libintl_lock_lock_func
  154. #define glthread_lock_unlock_func libintl_lock_unlock_func
  155. #define glthread_lock_destroy_func libintl_lock_destroy_func
  156. #define glthread_rwlock_init_multithreaded libintl_rwlock_init_multithreaded
  157. #define glthread_rwlock_init_func libintl_rwlock_init_func
  158. #define glthread_rwlock_rdlock_multithreaded libintl_rwlock_rdlock_multithreaded
  159. #define glthread_rwlock_rdlock_func libintl_rwlock_rdlock_func
  160. #define glthread_rwlock_wrlock_multithreaded libintl_rwlock_wrlock_multithreaded
  161. #define glthread_rwlock_wrlock_func libintl_rwlock_wrlock_func
  162. #define glthread_rwlock_unlock_multithreaded libintl_rwlock_unlock_multithreaded
  163. #define glthread_rwlock_unlock_func libintl_rwlock_unlock_func
  164. #define glthread_rwlock_destroy_multithreaded libintl_rwlock_destroy_multithreaded
  165. #define glthread_rwlock_destroy_func libintl_rwlock_destroy_func
  166. #define glthread_recursive_lock_init_multithreaded libintl_recursive_lock_init_multithreaded
  167. #define glthread_recursive_lock_init_func libintl_recursive_lock_init_func
  168. #define glthread_recursive_lock_lock_multithreaded libintl_recursive_lock_lock_multithreaded
  169. #define glthread_recursive_lock_lock_func libintl_recursive_lock_lock_func
  170. #define glthread_recursive_lock_unlock_multithreaded libintl_recursive_lock_unlock_multithreaded
  171. #define glthread_recursive_lock_unlock_func libintl_recursive_lock_unlock_func
  172. #define glthread_recursive_lock_destroy_multithreaded libintl_recursive_lock_destroy_multithreaded
  173. #define glthread_recursive_lock_destroy_func libintl_recursive_lock_destroy_func
  174. #define glthread_once_func libintl_once_func
  175. #define glthread_once_singlethreaded libintl_once_singlethreaded
  176. #define glthread_once_multithreaded libintl_once_multithreaded
  177. ])
  178. ])
  179. dnl Checks for the core files of the intl subdirectory:
  180. dnl dcigettext.c
  181. dnl eval-plural.h
  182. dnl explodename.c
  183. dnl finddomain.c
  184. dnl gettextP.h
  185. dnl gmo.h
  186. dnl hash-string.h hash-string.c
  187. dnl l10nflist.c
  188. dnl libgnuintl.h.in (except the *printf stuff)
  189. dnl loadinfo.h
  190. dnl loadmsgcat.c
  191. dnl localealias.c
  192. dnl log.c
  193. dnl plural-exp.h plural-exp.c
  194. dnl plural.y
  195. dnl Used by libglocale.
  196. AC_DEFUN([gt_INTL_SUBDIR_CORE],
  197. [
  198. AC_REQUIRE([AC_C_INLINE])dnl
  199. AC_REQUIRE([AC_TYPE_SIZE_T])dnl
  200. AC_REQUIRE([gl_AC_HEADER_STDINT_H])
  201. AC_REQUIRE([AC_FUNC_ALLOCA])dnl
  202. AC_REQUIRE([AC_FUNC_MMAP])dnl
  203. AC_REQUIRE([gt_INTDIV0])dnl
  204. AC_REQUIRE([gl_AC_TYPE_UINTMAX_T])dnl
  205. AC_REQUIRE([gt_INTTYPES_PRI])dnl
  206. AC_REQUIRE([gl_LOCK])dnl
  207. AC_LINK_IFELSE(
  208. [AC_LANG_PROGRAM(
  209. [[int foo (int a) { a = __builtin_expect (a, 10); return a == 10 ? 0 : 1; }]],
  210. [[]])],
  211. [AC_DEFINE([HAVE_BUILTIN_EXPECT], [1],
  212. [Define to 1 if the compiler understands __builtin_expect.])])
  213. AC_CHECK_HEADERS([argz.h inttypes.h limits.h unistd.h sys/param.h])
  214. AC_CHECK_FUNCS([getcwd getegid geteuid getgid getuid mempcpy munmap \
  215. stpcpy strcasecmp strdup strtoul tsearch uselocale argz_count \
  216. argz_stringify argz_next __fsetlocking])
  217. dnl Solaris 12 provides getlocalename_l, while Illumos doesn't have
  218. dnl it nor the equivalent.
  219. if test $ac_cv_func_uselocale = yes; then
  220. AC_CHECK_FUNCS([getlocalename_l])
  221. fi
  222. dnl Use the *_unlocked functions only if they are declared.
  223. dnl (because some of them were defined without being declared in Solaris
  224. dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built
  225. dnl on Solaris 2.5.1 to run on Solaris 2.6).
  226. AC_CHECK_DECLS([feof_unlocked, fgets_unlocked], , , [#include <stdio.h>])
  227. AM_ICONV
  228. dnl intl/plural.c is generated from intl/plural.y. It requires bison,
  229. dnl because plural.y uses bison specific features. It requires at least
  230. dnl bison-2.7 for %define api.pure.
  231. dnl bison is only needed for the maintainer (who touches plural.y). But in
  232. dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
  233. dnl the rule in general Makefile. Now, some people carelessly touch the
  234. dnl files or have a broken "make" program, hence the plural.c rule will
  235. dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
  236. dnl present or too old.
  237. AC_CHECK_PROGS([INTLBISON], [bison])
  238. if test -z "$INTLBISON"; then
  239. ac_verc_fail=yes
  240. else
  241. dnl Found it, now check the version.
  242. AC_MSG_CHECKING([version of bison])
  243. changequote(<<,>>)dnl
  244. ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
  245. case $ac_prog_version in
  246. '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
  247. 2.[7-9]* | [3-9].*)
  248. changequote([,])dnl
  249. ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
  250. *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
  251. esac
  252. AC_MSG_RESULT([$ac_prog_version])
  253. fi
  254. if test $ac_verc_fail = yes; then
  255. INTLBISON=:
  256. fi
  257. ])
  258. dnl Copies _GL_UNUSED and _GL_ATTRIBUTE_PURE definitions from
  259. dnl gnulib-common.m4 as a fallback, if the project isn't using Gnulib.
  260. AC_DEFUN([gt_GL_ATTRIBUTE], [
  261. m4_ifndef([gl_[]COMMON],
  262. AH_VERBATIM([gt_gl_attribute],
  263. [/* Define as a marker that can be attached to declarations that might not
  264. be used. This helps to reduce warnings, such as from
  265. GCC -Wunused-parameter. */
  266. #ifndef _GL_UNUSED
  267. # if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
  268. # define _GL_UNUSED __attribute__ ((__unused__))
  269. # else
  270. # define _GL_UNUSED
  271. # endif
  272. #endif
  273. /* The __pure__ attribute was added in gcc 2.96. */
  274. #ifndef _GL_ATTRIBUTE_PURE
  275. # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
  276. # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
  277. # else
  278. # define _GL_ATTRIBUTE_PURE /* empty */
  279. # endif
  280. #endif
  281. ]))])