diff options
author | Daiki Ueno <ueno@gnu.org> | 2014-10-22 07:23:46 +0200 |
---|---|---|
committer | Werner Lemberg <wl@gnu.org> | 2014-10-22 07:23:46 +0200 |
commit | b0333eca228d83646900b679ce8bc0d2cb5e8d82 (patch) | |
tree | 0e1a2dbb2454a8fe301955e4656faf0f6c7537f9 /m4 | |
parent | 4c69674cea9bdd9d13edb306ff10a0cbee78d318 (diff) | |
download | groff-git-b0333eca228d83646900b679ce8bc0d2cb5e8d82.tar.gz |
iconv: avoid false detection of non-working iconv
The INBUF/OUTBUF arguments of iconv can be either 'const char **'
or 'char **'. If CC is g++, the difference causes a compile error
and thus leads to a false detection of non-working iconv.
Reported by Eli Zaretskii and Werner LEMBERG in:
<https://lists.gnu.org/archive/html/bug-gnulib/2014-10/msg00023.html>.
* m4/iconv.m4 (AM_ICONV_LINK): Try all possible argument types of
iconv. Bump serial number.
Diffstat (limited to 'm4')
-rw-r--r-- | m4/iconv.m4 | 51 |
1 files changed, 26 insertions, 25 deletions
diff --git a/m4/iconv.m4 b/m4/iconv.m4 index 4b29c5f2c..2c3085f39 100644 --- a/m4/iconv.m4 +++ b/m4/iconv.m4 @@ -1,4 +1,4 @@ -# iconv.m4 serial 18 (gettext-0.18.2) +# iconv.m4 serial 19 (gettext-0.18.2) dnl Copyright (C) 2000-2002, 2007-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, @@ -72,13 +72,17 @@ AC_DEFUN([AM_ICONV_LINK], if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi - AC_RUN_IFELSE( - [AC_LANG_SOURCE([[ + am_cv_func_iconv_works=no + for ac_type in 'char **' 'const char **'; do + AC_RUN_IFELSE( + [AC_LANG_PROGRAM( + [[ #include <iconv.h> #include <string.h> -int main () -{ - int result = 0; + +typedef $ac_type gl_iconv_buf_t; + ]], + [[int result = 0; /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { @@ -92,8 +96,8 @@ int main () char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, - (char **) &inptr, &inbytesleft, - &outptr, &outbytesleft); + (gl_iconv_buf_t) &inptr, &inbytesleft, + (gl_iconv_buf_t) &outptr, &outbytesleft); if (res == 0) result |= 1; iconv_close (cd_utf8_to_88591); @@ -112,8 +116,8 @@ int main () char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_ascii_to_88591, - (char **) &inptr, &inbytesleft, - &outptr, &outbytesleft); + (gl_iconv_buf_t) &inptr, &inbytesleft, + (gl_iconv_buf_t) &outptr, &outbytesleft); if (res == 0) result |= 2; iconv_close (cd_ascii_to_88591); @@ -131,8 +135,8 @@ int main () char *outptr = buf; size_t outbytesleft = 1; size_t res = iconv (cd_88591_to_utf8, - (char **) &inptr, &inbytesleft, - &outptr, &outbytesleft); + (gl_iconv_buf_t) &inptr, &inbytesleft, + (gl_iconv_buf_t) &outptr, &outbytesleft); if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) result |= 4; iconv_close (cd_88591_to_utf8); @@ -151,8 +155,8 @@ int main () char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, - (char **) &inptr, &inbytesleft, - &outptr, &outbytesleft); + (gl_iconv_buf_t) &inptr, &inbytesleft, + (gl_iconv_buf_t) &outptr, &outbytesleft); if ((int)res > 0) result |= 8; iconv_close (cd_88591_to_utf8); @@ -171,17 +175,14 @@ int main () && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) result |= 16; return result; -}]])], - [am_cv_func_iconv_works=yes], - [am_cv_func_iconv_works=no], - [ -changequote(,)dnl - case "$host_os" in - aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; - *) am_cv_func_iconv_works="guessing yes" ;; - esac -changequote([,])dnl - ]) +]])], + [am_cv_func_iconv_works=yes], , + [case "$host_os" in + aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; + *) am_cv_func_iconv_works="guessing yes" ;; + esac]) + test "$am_cv_func_iconv_works" = no || break + done LIBS="$am_save_LIBS" ]) case "$am_cv_func_iconv_works" in |