You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

375 lines
12 KiB

21 years ago
21 years ago
21 years ago
21 years ago
21 years ago
21 years ago
21 years ago
21 years ago
21 years ago
  1. dnl
  2. dnl $Id$
  3. dnl
  4. AC_DEFUN([PHP_MBSTRING_ADD_SOURCES], [
  5. PHP_MBSTRING_SOURCES="$PHP_MBSTRING_SOURCES $1"
  6. ])
  7. AC_DEFUN([PHP_MBSTRING_ADD_BASE_SOURCES], [
  8. PHP_MBSTRING_BASE_SOURCES="$PHP_MBSTRING_BASE_SOURCES $1"
  9. ])
  10. AC_DEFUN([PHP_MBSTRING_ADD_BUILD_DIR], [
  11. PHP_MBSTRING_EXTRA_BUILD_DIRS="$PHP_MBSTRING_EXTRA_BUILD_DIRS $1"
  12. ])
  13. AC_DEFUN([PHP_MBSTRING_ADD_INCLUDE], [
  14. PHP_MBSTRING_EXTRA_INCLUDES="$PHP_MBSTRING_EXTRA_INCLUDES $1"
  15. ])
  16. AC_DEFUN([PHP_MBSTRING_ADD_CONFIG_HEADER], [
  17. PHP_MBSTRING_EXTRA_CONFIG_HEADERS="$PHP_MBSTRING_EXTRA_CONFIG_HEADERS $1"
  18. ])
  19. AC_DEFUN([PHP_MBSTRING_ADD_CFLAG], [
  20. PHP_MBSTRING_CFLAGS="$PHP_MBSTRING_CFLAGS $1"
  21. ])
  22. AC_DEFUN([PHP_MBSTRING_ADD_INSTALL_HEADERS], [
  23. PHP_MBSTRING_INSTALL_HEADERS="$PHP_MBSTRING_INSTALL_HEADERS $1"
  24. ])
  25. AC_DEFUN([PHP_MBSTRING_EXTENSION], [
  26. PHP_NEW_EXTENSION(mbstring, $PHP_MBSTRING_SOURCES, $ext_shared,, $PHP_MBSTRING_CFLAGS)
  27. PHP_SUBST(MBSTRING_SHARED_LIBADD)
  28. for dir in $PHP_MBSTRING_EXTRA_BUILD_DIRS; do
  29. PHP_ADD_BUILD_DIR([$ext_builddir/$dir], 1)
  30. done
  31. for dir in $PHP_MBSTRING_EXTRA_INCLUDES; do
  32. PHP_ADD_INCLUDE([$ext_srcdir/$dir])
  33. PHP_ADD_INCLUDE([$ext_builddir/$dir])
  34. done
  35. if test "$ext_shared" = "no"; then
  36. PHP_ADD_SOURCES(PHP_EXT_DIR(mbstring), $PHP_MBSTRING_BASE_SOURCES)
  37. out="php_config.h"
  38. else
  39. PHP_ADD_SOURCES_X(PHP_EXT_DIR(mbstring),$PHP_MBSTRING_BASE_SOURCES,,shared_objects_mbstring,yes)
  40. if test -f "$ext_builddir/config.h.in"; then
  41. out="$abs_builddir/config.h"
  42. else
  43. out="php_config.h"
  44. fi
  45. fi
  46. for cfg in $PHP_MBSTRING_EXTRA_CONFIG_HEADERS; do
  47. cat > $ext_builddir/$cfg <<EOF
  48. #include "$out"
  49. EOF
  50. done
  51. PHP_MBSTRING_ADD_INSTALL_HEADERS([mbstring.h])
  52. PHP_INSTALL_HEADERS([ext/mbstring], [$PHP_MBSTRING_INSTALL_HEADERS])
  53. ])
  54. AC_DEFUN([PHP_MBSTRING_SETUP_MBREGEX], [
  55. if test "$PHP_MBREGEX" = "yes"; then
  56. if test "$PHP_ONIG" = "yes" || test "$PHP_ONIG" = "no"; then
  57. dnl
  58. dnl Bundled oniguruma
  59. dnl
  60. if test "$PHP_MBREGEX_BACKTRACK" != "no"; then
  61. AC_DEFINE([USE_COMBINATION_EXPLOSION_CHECK],1,[whether to check multibyte regex backtrack])
  62. fi
  63. AC_CACHE_CHECK(for variable length prototypes and stdarg.h, php_cv_mbstring_stdarg, [
  64. AC_TRY_RUN([
  65. #include <stdarg.h>
  66. int foo(int x, ...) {
  67. va_list va;
  68. va_start(va, x);
  69. va_arg(va, int);
  70. va_arg(va, char *);
  71. va_arg(va, double);
  72. return 0;
  73. }
  74. int main() { return foo(10, "", 3.14); }
  75. ], [php_cv_mbstring_stdarg=yes], [php_cv_mbstring_stdarg=no], [
  76. dnl cross-compile needs something here
  77. case $host_alias in
  78. *netware*)
  79. php_cv_mbstring_stdarg=yes
  80. ;;
  81. *)
  82. php_cv_mbstring_stdarg=no
  83. ;;
  84. esac
  85. ])
  86. ])
  87. AC_CHECK_HEADERS([stdlib.h string.h strings.h unistd.h sys/time.h sys/times.h stdarg.h])
  88. AC_CHECK_SIZEOF(int, 4)
  89. AC_CHECK_SIZEOF(short, 2)
  90. AC_CHECK_SIZEOF(long, 4)
  91. AC_C_CONST
  92. AC_HEADER_TIME
  93. AC_FUNC_ALLOCA
  94. AC_FUNC_MEMCMP
  95. AC_CHECK_HEADER([stdarg.h], [
  96. AC_DEFINE([HAVE_STDARG_PROTOTYPES], [1], [Define to 1 if you have the <stdarg.h> header file.])
  97. ], [])
  98. AC_DEFINE([PHP_ONIG_BUNDLED], [1], [Define to 1 if the bundled oniguruma is used])
  99. AC_DEFINE([HAVE_ONIG], [1], [Define to 1 if the oniguruma library is available])
  100. PHP_MBSTRING_ADD_CFLAG([-DNOT_RUBY])
  101. PHP_MBSTRING_ADD_BUILD_DIR([oniguruma])
  102. PHP_MBSTRING_ADD_BUILD_DIR([oniguruma/enc])
  103. PHP_MBSTRING_ADD_INCLUDE([oniguruma])
  104. PHP_MBSTRING_ADD_CONFIG_HEADER([oniguruma/config.h])
  105. PHP_MBSTRING_ADD_SOURCES([
  106. oniguruma/regcomp.c
  107. oniguruma/regerror.c
  108. oniguruma/regexec.c
  109. oniguruma/reggnu.c
  110. oniguruma/regparse.c
  111. oniguruma/regenc.c
  112. oniguruma/regext.c
  113. oniguruma/regsyntax.c
  114. oniguruma/regtrav.c
  115. oniguruma/regversion.c
  116. oniguruma/st.c
  117. oniguruma/enc/unicode.c
  118. oniguruma/enc/ascii.c
  119. oniguruma/enc/utf8.c
  120. oniguruma/enc/euc_jp.c
  121. oniguruma/enc/euc_tw.c
  122. oniguruma/enc/euc_kr.c
  123. oniguruma/enc/sjis.c
  124. oniguruma/enc/iso8859_1.c
  125. oniguruma/enc/iso8859_2.c
  126. oniguruma/enc/iso8859_3.c
  127. oniguruma/enc/iso8859_4.c
  128. oniguruma/enc/iso8859_5.c
  129. oniguruma/enc/iso8859_6.c
  130. oniguruma/enc/iso8859_7.c
  131. oniguruma/enc/iso8859_8.c
  132. oniguruma/enc/iso8859_9.c
  133. oniguruma/enc/iso8859_10.c
  134. oniguruma/enc/iso8859_11.c
  135. oniguruma/enc/iso8859_13.c
  136. oniguruma/enc/iso8859_14.c
  137. oniguruma/enc/iso8859_15.c
  138. oniguruma/enc/iso8859_16.c
  139. oniguruma/enc/koi8.c
  140. oniguruma/enc/koi8_r.c
  141. oniguruma/enc/big5.c
  142. oniguruma/enc/utf16_be.c
  143. oniguruma/enc/utf16_le.c
  144. oniguruma/enc/utf32_be.c
  145. oniguruma/enc/utf32_le.c
  146. ])
  147. PHP_MBSTRING_ADD_INSTALL_HEADERS([oniguruma/oniguruma.h])
  148. else
  149. dnl
  150. dnl External oniguruma
  151. dnl
  152. if test ! -f "$PHP_ONIG/include/oniguruma.h"; then
  153. AC_MSG_ERROR([oniguruma.h not found in $PHP_ONIG/include])
  154. fi
  155. PHP_ADD_INCLUDE([$PHP_ONIG/include])
  156. PHP_CHECK_LIBRARY(onig, onig_init, [
  157. PHP_ADD_LIBRARY_WITH_PATH(onig, $PHP_ONIG/$PHP_LIBDIR, MBSTRING_SHARED_LIBADD)
  158. AC_DEFINE([HAVE_ONIG], [1], [Define to 1 if the oniguruma library is available])
  159. ],[
  160. AC_MSG_ERROR([Problem with oniguruma. Please check config.log for more information.])
  161. ], [
  162. -L$PHP_ONIG/$PHP_LIBDIR
  163. ])
  164. save_old_LDFLAGS=$LDFLAGS
  165. PHP_EVAL_LIBLINE([$MBSTRING_SHARED_LIBADD], LDFLAGS)
  166. AC_MSG_CHECKING([if oniguruma has an invalid entry for KOI8 encoding])
  167. AC_TRY_LINK([
  168. #include <oniguruma.h>
  169. ], [
  170. return (int)(ONIG_ENCODING_KOI8 + 1);
  171. ], [
  172. AC_MSG_RESULT([no])
  173. ], [
  174. AC_MSG_RESULT([yes])
  175. AC_DEFINE([PHP_ONIG_BAD_KOI8_ENTRY], [1], [define to 1 if oniguruma has an invalid entry for KOI8 encoding])
  176. ])
  177. LDFLAGS=$save_old_LDFLAGS
  178. fi
  179. PHP_MBSTRING_ADD_CFLAG([-DONIG_ESCAPE_UCHAR_COLLISION=1])
  180. PHP_MBSTRING_ADD_CFLAG([-DUChar=OnigUChar])
  181. AC_DEFINE([HAVE_MBREGEX], 1, [whether to have multibyte regex support])
  182. PHP_MBSTRING_ADD_BASE_SOURCES([php_mbregex.c])
  183. PHP_MBSTRING_ADD_INSTALL_HEADERS([php_mbregex.h php_onig_compat.h])
  184. fi
  185. ])
  186. AC_DEFUN([PHP_MBSTRING_SETUP_LIBMBFL], [
  187. dnl libmbfl is required and can not be disabled
  188. if test "$PHP_LIBMBFL" = "yes" || test "$PHP_LIBMBFL" = "no"; then
  189. dnl
  190. dnl Bundled libmbfl
  191. dnl
  192. PHP_MBSTRING_ADD_BUILD_DIR([libmbfl])
  193. PHP_MBSTRING_ADD_BUILD_DIR([libmbfl/mbfl])
  194. PHP_MBSTRING_ADD_BUILD_DIR([libmbfl/filters])
  195. PHP_MBSTRING_ADD_BUILD_DIR([libmbfl/nls])
  196. PHP_MBSTRING_ADD_INCLUDE([libmbfl])
  197. PHP_MBSTRING_ADD_INCLUDE([libmbfl/mbfl])
  198. PHP_MBSTRING_ADD_CONFIG_HEADER([libmbfl/config.h])
  199. PHP_MBSTRING_ADD_SOURCES([
  200. libmbfl/filters/html_entities.c
  201. libmbfl/filters/mbfilter_7bit.c
  202. libmbfl/filters/mbfilter_ascii.c
  203. libmbfl/filters/mbfilter_base64.c
  204. libmbfl/filters/mbfilter_big5.c
  205. libmbfl/filters/mbfilter_byte2.c
  206. libmbfl/filters/mbfilter_byte4.c
  207. libmbfl/filters/mbfilter_cp1251.c
  208. libmbfl/filters/mbfilter_cp1252.c
  209. libmbfl/filters/mbfilter_cp1254.c
  210. libmbfl/filters/mbfilter_cp5022x.c
  211. libmbfl/filters/mbfilter_cp51932.c
  212. libmbfl/filters/mbfilter_cp850.c
  213. libmbfl/filters/mbfilter_cp866.c
  214. libmbfl/filters/mbfilter_cp932.c
  215. libmbfl/filters/mbfilter_cp936.c
  216. libmbfl/filters/mbfilter_gb18030.c
  217. libmbfl/filters/mbfilter_euc_cn.c
  218. libmbfl/filters/mbfilter_euc_jp.c
  219. libmbfl/filters/mbfilter_euc_jp_2004.c
  220. libmbfl/filters/mbfilter_euc_jp_win.c
  221. libmbfl/filters/mbfilter_euc_kr.c
  222. libmbfl/filters/mbfilter_euc_tw.c
  223. libmbfl/filters/mbfilter_htmlent.c
  224. libmbfl/filters/mbfilter_hz.c
  225. libmbfl/filters/mbfilter_iso2022_jp_ms.c
  226. libmbfl/filters/mbfilter_iso2022jp_2004.c
  227. libmbfl/filters/mbfilter_iso2022jp_mobile.c
  228. libmbfl/filters/mbfilter_iso2022_kr.c
  229. libmbfl/filters/mbfilter_iso8859_1.c
  230. libmbfl/filters/mbfilter_iso8859_10.c
  231. libmbfl/filters/mbfilter_iso8859_13.c
  232. libmbfl/filters/mbfilter_iso8859_14.c
  233. libmbfl/filters/mbfilter_iso8859_15.c
  234. libmbfl/filters/mbfilter_iso8859_16.c
  235. libmbfl/filters/mbfilter_iso8859_2.c
  236. libmbfl/filters/mbfilter_iso8859_3.c
  237. libmbfl/filters/mbfilter_iso8859_4.c
  238. libmbfl/filters/mbfilter_iso8859_5.c
  239. libmbfl/filters/mbfilter_iso8859_6.c
  240. libmbfl/filters/mbfilter_iso8859_7.c
  241. libmbfl/filters/mbfilter_iso8859_8.c
  242. libmbfl/filters/mbfilter_iso8859_9.c
  243. libmbfl/filters/mbfilter_jis.c
  244. libmbfl/filters/mbfilter_koi8r.c
  245. libmbfl/filters/mbfilter_armscii8.c
  246. libmbfl/filters/mbfilter_qprint.c
  247. libmbfl/filters/mbfilter_sjis.c
  248. libmbfl/filters/mbfilter_sjis_open.c
  249. libmbfl/filters/mbfilter_sjis_mobile.c
  250. libmbfl/filters/mbfilter_sjis_mac.c
  251. libmbfl/filters/mbfilter_sjis_2004.c
  252. libmbfl/filters/mbfilter_tl_jisx0201_jisx0208.c
  253. libmbfl/filters/mbfilter_ucs2.c
  254. libmbfl/filters/mbfilter_ucs4.c
  255. libmbfl/filters/mbfilter_uhc.c
  256. libmbfl/filters/mbfilter_utf16.c
  257. libmbfl/filters/mbfilter_utf32.c
  258. libmbfl/filters/mbfilter_utf7.c
  259. libmbfl/filters/mbfilter_utf7imap.c
  260. libmbfl/filters/mbfilter_utf8.c
  261. libmbfl/filters/mbfilter_utf8_mobile.c
  262. libmbfl/filters/mbfilter_uuencode.c
  263. libmbfl/filters/mbfilter_koi8u.c
  264. libmbfl/mbfl/mbfilter.c
  265. libmbfl/mbfl/mbfilter_8bit.c
  266. libmbfl/mbfl/mbfilter_pass.c
  267. libmbfl/mbfl/mbfilter_wchar.c
  268. libmbfl/mbfl/mbfl_convert.c
  269. libmbfl/mbfl/mbfl_encoding.c
  270. libmbfl/mbfl/mbfl_filter_output.c
  271. libmbfl/mbfl/mbfl_ident.c
  272. libmbfl/mbfl/mbfl_language.c
  273. libmbfl/mbfl/mbfl_memory_device.c
  274. libmbfl/mbfl/mbfl_string.c
  275. libmbfl/mbfl/mbfl_allocators.c
  276. libmbfl/nls/nls_de.c
  277. libmbfl/nls/nls_en.c
  278. libmbfl/nls/nls_ja.c
  279. libmbfl/nls/nls_kr.c
  280. libmbfl/nls/nls_neutral.c
  281. libmbfl/nls/nls_ru.c
  282. libmbfl/nls/nls_uni.c
  283. libmbfl/nls/nls_zh.c
  284. libmbfl/nls/nls_hy.c
  285. libmbfl/nls/nls_tr.c
  286. libmbfl/nls/nls_ua.c
  287. ])
  288. PHP_MBSTRING_ADD_CFLAG([-DHAVE_CONFIG_H])
  289. PHP_MBSTRING_ADD_INSTALL_HEADERS([libmbfl/config.h libmbfl/mbfl/eaw_table.h libmbfl/mbfl/mbfilter.h libmbfl/mbfl/mbfilter_8bit.h libmbfl/mbfl/mbfilter_pass.h libmbfl/mbfl/mbfilter_wchar.h libmbfl/mbfl/mbfl_allocators.h libmbfl/mbfl/mbfl_consts.h libmbfl/mbfl/mbfl_convert.h libmbfl/mbfl/mbfl_defs.h libmbfl/mbfl/mbfl_encoding.h libmbfl/mbfl/mbfl_filter_output.h libmbfl/mbfl/mbfl_ident.h libmbfl/mbfl/mbfl_language.h libmbfl/mbfl/mbfl_memory_device.h libmbfl/mbfl/mbfl_string.h])
  290. else
  291. dnl
  292. dnl External libmfl
  293. dnl
  294. for inc in include include/mbfl-1.0 include/mbfl; do
  295. if test -f "$PHP_LIBMBFL/$inc/mbfilter.h"; then
  296. PHP_LIBMBFL_INCLUDE="$inc"
  297. break
  298. fi
  299. done
  300. if test -z "$PHP_LIBMBFL_INCLUDE"; then
  301. AC_MSG_ERROR([mbfilter.h not found. Please reinstall libmbfl library.])
  302. else
  303. PHP_ADD_INCLUDE([$PHP_LIBMBFL_INCLUDE])
  304. fi
  305. PHP_CHECK_LIBRARY(mbfl, mbfl_buffer_converter_new, [
  306. PHP_ADD_LIBRARY_WITH_PATH(mbfl, $PHP_LIBMBFL/$PHP_LIBDIR, MBSTRING_SHARED_LIBADD)
  307. ],[
  308. AC_MSG_ERROR([Problem with libmbfl. Please check config.log for more information.])
  309. ], [
  310. -L$PHP_LIBMBFL/$PHP_LIBDIR
  311. ])
  312. fi
  313. ])
  314. dnl
  315. dnl Main config
  316. dnl
  317. PHP_ARG_ENABLE(mbstring, whether to enable multibyte string support,
  318. [ --enable-mbstring Enable multibyte string support])
  319. PHP_ARG_ENABLE([mbregex], [whether to enable multibyte regex support],
  320. [ --disable-mbregex MBSTRING: Disable multibyte regex support], yes, no)
  321. PHP_ARG_ENABLE([mbregex_backtrack], [whether to check multibyte regex backtrack],
  322. [ --disable-mbregex-backtrack
  323. MBSTRING: Disable multibyte regex backtrack check], yes, no)
  324. PHP_ARG_WITH(libmbfl, [for external libmbfl],
  325. [ --with-libmbfl[=DIR] MBSTRING: Use external libmbfl. DIR is the libmbfl base
  326. install directory [BUNDLED]], no, no)
  327. PHP_ARG_WITH(onig, [for external oniguruma],
  328. [ --with-onig[=DIR] MBSTRING: Use external oniguruma. DIR is the oniguruma install prefix.
  329. If DIR is not set, the bundled oniguruma will be used], no, no)
  330. if test "$PHP_MBSTRING" != "no"; then
  331. AC_DEFINE([HAVE_MBSTRING],1,[whether to have multibyte string support])
  332. PHP_MBSTRING_ADD_BASE_SOURCES([mbstring.c php_unicode.c mb_gpc.c])
  333. if test "$PHP_MBREGEX" != "no"; then
  334. PHP_MBSTRING_SETUP_MBREGEX
  335. fi
  336. dnl libmbfl is required
  337. PHP_MBSTRING_SETUP_LIBMBFL
  338. PHP_MBSTRING_EXTENSION
  339. fi
  340. # vim600: sts=2 sw=2 et