From 2bd020439ad63aa78333cf0e66f6b8ca0b63685c Mon Sep 17 00:00:00 2001 From: Zack Weinberg Date: Sat, 12 Apr 2003 18:07:06 +0000 Subject: [PATCH] configure.in: Check for wchar.h, mbstowcs, and wcswidth. * configure.in: Check for wchar.h, mbstowcs, and wcswidth. * configure, config.in: Regenerate. * intl.c (gcc_gettext_width): New function. * intl.h: Prototype it. cp: * call.c (print_z_candidates): Use gcc_gettext_width, not strlen, to determine how much padding to use. From-SVN: r65517 --- gcc/ChangeLog | 9 ++++++++- gcc/config.in | 9 +++++++++ gcc/configure | 6 +++--- gcc/configure.in | 4 ++-- gcc/cp/ChangeLog | 5 +++++ gcc/cp/call.c | 6 +++--- gcc/intl.c | 31 +++++++++++++++++++++++++++++++ gcc/intl.h | 1 + 8 files changed, 62 insertions(+), 9 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index f5f58ed38ca..ee654718d63 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2003-04-12 Zack Weinberg + + * configure.in: Check for wchar.h, mbstowcs, and wcswidth. + * configure, config.in: Regenerate. + * intl.c (gcc_gettext_width): New function. + * intl.h: Prototype it. + 2003-04-12 Stephane Carrez * config/m68hc11/m68hc11.h (TARGET_SWITCHES): Fix -mnominmax option; @@ -52,7 +59,7 @@ * configure: Regenerate. * config.in: Regenerate. * config/alpha/t-crtfm: Use -frandom-seed. - + * doc/extend.texi (Empty Structures): New. * c-pch.c: Include flags.h. Add comments to routines. diff --git a/gcc/config.in b/gcc/config.in index 1f190e2d3ed..ba0366fd3d9 100644 --- a/gcc/config.in +++ b/gcc/config.in @@ -162,6 +162,9 @@ /* Define if you have the lstat function. */ #undef HAVE_LSTAT +/* Define if you have the mbstowcs function. */ +#undef HAVE_MBSTOWCS + /* Define if you have the mempcpy function. */ #undef HAVE_MEMPCPY @@ -216,6 +219,9 @@ /* Define if you have the tsearch function. */ #undef HAVE_TSEARCH +/* Define if you have the wcswidth function. */ +#undef HAVE_WCSWIDTH + /* Define if you have the header file. */ #undef HAVE_ARGZ_H @@ -279,6 +285,9 @@ /* Define if you have the header file. */ #undef HAVE_UNISTD_H +/* Define if you have the header file. */ +#undef HAVE_WCHAR_H + /* Define to enable the use of a default linker. */ #undef DEFAULT_LINKER diff --git a/gcc/configure b/gcc/configure index 63063d9c7a5..d92e7c85ce2 100755 --- a/gcc/configure +++ b/gcc/configure @@ -2434,7 +2434,7 @@ fi # Find some useful tools -for ac_prog in gawk mawk nawk awk +for ac_prog in mawk gawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 @@ -3102,7 +3102,7 @@ fi for ac_hdr in limits.h stddef.h string.h strings.h stdlib.h time.h \ fcntl.h unistd.h sys/file.h sys/time.h \ sys/resource.h sys/param.h sys/times.h sys/stat.h \ - direct.h malloc.h langinfo.h ldfcn.h + direct.h malloc.h langinfo.h ldfcn.h wchar.h do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 @@ -3714,7 +3714,7 @@ fi for ac_func in times clock dup2 kill getrlimit setrlimit atoll atoq \ sysconf strsignal putc_unlocked fputc_unlocked fputs_unlocked \ fwrite_unlocked fprintf_unlocked getrusage nl_langinfo lstat \ - scandir alphasort gettimeofday + scandir alphasort gettimeofday mbstowcs wcswidth do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 echo "configure:3721: checking for $ac_func" >&5 diff --git a/gcc/configure.in b/gcc/configure.in index 2a1fbdd862b..c6bd2735047 100644 --- a/gcc/configure.in +++ b/gcc/configure.in @@ -688,7 +688,7 @@ AC_HEADER_SYS_WAIT AC_CHECK_HEADERS(limits.h stddef.h string.h strings.h stdlib.h time.h \ fcntl.h unistd.h sys/file.h sys/time.h \ sys/resource.h sys/param.h sys/times.h sys/stat.h \ - direct.h malloc.h langinfo.h ldfcn.h) + direct.h malloc.h langinfo.h ldfcn.h wchar.h) # Check for thread headers. AC_CHECK_HEADER(thread.h, [have_thread_h=yes], [have_thread_h=]) @@ -787,7 +787,7 @@ dnl gcc_AC_C_ENUM_BF_UNSIGNED AC_CHECK_FUNCS(times clock dup2 kill getrlimit setrlimit atoll atoq \ sysconf strsignal putc_unlocked fputc_unlocked fputs_unlocked \ fwrite_unlocked fprintf_unlocked getrusage nl_langinfo lstat \ - scandir alphasort gettimeofday) + scandir alphasort gettimeofday mbstowcs wcswidth) AC_CHECK_TYPE(ssize_t, int) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index a272d5e3eb0..1b13649d131 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2003-04-12 Zack Weinberg + + * call.c (print_z_candidates): Use gcc_gettext_width, not + strlen, to determine how much padding to use. + 2003-04-10 Zack Weinberg * decl.c: Update all calls to shadow_warning. diff --git a/gcc/cp/call.c b/gcc/cp/call.c index fd669f8d892..d70b1a1c0c5 100644 --- a/gcc/cp/call.c +++ b/gcc/cp/call.c @@ -2508,9 +2508,9 @@ print_z_candidates (struct z_candidate *candidates) print_z_candidate (str, candidates); if (candidates->next) { - /* Indent successive candidates by the length of the translation of - the above string. */ - size_t len = strlen (str) + 1; + /* Indent successive candidates by the width of the translation + of the above string. */ + size_t len = gcc_gettext_width (str) + 1; char *spaces = alloca (len); memset (spaces, ' ', len-1); spaces[len] = '\0'; diff --git a/gcc/intl.c b/gcc/intl.c index 958e77af377..5a885bfec5d 100644 --- a/gcc/intl.c +++ b/gcc/intl.c @@ -45,4 +45,35 @@ gcc_init_libintl () (void) textdomain ("gcc"); } +#if defined HAVE_WCHAR_H && defined HAVE_MBSTOWCS && defined HAVE_WCSWIDTH +#include + +/* Returns the width in columns of MSGSTR, which came from gettext. + This is for indenting subsequent output. */ + +size_t +gcc_gettext_width (msgstr) + const char *msgstr; +{ + size_t nwcs = mbstowcs (0, msgstr, 0); + wchar_t *wmsgstr = alloca ((nwcs + 1) * sizeof (wchar_t)); + + mbstowcs (wmsgstr, msgstr, nwcs + 1); + return wcswidth (wmsgstr, nwcs); +} + +#else /* no wcswidth */ + +/* We don't have any way of knowing how wide the string is. Guess + the length of the string. */ + +size_t +gcc_gettext_width (msgstr) + const char *msgstr; +{ + return strlen (msgstr); +} + #endif + +#endif /* ENABLE_NLS */ diff --git a/gcc/intl.h b/gcc/intl.h index 8a9b35a66fd..57d44a80b21 100644 --- a/gcc/intl.h +++ b/gcc/intl.h @@ -39,6 +39,7 @@ #ifdef ENABLE_NLS extern void gcc_init_libintl PARAMS ((void)); +extern size_t gcc_gettext_width PARAMS ((const char *)); #else /* Stubs. */ # undef textdomain