868b2b66 (kx 2024-12-20 16:11:07 +0300 1) # iconv.m4 serial 21
868b2b66 (kx 2024-12-20 16:11:07 +0300 2) dnl Copyright (C) 2000-2002, 2007-2014, 2016-2020 Free Software Foundation,
868b2b66 (kx 2024-12-20 16:11:07 +0300 3) dnl Inc.
868b2b66 (kx 2024-12-20 16:11:07 +0300 4) dnl This file is free software; the Free Software Foundation
868b2b66 (kx 2024-12-20 16:11:07 +0300 5) dnl gives unlimited permission to copy and/or distribute it,
868b2b66 (kx 2024-12-20 16:11:07 +0300 6) dnl with or without modifications, as long as this notice is preserved.
868b2b66 (kx 2024-12-20 16:11:07 +0300 7)
868b2b66 (kx 2024-12-20 16:11:07 +0300 8) dnl From Bruno Haible.
868b2b66 (kx 2024-12-20 16:11:07 +0300 9)
868b2b66 (kx 2024-12-20 16:11:07 +0300 10) AC_DEFUN([AM_ICONV_LINKFLAGS_BODY],
868b2b66 (kx 2024-12-20 16:11:07 +0300 11) [
868b2b66 (kx 2024-12-20 16:11:07 +0300 12) dnl Prerequisites of AC_LIB_LINKFLAGS_BODY.
868b2b66 (kx 2024-12-20 16:11:07 +0300 13) AC_REQUIRE([AC_LIB_PREPARE_PREFIX])
868b2b66 (kx 2024-12-20 16:11:07 +0300 14) AC_REQUIRE([AC_LIB_RPATH])
868b2b66 (kx 2024-12-20 16:11:07 +0300 15)
868b2b66 (kx 2024-12-20 16:11:07 +0300 16) dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
868b2b66 (kx 2024-12-20 16:11:07 +0300 17) dnl accordingly.
868b2b66 (kx 2024-12-20 16:11:07 +0300 18) AC_LIB_LINKFLAGS_BODY([iconv])
868b2b66 (kx 2024-12-20 16:11:07 +0300 19) ])
868b2b66 (kx 2024-12-20 16:11:07 +0300 20)
868b2b66 (kx 2024-12-20 16:11:07 +0300 21) AC_DEFUN([AM_ICONV_LINK],
868b2b66 (kx 2024-12-20 16:11:07 +0300 22) [
868b2b66 (kx 2024-12-20 16:11:07 +0300 23) dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and
868b2b66 (kx 2024-12-20 16:11:07 +0300 24) dnl those with the standalone portable GNU libiconv installed).
868b2b66 (kx 2024-12-20 16:11:07 +0300 25) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
868b2b66 (kx 2024-12-20 16:11:07 +0300 26)
868b2b66 (kx 2024-12-20 16:11:07 +0300 27) dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV
868b2b66 (kx 2024-12-20 16:11:07 +0300 28) dnl accordingly.
868b2b66 (kx 2024-12-20 16:11:07 +0300 29) AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY])
868b2b66 (kx 2024-12-20 16:11:07 +0300 30)
868b2b66 (kx 2024-12-20 16:11:07 +0300 31) dnl Add $INCICONV to CPPFLAGS before performing the following checks,
868b2b66 (kx 2024-12-20 16:11:07 +0300 32) dnl because if the user has installed libiconv and not disabled its use
868b2b66 (kx 2024-12-20 16:11:07 +0300 33) dnl via --without-libiconv-prefix, he wants to use it. The first
868b2b66 (kx 2024-12-20 16:11:07 +0300 34) dnl AC_LINK_IFELSE will then fail, the second AC_LINK_IFELSE will succeed.
868b2b66 (kx 2024-12-20 16:11:07 +0300 35) am_save_CPPFLAGS="$CPPFLAGS"
868b2b66 (kx 2024-12-20 16:11:07 +0300 36) AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV])
868b2b66 (kx 2024-12-20 16:11:07 +0300 37)
868b2b66 (kx 2024-12-20 16:11:07 +0300 38) AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [
868b2b66 (kx 2024-12-20 16:11:07 +0300 39) am_cv_func_iconv="no, consider installing GNU libiconv"
868b2b66 (kx 2024-12-20 16:11:07 +0300 40) am_cv_lib_iconv=no
868b2b66 (kx 2024-12-20 16:11:07 +0300 41) AC_LINK_IFELSE(
868b2b66 (kx 2024-12-20 16:11:07 +0300 42) [AC_LANG_PROGRAM(
868b2b66 (kx 2024-12-20 16:11:07 +0300 43) [[
868b2b66 (kx 2024-12-20 16:11:07 +0300 44) #include <stdlib.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300 45) #include <iconv.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300 46) ]],
868b2b66 (kx 2024-12-20 16:11:07 +0300 47) [[iconv_t cd = iconv_open("","");
868b2b66 (kx 2024-12-20 16:11:07 +0300 48) iconv(cd,NULL,NULL,NULL,NULL);
868b2b66 (kx 2024-12-20 16:11:07 +0300 49) iconv_close(cd);]])],
868b2b66 (kx 2024-12-20 16:11:07 +0300 50) [am_cv_func_iconv=yes])
868b2b66 (kx 2024-12-20 16:11:07 +0300 51) if test "$am_cv_func_iconv" != yes; then
868b2b66 (kx 2024-12-20 16:11:07 +0300 52) am_save_LIBS="$LIBS"
868b2b66 (kx 2024-12-20 16:11:07 +0300 53) LIBS="$LIBS $LIBICONV"
868b2b66 (kx 2024-12-20 16:11:07 +0300 54) AC_LINK_IFELSE(
868b2b66 (kx 2024-12-20 16:11:07 +0300 55) [AC_LANG_PROGRAM(
868b2b66 (kx 2024-12-20 16:11:07 +0300 56) [[
868b2b66 (kx 2024-12-20 16:11:07 +0300 57) #include <stdlib.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300 58) #include <iconv.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300 59) ]],
868b2b66 (kx 2024-12-20 16:11:07 +0300 60) [[iconv_t cd = iconv_open("","");
868b2b66 (kx 2024-12-20 16:11:07 +0300 61) iconv(cd,NULL,NULL,NULL,NULL);
868b2b66 (kx 2024-12-20 16:11:07 +0300 62) iconv_close(cd);]])],
868b2b66 (kx 2024-12-20 16:11:07 +0300 63) [am_cv_lib_iconv=yes]
868b2b66 (kx 2024-12-20 16:11:07 +0300 64) [am_cv_func_iconv=yes])
868b2b66 (kx 2024-12-20 16:11:07 +0300 65) LIBS="$am_save_LIBS"
868b2b66 (kx 2024-12-20 16:11:07 +0300 66) fi
868b2b66 (kx 2024-12-20 16:11:07 +0300 67) ])
868b2b66 (kx 2024-12-20 16:11:07 +0300 68) if test "$am_cv_func_iconv" = yes; then
868b2b66 (kx 2024-12-20 16:11:07 +0300 69) AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [
868b2b66 (kx 2024-12-20 16:11:07 +0300 70) dnl This tests against bugs in AIX 5.1, AIX 6.1..7.1, HP-UX 11.11,
868b2b66 (kx 2024-12-20 16:11:07 +0300 71) dnl Solaris 10.
868b2b66 (kx 2024-12-20 16:11:07 +0300 72) am_save_LIBS="$LIBS"
868b2b66 (kx 2024-12-20 16:11:07 +0300 73) if test $am_cv_lib_iconv = yes; then
868b2b66 (kx 2024-12-20 16:11:07 +0300 74) LIBS="$LIBS $LIBICONV"
868b2b66 (kx 2024-12-20 16:11:07 +0300 75) fi
868b2b66 (kx 2024-12-20 16:11:07 +0300 76) am_cv_func_iconv_works=no
868b2b66 (kx 2024-12-20 16:11:07 +0300 77) for ac_iconv_const in '' 'const'; do
868b2b66 (kx 2024-12-20 16:11:07 +0300 78) AC_RUN_IFELSE(
868b2b66 (kx 2024-12-20 16:11:07 +0300 79) [AC_LANG_PROGRAM(
868b2b66 (kx 2024-12-20 16:11:07 +0300 80) [[
868b2b66 (kx 2024-12-20 16:11:07 +0300 81) #include <iconv.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300 82) #include <string.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300 83)
868b2b66 (kx 2024-12-20 16:11:07 +0300 84) #ifndef ICONV_CONST
868b2b66 (kx 2024-12-20 16:11:07 +0300 85) # define ICONV_CONST $ac_iconv_const
868b2b66 (kx 2024-12-20 16:11:07 +0300 86) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300 87) ]],
868b2b66 (kx 2024-12-20 16:11:07 +0300 88) [[int result = 0;
868b2b66 (kx 2024-12-20 16:11:07 +0300 89) /* Test against AIX 5.1 bug: Failures are not distinguishable from successful
868b2b66 (kx 2024-12-20 16:11:07 +0300 90) returns. */
868b2b66 (kx 2024-12-20 16:11:07 +0300 91) {
868b2b66 (kx 2024-12-20 16:11:07 +0300 92) iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8");
868b2b66 (kx 2024-12-20 16:11:07 +0300 93) if (cd_utf8_to_88591 != (iconv_t)(-1))
868b2b66 (kx 2024-12-20 16:11:07 +0300 94) {
868b2b66 (kx 2024-12-20 16:11:07 +0300 95) static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */
868b2b66 (kx 2024-12-20 16:11:07 +0300 96) char buf[10];
868b2b66 (kx 2024-12-20 16:11:07 +0300 97) ICONV_CONST char *inptr = input;
868b2b66 (kx 2024-12-20 16:11:07 +0300 98) size_t inbytesleft = strlen (input);
868b2b66 (kx 2024-12-20 16:11:07 +0300 99) char *outptr = buf;
868b2b66 (kx 2024-12-20 16:11:07 +0300 100) size_t outbytesleft = sizeof (buf);
868b2b66 (kx 2024-12-20 16:11:07 +0300 101) size_t res = iconv (cd_utf8_to_88591,
868b2b66 (kx 2024-12-20 16:11:07 +0300 102) &inptr, &inbytesleft,
868b2b66 (kx 2024-12-20 16:11:07 +0300 103) &outptr, &outbytesleft);
868b2b66 (kx 2024-12-20 16:11:07 +0300 104) if (res == 0)
868b2b66 (kx 2024-12-20 16:11:07 +0300 105) result |= 1;
868b2b66 (kx 2024-12-20 16:11:07 +0300 106) iconv_close (cd_utf8_to_88591);
868b2b66 (kx 2024-12-20 16:11:07 +0300 107) }
868b2b66 (kx 2024-12-20 16:11:07 +0300 108) }
868b2b66 (kx 2024-12-20 16:11:07 +0300 109) /* Test against Solaris 10 bug: Failures are not distinguishable from
868b2b66 (kx 2024-12-20 16:11:07 +0300 110) successful returns. */
868b2b66 (kx 2024-12-20 16:11:07 +0300 111) {
868b2b66 (kx 2024-12-20 16:11:07 +0300 112) iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646");
868b2b66 (kx 2024-12-20 16:11:07 +0300 113) if (cd_ascii_to_88591 != (iconv_t)(-1))
868b2b66 (kx 2024-12-20 16:11:07 +0300 114) {
868b2b66 (kx 2024-12-20 16:11:07 +0300 115) static ICONV_CONST char input[] = "\263";
868b2b66 (kx 2024-12-20 16:11:07 +0300 116) char buf[10];
868b2b66 (kx 2024-12-20 16:11:07 +0300 117) ICONV_CONST char *inptr = input;
868b2b66 (kx 2024-12-20 16:11:07 +0300 118) size_t inbytesleft = strlen (input);
868b2b66 (kx 2024-12-20 16:11:07 +0300 119) char *outptr = buf;
868b2b66 (kx 2024-12-20 16:11:07 +0300 120) size_t outbytesleft = sizeof (buf);
868b2b66 (kx 2024-12-20 16:11:07 +0300 121) size_t res = iconv (cd_ascii_to_88591,
868b2b66 (kx 2024-12-20 16:11:07 +0300 122) &inptr, &inbytesleft,
868b2b66 (kx 2024-12-20 16:11:07 +0300 123) &outptr, &outbytesleft);
868b2b66 (kx 2024-12-20 16:11:07 +0300 124) if (res == 0)
868b2b66 (kx 2024-12-20 16:11:07 +0300 125) result |= 2;
868b2b66 (kx 2024-12-20 16:11:07 +0300 126) iconv_close (cd_ascii_to_88591);
868b2b66 (kx 2024-12-20 16:11:07 +0300 127) }
868b2b66 (kx 2024-12-20 16:11:07 +0300 128) }
868b2b66 (kx 2024-12-20 16:11:07 +0300 129) /* Test against AIX 6.1..7.1 bug: Buffer overrun. */
868b2b66 (kx 2024-12-20 16:11:07 +0300 130) {
868b2b66 (kx 2024-12-20 16:11:07 +0300 131) iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1");
868b2b66 (kx 2024-12-20 16:11:07 +0300 132) if (cd_88591_to_utf8 != (iconv_t)(-1))
868b2b66 (kx 2024-12-20 16:11:07 +0300 133) {
868b2b66 (kx 2024-12-20 16:11:07 +0300 134) static ICONV_CONST char input[] = "\304";
868b2b66 (kx 2024-12-20 16:11:07 +0300 135) static char buf[2] = { (char)0xDE, (char)0xAD };
868b2b66 (kx 2024-12-20 16:11:07 +0300 136) ICONV_CONST char *inptr = input;
868b2b66 (kx 2024-12-20 16:11:07 +0300 137) size_t inbytesleft = 1;
868b2b66 (kx 2024-12-20 16:11:07 +0300 138) char *outptr = buf;
868b2b66 (kx 2024-12-20 16:11:07 +0300 139) size_t outbytesleft = 1;
868b2b66 (kx 2024-12-20 16:11:07 +0300 140) size_t res = iconv (cd_88591_to_utf8,
868b2b66 (kx 2024-12-20 16:11:07 +0300 141) &inptr, &inbytesleft,
868b2b66 (kx 2024-12-20 16:11:07 +0300 142) &outptr, &outbytesleft);
868b2b66 (kx 2024-12-20 16:11:07 +0300 143) if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD)
868b2b66 (kx 2024-12-20 16:11:07 +0300 144) result |= 4;
868b2b66 (kx 2024-12-20 16:11:07 +0300 145) iconv_close (cd_88591_to_utf8);
868b2b66 (kx 2024-12-20 16:11:07 +0300 146) }
868b2b66 (kx 2024-12-20 16:11:07 +0300 147) }
868b2b66 (kx 2024-12-20 16:11:07 +0300 148) #if 0 /* This bug could be worked around by the caller. */
868b2b66 (kx 2024-12-20 16:11:07 +0300 149) /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */
868b2b66 (kx 2024-12-20 16:11:07 +0300 150) {
868b2b66 (kx 2024-12-20 16:11:07 +0300 151) iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591");
868b2b66 (kx 2024-12-20 16:11:07 +0300 152) if (cd_88591_to_utf8 != (iconv_t)(-1))
868b2b66 (kx 2024-12-20 16:11:07 +0300 153) {
868b2b66 (kx 2024-12-20 16:11:07 +0300 154) static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337";
868b2b66 (kx 2024-12-20 16:11:07 +0300 155) char buf[50];
868b2b66 (kx 2024-12-20 16:11:07 +0300 156) ICONV_CONST char *inptr = input;
868b2b66 (kx 2024-12-20 16:11:07 +0300 157) size_t inbytesleft = strlen (input);
868b2b66 (kx 2024-12-20 16:11:07 +0300 158) char *outptr = buf;
868b2b66 (kx 2024-12-20 16:11:07 +0300 159) size_t outbytesleft = sizeof (buf);
868b2b66 (kx 2024-12-20 16:11:07 +0300 160) size_t res = iconv (cd_88591_to_utf8,
868b2b66 (kx 2024-12-20 16:11:07 +0300 161) &inptr, &inbytesleft,
868b2b66 (kx 2024-12-20 16:11:07 +0300 162) &outptr, &outbytesleft);
868b2b66 (kx 2024-12-20 16:11:07 +0300 163) if ((int)res > 0)
868b2b66 (kx 2024-12-20 16:11:07 +0300 164) result |= 8;
868b2b66 (kx 2024-12-20 16:11:07 +0300 165) iconv_close (cd_88591_to_utf8);
868b2b66 (kx 2024-12-20 16:11:07 +0300 166) }
868b2b66 (kx 2024-12-20 16:11:07 +0300 167) }
868b2b66 (kx 2024-12-20 16:11:07 +0300 168) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300 169) /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is
868b2b66 (kx 2024-12-20 16:11:07 +0300 170) provided. */
868b2b66 (kx 2024-12-20 16:11:07 +0300 171) {
868b2b66 (kx 2024-12-20 16:11:07 +0300 172) /* Try standardized names. */
868b2b66 (kx 2024-12-20 16:11:07 +0300 173) iconv_t cd1 = iconv_open ("UTF-8", "EUC-JP");
868b2b66 (kx 2024-12-20 16:11:07 +0300 174) /* Try IRIX, OSF/1 names. */
868b2b66 (kx 2024-12-20 16:11:07 +0300 175) iconv_t cd2 = iconv_open ("UTF-8", "eucJP");
868b2b66 (kx 2024-12-20 16:11:07 +0300 176) /* Try AIX names. */
868b2b66 (kx 2024-12-20 16:11:07 +0300 177) iconv_t cd3 = iconv_open ("UTF-8", "IBM-eucJP");
868b2b66 (kx 2024-12-20 16:11:07 +0300 178) /* Try HP-UX names. */
868b2b66 (kx 2024-12-20 16:11:07 +0300 179) iconv_t cd4 = iconv_open ("utf8", "eucJP");
868b2b66 (kx 2024-12-20 16:11:07 +0300 180) if (cd1 == (iconv_t)(-1) && cd2 == (iconv_t)(-1)
868b2b66 (kx 2024-12-20 16:11:07 +0300 181) && cd3 == (iconv_t)(-1) && cd4 == (iconv_t)(-1))
868b2b66 (kx 2024-12-20 16:11:07 +0300 182) result |= 16;
868b2b66 (kx 2024-12-20 16:11:07 +0300 183) if (cd1 != (iconv_t)(-1))
868b2b66 (kx 2024-12-20 16:11:07 +0300 184) iconv_close (cd1);
868b2b66 (kx 2024-12-20 16:11:07 +0300 185) if (cd2 != (iconv_t)(-1))
868b2b66 (kx 2024-12-20 16:11:07 +0300 186) iconv_close (cd2);
868b2b66 (kx 2024-12-20 16:11:07 +0300 187) if (cd3 != (iconv_t)(-1))
868b2b66 (kx 2024-12-20 16:11:07 +0300 188) iconv_close (cd3);
868b2b66 (kx 2024-12-20 16:11:07 +0300 189) if (cd4 != (iconv_t)(-1))
868b2b66 (kx 2024-12-20 16:11:07 +0300 190) iconv_close (cd4);
868b2b66 (kx 2024-12-20 16:11:07 +0300 191) }
868b2b66 (kx 2024-12-20 16:11:07 +0300 192) return result;
868b2b66 (kx 2024-12-20 16:11:07 +0300 193) ]])],
868b2b66 (kx 2024-12-20 16:11:07 +0300 194) [am_cv_func_iconv_works=yes], ,
868b2b66 (kx 2024-12-20 16:11:07 +0300 195) [case "$host_os" in
868b2b66 (kx 2024-12-20 16:11:07 +0300 196) aix* | hpux*) am_cv_func_iconv_works="guessing no" ;;
868b2b66 (kx 2024-12-20 16:11:07 +0300 197) *) am_cv_func_iconv_works="guessing yes" ;;
868b2b66 (kx 2024-12-20 16:11:07 +0300 198) esac])
868b2b66 (kx 2024-12-20 16:11:07 +0300 199) test "$am_cv_func_iconv_works" = no || break
868b2b66 (kx 2024-12-20 16:11:07 +0300 200) done
868b2b66 (kx 2024-12-20 16:11:07 +0300 201) LIBS="$am_save_LIBS"
868b2b66 (kx 2024-12-20 16:11:07 +0300 202) ])
868b2b66 (kx 2024-12-20 16:11:07 +0300 203) case "$am_cv_func_iconv_works" in
868b2b66 (kx 2024-12-20 16:11:07 +0300 204) *no) am_func_iconv=no am_cv_lib_iconv=no ;;
868b2b66 (kx 2024-12-20 16:11:07 +0300 205) *) am_func_iconv=yes ;;
868b2b66 (kx 2024-12-20 16:11:07 +0300 206) esac
868b2b66 (kx 2024-12-20 16:11:07 +0300 207) else
868b2b66 (kx 2024-12-20 16:11:07 +0300 208) am_func_iconv=no am_cv_lib_iconv=no
868b2b66 (kx 2024-12-20 16:11:07 +0300 209) fi
868b2b66 (kx 2024-12-20 16:11:07 +0300 210) if test "$am_func_iconv" = yes; then
868b2b66 (kx 2024-12-20 16:11:07 +0300 211) AC_DEFINE([HAVE_ICONV], [1],
868b2b66 (kx 2024-12-20 16:11:07 +0300 212) [Define if you have the iconv() function and it works.])
868b2b66 (kx 2024-12-20 16:11:07 +0300 213) fi
868b2b66 (kx 2024-12-20 16:11:07 +0300 214) if test "$am_cv_lib_iconv" = yes; then
868b2b66 (kx 2024-12-20 16:11:07 +0300 215) AC_MSG_CHECKING([how to link with libiconv])
868b2b66 (kx 2024-12-20 16:11:07 +0300 216) AC_MSG_RESULT([$LIBICONV])
868b2b66 (kx 2024-12-20 16:11:07 +0300 217) else
868b2b66 (kx 2024-12-20 16:11:07 +0300 218) dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV
868b2b66 (kx 2024-12-20 16:11:07 +0300 219) dnl either.
868b2b66 (kx 2024-12-20 16:11:07 +0300 220) CPPFLAGS="$am_save_CPPFLAGS"
868b2b66 (kx 2024-12-20 16:11:07 +0300 221) LIBICONV=
868b2b66 (kx 2024-12-20 16:11:07 +0300 222) LTLIBICONV=
868b2b66 (kx 2024-12-20 16:11:07 +0300 223) fi
868b2b66 (kx 2024-12-20 16:11:07 +0300 224) AC_SUBST([LIBICONV])
868b2b66 (kx 2024-12-20 16:11:07 +0300 225) AC_SUBST([LTLIBICONV])
868b2b66 (kx 2024-12-20 16:11:07 +0300 226) ])
868b2b66 (kx 2024-12-20 16:11:07 +0300 227)
868b2b66 (kx 2024-12-20 16:11:07 +0300 228) dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to
868b2b66 (kx 2024-12-20 16:11:07 +0300 229) dnl avoid warnings like
868b2b66 (kx 2024-12-20 16:11:07 +0300 230) dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required".
868b2b66 (kx 2024-12-20 16:11:07 +0300 231) dnl This is tricky because of the way 'aclocal' is implemented:
868b2b66 (kx 2024-12-20 16:11:07 +0300 232) dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN.
868b2b66 (kx 2024-12-20 16:11:07 +0300 233) dnl Otherwise aclocal's initial scan pass would miss the macro definition.
868b2b66 (kx 2024-12-20 16:11:07 +0300 234) dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions.
868b2b66 (kx 2024-12-20 16:11:07 +0300 235) dnl Otherwise aclocal would emit many "Use of uninitialized value $1"
868b2b66 (kx 2024-12-20 16:11:07 +0300 236) dnl warnings.
868b2b66 (kx 2024-12-20 16:11:07 +0300 237) m4_define([gl_iconv_AC_DEFUN],
868b2b66 (kx 2024-12-20 16:11:07 +0300 238) m4_version_prereq([2.64],
868b2b66 (kx 2024-12-20 16:11:07 +0300 239) [[AC_DEFUN_ONCE(
868b2b66 (kx 2024-12-20 16:11:07 +0300 240) [$1], [$2])]],
868b2b66 (kx 2024-12-20 16:11:07 +0300 241) [m4_ifdef([gl_00GNULIB],
868b2b66 (kx 2024-12-20 16:11:07 +0300 242) [[AC_DEFUN_ONCE(
868b2b66 (kx 2024-12-20 16:11:07 +0300 243) [$1], [$2])]],
868b2b66 (kx 2024-12-20 16:11:07 +0300 244) [[AC_DEFUN(
868b2b66 (kx 2024-12-20 16:11:07 +0300 245) [$1], [$2])]])]))
868b2b66 (kx 2024-12-20 16:11:07 +0300 246) gl_iconv_AC_DEFUN([AM_ICONV],
868b2b66 (kx 2024-12-20 16:11:07 +0300 247) [
868b2b66 (kx 2024-12-20 16:11:07 +0300 248) AM_ICONV_LINK
868b2b66 (kx 2024-12-20 16:11:07 +0300 249) if test "$am_cv_func_iconv" = yes; then
868b2b66 (kx 2024-12-20 16:11:07 +0300 250) AC_MSG_CHECKING([for iconv declaration])
868b2b66 (kx 2024-12-20 16:11:07 +0300 251) AC_CACHE_VAL([am_cv_proto_iconv], [
868b2b66 (kx 2024-12-20 16:11:07 +0300 252) AC_COMPILE_IFELSE(
868b2b66 (kx 2024-12-20 16:11:07 +0300 253) [AC_LANG_PROGRAM(
868b2b66 (kx 2024-12-20 16:11:07 +0300 254) [[
868b2b66 (kx 2024-12-20 16:11:07 +0300 255) #include <stdlib.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300 256) #include <iconv.h>
868b2b66 (kx 2024-12-20 16:11:07 +0300 257) extern
868b2b66 (kx 2024-12-20 16:11:07 +0300 258) #ifdef __cplusplus
868b2b66 (kx 2024-12-20 16:11:07 +0300 259) "C"
868b2b66 (kx 2024-12-20 16:11:07 +0300 260) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300 261) #if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus)
868b2b66 (kx 2024-12-20 16:11:07 +0300 262) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);
868b2b66 (kx 2024-12-20 16:11:07 +0300 263) #else
868b2b66 (kx 2024-12-20 16:11:07 +0300 264) size_t iconv();
868b2b66 (kx 2024-12-20 16:11:07 +0300 265) #endif
868b2b66 (kx 2024-12-20 16:11:07 +0300 266) ]],
868b2b66 (kx 2024-12-20 16:11:07 +0300 267) [[]])],
868b2b66 (kx 2024-12-20 16:11:07 +0300 268) [am_cv_proto_iconv_arg1=""],
868b2b66 (kx 2024-12-20 16:11:07 +0300 269) [am_cv_proto_iconv_arg1="const"])
868b2b66 (kx 2024-12-20 16:11:07 +0300 270) 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);"])
868b2b66 (kx 2024-12-20 16:11:07 +0300 271) am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'`
868b2b66 (kx 2024-12-20 16:11:07 +0300 272) AC_MSG_RESULT([
868b2b66 (kx 2024-12-20 16:11:07 +0300 273) $am_cv_proto_iconv])
868b2b66 (kx 2024-12-20 16:11:07 +0300 274) else
868b2b66 (kx 2024-12-20 16:11:07 +0300 275) dnl When compiling GNU libiconv on a system that does not have iconv yet,
868b2b66 (kx 2024-12-20 16:11:07 +0300 276) dnl pick the POSIX compliant declaration without 'const'.
868b2b66 (kx 2024-12-20 16:11:07 +0300 277) am_cv_proto_iconv_arg1=""
868b2b66 (kx 2024-12-20 16:11:07 +0300 278) fi
868b2b66 (kx 2024-12-20 16:11:07 +0300 279) AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1],
868b2b66 (kx 2024-12-20 16:11:07 +0300 280) [Define as const if the declaration of iconv() needs const.])
868b2b66 (kx 2024-12-20 16:11:07 +0300 281) dnl Also substitute ICONV_CONST in the gnulib generated <iconv.h>.
868b2b66 (kx 2024-12-20 16:11:07 +0300 282) m4_ifdef([gl_ICONV_H_DEFAULTS],
868b2b66 (kx 2024-12-20 16:11:07 +0300 283) [AC_REQUIRE([gl_ICONV_H_DEFAULTS])
868b2b66 (kx 2024-12-20 16:11:07 +0300 284) if test -n "$am_cv_proto_iconv_arg1"; then
868b2b66 (kx 2024-12-20 16:11:07 +0300 285) ICONV_CONST="const"
868b2b66 (kx 2024-12-20 16:11:07 +0300 286) fi
868b2b66 (kx 2024-12-20 16:11:07 +0300 287) ])
868b2b66 (kx 2024-12-20 16:11:07 +0300 288) ])