Blame m4/iconv.m4

Packit Service d328f3
# iconv.m4 serial 9 (gettext-0.18)
Packit Service d328f3
dnl Copyright (C) 2000-2002, 2007-2010 Free Software Foundation, Inc.
Packit Service d328f3
dnl This file is free software; the Free Software Foundation
Packit Service d328f3
dnl gives unlimited permission to copy and/or distribute it,
Packit Service d328f3
dnl with or without modifications, as long as this notice is preserved.
Packit Service d328f3
Packit Service d328f3
dnl From Bruno Haible.
Packit Service d328f3
Packit Service d328f3
AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
Packit Service d328f3
[
Packit Service d328f3
  dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
Packit Service d328f3
  AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
Packit Service d328f3
  AC_REQUIRE([AC_LIB_RPATH])
Packit Service d328f3
Packit Service d328f3
  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
Packit Service d328f3
  dnl accordingly.
Packit Service d328f3
  AC_LIB_LINKFLAGS_BODY([iconv])
Packit Service d328f3
])
Packit Service d328f3
Packit Service d328f3
AC_DEFUN([AM_ICONV_LINK],
Packit Service d328f3
[
Packit Service d328f3
  dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
Packit Service d328f3
  dnl those with the standalone portable GNU libiconv installed).
Packit Service d328f3
  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
Packit Service d328f3
Packit Service d328f3
  dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
Packit Service d328f3
  dnl accordingly.
Packit Service d328f3
  AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
Packit Service d328f3
Packit Service d328f3
  dnl Add $INCICONV to CPPFLAGS before performing the following checks,
Packit Service d328f3
  dnl because if the user has installed libiconv and not disabled its use
Packit Service d328f3
  dnl via --without-libiconv-prefix, he wants to use it. The first
Packit Service d328f3
  dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed.
Packit Service d328f3
  am_save_CPPFLAGS="$CPPFLAGS"
Packit Service d328f3
  AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
Packit Service d328f3
Packit Service d328f3
  AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [
Packit Service d328f3
    am_cv_func_iconv="no, consider installing GNU libiconv"
Packit Service d328f3
    am_cv_lib_iconv=no
Packit Service d328f3
    AC_TRY_LINK([#include <stdlib.h>
Packit Service d328f3
#include <iconv.h>],
Packit Service d328f3
      [iconv_t cd = iconv_open("","");
Packit Service d328f3
       iconv(cd,NULL,NULL,NULL,NULL);
Packit Service d328f3
       iconv_close(cd);],
Packit Service d328f3
      [am_cv_func_iconv=yes])
Packit Service d328f3
    if test "$am_cv_func_iconv" != yes; then
Packit Service d328f3
      am_save_LIBS="$LIBS"
Packit Service d328f3
      LIBS="$LIBS $LIBICONV"
Packit Service d328f3
      AC_TRY_LINK([#include <stdlib.h>
Packit Service d328f3
#include <iconv.h>],
Packit Service d328f3
        [iconv_t cd = iconv_open("","");
Packit Service d328f3
         iconv(cd,NULL,NULL,NULL,NULL);
Packit Service d328f3
         iconv_close(cd);],
Packit Service d328f3
        [am_cv_lib_iconv=yes]
Packit Service d328f3
        [am_cv_func_iconv=yes])
Packit Service d328f3
      LIBS="$am_save_LIBS"
Packit Service d328f3
    fi
Packit Service d328f3
  ])
Packit Service d328f3
  if test "$am_cv_func_iconv" = yes; then
Packit Service d328f3
    AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [
Packit Service d328f3
      dnl This tests against bugs in AIX 5.1, HP-UX 11.11, Solaris 10.
Packit Service d328f3
      am_save_LIBS="$LIBS"
Packit Service d328f3
      if test $am_cv_lib_iconv = yes; then
Packit Service d328f3
        LIBS="$LIBS $LIBICONV"
Packit Service d328f3
      fi
Packit Service d328f3
      AC_TRY_RUN([
Packit Service d328f3
#include <iconv.h>
Packit Service d328f3
#include <string.h>
Packit Service d328f3
int main ()
Packit Service d328f3
{
Packit Service d328f3
  /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
Packit Service d328f3
     returns.  */
Packit Service d328f3
  {
Packit Service d328f3
    iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
Packit Service d328f3
    if (cd_utf8_to_88591 != (iconv_t)(-1))
Packit Service d328f3
      {
Packit Service d328f3
        static const char input[] = "\342\202\254"; /* EURO SIGN */
Packit Service d328f3
        char buf[10];
Packit Service d328f3
        const char *inptr = input;
Packit Service d328f3
        size_t inbytesleft = strlen (input);
Packit Service d328f3
        char *outptr = buf;
Packit Service d328f3
        size_t outbytesleft = sizeof (buf);
Packit Service d328f3
        size_t res = iconv (cd_utf8_to_88591,
Packit Service d328f3
                            (char **) &inptr, &inbytesleft,
Packit Service d328f3
                            &outptr, &outbytesleft);
Packit Service d328f3
        if (res == 0)
Packit Service d328f3
          return 1;
Packit Service d328f3
      }
Packit Service d328f3
  }
Packit Service d328f3
  /* Test against Solaris 10 bug: Failures are not distinguishable from
Packit Service d328f3
     successful returns.  */
Packit Service d328f3
  {
Packit Service d328f3
    iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
Packit Service d328f3
    if (cd_ascii_to_88591 != (iconv_t)(-1))
Packit Service d328f3
      {
Packit Service d328f3
        static const char input[] = "\263";
Packit Service d328f3
        char buf[10];
Packit Service d328f3
        const char *inptr = input;
Packit Service d328f3
        size_t inbytesleft = strlen (input);
Packit Service d328f3
        char *outptr = buf;
Packit Service d328f3
        size_t outbytesleft = sizeof (buf);
Packit Service d328f3
        size_t res = iconv (cd_ascii_to_88591,
Packit Service d328f3
                            (char **) &inptr, &inbytesleft,
Packit Service d328f3
                            &outptr, &outbytesleft);
Packit Service d328f3
        if (res == 0)
Packit Service d328f3
          return 1;
Packit Service d328f3
      }
Packit Service d328f3
  }
Packit Service d328f3
#if 0 /* This bug could be worked around by the caller.  */
Packit Service d328f3
  /* Test against HP-UX 11.11 bug: Positive return value instead of 0.  */
Packit Service d328f3
  {
Packit Service d328f3
    iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
Packit Service d328f3
    if (cd_88591_to_utf8 != (iconv_t)(-1))
Packit Service d328f3
      {
Packit Service d328f3
        static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
Packit Service d328f3
        char buf[50];
Packit Service d328f3
        const char *inptr = input;
Packit Service d328f3
        size_t inbytesleft = strlen (input);
Packit Service d328f3
        char *outptr = buf;
Packit Service d328f3
        size_t outbytesleft = sizeof (buf);
Packit Service d328f3
        size_t res = iconv (cd_88591_to_utf8,
Packit Service d328f3
                            (char **) &inptr, &inbytesleft,
Packit Service d328f3
                            &outptr, &outbytesleft);
Packit Service d328f3
        if ((int)res > 0)
Packit Service d328f3
          return 1;
Packit Service d328f3
      }
Packit Service d328f3
  }
Packit Service d328f3
#endif
Packit Service d328f3
  /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
Packit Service d328f3
     provided.  */
Packit Service d328f3
  if (/* Try standardized names.  */
Packit Service d328f3
      iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1)
Packit Service d328f3
      /* Try IRIX, OSF/1 names.  */
Packit Service d328f3
      && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1)
Packit Service d328f3
      /* Try AIX names.  */
Packit Service d328f3
      && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1)
Packit Service d328f3
      /* Try HP-UX names.  */
Packit Service d328f3
      && iconv_open ("utf8", "eucJP") == (iconv_t)(-1))
Packit Service d328f3
    return 1;
Packit Service d328f3
  return 0;
Packit Service d328f3
}], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no],
Packit Service d328f3
        [case "$host_os" in
Packit Service d328f3
           aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
Packit Service d328f3
           *)            am_cv_func_iconv_works="guessing yes" ;;
