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