X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=m4%2Fwcwidth.m4;h=f00a6cca533882881fccbc15749eda7cc5a2955f;hb=46f5f314f34a08c9305758482d7d2fdb0e999d09;hp=19bcce6d63c9fff3eec85e6c66c02cf4ae9b9aff;hpb=d0bcee4e6a778c34a4d3e4c922789219c16bfe4b;p=gnulib.git diff --git a/m4/wcwidth.m4 b/m4/wcwidth.m4 index 19bcce6d6..f00a6cca5 100644 --- a/m4/wcwidth.m4 +++ b/m4/wcwidth.m4 @@ -1,40 +1,101 @@ -# wcwidth.m4 serial 2 -dnl Copyright (C) 2006 Free Software Foundation, Inc. +# wcwidth.m4 serial 23 +dnl Copyright (C) 2006-2014 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. AC_DEFUN([gl_FUNC_WCWIDTH], [ + AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) + AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles + dnl Persuade glibc to declare wcwidth(). - AC_REQUIRE([AC_GNU_SOURCE]) + AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) - AC_REQUIRE([AC_C_INLINE]) AC_REQUIRE([gt_TYPE_WCHAR_T]) + AC_REQUIRE([gt_TYPE_WINT_T]) - AC_CHECK_HEADERS_ONCE([wchar.h wctype.h]) - AC_CHECK_FUNCS_ONCE([iswprint wcwidth]) + AC_CHECK_HEADERS_ONCE([wchar.h]) + AC_CHECK_FUNCS_ONCE([wcwidth]) - AC_CACHE_CHECK([whether wcwidth is declared], [ac_cv_have_decl_wcwidth], - [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ + AC_CHECK_DECLS([wcwidth], [], [], [[ /* AIX 3.2.5 declares wcwidth in . */ -#if HAVE_STRING_H -# include -#endif -#if HAVE_WCHAR_H -# include -#endif -], [ -#ifndef wcwidth - char *p = (char *) wcwidth; +#include +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be included + before . */ +#include +#include +#include +#include +]]) + if test $ac_cv_have_decl_wcwidth != yes; then + HAVE_DECL_WCWIDTH=0 + fi + + if test $ac_cv_func_wcwidth = yes; then + HAVE_WCWIDTH=1 + dnl On Mac OS X 10.3, wcwidth(0x0301) (COMBINING ACUTE ACCENT) returns 1. + dnl On OpenBSD 5.0, wcwidth(0x05B0) (HEBREW POINT SHEVA) returns 1. + dnl On OSF/1 5.1, wcwidth(0x200B) (ZERO WIDTH SPACE) returns 1. + dnl This leads to bugs in 'ls' (coreutils). + AC_CACHE_CHECK([whether wcwidth works reasonably in UTF-8 locales], + [gl_cv_func_wcwidth_works], + [ + AC_RUN_IFELSE( + [AC_LANG_SOURCE([[ +#include +/* AIX 3.2.5 declares wcwidth in . */ +#include +/* Tru64 with Desktop Toolkit C has a bug: must be included before + . + BSD/OS 4.0.1 has a bug: , and must be included + before . */ +#include +#include +#include +#include +#if !HAVE_DECL_WCWIDTH +extern +# ifdef __cplusplus +"C" +# endif +int wcwidth (int); #endif -])], [ac_cv_have_decl_wcwidth=yes], [ac_cv_have_decl_wcwidth=no])]) - if test $ac_cv_have_decl_wcwidth = yes; then - ac_val=1 +int main () +{ + int result = 0; + if (setlocale (LC_ALL, "fr_FR.UTF-8") != NULL) + { + if (wcwidth (0x0301) > 0) + result |= 1; + if (wcwidth (0x05B0) > 0) + result |= 2; + if (wcwidth (0x200B) > 0) + result |= 4; + } + return result; +}]])], + [gl_cv_func_wcwidth_works=yes], + [gl_cv_func_wcwidth_works=no], + [ +changequote(,)dnl + case "$host_os" in + # Guess yes on glibc and AIX 7 systems. + *-gnu* | aix[7-9]*) gl_cv_func_wcwidth_works="guessing yes";; + *) gl_cv_func_wcwidth_works="guessing no";; + esac +changequote([,])dnl + ]) + ]) + case "$gl_cv_func_wcwidth_works" in + *yes) ;; + *no) REPLACE_WCWIDTH=1 ;; + esac else - ac_val=0 + HAVE_WCWIDTH=0 fi - AC_DEFINE_UNQUOTED([HAVE_DECL_WCWIDTH], [$ac_val], - [Define to 1 if you have the declaration of wcwidth(), and to 0 - otherwise.]) -]) + dnl We don't substitute HAVE_WCWIDTH. We assume that if the system does not + dnl have the wcwidth function, then it does not declare it. +])