1# intl.m4 serial 17b
2dnl Copyright (C) 1995-2011 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 can be used in projects which are not available under
8dnl the GNU General Public License or the GNU Library 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 Library General Public License, and the rest of the GNU
13dnl gettext package 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.53])
21
22dnl Checks for all prerequisites of the intl subdirectory,
23dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS,
24dnl            USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL.
25AC_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([gl_FCNTL_O_FLAGS])dnl
44  AC_REQUIRE([gt_INTL_MACOSX])dnl
45
46  dnl Support for automake's --enable-silent-rules.
47  case "$enable_silent_rules" in
48    yes) INTL_DEFAULT_VERBOSITY=0;;
49    no)  INTL_DEFAULT_VERBOSITY=1;;
50    *)   INTL_DEFAULT_VERBOSITY=1;;
51  esac
52  AC_SUBST([INTL_DEFAULT_VERBOSITY])
53
54  AC_CHECK_TYPE([ptrdiff_t], ,
55    [AC_DEFINE([ptrdiff_t], [long],
56       [Define as the type of the result of subtracting two pointers, if the system doesn't define it.])
57    ])
58  AC_CHECK_HEADERS([stddef.h stdlib.h string.h])
59  AC_CHECK_FUNCS([asprintf fwprintf newlocale putenv setenv setlocale \
60    snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb])
61
62  dnl Use the _snprintf function only if it is declared (because on NetBSD it
63  dnl is defined as a weak alias of snprintf; we prefer to use the latter).
64  gt_CHECK_DECL(_snprintf, [#include <stdio.h>])
65  gt_CHECK_DECL(_snwprintf, [#include <stdio.h>])
66
67  dnl Use the *_unlocked functions only if they are declared.
68  dnl (because some of them were defined without being declared in Solaris
69  dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built
70  dnl on Solaris 2.5.1 to run on Solaris 2.6).
71  dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13.
72  gt_CHECK_DECL(getc_unlocked, [#include <stdio.h>])
73
74  case $gt_cv_func_printf_posix in
75    *yes) HAVE_POSIX_PRINTF=1 ;;
76    *) HAVE_POSIX_PRINTF=0 ;;
77  esac
78  AC_SUBST([HAVE_POSIX_PRINTF])
79  if test "$ac_cv_func_asprintf" = yes; then
80    HAVE_ASPRINTF=1
81  else
82    HAVE_ASPRINTF=0
83  fi
84  AC_SUBST([HAVE_ASPRINTF])
85  if test "$ac_cv_func_snprintf" = yes; then
86    HAVE_SNPRINTF=1
87  else
88    HAVE_SNPRINTF=0
89  fi
90  AC_SUBST([HAVE_SNPRINTF])
91  if test "$ac_cv_func_newlocale" = yes; then
92    HAVE_NEWLOCALE=1
93  else
94    HAVE_NEWLOCALE=0
95  fi
96  AC_SUBST([HAVE_NEWLOCALE])
97  if test "$ac_cv_func_wprintf" = yes; then
98    HAVE_WPRINTF=1
99  else
100    HAVE_WPRINTF=0
101  fi
102  AC_SUBST([HAVE_WPRINTF])
103
104  AM_LANGINFO_CODESET
105  gt_LC_MESSAGES
106
107  dnl Compilation on mingw and Cygwin needs special Makefile rules, because
108  dnl 1. when we install a shared library, we must arrange to export
109  dnl    auxiliary pointer variables for every exported variable,
110  dnl 2. when we install a shared library and a static library simultaneously,
111  dnl    the include file specifies __declspec(dllimport) and therefore we
112  dnl    must arrange to define the auxiliary pointer variables for the
113  dnl    exported variables _also_ in the static library.
114  if test "$enable_shared" = yes; then
115    case "$host_os" in
116      mingw* | cygwin*) is_woe32dll=yes ;;
117      *) is_woe32dll=no ;;
118    esac
119  else
120    is_woe32dll=no
121  fi
122  WOE32DLL=$is_woe32dll
123  AC_SUBST([WOE32DLL])
124
125  dnl On mingw and Cygwin, we can activate special Makefile rules which add
126  dnl version information to the shared libraries and executables.
127  case "$host_os" in
128    mingw* | cygwin*) is_woe32=yes ;;
129    *) is_woe32=no ;;
130  esac
131  WOE32=$is_woe32
132  AC_SUBST([WOE32])
133  if test $WOE32 = yes; then
134    dnl Check for a program that compiles Windows resource files.
135    AC_CHECK_TOOL([WINDRES], [windres])
136  fi
137
138  dnl Determine whether when creating a library, "-lc" should be passed to
139  dnl libtool or not. On many platforms, it is required for the libtool option
140  dnl -no-undefined to work. On HP-UX, however, the -lc - stored by libtool
141  dnl in the *.la files - makes it impossible to create multithreaded programs,
142  dnl because libtool also reorders the -lc to come before the -pthread, and
143  dnl this disables pthread_create() <http://docs.hp.com/en/1896/pthreads.html>.
144  case "$host_os" in
145    hpux*) LTLIBC="" ;;
146    *)     LTLIBC="-lc" ;;
147  esac
148  AC_SUBST([LTLIBC])
149
150  dnl Rename some macros and functions used for locking.
151  AH_BOTTOM([
152#define __libc_lock_t                   gl_lock_t
153#define __libc_lock_define              gl_lock_define
154#define __libc_lock_define_initialized  gl_lock_define_initialized
155#define __libc_lock_init                gl_lock_init
156#define __libc_lock_lock                gl_lock_lock
157#define __libc_lock_unlock              gl_lock_unlock
158#define __libc_lock_recursive_t                   gl_recursive_lock_t
159#define __libc_lock_define_recursive              gl_recursive_lock_define
160#define __libc_lock_define_initialized_recursive  gl_recursive_lock_define_initialized
161#define __libc_lock_init_recursive                gl_recursive_lock_init
162#define __libc_lock_lock_recursive                gl_recursive_lock_lock
163#define __libc_lock_unlock_recursive              gl_recursive_lock_unlock
164#define glthread_in_use  libintl_thread_in_use
165#define glthread_lock_init_func     libintl_lock_init_func
166#define glthread_lock_lock_func     libintl_lock_lock_func
167#define glthread_lock_unlock_func   libintl_lock_unlock_func
168#define glthread_lock_destroy_func  libintl_lock_destroy_func
169#define glthread_rwlock_init_multithreaded     libintl_rwlock_init_multithreaded
170#define glthread_rwlock_init_func              libintl_rwlock_init_func
171#define glthread_rwlock_rdlock_multithreaded   libintl_rwlock_rdlock_multithreaded
172#define glthread_rwlock_rdlock_func            libintl_rwlock_rdlock_func
173#define glthread_rwlock_wrlock_multithreaded   libintl_rwlock_wrlock_multithreaded
174#define glthread_rwlock_wrlock_func            libintl_rwlock_wrlock_func
175#define glthread_rwlock_unlock_multithreaded   libintl_rwlock_unlock_multithreaded
176#define glthread_rwlock_unlock_func            libintl_rwlock_unlock_func
177#define glthread_rwlock_destroy_multithreaded  libintl_rwlock_destroy_multithreaded
178#define glthread_rwlock_destroy_func           libintl_rwlock_destroy_func
179#define glthread_recursive_lock_init_multithreaded     libintl_recursive_lock_init_multithreaded
180#define glthread_recursive_lock_init_func              libintl_recursive_lock_init_func
181#define glthread_recursive_lock_lock_multithreaded     libintl_recursive_lock_lock_multithreaded
182#define glthread_recursive_lock_lock_func              libintl_recursive_lock_lock_func
183#define glthread_recursive_lock_unlock_multithreaded   libintl_recursive_lock_unlock_multithreaded
184#define glthread_recursive_lock_unlock_func            libintl_recursive_lock_unlock_func
185#define glthread_recursive_lock_destroy_multithreaded  libintl_recursive_lock_destroy_multithreaded
186#define glthread_recursive_lock_destroy_func           libintl_recursive_lock_destroy_func
187#define glthread_once_func            libintl_once_func
188#define glthread_once_singlethreaded  libintl_once_singlethreaded
189#define glthread_once_multithreaded   libintl_once_multithreaded
190])
191])
192
193
194dnl Checks for the core files of the intl subdirectory:
195dnl   dcigettext.c
196dnl   eval-plural.h
197dnl   explodename.c
198dnl   finddomain.c
199dnl   gettextP.h
200dnl   gmo.h
201dnl   hash-string.h hash-string.c
202dnl   l10nflist.c
203dnl   libgnuintl.h.in (except the *printf stuff)
204dnl   loadinfo.h
205dnl   loadmsgcat.c
206dnl   localealias.c
207dnl   log.c
208dnl   plural-exp.h plural-exp.c
209dnl   plural.y
210dnl Used by libglocale.
211AC_DEFUN([gt_INTL_SUBDIR_CORE],
212[
213  AC_REQUIRE([AC_C_INLINE])dnl
214  AC_REQUIRE([AC_TYPE_SIZE_T])dnl
215  AC_REQUIRE([gl_AC_HEADER_STDINT_H])
216  AC_REQUIRE([AC_FUNC_ALLOCA])dnl
217  AC_REQUIRE([AC_FUNC_MMAP])dnl
218  AC_REQUIRE([gt_INTDIV0])dnl
219  AC_REQUIRE([gl_AC_TYPE_UINTMAX_T])dnl
220  AC_REQUIRE([gt_INTTYPES_PRI])dnl
221  AC_REQUIRE([gl_LOCK])dnl
222
223  AC_LINK_IFELSE(
224    [AC_LANG_PROGRAM(
225       [[int foo (int a) { a = __builtin_expect (a, 10); return a == 10 ? 0 : 1; }]],
226       [[]])],
227    [AC_DEFINE([HAVE_BUILTIN_EXPECT], [1],
228       [Define to 1 if the compiler understands __builtin_expect.])])
229
230  AC_CHECK_HEADERS([argz.h inttypes.h limits.h unistd.h sys/param.h])
231  AC_CHECK_FUNCS([getcwd getegid geteuid getgid getuid mempcpy munmap \
232    stpcpy strcasecmp strdup strtoul tsearch uselocale argz_count \
233    argz_stringify argz_next __fsetlocking])
234
235  dnl Use the *_unlocked functions only if they are declared.
236  dnl (because some of them were defined without being declared in Solaris
237  dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built
238  dnl on Solaris 2.5.1 to run on Solaris 2.6).
239  dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13.
240  gt_CHECK_DECL([feof_unlocked], [#include <stdio.h>])
241  gt_CHECK_DECL([fgets_unlocked], [#include <stdio.h>])
242
243  AM_ICONV
244
245  dnl intl/plural.c is generated from intl/plural.y. It requires bison,
246  dnl because plural.y uses bison specific features. It requires at least
247  dnl bison-1.26 because earlier versions generate a plural.c that doesn't
248  dnl compile.
249  dnl bison is only needed for the maintainer (who touches plural.y). But in
250  dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
251  dnl the rule in general Makefile. Now, some people carelessly touch the
252  dnl files or have a broken "make" program, hence the plural.c rule will
253  dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
254  dnl present or too old.
255  AC_CHECK_PROGS([INTLBISON], [bison])
256  if test -z "$INTLBISON"; then
257    ac_verc_fail=yes
258  else
259    dnl Found it, now check the version.
260    AC_MSG_CHECKING([version of bison])
261changequote(<<,>>)dnl
262    ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
263    case $ac_prog_version in
264      '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
265      1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
266changequote([,])dnl
267         ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
268      *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
269    esac
270    AC_MSG_RESULT([$ac_prog_version])
271  fi
272  if test $ac_verc_fail = yes; then
273    INTLBISON=:
274  fi
275])
276
277
278dnl gt_CHECK_DECL(FUNC, INCLUDES)
279dnl Check whether a function is declared.
280AC_DEFUN([gt_CHECK_DECL],
281[
282  AC_CACHE_CHECK([whether $1 is declared], [ac_cv_have_decl_$1],
283    [AC_COMPILE_IFELSE(
284       [AC_LANG_PROGRAM(
285          [[$2]],
286          [[
287#ifndef $1
288  char *p = (char *) $1;
289#endif
290          ]])],
291       [ac_cv_have_decl_$1=yes],
292       [ac_cv_have_decl_$1=no])])
293  if test $ac_cv_have_decl_$1 = yes; then
294    gt_value=1
295  else
296    gt_value=0
297  fi
298  AC_DEFINE_UNQUOTED([HAVE_DECL_]translit($1, [a-z], [A-Z]), [$gt_value],
299    [Define to 1 if you have the declaration of `$1', and to 0 if you don't.])
300])
301