X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=m4%2Fwctype.m4;h=7fa36a1b47004d4708a36473d537faea1fbe1c38;hb=b7b6d3d99a751f99638ed8e14b62c1cf697f0664;hp=357c7a5f982f9df5112bfa7ee69132126bb84ce8;hpb=5feb40015695ca27cd3ca51a7c09ca1787fd4483;p=gnulib.git diff --git a/m4/wctype.m4 b/m4/wctype.m4 index 357c7a5f9..7fa36a1b4 100644 --- a/m4/wctype.m4 +++ b/m4/wctype.m4 @@ -1,6 +1,8 @@ +# wctype.m4 serial 4 + dnl A placeholder for ISO C99 , for platforms that lack it. -dnl Copyright (C) 2006 Free Software Foundation, Inc. +dnl Copyright (C) 2006-2010 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. @@ -9,48 +11,74 @@ dnl Written by Paul Eggert. AC_DEFUN([gl_WCTYPE_H], [ + AC_REQUIRE([AC_PROG_CC]) + AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS_ONCE([iswcntrl]) + if test $ac_cv_func_iswcntrl = yes; then + HAVE_ISWCNTRL=1 + else + HAVE_ISWCNTRL=0 + fi + AC_SUBST([HAVE_ISWCNTRL]) AC_CHECK_HEADERS_ONCE([wctype.h]) AC_REQUIRE([AC_C_INLINE]) + AC_REQUIRE([gt_TYPE_WINT_T]) + if test $gt_cv_c_wint_t = yes; then + HAVE_WINT_T=1 + else + HAVE_WINT_T=0 + fi + AC_SUBST([HAVE_WINT_T]) + + WCTYPE_H=wctype.h if test $ac_cv_header_wctype_h = yes; then - gl_ABSOLUTE_HEADER([wctype.h]) - ABSOLUTE_WCTYPE_H=\"$gl_cv_absolute_wctype_h\" + if test $ac_cv_func_iswcntrl = yes; then + dnl Linux libc5 has an iswprint function that returns 0 for all arguments. + dnl The other functions are likely broken in the same way. + AC_CACHE_CHECK([whether iswcntrl works], [gl_cv_func_iswcntrl_works], + [ + AC_RUN_IFELSE([AC_LANG_SOURCE([[ + #include + #include + #include + #include + #include + int main () { return iswprint ('x') == 0; }]])], + [gl_cv_func_iswcntrl_works=yes], [gl_cv_func_iswcntrl_works=no], + [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include + #if __GNU_LIBRARY__ == 1 + Linux libc5 i18n is broken. + #endif]], [])], + [gl_cv_func_iswcntrl_works=yes], [gl_cv_func_iswcntrl_works=no]) + ]) + ]) + if test $gl_cv_func_iswcntrl_works = yes; then + case "$host_os" in + mingw*) + dnl On mingw, towlower and towupper return random high 16 bits. + ;; + *) + dnl iswcntrl works. towlower and towupper work as well. + WCTYPE_H= + ;; + esac + fi + fi + dnl Compute NEXT_WCTYPE_H even if WCTYPE_H is empty, + dnl for the benefit of builds from non-distclean directories. + gl_CHECK_NEXT_HEADERS([wctype.h]) HAVE_WCTYPE_H=1 else - ABSOLUTE_WCTYPE_H=\"no/such/file/wctype.h\" HAVE_WCTYPE_H=0 fi - AC_SUBST([ABSOLUTE_WCTYPE_H]) AC_SUBST([HAVE_WCTYPE_H]) + AC_SUBST([WCTYPE_H]) - WCTYPE_H=wctype.h - HAVE_WCTYPE_CTMP_BUG=0 - if test $ac_cv_header_wctype_h = yes; then - dnl IRIX 5.3 has a bug: its isw* macros reference an undefined variable - dnl _ctmp_. Test against this bug. - AC_CACHE_CHECK([whether wctype macros need _ctmp_ declared], - [gl_cv_wctype_ctmp_bug], - [gl_cv_wctype_ctmp_bug=no - AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include - ]], - [[return iswprint (0);]])], - [gl_cv_wctype_ctmp_bug='no, but bare wctype.h does not work'], - [AC_COMPILE_IFELSE( - [AC_LANG_PROGRAM( - [[#include - static wint_t _ctmp_;]], - [[return iswprint (0);]])], - [gl_cv_wctype_ctmp_bug=yes])])]) - case $gl_cv_wctype_ctmp_bug,$ac_cv_func_iswcntrl in #( - yes,*) - HAVE_WCTYPE_CTMP_BUG=1;; #( - no,yes) - WCTYPE_H=;; - esac + if test "$gl_cv_func_iswcntrl_works" = no; then + REPLACE_ISWCNTRL=1 + else + REPLACE_ISWCNTRL=0 fi - AC_SUBST([WCTYPE_H]) - AC_SUBST([HAVE_WCTYPE_CTMP_BUG]) + AC_SUBST([REPLACE_ISWCNTRL]) ])