X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=m4%2Fwctype.m4;h=b611ebbc9b26e43ad901c36aa1b4985453fdf0b3;hb=22d7496bac7d391faff10755b17889ecd2f604d4;hp=c24e75f26946e3fc2ecc12f40e6884677f555476;hpb=1982cd6d68d03371a7acbf0b6ba142b2909810eb;p=gnulib.git diff --git a/m4/wctype.m4 b/m4/wctype.m4 index c24e75f26..b611ebbc9 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-2009 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,51 +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]) ])