1# intl.m4 serial 8 (gettext-0.17)
2dnl Copyright (C) 1995-2007 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-2006.
19
20AC_PREREQ(2.52)
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([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      mingw* | 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 Determine whether when creating a library, "-lc" should be passed to
123  dnl libtool or not. On many platforms, it is required for the libtool option
124  dnl -no-undefined to work. On HP-UX, however, the -lc - stored by libtool
125  dnl in the *.la files - makes it impossible to create multithreaded programs,
126  dnl because libtool also reorders the -lc to come before the -pthread, and
127  dnl this disables pthread_create() <http://docs.hp.com/en/1896/pthreads.html>.
128  case "$host_os" in
129    hpux*) LTLIBC="" ;;
130    *)     LTLIBC="-lc" ;;
131  esac
132  AC_SUBST([LTLIBC])
133
134  dnl Rename some macros and functions used for locking.
135  AH_BOTTOM([
136#define __libc_lock_t                   gl_lock_t
137#define __libc_lock_define              gl_lock_define
138#define __libc_lock_define_initialized  gl_lock_define_initialized
139#define __libc_lock_init                gl_lock_init
140#define __libc_lock_lock                gl_lock_lock
141#define __libc_lock_unlock              gl_lock_unlock
142#define __libc_lock_recursive_t                   gl_recursive_lock_t
143#define __libc_lock_define_recursive              gl_recursive_lock_define
144#define __libc_lock_define_initialized_recursive  gl_recursive_lock_define_initialized
145#define __libc_lock_init_recursive                gl_recursive_lock_init
146#define __libc_lock_lock_recursive                gl_recursive_lock_lock
147#define __libc_lock_unlock_recursive              gl_recursive_lock_unlock
148#define glthread_in_use  libintl_thread_in_use
149#define glthread_lock_init     libintl_lock_init
150#define glthread_lock_lock     libintl_lock_lock
151#define glthread_lock_unlock   libintl_lock_unlock
152#define glthread_lock_destroy  libintl_lock_destroy
153#define glthread_rwlock_init     libintl_rwlock_init
154#define glthread_rwlock_rdlock   libintl_rwlock_rdlock
155#define glthread_rwlock_wrlock   libintl_rwlock_wrlock
156#define glthread_rwlock_unlock   libintl_rwlock_unlock
157#define glthread_rwlock_destroy  libintl_rwlock_destroy
158#define glthread_recursive_lock_init     libintl_recursive_lock_init
159#define glthread_recursive_lock_lock     libintl_recursive_lock_lock
160#define glthread_recursive_lock_unlock   libintl_recursive_lock_unlock
161#define glthread_recursive_lock_destroy  libintl_recursive_lock_destroy
162#define glthread_once                 libintl_once
163#define glthread_once_call            libintl_once_call
164#define glthread_once_singlethreaded  libintl_once_singlethreaded
165])
166])
167
168
169dnl Checks for the core files of the intl subdirectory:
170dnl   dcigettext.c
171dnl   eval-plural.h
172dnl   explodename.c
173dnl   finddomain.c
174dnl   gettextP.h
175dnl   gmo.h
176dnl   hash-string.h hash-string.c
177dnl   l10nflist.c
178dnl   libgnuintl.h.in (except the *printf stuff)
179dnl   loadinfo.h
180dnl   loadmsgcat.c
181dnl   localealias.c
182dnl   log.c
183dnl   plural-exp.h plural-exp.c
184dnl   plural.y
185dnl Used by libglocale.
186AC_DEFUN([gt_INTL_SUBDIR_CORE],
187[
188  AC_REQUIRE([AC_C_INLINE])dnl
189  AC_REQUIRE([AC_TYPE_SIZE_T])dnl
190  AC_REQUIRE([gl_AC_HEADER_STDINT_H])
191  AC_REQUIRE([AC_FUNC_ALLOCA])dnl
192  AC_REQUIRE([AC_FUNC_MMAP])dnl
193  AC_REQUIRE([gt_INTDIV0])dnl
194  AC_REQUIRE([gl_AC_TYPE_UINTMAX_T])dnl
195  AC_REQUIRE([gt_INTTYPES_PRI])dnl
196  AC_REQUIRE([gl_LOCK])dnl
197
198  AC_TRY_LINK(
199    [int foo (int a) { a = __builtin_expect (a, 10); return a == 10 ? 0 : 1; }],
200    [],
201    [AC_DEFINE([HAVE_BUILTIN_EXPECT], 1,
202       [Define to 1 if the compiler understands __builtin_expect.])])
203
204  AC_CHECK_HEADERS([argz.h inttypes.h limits.h unistd.h sys/param.h])
205  AC_CHECK_FUNCS([getcwd getegid geteuid getgid getuid mempcpy munmap \
206    stpcpy strcasecmp strdup strtoul tsearch argz_count argz_stringify \
207    argz_next __fsetlocking])
208
209  dnl Use the *_unlocked functions only if they are declared.
210  dnl (because some of them were defined without being declared in Solaris
211  dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built
212  dnl on Solaris 2.5.1 to run on Solaris 2.6).
213  dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13.
214  gt_CHECK_DECL(feof_unlocked, [#include <stdio.h>])
215  gt_CHECK_DECL(fgets_unlocked, [#include <stdio.h>])
216
217  AM_ICONV
218
219  dnl glibc >= 2.4 has a NL_LOCALE_NAME macro when _GNU_SOURCE is defined,
220  dnl and a _NL_LOCALE_NAME macro always.
221  AC_CACHE_CHECK([for NL_LOCALE_NAME macro], gt_cv_nl_locale_name,
222    [AC_TRY_LINK([#include <langinfo.h>
223#include <locale.h>],
224      [char* cs = nl_langinfo(_NL_LOCALE_NAME(LC_MESSAGES));
225       return !cs;
226      ],
227      gt_cv_nl_locale_name=yes,
228      gt_cv_nl_locale_name=no)
229    ])
230  if test $gt_cv_nl_locale_name = yes; then
231    AC_DEFINE(HAVE_NL_LOCALE_NAME, 1,
232      [Define if you have <langinfo.h> and it defines the NL_LOCALE_NAME macro if _GNU_SOURCE is defined.])
233  fi
234
235  dnl intl/plural.c is generated from intl/plural.y. It requires bison,
236  dnl because plural.y uses bison specific features. It requires at least
237  dnl bison-1.26 because earlier versions generate a plural.c that doesn't
238  dnl compile.
239  dnl bison is only needed for the maintainer (who touches plural.y). But in
240  dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put
241  dnl the rule in general Makefile. Now, some people carelessly touch the
242  dnl files or have a broken "make" program, hence the plural.c rule will
243  dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not
244  dnl present or too old.
245  AC_CHECK_PROGS([INTLBISON], [bison])
246  if test -z "$INTLBISON"; then
247    ac_verc_fail=yes
248  else
249    dnl Found it, now check the version.
250    AC_MSG_CHECKING([version of bison])
251changequote(<<,>>)dnl
252    ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'`
253    case $ac_prog_version in
254      '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;;
255      1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*)
256changequote([,])dnl
257         ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;;
258      *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;;
259    esac
260    AC_MSG_RESULT([$ac_prog_version])
261  fi
262  if test $ac_verc_fail = yes; then
263    INTLBISON=:
264  fi
265])
266
267
268dnl gt_CHECK_DECL(FUNC, INCLUDES)
269dnl Check whether a function is declared.
270AC_DEFUN([gt_CHECK_DECL],
271[
272  AC_CACHE_CHECK([whether $1 is declared], ac_cv_have_decl_$1,
273    [AC_TRY_COMPILE([$2], [
274#ifndef $1
275  char *p = (char *) $1;
276#endif
277], ac_cv_have_decl_$1=yes, ac_cv_have_decl_$1=no)])
278  if test $ac_cv_have_decl_$1 = yes; then
279    gt_value=1
280  else
281    gt_value=0
282  fi
283  AC_DEFINE_UNQUOTED([HAVE_DECL_]translit($1, [a-z], [A-Z]), [$gt_value],
284    [Define to 1 if you have the declaration of `$1', and to 0 if you don't.])
285])
286