Hi, test-wcwidth fails on OpenBSD 4.0, because wcwidth returns 0 instead of 2 for many CJK characters. This should detect this bug:
2008-01-08 Bruno Haible <[EMAIL PROTECTED]> * m4/wcwidth.m4 (gl_FUNC_WCWIDTH): Test also U+3000. Needed to detect bug on OpenBSD 4.0. * doc/functions/wcwidth.texi: Document the OpenBSD bug. *** doc/functions/wcwidth.texi.orig 2008-01-08 17:39:24.000000000 +0100 --- doc/functions/wcwidth.texi 2008-01-08 17:39:15.000000000 +0100 *************** *** 15,20 **** --- 15,24 ---- This function handles combining characters in UTF-8 locales incorrectly on some platforms: MacOS X 10.3. + @item + This function handles double-width CJK characters in UTF-8 locales incorrectly + on some platforms: + OpenBSD 4.0. @end itemize Portability problems not fixed by Gnulib: *** m4/wcwidth.m4.orig 2008-01-08 17:39:24.000000000 +0100 --- m4/wcwidth.m4 2008-01-08 17:27:26.000000000 +0100 *************** *** 1,5 **** ! # wcwidth.m4 serial 13 ! dnl Copyright (C) 2006, 2007 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. --- 1,5 ---- ! # wcwidth.m4 serial 14 ! dnl Copyright (C) 2006-2008 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. *************** *** 38,43 **** --- 38,44 ---- else dnl On MacOS X 10.3, wcwidth(0x0301) (COMBINING ACUTE ACCENT) returns 1. dnl On OSF/1 5.1, wcwidth(0x200B) (ZERO WIDTH SPACE) returns 1. + dnl On OpenBSD 4.0, wcwidth(0x3000) (IDEOGRAPHIC SPACE) returns 0. dnl This leads to bugs in 'ls' (coreutils). AC_CACHE_CHECK([whether wcwidth works reasonably in UTF-8 locales], [gl_cv_func_wcwidth_works], *************** *** 64,70 **** int main () { if (setlocale (LC_ALL, "fr_FR.UTF-8") != NULL) ! if (wcwidth (0x0301) > 0 || wcwidth (0x200B) > 0) return 1; return 0; }], [gl_cv_func_wcwidth_works=yes], [gl_cv_func_wcwidth_works=no], --- 65,71 ---- int main () { if (setlocale (LC_ALL, "fr_FR.UTF-8") != NULL) ! if (wcwidth (0x0301) > 0 || wcwidth (0x200B) > 0 || wcwidth (0x3000) <= 1) return 1; return 0; }], [gl_cv_func_wcwidth_works=yes], [gl_cv_func_wcwidth_works=no],