Packit Service d328f3
         esac])
Packit Service d328f3
      LIBS="$am_save_LIBS"
Packit Service d328f3
    ])
Packit Service d328f3
    case "$am_cv_func_iconv_works" in
Packit Service d328f3
      *no) am_func_iconv=no am_cv_lib_iconv=no ;;
Packit Service d328f3
      *)   am_func_iconv=yes ;;
Packit Service d328f3
    esac
Packit Service d328f3
  else
Packit Service d328f3
    am_func_iconv=no am_cv_lib_iconv=no
Packit Service d328f3
  fi
Packit Service d328f3
  if test "$am_func_iconv" = yes; then
Packit Service d328f3
    AC_DEFINE([HAVE_ICONV], [1],
Packit Service d328f3
      [Define if you have the iconv() function and it works.])
Packit Service d328f3
  fi
Packit Service d328f3
  if test "$am_cv_lib_iconv" = yes; then
Packit Service d328f3
    AC_MSG_CHECKING([how to link with libiconv])
Packit Service d328f3
    AC_MSG_RESULT([$LIBICONV])
Packit Service d328f3
  else
Packit Service d328f3
    dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
Packit Service d328f3
    dnl either.
Packit Service d328f3
    CPPFLAGS="$am_save_CPPFLAGS"
Packit Service d328f3
    LIBICONV=
Packit Service d328f3
    LTLIBICONV=
Packit Service d328f3
  fi
Packit Service d328f3
  AC_SUBST([LIBICONV])
Packit Service d328f3
  AC_SUBST([LTLIBICONV])
Packit Service d328f3
])
Packit Service d328f3
Packit Service d328f3
AC_DEFUN([AM_ICONV],
Packit Service d328f3
[
Packit Service d328f3
  AM_ICONV_LINK
Packit Service d328f3
  if test "$am_cv_func_iconv" = yes; then
Packit Service d328f3
    AC_MSG_CHECKING([for iconv declaration])
Packit Service d328f3
    AC_CACHE_VAL([am_cv_proto_iconv], [
Packit Service d328f3
      AC_TRY_COMPILE([
Packit Service d328f3
#include <stdlib.h>
Packit Service d328f3
#include <iconv.h>
Packit Service d328f3
extern
Packit Service d328f3
#ifdef __cplusplus
Packit Service d328f3
"C"
Packit Service d328f3
#endif
Packit Service d328f3
#if defined(__STDC__) || defined(__cplusplus)
Packit Service d328f3
size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
Packit Service d328f3
#else
Packit Service d328f3
size_t iconv();
Packit Service d328f3
#endif
Packit Service d328f3
], [], [am_cv_proto_iconv_arg1=""], [am_cv_proto_iconv_arg1="const"])
Packit Service d328f3
      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 d328f3
    am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
Packit Service d328f3
    AC_MSG_RESULT([
Packit Service d328f3
         $am_cv_proto_iconv])
Packit Service d328f3
    AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1],
Packit Service d328f3
      [Define as const if the declaration of iconv() needs const.])
Packit Service d328f3
  fi
Packit Service d328f3
])