Blame m4/iconv.m4

Packit Service 3e5a5a
# iconv.m4 serial 18 (gettext-0.18.2)
Packit Service 3e5a5a
dnl Copyright (C) 2000-2002, 2007-2013 Free Software Foundation, Inc.
Packit Service 3e5a5a
dnl This file is free software; the Free Software Foundation
Packit Service 3e5a5a
dnl gives unlimited permission to copy and/or distribute it,
Packit Service 3e5a5a
dnl with or without modifications, as long as this notice is preserved.
Packit Service 3e5a5a
Packit Service 3e5a5a
dnl From Bruno Haible.
Packit Service 3e5a5a
Packit Service 3e5a5a
AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
Packit Service 3e5a5a
[
Packit Service 3e5a5a
  dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
Packit Service 3e5a5a
  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
Packit Service 3e5a5a
  AC_REQUIRE([AC_LIB_RPATH])
Packit Service 3e5a5a
Packit Service 3e5a5a
  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
Packit Service 3e5a5a
  dnl accordingly.
Packit Service 3e5a5a
  AC_LIB_LINKFLAGS_BODY([iconv])
Packit Service 3e5a5a
])
Packit Service 3e5a5a
Packit Service 3e5a5a
AC_DEFUN([AM_ICONV_LINK],
Packit Service 3e5a5a
[
Packit Service 3e5a5a
  dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
Packit Service 3e5a5a
  dnl those with the standalone portable GNU libiconv installed).
Packit Service 3e5a5a
  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
Packit Service 3e5a5a
Packit Service 3e5a5a
  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
Packit Service 3e5a5a
  dnl accordingly.
Packit Service 3e5a5a
  AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
Packit Service 3e5a5a
Packit Service 3e5a5a
  dnl Add $INCICONV to CPPFLAGS before performing the following checks,
Packit Service 3e5a5a
  dnl because if the user has installed libiconv and not disabled its use
Packit Service 3e5a5a
  dnl via --without-libiconv-prefix, he wants to use it. The first
Packit Service 3e5a5a
  dnl AC_LINK_IFELSE will then fail, the second AC_LINK_IFELSE will succeed.
Packit Service 3e5a5a
  am_save_CPPFLAGS="$CPPFLAGS"
Packit Service 3e5a5a
  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
Packit Service 3e5a5a
Packit Service 3e5a5a
  AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [
Packit Service 3e5a5a
    am_cv_func_iconv="no, consider installing GNU libiconv"
Packit Service 3e5a5a
    am_cv_lib_iconv=no
Packit Service 3e5a5a
    AC_LINK_IFELSE(
Packit Service 3e5a5a
      [AC_LANG_PROGRAM(
Packit Service 3e5a5a
         [[
Packit Service 3e5a5a
#include <stdlib.h>
Packit Service 3e5a5a
#include <iconv.h>
Packit Service 3e5a5a
         ]],
Packit Service 3e5a5a
         [[iconv_t cd = iconv_open("","");
Packit Service 3e5a5a
           iconv(cd,NULL,NULL,NULL,NULL);
Packit Service 3e5a5a
           iconv_close(cd);]])],
Packit Service 3e5a5a
      [am_cv_func_iconv=yes])
Packit Service 3e5a5a
    if test "$am_cv_func_iconv" != yes; then
Packit Service 3e5a5a
      am_save_LIBS="$LIBS"
Packit Service 3e5a5a
      LIBS="$LIBS $LIBICONV"
Packit Service 3e5a5a
      AC_LINK_IFELSE(
Packit Service 3e5a5a
        [AC_LANG_PROGRAM(
Packit Service 3e5a5a
           [[
Packit Service 3e5a5a
#include <stdlib.h>
Packit Service 3e5a5a
#include <iconv.h>
Packit Service 3e5a5a
           ]],
Packit Service 3e5a5a
           [[iconv_t cd = iconv_open("","");
Packit Service 3e5a5a
             iconv(cd,NULL,NULL,NULL,NULL);
Packit Service 3e5a5a
             iconv_close(cd);]])],
Packit Service 3e5a5a
        [am_cv_lib_iconv=yes]
Packit Service 3e5a5a
        [am_cv_func_iconv=yes])
Packit Service 3e5a5a
      LIBS="$am_save_LIBS"
Packit Service 3e5a5a
    fi
Packit Service 3e5a5a
  ])
