1# intl.m4 serial 44 (gettext-0.21) 2dnl Copyright (C) 1995-2014, 2016-2020 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 be used in projects which are not available under 8dnl the GNU General Public License or the GNU Lesser 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 Lesser General Public License, and the rest of the GNU 13dnl gettext 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.60]) 21 22dnl Checks for all prerequisites of the intl subdirectory, 23dnl except for LIBTOOL, USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL. 24AC_DEFUN([AM_INTL_SUBDIR], 25[ 26 AC_REQUIRE([AC_PROG_INSTALL])dnl 27 AC_REQUIRE([AC_PROG_MKDIR_P])dnl 28 AC_REQUIRE([AC_PROG_CC])dnl 29 AC_REQUIRE([AC_CANONICAL_HOST])dnl 30 AC_REQUIRE([gt_GLIBC2])dnl 31 AC_REQUIRE([gl_VISIBILITY])dnl 32 AC_REQUIRE([gt_INTL_SUBDIR_CORE])dnl 33 AC_REQUIRE([AC_TYPE_LONG_LONG_INT])dnl 34 AC_REQUIRE([gt_TYPE_WCHAR_T])dnl 35 AC_REQUIRE([gt_TYPE_WINT_T])dnl 36 AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) 37 AC_REQUIRE([gt_TYPE_INTMAX_T]) 38 AC_REQUIRE([gt_PRINTF_POSIX]) 39 AC_REQUIRE([gl_GLIBC21])dnl 40 AC_REQUIRE([gl_XSIZE])dnl 41 AC_REQUIRE([gl_FCNTL_O_FLAGS])dnl 42 AC_REQUIRE([gt_INTL_THREAD_LOCALE_NAME]) 43 AC_REQUIRE([gt_INTL_MACOSX])dnl 44 AC_REQUIRE([gl_EXTERN_INLINE])dnl 45 AC_REQUIRE([gt_GL_ATTRIBUTE])dnl 46 AC_REQUIRE([AC_C_FLEXIBLE_ARRAY_MEMBER])dnl 47 48 dnl In projects that use gnulib, use gl_PROG_AR_RANLIB. 49 dnl The '][' hides this use from 'aclocal'. 50 m4_ifdef([g][l_PROG_AR_RANLIB], 51 [AC_REQUIRE([g][l_PROG_AR_RANLIB])], 52 [AC_REQUIRE([AC_PROG_RANLIB]) 53 dnl Use Automake-documented default values for AR and ARFLAGS, but prefer 54 dnl ${host}-ar over ar (useful for cross-compiling). 55 AC_CHECK_TOOL([AR], [ar], [ar]) 56 if test -z "$ARFLAGS"; then 57 ARFLAGS='cr' 58 fi 59 AC_SUBST([AR]) 60 AC_SUBST([ARFLAGS]) 61 ]) 62 63 dnl Support for automake's --enable-silent-rules. 64 case "$enable_silent_rules" in 65 yes) INTL_DEFAULT_VERBOSITY=0;; 66 no) INTL_DEFAULT_VERBOSITY=1;; 67 *) INTL_DEFAULT_VERBOSITY=1;; 68 esac 69 AC_SUBST([INTL_DEFAULT_VERBOSITY]) 70 71 AC_CHECK_TYPE([ptrdiff_t], , 72 [AC_DEFINE([ptrdiff_t], [long], 73 [Define as the type of the result of subtracting two pointers, if the system doesn't define it.]) 74 ]) 75 AC_CHECK_HEADERS([features.h stddef.h stdlib.h string.h]) 76 AC_CHECK_FUNCS([asprintf wprintf newlocale putenv setenv \ 77 snprintf strnlen uselocale wcslen wcsnlen mbrtowc wcrtomb]) 78 79 dnl Use the _snprintf function only if it is declared (because on NetBSD it 80 dnl is defined as a weak alias of snprintf; we prefer to use the latter). 81 AC_CHECK_DECLS([_snprintf, _snwprintf], , , [#include <stdio.h>]) 82 83 dnl Use the *_unlocked functions only if they are declared. 84 dnl (because some of them were defined without being declared in Solaris 85 dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built 86 dnl on Solaris 2.5.1 to run on Solaris 2.6). 87 AC_CHECK_DECLS([getc_unlocked], , , [#include <stdio.h>]) 88 89 case $gt_cv_func_printf_posix in 90 *yes) HAVE_POSIX_PRINTF=1 ;; 91 *) HAVE_POSIX_PRINTF=0 ;; 92 esac 93 AC_SUBST([HAVE_POSIX_PRINTF]) 94 if test "$ac_cv_func_asprintf" = yes; then 95 HAVE_ASPRINTF=1 96 else 97 HAVE_ASPRINTF=0 98 fi 99 AC_SUBST([HAVE_ASPRINTF]) 100 if test "$ac_cv_func_snprintf" = yes; then 101 HAVE_SNPRINTF=1 102 else 103 HAVE_SNPRINTF=0 104 fi 105 AC_SUBST([HAVE_SNPRINTF]) 106 if test "$ac_cv_func_newlocale" = yes; then 107 HAVE_NEWLOCALE=1 108 else 109 HAVE_NEWLOCALE=0 110 fi 111 AC_SUBST([HAVE_NEWLOCALE]) 112 if test "$ac_cv_func_wprintf" = yes; then 113 HAVE_WPRINTF=1 114 else 115 HAVE_WPRINTF=0 116 fi 117 AC_SUBST([HAVE_WPRINTF]) 118 119 AM_LANGINFO_CODESET 120 gt_LC_MESSAGES 121 122 if test $gt_nameless_locales = yes; then 123 HAVE_NAMELESS_LOCALES=1 124 else 125 HAVE_NAMELESS_LOCALES=0 126 fi 127 AC_SUBST([HAVE_NAMELESS_LOCALES]) 128 129 dnl Compilation on mingw and Cygwin needs special Makefile rules, because 130 dnl 1. when we install a shared library, we must arrange to export 131 dnl auxiliary pointer variables for every exported variable, 132 dnl 2. when we install a shared library and a static library simultaneously, 133 dnl the include file specifies __declspec(dllimport) and therefore we 134 dnl must arrange to define the auxiliary pointer variables for the 135 dnl exported variables _also_ in the static library. 136 if test "$enable_shared" = yes; then 137 case "$host_os" in 138 mingw* | cygwin*) is_woe32dll=yes ;; 139 *) is_woe32dll=no ;; 140 esac 141 else 142 is_woe32dll=no 143 fi 144 WOE32DLL=$is_woe32dll 145 AC_SUBST([WOE32DLL]) 146 147 dnl On mingw and Cygwin, we can activate special Makefile rules which add 148 dnl version information to the shared libraries and executables. 149 case "$host_os" in 150 mingw* | cygwin*) is_woe32=yes ;; 151 *) is_woe32=no ;; 152 esac 153 WOE32=$is_woe32 154 AC_SUBST([WOE32]) 155 if test $WOE32 = yes; then 156 dnl Check for a program that compiles Windows resource files. 157 AC_CHECK_TOOL([WINDRES], [windres]) 158 fi 159 160 dnl Rename some macros and functions used for locking. 161 AH_BOTTOM([ 162#define __libc_lock_t gl_lock_t 163#define __libc_lock_define gl_lock_define 164#define __libc_lock_define_initialized gl_lock_define_initialized 165#define __libc_lock_init gl_lock_init 166#define __libc_lock_lock gl_lock_lock 167#define __libc_lock_unlock gl_lock_unlock 168#define __libc_lock_recursive_t gl_recursive_lock_t 169#define __libc_lock_define_recursive gl_recursive_lock_define 170#define __libc_lock_define_initialized_recursive gl_recursive_lock_define_initialized 171#define __libc_lock_init_recursive gl_recursive_lock_init 172#define __libc_lock_lock_recursive gl_recursive_lock_lock 173#define __libc_lock_unlock_recursive gl_recursive_lock_unlock 174#define glthread_in_use libintl_thread_in_use 175#define glthread_lock_init_func libintl_lock_init_func 176#define glthread_lock_lock_func libintl_lock_lock_func 177#define glthread_lock_unlock_func libintl_lock_unlock_func 178#define glthread_lock_destroy_func libintl_lock_destroy_func 179#define glthread_rwlock_init_multithreaded libintl_rwlock_init_multithreaded 180#define glthread_rwlock_init_func libintl_rwlock_init_func 181#define glthread_rwlock_rdlock_multithreaded libintl_rwlock_rdlock_multithreaded 182#define glthread_rwlock_rdlock_func libintl_rwlock_rdlock_func 183#define glthread_rwlock_wrlock_multithreaded libintl_rwlock_wrlock_multithreaded 184#define glthread_rwlock_wrlock_func libintl_rwlock_wrlock_func 185#define glthread_rwlock_unlock_multithreaded libintl_rwlock_unlock_multithreaded 186#define glthread_rwlock_unlock_func libintl_rwlock_unlock_func 187#define glthread_rwlock_destroy_multithreaded libintl_rwlock_destroy_multithreaded 188#define glthread_rwlock_destroy_func libintl_rwlock_destroy_func 189#define glthread_recursive_lock_init_multithreaded libintl_recursive_lock_init_multithreaded 190#define glthread_recursive_lock_init_func libintl_recursive_lock_init_func 191#define glthread_recursive_lock_lock_multithreaded libintl_recursive_lock_lock_multithreaded 192#define glthread_recursive_lock_lock_func libintl_recursive_lock_lock_func 193#define glthread_recursive_lock_unlock_multithreaded libintl_recursive_lock_unlock_multithreaded 194#define glthread_recursive_lock_unlock_func libintl_recursive_lock_unlock_func 195#define glthread_recursive_lock_destroy_multithreaded libintl_recursive_lock_destroy_multithreaded 196#define glthread_recursive_lock_destroy_func libintl_recursive_lock_destroy_func 197#define glthread_once_func libintl_once_func 198#define glthread_once_singlethreaded libintl_once_singlethreaded 199#define glthread_once_multithreaded libintl_once_multithreaded 200]) 201]) 202 203 204dnl Checks for the core files of the intl subdirectory: 205dnl dcigettext.c 206dnl eval-plural.h 207dnl explodename.c 208dnl finddomain.c 209dnl gettextP.h 210dnl gmo.h 211dnl hash-string.h hash-string.c 212dnl l10nflist.c 213dnl libgnuintl.h.in (except the *printf stuff) 214dnl loadinfo.h 215dnl loadmsgcat.c 216dnl localealias.c 217dnl log.c 218dnl plural-exp.h plural-exp.c 219dnl plural.y 220dnl Used by libglocale. 221AC_DEFUN([gt_INTL_SUBDIR_CORE], 222[ 223 AC_REQUIRE([AC_C_INLINE])dnl 224 AC_REQUIRE([AC_TYPE_SIZE_T])dnl 225 AC_REQUIRE([gl_AC_HEADER_STDINT_H]) 226 AC_REQUIRE([AC_FUNC_ALLOCA])dnl 227 AC_REQUIRE([AC_FUNC_MMAP])dnl 228 AC_REQUIRE([gt_INTDIV0])dnl 229 AC_REQUIRE([gl_AC_TYPE_UINTMAX_T])dnl 230 AC_REQUIRE([gl_LOCK])dnl 231 232 AC_LINK_IFELSE( 233 [AC_LANG_PROGRAM( 234 [[int foo (int a) { a = __builtin_expect (a, 10); return a == 10 ? 0 : 1; }]], 235 [[]])], 236 [AC_DEFINE([HAVE_BUILTIN_EXPECT], [1], 237 [Define to 1 if the compiler understands __builtin_expect.])]) 238 239 AC_CHECK_HEADERS([inttypes.h limits.h unistd.h sys/param.h]) 240 AC_CHECK_FUNCS([getcwd getegid geteuid getgid getuid mempcpy munmap \ 241 stpcpy strcasecmp strdup strtoul tsearch __fsetlocking]) 242 243 dnl Use the *_unlocked functions only if they are declared. 244 dnl (because some of them were defined without being declared in Solaris 245 dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built 246 dnl on Solaris 2.5.1 to run on Solaris 2.6). 247 AC_CHECK_DECLS([feof_unlocked, fgets_unlocked], , , [#include <stdio.h>]) 248 249 AM_ICONV 250 251 dnl intl/plural.c is generated from intl/plural.y. It requires bison, 252 dnl because plural.y uses bison specific features. It requires at least 253 dnl bison-3.0 for %precedence. 254 dnl bison is only needed for the maintainer (who touches plural.y). But in 255 dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put 256 dnl the rule in general Makefile. Now, some people carelessly touch the 257 dnl files or have a broken "make" program, hence the plural.c rule will 258 dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not 259 dnl present or too old. 260 gl_PROG_BISON([INTLBISON], [3.0]) 261]) 262 263dnl Copies _GL_UNUSED and _GL_ATTRIBUTE_PURE definitions from 264dnl gnulib-common.m4 as a fallback, if the project isn't using Gnulib. 265AC_DEFUN([gt_GL_ATTRIBUTE], [ 266 m4_ifndef([gl_[]COMMON], 267 AH_VERBATIM([gt_gl_attribute], 268[/* Define as a marker that can be attached to declarations that might not 269 be used. This helps to reduce warnings, such as from 270 GCC -Wunused-parameter. */ 271#ifndef _GL_UNUSED 272# if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) 273# define _GL_UNUSED __attribute__ ((__unused__)) 274# else 275# define _GL_UNUSED 276# endif 277#endif 278 279/* The __pure__ attribute was added in gcc 2.96. */ 280#ifndef _GL_ATTRIBUTE_PURE 281# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) 282# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) 283# else 284# define _GL_ATTRIBUTE_PURE /* empty */ 285# endif 286#endif 287]))]) 288