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