Packit Service 3e5a5a
  if test "$am_cv_func_iconv" = yes; then
Packit Service 3e5a5a
    AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [
Packit Service 3e5a5a
      dnl This tests against bugs in AIX 5.1, AIX 6.1..7.1, HP-UX 11.11,
Packit Service 3e5a5a
      dnl Solaris 10.
Packit Service 3e5a5a
      am_save_LIBS="$LIBS"
Packit Service 3e5a5a
      if test $am_cv_lib_iconv = yes; then
Packit Service 3e5a5a
        LIBS="$LIBS $LIBICONV"
Packit Service 3e5a5a
      fi
Packit Service 3e5a5a
      AC_RUN_IFELSE(
Packit Service 3e5a5a
        [AC_LANG_SOURCE([[
Packit Service 3e5a5a
#include <iconv.h>
Packit Service 3e5a5a
#include <string.h>
Packit Service 3e5a5a
int main ()
Packit Service 3e5a5a
{
Packit Service 3e5a5a
  int result = 0;
Packit Service 3e5a5a
  /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
Packit Service 3e5a5a
     returns.  */
Packit Service 3e5a5a
  {
Packit Service 3e5a5a
    iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
Packit Service 3e5a5a
    if (cd_utf8_to_88591 != (iconv_t)(-1))
Packit Service 3e5a5a
      {
Packit Service 3e5a5a
        static const char input[] = "\342\202\254"; /* EURO SIGN */
Packit Service 3e5a5a
        char buf[10];
Packit Service 3e5a5a
        const char *inptr = input;
Packit Service 3e5a5a
        size_t inbytesleft = strlen (input);
Packit Service 3e5a5a
        char *outptr = buf;
Packit Service 3e5a5a
        size_t outbytesleft = sizeof (buf);
Packit Service 3e5a5a
        size_t res = iconv (cd_utf8_to_88591,
Packit Service 3e5a5a
                            (char **) &inptr, &inbytesleft,
Packit Service 3e5a5a
                            &outptr, &outbytesleft);
Packit Service 3e5a5a
        if (res == 0)
Packit Service 3e5a5a
          result |= 1;
Packit Service 3e5a5a
        iconv_close (cd_utf8_to_88591);
Packit Service 3e5a5a
      }
Packit Service 3e5a5a
  }
Packit Service 3e5a5a
  /* Test against Solaris 10 bug: Failures are not distinguishable from
Packit Service 3e5a5a
     successful returns.  */
Packit Service 3e5a5a
  {
Packit Service 3e5a5a
    iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
Packit Service 3e5a5a
    if (cd_ascii_to_88591 != (iconv_t)(-1))
Packit Service 3e5a5a
      {
Packit Service 3e5a5a
        static const char input[] = "\263";
Packit Service 3e5a5a
        char buf[10];
Packit Service 3e5a5a
        const char *inptr = input;
Packit Service 3e5a5a
        size_t inbytesleft = strlen (input);
Packit Service 3e5a5a
        char *outptr = buf;
Packit Service 3e5a5a
        size_t outbytesleft = sizeof (buf);
Packit Service 3e5a5a
        size_t res = iconv (cd_ascii_to_88591,
Packit Service 3e5a5a
                            (char **) &inptr, &inbytesleft,
Packit Service 3e5a5a
                            &outptr, &outbytesleft);
Packit Service 3e5a5a
        if (res == 0)
Packit Service 3e5a5a
          result |= 2;
Packit Service 3e5a5a
        iconv_close (cd_ascii_to_88591);
Packit Service 3e5a5a
      }
Packit Service 3e5a5a
  }
Packit Service 3e5a5a
  /* Test against AIX 6.1..7.1 bug: Buffer overrun.  */
Packit Service 3e5a5a
  {
Packit Service 3e5a5a
    iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1");
Packit Service 3e5a5a
    if (cd_88591_to_utf8 != (iconv_t)(-1))
Packit Service 3e5a5a
      {
Packit Service 3e5a5a
        static const char input[] = "\304";
Packit Service 3e5a5a
        static char buf[2] = { (char)0xDE, (char)0xAD };
Packit Service 3e5a5a
        const char *inptr = input;
Packit Service 3e5a5a
        size_t inbytesleft = 1;
Packit Service 3e5a5a
        char *outptr = buf;
Packit Service 3e5a5a
        size_t outbytesleft = 1;
Packit Service 3e5a5a
        size_t res = iconv (cd_88591_to_utf8,
Packit Service 3e5a5a
                            (char **) &inptr, &inbytesleft,
Packit Service 3e5a5a
                            &outptr, &outbytesleft);
Packit Service 3e5a5a
        if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD)
Packit Service 3e5a5a
          result |= 4;
Packit Service 3e5a5a
        iconv_close (cd_88591_to_utf8);
Packit Service 3e5a5a
      }
Packit Service 3e5a5a
  }
Packit Service 3e5a5a
#if 0 /* This bug could be worked around by the caller.  */
Packit Service 3e5a5a
  /* Test against HP-UX 11.11 bug: Positive return value instead of 0.  */
Packit Service 3e5a5a
  {
Packit Service 3e5a5a
    iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
Packit Service 3e5a5a
    if (cd_88591_to_utf8 != (iconv_t)(-1))
Packit Service 3e5a5a
      {
Packit Service 3e5a5a
        static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
Packit Service 3e5a5a
        char buf[50];
Packit Service 3e5a5a
        const char *inptr = input;
Packit Service 3e5a5a
        size_t inbytesleft = strlen (input);
Packit Service 3e5a5a
        char *outptr = buf;
Packit Service 3e5a5a
        size_t outbytesleft = sizeof (buf);
Packit Service 3e5a5a
        size_t res = iconv (cd_88591_to_utf8,
Packit Service 3e5a5a
                            (char **) &inptr, &inbytesleft,
Packit Service 3e5a5a
                            &outptr, &outbytesleft);
Packit Service 3e5a5a
        if ((int)res > 0)
Packit Service 3e5a5a
          result |= 8;
Packit Service 3e5a5a
        iconv_close (cd_88591_to_utf8);
Packit Service 3e5a5a
      }
Packit Service 3e5a5a
  }
Packit Service 3e5a5a
#endif
Packit Service 3e5a5a
  /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
Packit Service 3e5a5a
     provided.  */
Packit Service 3e5a5a
  if (/* Try standardized names.  */
Packit Service 3e5a5a
      iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
Packit Service 3e5a5a
      /* Try IRIX, OSF/1 names.  */
Packit Service 3e5a5a
      && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
Packit Service 3e5a5a
      /* Try AIX names.  */
Packit Service 3e5a5a
      && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
Packit Service 3e5a5a
      /* Try HP-UX names.  */
Packit Service 3e5a5a
      && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
Packit Service 3e5a5a
    result |= 16;
Packit Service 3e5a5a
  return result;
Packit Service 3e5a5a
}]])],
Packit Service 3e5a5a
        [am_cv_func_iconv_works=yes],
Packit Service 3e5a5a
        [am_cv_func_iconv_works=no],
Packit Service 3e5a5a
        [
Packit Service 3e5a5a
changequote(,)dnl
Packit Service 3e5a5a
         case "$host_os" in
Packit Service 3e5a5a
           aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
Packit Service 3e5a5a
           *)            am_cv_func_iconv_works="guessing yes" ;;
Packit Service 3e5a5a
         esac
Packit Service 3e5a5a
changequote([,])dnl
Packit Service 3e5a5a
        ])
