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