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