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