1# locale_h.m4 serial 19 2dnl Copyright (C) 2007, 2009-2014 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. 6 7AC_DEFUN([gl_LOCALE_H], 8[ 9 dnl Use AC_REQUIRE here, so that the default behavior below is expanded 10 dnl once only, before all statements that occur in other macros. 11 AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) 12 13 dnl Persuade glibc <locale.h> to define locale_t and the int_p_*, int_n_* 14 dnl members of 'struct lconv'. 15 AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) 16 17 dnl If <stddef.h> is replaced, then <locale.h> must also be replaced. 18 AC_REQUIRE([gl_STDDEF_H]) 19 20 dnl Solaris 11 2011-11 defines the int_p_*, int_n_* members of 'struct lconv' 21 dnl only if _LCONV_C99 is defined. 22 AC_REQUIRE([AC_CANONICAL_HOST]) 23 case "$host_os" in 24 solaris*) 25 AC_DEFINE([_LCONV_C99], [1], [Define to 1 on Solaris.]) 26 ;; 27 esac 28 29 AC_CACHE_CHECK([whether locale.h conforms to POSIX:2001], 30 [gl_cv_header_locale_h_posix2001], 31 [AC_COMPILE_IFELSE( 32 [AC_LANG_PROGRAM( 33 [[#include <locale.h> 34 int x = LC_MESSAGES; 35 int y = sizeof (((struct lconv *) 0)->decimal_point);]], 36 [[]])], 37 [gl_cv_header_locale_h_posix2001=yes], 38 [gl_cv_header_locale_h_posix2001=no])]) 39 40 dnl Check for <xlocale.h>. 41 AC_CHECK_HEADERS_ONCE([xlocale.h]) 42 if test $ac_cv_header_xlocale_h = yes; then 43 HAVE_XLOCALE_H=1 44 dnl Check whether use of locale_t requires inclusion of <xlocale.h>, 45 dnl e.g. on Mac OS X 10.5. If <locale.h> does not define locale_t by 46 dnl itself, we assume that <xlocale.h> will do so. 47 AC_CACHE_CHECK([whether locale.h defines locale_t], 48 [gl_cv_header_locale_has_locale_t], 49 [AC_COMPILE_IFELSE( 50 [AC_LANG_PROGRAM( 51 [[#include <locale.h> 52 locale_t x;]], 53 [[]])], 54 [gl_cv_header_locale_has_locale_t=yes], 55 [gl_cv_header_locale_has_locale_t=no]) 56 ]) 57 if test $gl_cv_header_locale_has_locale_t = yes; then 58 gl_cv_header_locale_h_needs_xlocale_h=no 59 else 60 gl_cv_header_locale_h_needs_xlocale_h=yes 61 fi 62 else 63 HAVE_XLOCALE_H=0 64 gl_cv_header_locale_h_needs_xlocale_h=no 65 fi 66 AC_SUBST([HAVE_XLOCALE_H]) 67 68 dnl Check whether 'struct lconv' is complete. 69 dnl Bionic libc's 'struct lconv' is just a dummy. 70 dnl On OpenBSD 4.9, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.x, 71 dnl mingw, MSVC 9, it lacks the int_p_* and int_n_* members. 72 AC_CACHE_CHECK([whether struct lconv is properly defined], 73 [gl_cv_sys_struct_lconv_ok], 74 [AC_COMPILE_IFELSE( 75 [AC_LANG_PROGRAM( 76 [[#include <locale.h> 77 struct lconv l; 78 int x = sizeof (l.decimal_point); 79 int y = sizeof (l.int_p_cs_precedes);]], 80 [[]])], 81 [gl_cv_sys_struct_lconv_ok=yes], 82 [gl_cv_sys_struct_lconv_ok=no]) 83 ]) 84 if test $gl_cv_sys_struct_lconv_ok = no; then 85 REPLACE_STRUCT_LCONV=1 86 fi 87 88 dnl <locale.h> is always overridden, because of GNULIB_POSIXCHECK. 89 gl_NEXT_HEADERS([locale.h]) 90 91 dnl Check for declarations of anything we want to poison if the 92 dnl corresponding gnulib module is not in use. 93 gl_WARN_ON_USE_PREPARE([[#include <locale.h> 94/* Some systems provide declarations in a non-standard header. */ 95#if HAVE_XLOCALE_H 96# include <xlocale.h> 97#endif 98 ]], 99 [setlocale duplocale]) 100]) 101 102AC_DEFUN([gl_LOCALE_MODULE_INDICATOR], 103[ 104 dnl Use AC_REQUIRE here, so that the default settings are expanded once only. 105 AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) 106 gl_MODULE_INDICATOR_SET_VARIABLE([$1]) 107 dnl Define it also as a C macro, for the benefit of the unit tests. 108 gl_MODULE_INDICATOR_FOR_TESTS([$1]) 109]) 110 111AC_DEFUN([gl_LOCALE_H_DEFAULTS], 112[ 113 GNULIB_LOCALECONV=0; AC_SUBST([GNULIB_LOCALECONV]) 114 GNULIB_SETLOCALE=0; AC_SUBST([GNULIB_SETLOCALE]) 115 GNULIB_DUPLOCALE=0; AC_SUBST([GNULIB_DUPLOCALE]) 116 dnl Assume proper GNU behavior unless another module says otherwise. 117 HAVE_DUPLOCALE=1; AC_SUBST([HAVE_DUPLOCALE]) 118 REPLACE_LOCALECONV=0; AC_SUBST([REPLACE_LOCALECONV]) 119 REPLACE_SETLOCALE=0; AC_SUBST([REPLACE_SETLOCALE]) 120 REPLACE_DUPLOCALE=0; AC_SUBST([REPLACE_DUPLOCALE]) 121 REPLACE_STRUCT_LCONV=0; AC_SUBST([REPLACE_STRUCT_LCONV]) 122]) 123