autoupdate
[gnulib.git] / m4 / intl.m4
1 # intl.m4 serial 5 (gettext-0.16.2)
2 dnl Copyright (C) 1995-2007 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 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 package is covered by the GNU General Public License.
14 dnl They are *not* in the public domain.
15
16 dnl Authors:
17 dnl   Ulrich Drepper <drepper@cygnus.com>, 1995-2000.
18 dnl   Bruno Haible <haible@clisp.cons.org>, 2000-2006.
19
20 AC_PREREQ(2.52)
21
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],
26 [
27   AC_REQUIRE([AC_PROG_INSTALL])dnl
28   AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
29   AC_REQUIRE([AC_PROG_CC])dnl
30   AC_REQUIRE([AC_CANONICAL_HOST])dnl
31   AC_REQUIRE([gt_GLIBC2])dnl
32   AC_REQUIRE([AC_PROG_RANLIB])dnl
33   AC_REQUIRE([gl_VISIBILITY])dnl
34   AC_REQUIRE([gt_INTL_SUBDIR_CORE])dnl
35   AC_REQUIRE([AC_TYPE_LONG_LONG_INT])dnl
36   AC_REQUIRE([gt_TYPE_WCHAR_T])dnl
37   AC_REQUIRE([gt_TYPE_WINT_T])dnl
38   AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
39   AC_REQUIRE([gt_TYPE_INTMAX_T])
40   AC_REQUIRE([gt_PRINTF_POSIX])
41   AC_REQUIRE([gl_GLIBC21])dnl
42   AC_REQUIRE([gl_XSIZE])dnl
43   AC_REQUIRE([gt_INTL_MACOSX])dnl
44
45   AC_CHECK_TYPE([ptrdiff_t], ,
46     [AC_DEFINE([ptrdiff_t], [long],
47        [Define as the type of the result of subtracting two pointers, if the system doesn't define it.])
48     ])
49   AC_CHECK_HEADERS([stddef.h stdlib.h string.h])
50   AC_CHECK_FUNCS([asprintf fwprintf putenv setenv setlocale snprintf wcslen])
51
52   dnl Use the _snprintf function only if it is declared (because on NetBSD it
53   dnl is defined as a weak alias of snprintf; we prefer to use the latter).
54   gt_CHECK_DECL(_snprintf, [#include <stdio.h>])
55   gt_CHECK_DECL(_snwprintf, [#include <stdio.h>])
56
57   dnl Use the *_unlocked functions only if they are declared.
58   dnl (because some of them were defined without being declared in Solaris
59   dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built
60   dnl on Solaris 2.5.1 to run on Solaris 2.6).
61   dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13.
62   gt_CHECK_DECL(getc_unlocked, [#include <stdio.h>])
63
64   case $gt_cv_func_printf_posix in
65     *yes) HAVE_POSIX_PRINTF=1 ;;
66     *) HAVE_POSIX_PRINTF=0 ;;
67   esac
68   AC_SUBST([HAVE_POSIX_PRINTF])
69   if test "$ac_cv_func_asprintf" = yes; then
70     HAVE_ASPRINTF=1
71   else
72     HAVE_ASPRINTF=0
73   fi
74   AC_SUBST([HAVE_ASPRINTF])
75   if test "$ac_cv_func_snprintf" = yes; then
76     HAVE_SNPRINTF=1
77   else
78     HAVE_SNPRINTF=0
79   fi
80   AC_SUBST([HAVE_SNPRINTF])
81   if test "$ac_cv_func_wprintf" = yes; then
82     HAVE_WPRINTF=1
83   else
84     HAVE_WPRINTF=0
85   fi
86   AC_SUBST([HAVE_WPRINTF])
87
88   AM_LANGINFO_CODESET
89   gt_LC_MESSAGES
90
91   dnl Compilation on mingw and Cygwin needs special Makefile rules, because
92   dnl 1. when we install a shared library, we must arrange to export
93   dnl    auxiliary pointer variables for every exported variable,
94   dnl 2. when we install a shared library and a static library simultaneously,
95   dnl    the include file specifies __declspec(dllimport) and therefore we
96   dnl    must arrange to define the auxiliary pointer variables for the
97   dnl    exported variables _also_ in the static library.
98   if test "$enable_shared" = yes; then
99     case "$host_os" in
100       cygwin*) is_woe32dll=yes ;;
101       *) is_woe32dll=no ;;
102     esac
103   else
104     is_woe32dll=no
105   fi
106   WOE32DLL=$is_woe32dll
107   AC_SUBST([WOE32DLL])
108
109   dnl On mingw and Cygwin, we can activate special Makefile rules which add
110   dnl version information to the shared libraries and executables.
111   case "$host_os" in
112     mingw* | cygwin*) is_woe32=yes ;;
113     *) is_woe32=no ;;
114   esac
115   WOE32=$is_woe32
116   AC_SUBST([WOE32])
117   if test $WOE32 = yes; then
118     dnl Check for a program that compiles Windows resource files.
119     AC_CHECK_TOOL([WINDRES], [windres])
120   fi
121
122   dnl Rename some macros and functions used for locking.
123   AH_BOTTOM([
124 #define __libc_lock_t                   gl_lock_t
125 #define __libc_lock_define              gl_lock_define
126 #define __libc_lock_define_initialized  gl_lock_define_initialized
127 #define __libc_lock_init                gl_lock_init
128 #define __libc_lock_lock                gl_lock_lock
129 #define __libc_lock_unlock              gl_lock_unlock
130 #define __libc_lock_recursive_t                   gl_recursive_lock_t
131 #define __libc_lock_define_recursive              gl_recursive_lock_define
132 #define __libc_lock_define_initialized_recursive  gl_recursive_lock_define_initialized
133 #define __libc_lock_init_recursive                gl_recursive_lock_init
134 #define __libc_lock_lock_recursive                gl_recursive_lock_lock
135 #define __libc_lock_unlock_recursive              gl_recursive_lock_unlock
136 #define glthread_in_use  libintl_thread_in_use
137 #define glthread_lock_init     libintl_lock_init
138 #define glthread_lock_lock     libintl_lock_lock
139 #define glthread_lock_unlock   libintl_lock_unlock
140 #define glthread_lock_destroy  libintl_lock_destroy
141 #define glthread_rwlock_init     libintl_rwlock_init
142 #define glthread_rwlock_rdlock   libintl_rwlock_rdlock
143 #define glthread_rwlock_wrlock   libintl_rwlock_wrlock
144 #define glthread_rwlock_unlock   libintl_rwlock_unlock
145 #define glthread_rwlock_destroy  libintl_rwlock_destroy
146 #define glthread_recursive_lock_init     libintl_recursive_lock_init
147 #define glthread_recursive_lock_lock     libintl_recursive_lock_lock
148 #define glthread_recursive_lock_unlock   libintl_recursive_lock_unlock
149 #define glthread_recursive_lock_destroy  libintl_recursive_lock_destroy
150 #define glthread_once                 libintl_once
151 #define glthread_once_call            libintl_once_call
152 #define glthread_once_singlethreaded  libintl_once_singlethreaded
153 ])
154 ])
155
156
157 dnl Checks for the core files of the intl subdirectory:
158 dnl   dcigettext.c
159 dnl   eval-plural.h
160 dnl   explodename.c
161 dnl   finddomain.c
162 dnl   gettextP.h
163 dnl   gmo.h
164 dnl   hash-string.h hash-string.c
165 dnl   l10nflist.c
166 dnl   libgnuintl.h.in (except the *printf stuff)
167 dnl   loadinfo.h
168 dnl   loadmsgcat.c
169 dnl   localealias.c
170 dnl   log.c
171 dnl   plural-exp.h plural-exp.c
172 dnl   plural.y
173 dnl Used by libglocale.
174 AC_DEFUN([gt_INTL_SUBDIR_CORE],
175 [
176   AC_REQUIRE([AC_C_INLINE])dnl
177   AC_REQUIRE([AC_TYPE_SIZE_T])dnl
178   AC_REQUIRE([gl_AC_HEADER_STDINT_H])
179   AC_REQUIRE([AC_FUNC_ALLOCA])dnl
180   AC_REQUIRE([AC_FUNC_MMAP])dnl
181   AC_REQUIRE([gt_INTDIV0])dnl
182   AC_REQUIRE([gl_AC_TYPE_UINTMAX_T])dnl
183   AC_REQUIRE([gt_INTTYPES_PRI])dnl
184   AC_REQUIRE([gl_LOCK])dnl
185
186   AC_TRY_LINK(
187     [int foo (int a) { a = __builtin_expect (a, 10); return a == 10 ? 0 : 1; }],
188     [],
189     [AC_DEFINE([HAVE_BUILTIN_EXPECT], 1,
190        [Define to 1 if the compiler understands __builtin_expect.])])
191
192   AC_CHECK_HEADERS([argz.h inttypes.h limits.h unistd.h sys/param.h])
193   AC_CHECK_FUNCS([getcwd getegid geteuid getgid getuid mempcpy munmap \
194     stpcpy strcasecmp strdup strtoul tsearch argz_count argz_stringify \
195     argz_next __fsetlocking])
196
197   dnl Use the *_unlocked functions only if they are declared.
198   dnl (because some of them were defined without being declared in Solaris
199   dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built
200   dnl on Solaris 2.5.1 to run on Solaris 2.6).
201   dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13.
202   gt_CHECK_DECL(feof_unlocked, [#include <stdio.h>])
203   gt_CHECK_DECL(fgets_unlocked, [#include <stdio.h>])
204
205   AM_ICONV
206
207   dnl glibc >= 2.4 has a NL_LOCALE_NAME macro when _GNU_SOURCE is defined,
208   dnl and a _NL_LOCALE_NAME macro always.
209   AC_CACHE_CHECK([for NL_LOCALE_NAME macro], gt_cv_nl_locale_name,
210     [AC_TRY_LINK([#include <langinfo.h>
211 #include <locale.h>],
212       [char* cs = nl_langinfo(_NL_LOCALE_NAME(LC_MESSAGES));],
213       gt_cv_nl_locale_name=yes,
214       gt_cv_nl_locale_name=no)
215     ])
216   if test $gt_cv_nl_locale_name = yes; then
217     AC_DEFINE(HAVE_NL_LOCALE_NAME, 1,
218       [Define if you have <langinfo.h> and it defines the NL_LOCALE_NAME macro if _GNU_SOURCE is defined.])
219   fi
220
221   dnl intl/plural.c is generated from intl/plural.y. It requires bison,
222   dnl because plural.y uses bison specific features. It requires at least
223   dnl bison-1.26 because earlier versions generate a plural.c that doesn't
224   dnl compile.
225   dnl bison is only needed for the maintainer (who touches plural.y). But in
226   dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
227   dnl the rule in general Makefile. Now, some people carelessly touch the
228   dnl files or have a broken "make" program, hence the plural.c rule will
229   dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
230   dnl present or too old.
231   AC_CHECK_PROGS([INTLBISON], [bison])
232   if test -z "$INTLBISON"; then
233     ac_verc_fail=yes
234   else
235     dnl Found it, now check the version.
236     AC_MSG_CHECKING([version of bison])
237 changequote(<<,>>)dnl
238     ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
239     case $ac_prog_version in
240       '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
241       1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
242 changequote([,])dnl
243          ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
244       *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
245     esac
246     AC_MSG_RESULT([$ac_prog_version])
247   fi
248   if test $ac_verc_fail = yes; then
249     INTLBISON=:
250   fi
251 ])
252
253
254 dnl gt_CHECK_DECL(FUNC, INCLUDES)
255 dnl Check whether a function is declared.
256 AC_DEFUN([gt_CHECK_DECL],
257 [
258   AC_CACHE_CHECK([whether $1 is declared], ac_cv_have_decl_$1,
259     [AC_TRY_COMPILE([$2], [
260 #ifndef $1
261   char *p = (char *) $1;
262 #endif
263 ], ac_cv_have_decl_$1=yes, ac_cv_have_decl_$1=no)])
264   if test $ac_cv_have_decl_$1 = yes; then
265     gt_value=1
266   else
267     gt_value=0
268   fi
269   AC_DEFINE_UNQUOTED([HAVE_DECL_]translit($1, [a-z], [A-Z]), [$gt_value],
270     [Define to 1 if you have the declaration of `$1', and to 0 if you don't.])
271 ])