Packit Service 3e5a5a
      LIBS="$am_save_LIBS"
Packit Service 3e5a5a
    ])
Packit Service 3e5a5a
    case "$am_cv_func_iconv_works" in
Packit Service 3e5a5a
      *no) am_func_iconv=no am_cv_lib_iconv=no ;;
Packit Service 3e5a5a
      *)   am_func_iconv=yes ;;
Packit Service 3e5a5a
    esac
Packit Service 3e5a5a
  else
Packit Service 3e5a5a
    am_func_iconv=no am_cv_lib_iconv=no
Packit Service 3e5a5a
  fi
Packit Service 3e5a5a
  if test "$am_func_iconv" = yes; then
Packit Service 3e5a5a
    AC_DEFINE([HAVE_ICONV], [1],
Packit Service 3e5a5a
      [Define if you have the iconv() function and it works.])
Packit Service 3e5a5a
  fi
Packit Service 3e5a5a
  if test "$am_cv_lib_iconv" = yes; then
Packit Service 3e5a5a
    AC_MSG_CHECKING([how to link with libiconv])
Packit Service 3e5a5a
    AC_MSG_RESULT([$LIBICONV])
Packit Service 3e5a5a
  else
Packit Service 3e5a5a
    dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
Packit Service 3e5a5a
    dnl either.
