summaryrefslogtreecommitdiff
path: root/m4/iconv.m4
diff options
context:
space:
mode:
authorDaiki Ueno <ueno@gnu.org>2014-10-22 07:23:46 +0200
committerWerner Lemberg <wl@gnu.org>2014-10-22 07:23:46 +0200
commitb0333eca228d83646900b679ce8bc0d2cb5e8d82 (patch)
tree0e1a2dbb2454a8fe301955e4656faf0f6c7537f9 /m4/iconv.m4
parent4c69674cea9bdd9d13edb306ff10a0cbee78d318 (diff)
downloadgroff-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/iconv.m4')
-rw-r--r--m4/iconv.m451
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