config.m4 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. PHP_ARG_WITH([iconv],
  2. [for iconv support],
  3. [AS_HELP_STRING([[--without-iconv[=DIR]]],
  4. [Exclude iconv support])],
  5. [yes])
  6. if test "$PHP_ICONV" != "no"; then
  7. PHP_SETUP_ICONV(ICONV_SHARED_LIBADD, [
  8. iconv_avail="yes";
  9. ],[
  10. iconv_avail="no";
  11. ])
  12. if test "$iconv_avail" != "no"; then
  13. save_LDFLAGS="$LDFLAGS"
  14. save_CFLAGS="$CFLAGS"
  15. LDFLAGS="$ICONV_SHARED_LIBADD $LDFLAGS"
  16. CFLAGS="$INCLUDES $CFLAGS"
  17. AC_MSG_CHECKING([if iconv is glibc's])
  18. AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <gnu/libc-version.h>]], [[gnu_get_libc_version();]])],[
  19. AC_MSG_RESULT(yes)
  20. iconv_impl_name="glibc"
  21. ],[
  22. AC_MSG_RESULT(no)
  23. ])
  24. if test -z "$iconv_impl_name"; then
  25. AC_MSG_CHECKING([if using GNU libiconv])
  26. AC_RUN_IFELSE([AC_LANG_SOURCE([[
  27. #include <iconv.h>
  28. int main() {
  29. printf("%d", _libiconv_version);
  30. return 0;
  31. }
  32. ]])],[
  33. AC_MSG_RESULT(yes)
  34. iconv_impl_name="gnu_libiconv"
  35. ],[
  36. AC_MSG_RESULT(no)
  37. ],[
  38. AC_MSG_RESULT([no, cross-compiling])
  39. ])
  40. fi
  41. if test -z "$iconv_impl_name"; then
  42. AC_MSG_CHECKING([if iconv is Konstantin Chuguev's])
  43. AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <iconv.h>]], [[iconv_ccs_init(NULL, NULL);]])],[
  44. AC_MSG_RESULT(yes)
  45. iconv_impl_name="bsd"
  46. ],[
  47. AC_MSG_RESULT(no)
  48. ])
  49. fi
  50. if test -z "$iconv_impl_name"; then
  51. AC_MSG_CHECKING([if using IBM iconv])
  52. AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <iconv.h>]], [[cstoccsid("");]])],[
  53. AC_MSG_RESULT(yes)
  54. iconv_impl_name="ibm"
  55. ],[
  56. AC_MSG_RESULT(no)
  57. ])
  58. fi
  59. case "$iconv_impl_name" in
  60. gnu_libiconv [)]
  61. AC_DEFINE([PHP_ICONV_IMPL],["libiconv"],[Which iconv implementation to use])
  62. AC_DEFINE([HAVE_LIBICONV],1,[Whether libiconv is used])
  63. ;;
  64. bsd [)]
  65. AC_DEFINE([HAVE_BSD_ICONV],1,[Konstantin Chuguev's iconv implementation])
  66. AC_DEFINE([PHP_ICONV_IMPL],["BSD iconv"],[Which iconv implementation to use])
  67. ;;
  68. glibc [)]
  69. AC_DEFINE([HAVE_GLIBC_ICONV],1,[glibc's iconv implementation])
  70. AC_DEFINE([PHP_ICONV_IMPL],["glibc"],[Which iconv implementation to use])
  71. ;;
  72. ibm [)]
  73. AC_DEFINE([HAVE_IBM_ICONV],1,[IBM iconv implementation])
  74. AC_DEFINE([PHP_ICONV_IMPL],["IBM iconv"],[Which iconv implementation to use])
  75. ;;
  76. esac
  77. AC_MSG_CHECKING([if iconv supports errno])
  78. AC_RUN_IFELSE([AC_LANG_SOURCE([[
  79. #include <iconv.h>
  80. #include <errno.h>
  81. int main() {
  82. iconv_t cd;
  83. cd = iconv_open( "*blahblah*", "*blahblahblah*" );
  84. if (cd == (iconv_t)(-1)) {
  85. if (errno == EINVAL) {
  86. return 0;
  87. } else {
  88. return 1;
  89. }
  90. }
  91. iconv_close( cd );
  92. return 2;
  93. }
  94. ]])],[
  95. AC_MSG_RESULT(yes)
  96. ],[
  97. AC_MSG_RESULT(no)
  98. AC_MSG_ERROR(iconv does not support errno)
  99. ],[
  100. AC_MSG_RESULT(yes, cross-compiling)
  101. ])
  102. AC_MSG_CHECKING([if iconv supports //IGNORE])
  103. AC_RUN_IFELSE([AC_LANG_SOURCE([[
  104. #include <iconv.h>
  105. #include <stdlib.h>
  106. int main() {
  107. iconv_t cd = iconv_open( "UTF-8//IGNORE", "UTF-8" );
  108. if(cd == (iconv_t)-1) {
  109. return 1;
  110. }
  111. char *in_p = "\xC3\xC3\xC3\xB8";
  112. size_t in_left = 4, out_left = 4096;
  113. char *out = malloc(out_left);
  114. char *out_p = out;
  115. size_t result = iconv(cd, (char **) &in_p, &in_left, (char **) &out_p, &out_left);
  116. if(result == (size_t)-1) {
  117. return 1;
  118. }
  119. return 0;
  120. }
  121. ]])],[
  122. AC_MSG_RESULT(yes)
  123. AC_DEFINE([ICONV_BROKEN_IGNORE],0,[Whether iconv supports IGNORE])
  124. ],[
  125. AC_MSG_RESULT(no)
  126. AC_DEFINE([ICONV_BROKEN_IGNORE],1,[Whether iconv supports IGNORE])
  127. ],[
  128. AC_MSG_RESULT(no, cross-compiling)
  129. AC_DEFINE([ICONV_BROKEN_IGNORE],0,[Whether iconv supports IGNORE])
  130. ])
  131. LDFLAGS="$save_LDFLAGS"
  132. CFLAGS="$save_CFLAGS"
  133. PHP_NEW_EXTENSION(iconv, iconv.c, $ext_shared,, [-DZEND_ENABLE_STATIC_TSRMLS_CACHE=1])
  134. PHP_SUBST(ICONV_SHARED_LIBADD)
  135. PHP_INSTALL_HEADERS([ext/iconv/])
  136. else
  137. AC_MSG_ERROR(Please reinstall the iconv library.)
  138. fi
  139. fi