1# intl.m4 serial 44 (gettext-0.21)
2dnl Copyright (C) 1995-2014, 2016-2020 Free Software Foundation, Inc.
3dnl This file is free software; the Free Software Foundation
4dnl gives unlimited permission to copy and/or distribute it,
5dnl with or without modifications, as long as this notice is preserved.
6dnl
7dnl This file can be used in projects which are not available under
8dnl the GNU General Public License or the GNU Lesser General Public
9dnl License but which still want to provide support for the GNU gettext
10dnl functionality.
11dnl Please note that the actual code of the GNU gettext library is covered
12dnl by the GNU Lesser General Public License, and the rest of the GNU
13dnl gettext package is covered by the GNU General Public License.
14dnl They are *not* in the public domain.
15
16dnl Authors:
17dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
18dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2009.
19
20AC_PREREQ([2.60])
21
22dnl Checks for all prerequisites of the intl subdirectory,
23dnl except for LIBTOOL, USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL.
24AC_DEFUN([AM_INTL_SUBDIR],
25[
26  AC_REQUIRE([AC_PROG_INSTALL])dnl
27  AC_REQUIRE([AC_PROG_MKDIR_P])dnl
28  AC_REQUIRE([AC_PROG_CC])dnl
29  AC_REQUIRE([AC_CANONICAL_HOST])dnl
30  AC_REQUIRE([gt_GLIBC2])dnl
31  AC_REQUIRE([gl_VISIBILITY])dnl
32  AC_REQUIRE([gt_INTL_SUBDIR_CORE])dnl
33  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])dnl
34  AC_REQUIRE([gt_TYPE_WCHAR_T])dnl
35  AC_REQUIRE([gt_TYPE_WINT_T])dnl
36  AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
37  AC_REQUIRE([gt_TYPE_INTMAX_T])
38  AC_REQUIRE([gt_PRINTF_POSIX])
39  AC_REQUIRE([gl_GLIBC21])dnl
40  AC_REQUIRE([gl_XSIZE])dnl
41  AC_REQUIRE([gl_FCNTL_O_FLAGS])dnl
42  AC_REQUIRE([gt_INTL_THREAD_LOCALE_NAME])
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
47
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    ])
62
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])
70
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 wprintf newlocale putenv setenv \
77    snprintf strnlen uselocale wcslen wcsnlen mbrtowc wcrtomb])
78
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>])
82
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>])
88
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])
118
119  AM_LANGINFO_CODESET
120  gt_LC_MESSAGES
121
122  if test $gt_nameless_locales = yes; then
123    HAVE_NAMELESS_LOCALES=1
124  else
125    HAVE_NAMELESS_LOCALES=0
126  fi
127  AC_SUBST([HAVE_NAMELESS_LOCALES])
128
129  dnl Compilation on mingw and Cygwin needs special Makefile rules, because
130  dnl 1. when we install a shared library, we must arrange to export
131  dnl    auxiliary pointer variables for every exported variable,
132  dnl 2. when we install a shared library and a static library simultaneously,
133  dnl    the include file specifies __declspec(dllimport) and therefore we
134  dnl    must arrange to define the auxiliary pointer variables for the
135  dnl    exported variables _also_ in the static library.
136  if test "$enable_shared" = yes; then
137    case "$host_os" in
138      mingw* | cygwin*) is_woe32dll=yes ;;
139      *) is_woe32dll=no ;;
140    esac
141  else
142    is_woe32dll=no
143  fi
144  WOE32DLL=$is_woe32dll
145  AC_SUBST([WOE32DLL])
146
147  dnl On mingw and Cygwin, we can activate special Makefile rules which add
148  dnl version information to the shared libraries and executables.
149  case "$host_os" in
150    mingw* | cygwin*) is_woe32=yes ;;
151    *) is_woe32=no ;;
152  esac
153  WOE32=$is_woe32
154  AC_SUBST([WOE32])
155  if test $WOE32 = yes; then
156    dnl Check for a program that compiles Windows resource files.
157    AC_CHECK_TOOL([WINDRES], [windres])
158  fi
159
160  dnl Rename some macros and functions used for locking.
161  AH_BOTTOM([
162#define __libc_lock_t                   gl_lock_t
163#define __libc_lock_define              gl_lock_define
164#define __libc_lock_define_initialized  gl_lock_define_initialized
165#define __libc_lock_init                gl_lock_init
166#define __libc_lock_lock                gl_lock_lock
167#define __libc_lock_unlock              gl_lock_unlock
168#define __libc_lock_recursive_t                   gl_recursive_lock_t
169#define __libc_lock_define_recursive              gl_recursive_lock_define
170#define __libc_lock_define_initialized_recursive  gl_recursive_lock_define_initialized
171#define __libc_lock_init_recursive                gl_recursive_lock_init
172#define __libc_lock_lock_recursive                gl_recursive_lock_lock
173#define __libc_lock_unlock_recursive              gl_recursive_lock_unlock
174#define glthread_in_use  libintl_thread_in_use
175#define glthread_lock_init_func     libintl_lock_init_func
176#define glthread_lock_lock_func     libintl_lock_lock_func
177#define glthread_lock_unlock_func   libintl_lock_unlock_func
178#define glthread_lock_destroy_func  libintl_lock_destroy_func
179#define glthread_rwlock_init_multithreaded     libintl_rwlock_init_multithreaded
180#define glthread_rwlock_init_func              libintl_rwlock_init_func
181#define glthread_rwlock_rdlock_multithreaded   libintl_rwlock_rdlock_multithreaded
182#define glthread_rwlock_rdlock_func            libintl_rwlock_rdlock_func
183#define glthread_rwlock_wrlock_multithreaded   libintl_rwlock_wrlock_multithreaded
184#define glthread_rwlock_wrlock_func            libintl_rwlock_wrlock_func
185#define glthread_rwlock_unlock_multithreaded   libintl_rwlock_unlock_multithreaded
186#define glthread_rwlock_unlock_func            libintl_rwlock_unlock_func
187#define glthread_rwlock_destroy_multithreaded  libintl_rwlock_destroy_multithreaded
188#define glthread_rwlock_destroy_func           libintl_rwlock_destroy_func
189#define glthread_recursive_lock_init_multithreaded     libintl_recursive_lock_init_multithreaded
190#define glthread_recursive_lock_init_func              libintl_recursive_lock_init_func
191#define glthread_recursive_lock_lock_multithreaded     libintl_recursive_lock_lock_multithreaded
192#define glthread_recursive_lock_lock_func              libintl_recursive_lock_lock_func
193#define glthread_recursive_lock_unlock_multithreaded   libintl_recursive_lock_unlock_multithreaded
194#define glthread_recursive_lock_unlock_func            libintl_recursive_lock_unlock_func
195#define glthread_recursive_lock_destroy_multithreaded  libintl_recursive_lock_destroy_multithreaded
196#define glthread_recursive_lock_destroy_func           libintl_recursive_lock_destroy_func
197#define glthread_once_func            libintl_once_func
198#define glthread_once_singlethreaded  libintl_once_singlethreaded
199#define glthread_once_multithreaded   libintl_once_multithreaded
200])
201])
202
203
204dnl Checks for the core files of the intl subdirectory:
205dnl   dcigettext.c
206dnl   eval-plural.h
207dnl   explodename.c
208dnl   finddomain.c
209dnl   gettextP.h
210dnl   gmo.h
211dnl   hash-string.h hash-string.c
212dnl   l10nflist.c
213dnl   libgnuintl.h.in (except the *printf stuff)
214dnl   loadinfo.h
215dnl   loadmsgcat.c
216dnl   localealias.c
217dnl   log.c
218dnl   plural-exp.h plural-exp.c
219dnl   plural.y
220dnl Used by libglocale.
221AC_DEFUN([gt_INTL_SUBDIR_CORE],
222[
223  AC_REQUIRE([AC_C_INLINE])dnl
224  AC_REQUIRE([AC_TYPE_SIZE_T])dnl
225  AC_REQUIRE([gl_AC_HEADER_STDINT_H])
226  AC_REQUIRE([AC_FUNC_ALLOCA])dnl
227  AC_REQUIRE([AC_FUNC_MMAP])dnl
228  AC_REQUIRE([gt_INTDIV0])dnl
229  AC_REQUIRE([gl_AC_TYPE_UINTMAX_T])dnl
230  AC_REQUIRE([gl_LOCK])dnl
231
232  AC_LINK_IFELSE(
233    [AC_LANG_PROGRAM(
234       [[int foo (int a) { a = __builtin_expect (a, 10); return a == 10 ? 0 : 1; }]],
235       [[]])],
236    [AC_DEFINE([HAVE_BUILTIN_EXPECT], [1],
237       [Define to 1 if the compiler understands __builtin_expect.])])
238
239  AC_CHECK_HEADERS([inttypes.h limits.h unistd.h sys/param.h])
240  AC_CHECK_FUNCS([getcwd getegid geteuid getgid getuid mempcpy munmap \
241    stpcpy strcasecmp strdup strtoul tsearch __fsetlocking])
242
243  dnl Use the *_unlocked functions only if they are declared.
244  dnl (because some of them were defined without being declared in Solaris
245  dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built
246  dnl on Solaris 2.5.1 to run on Solaris 2.6).
247  AC_CHECK_DECLS([feof_unlocked, fgets_unlocked], , , [#include <stdio.h>])
248
249  AM_ICONV
250
251  dnl intl/plural.c is generated from intl/plural.y. It requires bison,
252  dnl because plural.y uses bison specific features. It requires at least
253  dnl bison-3.0 for %precedence.
254  dnl bison is only needed for the maintainer (who touches plural.y). But in
255  dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
256  dnl the rule in general Makefile. Now, some people carelessly touch the
257  dnl files or have a broken "make" program, hence the plural.c rule will
258  dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
259  dnl present or too old.
260  gl_PROG_BISON([INTLBISON], [3.0])
261])
262
263dnl Copies _GL_UNUSED and _GL_ATTRIBUTE_PURE definitions from
264dnl gnulib-common.m4 as a fallback, if the project isn't using Gnulib.
265AC_DEFUN([gt_GL_ATTRIBUTE], [
266  m4_ifndef([gl_[]COMMON],
267    AH_VERBATIM([gt_gl_attribute],
268[/* Define as a marker that can be attached to declarations that might not
269    be used.  This helps to reduce warnings, such as from
270    GCC -Wunused-parameter.  */
271#ifndef _GL_UNUSED
272# if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
273#  define _GL_UNUSED __attribute__ ((__unused__))
274# else
275#  define _GL_UNUSED
276# endif
277#endif
278
279/* The __pure__ attribute was added in gcc 2.96.  */
280#ifndef _GL_ATTRIBUTE_PURE
281# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
282#  define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
283# else
284#  define _GL_ATTRIBUTE_PURE /* empty */
285# endif
286#endif
287]))])
288