Packit Service 3e5a5a
    CPPFLAGS="$am_save_CPPFLAGS"
Packit Service 3e5a5a
    LIBICONV=
Packit Service 3e5a5a
    LTLIBICONV=
Packit Service 3e5a5a
  fi
Packit Service 3e5a5a
  AC_SUBST([LIBICONV])
Packit Service 3e5a5a
  AC_SUBST([LTLIBICONV])
Packit Service 3e5a5a
])
Packit Service 3e5a5a
Packit Service 3e5a5a
dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to
Packit Service 3e5a5a
dnl avoid warnings like
Packit Service 3e5a5a
dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required".
Packit Service 3e5a5a
dnl This is tricky because of the way 'aclocal' is implemented:
Packit Service 3e5a5a
dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN.
Packit Service 3e5a5a
dnl   Otherwise aclocal's initial scan pass would miss the macro definition.
Packit Service 3e5a5a
dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions.
Packit Service 3e5a5a
dnl   Otherwise aclocal would emit many "Use of uninitialized value $1"
Packit Service 3e5a5a
dnl   warnings.
Packit Service 3e5a5a
m4_define([gl_iconv_AC_DEFUN],
Packit Service 3e5a5a
  m4_version_prereq([2.64],
Packit Service 3e5a5a
    [[AC_DEFUN_ONCE(
Packit Service 3e5a5a
        [$1], [$2])]],
Packit Service 3e5a5a
    [m4_ifdef([gl_00GNULIB],
Packit Service 3e5a5a
       [[AC_DEFUN_ONCE(
Packit Service 3e5a5a
           [$1], [$2])]],
Packit Service 3e5a5a
       [[AC_DEFUN(
Packit Service 3e5a5a
           [$1], [$2])]])]))
Packit Service 3e5a5a
gl_iconv_AC_DEFUN([AM_ICONV],
Packit Service 3e5a5a
[
Packit Service 3e5a5a
  AM_ICONV_LINK
Packit Service 3e5a5a
  if test "$am_cv_func_iconv" = yes; then
Packit Service 3e5a5a
    AC_MSG_CHECKING([for iconv declaration])
Packit Service 3e5a5a
    AC_CACHE_VAL([am_cv_proto_iconv], [
Packit Service 3e5a5a
      AC_COMPILE_IFELSE(
Packit Service 3e5a5a
        [AC_LANG_PROGRAM(
Packit Service 3e5a5a
           [[
Packit Service 3e5a5a
#include <stdlib.h>
Packit Service 3e5a5a
#include <iconv.h>
Packit Service 3e5a5a
extern
Packit Service 3e5a5a
#ifdef __cplusplus
Packit Service 3e5a5a
"C"
Packit Service 3e5a5a
#endif
Packit Service 3e5a5a
#if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus)
Packit Service 3e5a5a
size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
Packit Service 3e5a5a
#else
Packit Service 3e5a5a
size_t iconv();
Packit Service 3e5a5a
#endif
Packit Service 3e5a5a
           ]],
Packit Service 3e5a5a
           [[]])],
Packit Service 3e5a5a
        [am_cv_proto_iconv_arg1=""],
Packit Service 3e5a5a
        [am_cv_proto_iconv_arg1="const"])
Packit Service 3e5a5a
      am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"])
Packit Service 3e5a5a
    am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
Packit Service 3e5a5a
    AC_MSG_RESULT([
Packit Service 3e5a5a
         $am_cv_proto_iconv])
Packit Service 3e5a5a
    AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1],
Packit Service 3e5a5a
      [Define as const if the declaration of iconv() needs const.])
Packit Service 3e5a5a
    dnl Also substitute ICONV_CONST in the gnulib generated <iconv.h>.
Packit Service 3e5a5a
    m4_ifdef([gl_ICONV_H_DEFAULTS],
Packit Service 3e5a5a
      [AC_REQUIRE([gl_ICONV_H_DEFAULTS])
Packit Service 3e5a5a
       if test -n "$am_cv_proto_iconv_arg1"; then
Packit Service 3e5a5a
         ICONV_CONST="const"
Packit Service 3e5a5a
       fi
Packit Service 3e5a5a
      ])
Packit Service 3e5a5a
  fi
Packit Service 3e5a5a
])