Blame m4/iconv.m4

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