Skip to content

Commit d1c1481

Browse files
committed
Unbundle oniguruma
And also switch detection over to pkg-config.
1 parent f5d2a30 commit d1c1481

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

93 files changed

+27
-89705
lines changed

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ addons:
2222
- libzip-dev
2323
- libsqlite3-dev
2424
- libwebp-dev
25+
- libonig-dev
2526

2627

2728
services:

ext/mbstring/config.m4

Lines changed: 17 additions & 123 deletions
Original file line numberDiff line numberDiff line change
@@ -53,10 +53,6 @@ AC_DEFUN([PHP_MBSTRING_EXTENSION], [
5353
fi
5454
fi
5555
56-
if test "$PHP_MBSTRING_BUNDLED_ONIG" = "1"; then
57-
cp $ext_srcdir/oniguruma/src/oniguruma.h $ext_srcdir/oniguruma/oniguruma.h
58-
fi
59-
6056
for cfg in $PHP_MBSTRING_EXTRA_CONFIG_HEADERS; do
6157
cat > $ext_builddir/$cfg <<EOF
6258
#include "$out"
@@ -68,118 +64,24 @@ EOF
6864

6965
AC_DEFUN([PHP_MBSTRING_SETUP_MBREGEX], [
7066
if test "$PHP_MBREGEX" = "yes"; then
71-
if test "$PHP_ONIG" = "yes" || test "$PHP_ONIG" = "no"; then
72-
dnl
73-
dnl Bundled oniguruma
74-
dnl
75-
PHP_MBSTRING_BUNDLED_ONIG=1
76-
if test "$PHP_MBREGEX_BACKTRACK" != "no"; then
77-
AC_DEFINE([USE_COMBINATION_EXPLOSION_CHECK],1,[whether to check multibyte regex backtrack])
78-
fi
79-
80-
AC_CHECK_HEADERS([strings.h unistd.h sys/time.h sys/times.h limits.h])
81-
AC_CHECK_SIZEOF(int, 4)
82-
AC_CHECK_SIZEOF(short, 2)
83-
AC_CHECK_SIZEOF(long, 4)
84-
AC_FUNC_ALLOCA
85-
AC_CHECK_HEADER([stdarg.h], [
86-
AC_DEFINE([HAVE_STDARG_PROTOTYPES], [1], [Define to 1 if you have the <stdarg.h> header file.])
87-
], [])
88-
AC_DEFINE([PHP_ONIG_BUNDLED], [1], [Define to 1 if the bundled oniguruma is used])
89-
AC_DEFINE([HAVE_ONIG], [1], [Define to 1 if the oniguruma library is available])
90-
PHP_MBSTRING_ADD_CFLAG([-DNOT_RUBY])
91-
PHP_MBSTRING_ADD_BUILD_DIR([oniguruma])
92-
PHP_MBSTRING_ADD_BUILD_DIR([oniguruma/src])
93-
PHP_MBSTRING_ADD_INCLUDE([oniguruma])
94-
PHP_MBSTRING_ADD_CONFIG_HEADER([oniguruma/src/config.h])
95-
PHP_MBSTRING_ADD_SOURCES([
96-
oniguruma/src/ascii.c
97-
oniguruma/src/big5.c
98-
oniguruma/src/cp1251.c
99-
oniguruma/src/euc_jp.c
100-
oniguruma/src/euc_jp_prop.c
101-
oniguruma/src/euc_kr.c
102-
oniguruma/src/euc_tw.c
103-
oniguruma/src/gb18030.c
104-
oniguruma/src/iso8859_1.c
105-
oniguruma/src/iso8859_10.c
106-
oniguruma/src/iso8859_11.c
107-
oniguruma/src/iso8859_13.c
108-
oniguruma/src/iso8859_14.c
109-
oniguruma/src/iso8859_15.c
110-
oniguruma/src/iso8859_16.c
111-
oniguruma/src/iso8859_2.c
112-
oniguruma/src/iso8859_3.c
113-
oniguruma/src/iso8859_4.c
114-
oniguruma/src/iso8859_5.c
115-
oniguruma/src/iso8859_6.c
116-
oniguruma/src/iso8859_7.c
117-
oniguruma/src/iso8859_8.c
118-
oniguruma/src/iso8859_9.c
119-
oniguruma/src/koi8.c
120-
oniguruma/src/koi8_r.c
121-
oniguruma/src/onig_init.c
122-
oniguruma/src/regcomp.c
123-
oniguruma/src/regenc.c
124-
oniguruma/src/regerror.c
125-
oniguruma/src/regexec.c
126-
oniguruma/src/regext.c
127-
oniguruma/src/reggnu.c
128-
oniguruma/src/regparse.c
129-
oniguruma/src/regposerr.c
130-
oniguruma/src/regposix.c
131-
oniguruma/src/regsyntax.c
132-
oniguruma/src/regtrav.c
133-
oniguruma/src/regversion.c
134-
oniguruma/src/sjis.c
135-
oniguruma/src/sjis_prop.c
136-
oniguruma/src/st.c
137-
oniguruma/src/unicode.c
138-
oniguruma/src/unicode_fold1_key.c
139-
oniguruma/src/unicode_fold2_key.c
140-
oniguruma/src/unicode_fold3_key.c
141-
oniguruma/src/unicode_unfold_key.c
142-
oniguruma/src/utf16_be.c
143-
oniguruma/src/utf16_le.c
144-
oniguruma/src/utf32_be.c
145-
oniguruma/src/utf32_le.c
146-
oniguruma/src/utf8.c
147-
])
148-
PHP_MBSTRING_ADD_INSTALL_HEADERS([oniguruma/oniguruma.h])
149-
else
150-
dnl
151-
dnl External oniguruma
152-
dnl
153-
PHP_MBSTRING_BUNDLED_ONIG=0
154-
if test ! -f "$PHP_ONIG/include/oniguruma.h"; then
155-
AC_MSG_ERROR([oniguruma.h not found in $PHP_ONIG/include])
156-
fi
157-
PHP_ADD_INCLUDE([$PHP_ONIG/include])
158-
159-
PHP_CHECK_LIBRARY(onig, onig_init, [
160-
PHP_ADD_LIBRARY_WITH_PATH(onig, $PHP_ONIG/$PHP_LIBDIR, MBSTRING_SHARED_LIBADD)
161-
AC_DEFINE([HAVE_ONIG], [1], [Define to 1 if the oniguruma library is available])
162-
],[
163-
AC_MSG_ERROR([Problem with oniguruma. Please check config.log for more information.])
164-
], [
165-
-L$PHP_ONIG/$PHP_LIBDIR
166-
])
167-
168-
save_old_LDFLAGS=$LDFLAGS
169-
PHP_EVAL_LIBLINE([$MBSTRING_SHARED_LIBADD], LDFLAGS)
170-
AC_MSG_CHECKING([if oniguruma has an invalid entry for KOI8 encoding])
171-
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
67+
PKG_CHECK_MODULES([ONIG], [oniguruma])
68+
PHP_EVAL_LIBLINE($ONIG_LIBS, MBSTRING_SHARED_LIBADD)
69+
PHP_EVAL_INCLINE($ONIG_CFLAGS)
70+
71+
save_old_LDFLAGS=$LDFLAGS
72+
PHP_EVAL_LIBLINE([$MBSTRING_SHARED_LIBADD], LDFLAGS)
73+
AC_MSG_CHECKING([if oniguruma has an invalid entry for KOI8 encoding])
74+
AC_LINK_IFELSE([AC_LANG_PROGRAM([[
17275
#include <oniguruma.h>
173-
]], [[
76+
]], [[
17477
return (int)(ONIG_ENCODING_KOI8 + 1);
175-
]])], [
176-
AC_MSG_RESULT([no])
177-
], [
178-
AC_MSG_RESULT([yes])
179-
AC_DEFINE([PHP_ONIG_BAD_KOI8_ENTRY], [1], [define to 1 if oniguruma has an invalid entry for KOI8 encoding])
180-
])
181-
LDFLAGS=$save_old_LDFLAGS
182-
fi
78+
]])], [
79+
AC_MSG_RESULT([no])
80+
], [
81+
AC_MSG_RESULT([yes])
82+
AC_DEFINE([PHP_ONIG_BAD_KOI8_ENTRY], [1], [define to 1 if oniguruma has an invalid entry for KOI8 encoding])
83+
])
84+
LDFLAGS=$save_old_LDFLAGS
18385
18486
PHP_MBSTRING_ADD_CFLAG([-DONIG_ESCAPE_UCHAR_COLLISION=1])
18587
PHP_MBSTRING_ADD_CFLAG([-DUChar=OnigUChar])
@@ -303,17 +205,9 @@ dnl
303205
PHP_ARG_ENABLE(mbstring, whether to enable multibyte string support,
304206
[ --enable-mbstring Enable multibyte string support])
305207

306-
PHP_ARG_ENABLE([mbregex], [whether to enable multibyte regex support],
208+
PHP_ARG_ENABLE([mbregex], [whether to enable multibyte regex support (requires oniguruma)],
307209
[ --disable-mbregex MBSTRING: Disable multibyte regex support], yes, no)
308210

309-
PHP_ARG_ENABLE([mbregex_backtrack], [whether to check multibyte regex backtrack],
310-
[ --disable-mbregex-backtrack
311-
MBSTRING: Disable multibyte regex backtrack check], yes, no)
312-
313-
PHP_ARG_WITH(onig, [for external oniguruma],
314-
[ --with-onig[=DIR] MBSTRING: Use external oniguruma. DIR is the oniguruma install prefix.
315-
If DIR is not set, the bundled oniguruma will be used], no, no)
316-
317211
if test "$PHP_MBSTRING" != "no"; then
318212
AC_DEFINE([HAVE_MBSTRING],1,[whether to have multibyte string support])
319213

ext/mbstring/config.w32

Lines changed: 2 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,19 +2,15 @@
22

33
ARG_ENABLE("mbstring", "multibyte string functions", "no");
44
ARG_ENABLE("mbregex", "multibyte regex support", "no");
5-
ARG_ENABLE("mbregex-backtrack", "check multibyte regex backtrack", "yes");
65

76
if (PHP_MBSTRING != "no") {
87

98
EXTENSION("mbstring", "mbstring.c php_unicode.c mb_gpc.c", PHP_MBSTRING_SHARED);
109

11-
FSO.CopyFile("ext\\mbstring\\oniguruma\\src\\oniguruma.h",
12-
"ext\\mbstring\\oniguruma\\oniguruma.h", true);
13-
1410
STDOUT.WriteLine("Using bundled libmbfl...");
1511

1612
ADD_FLAG("CFLAGS_MBSTRING", "-Iext/mbstring/libmbfl -Iext/mbstring/libmbfl/mbfl \
17-
-Iext/mbstring/oniguruma /D NOT_RUBY=1 /D LIBMBFL_EXPORTS=1 \
13+
/D NOT_RUBY=1 /D LIBMBFL_EXPORTS=1 \
1814
/D HAVE_STDARG_PROTOTYPES=1 /D HAVE_CONFIG_H \
1915
/D HAVE_STRICMP /D MBFL_DLL_EXPORT=1 /D ONIGURUMA_EXPORT /DZEND_ENABLE_STATIC_TSRMLS_CACHE=1")
2016

@@ -52,7 +48,7 @@ if (PHP_MBSTRING != "no") {
5248
nls_kr.c nls_neutral.c nls_ru.c nls_uni.c nls_zh.c nls_hy.c \
5349
nls_ua.c nls_tr.c", "mbstring");
5450

55-
PHP_INSTALL_HEADERS("ext/mbstring", "mbstring.h oniguruma/oniguruma.h php_mbregex.h php_onig_compat.h 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");
51+
PHP_INSTALL_HEADERS("ext/mbstring", "mbstring.h php_mbregex.h php_onig_compat.h 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");
5652

5753
AC_DEFINE('HAVE_MBSTRING', 1, 'Have mbstring support');
5854
AC_DEFINE('HAVE_MBSTR_CN', 1, 'CN');
@@ -61,22 +57,9 @@ if (PHP_MBSTRING != "no") {
6157
AC_DEFINE('HAVE_MBSTR_RU', 1, 'RU');
6258
AC_DEFINE('HAVE_MBSTR_TW', 1, 'TW');
6359

64-
if (X64) {
65-
FSO.CopyFile("ext\\mbstring\\oniguruma\\src\\config.h.win64",
66-
"ext\\mbstring\\oniguruma\\src\\config.h", true);
67-
} else {
68-
FSO.CopyFile("ext\\mbstring\\oniguruma\\src\\config.h.win32",
69-
"ext\\mbstring\\oniguruma\\src\\config.h", true);
70-
}
71-
7260
if (PHP_MBREGEX != "no") {
7361
AC_DEFINE('HAVE_STDARG_PROTOTYPES', 1, 'have stdarg.h');
7462
AC_DEFINE('HAVE_MBREGEX', 1);
75-
AC_DEFINE('HAVE_ONIG', 1);
76-
if (PHP_MBREGEX_BACKTRACK != "no") {
77-
AC_DEFINE('USE_COMBINATION_EXPLOSION_CHECK', 1);
78-
}
79-
ADD_SOURCES("ext/mbstring/oniguruma/src", "ascii.c big5.c cp1251.c euc_jp.c euc_jp_prop.c euc_kr.c euc_tw.c gb18030.c iso8859_1.c iso8859_10.c iso8859_11.c iso8859_13.c iso8859_14.c iso8859_15.c iso8859_16.c iso8859_2.c iso8859_3.c iso8859_4.c iso8859_5.c iso8859_6.c iso8859_7.c iso8859_8.c iso8859_9.c koi8.c koi8_r.c mktable.c onig_init.c regcomp.c regenc.c regerror.c regexec.c regext.c reggnu.c regparse.c regposerr.c regposix.c regsyntax.c regtrav.c regversion.c sjis.c sjis_prop.c st.c unicode.c unicode_fold1_key.c unicode_fold2_key.c unicode_fold3_key.c unicode_unfold_key.c utf16_be.c utf16_le.c utf32_be.c utf32_le.c utf8.c", "mbstring");
8063
ADD_SOURCES("ext/mbstring", "php_mbregex.c", "mbstring");
8164
PHP_INSTALL_HEADERS("ext/mbstring", "php_mbregex.h");
8265
}

ext/mbstring/mbstring.c

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -56,18 +56,15 @@
5656
#include "mb_gpc.h"
5757

5858
#if HAVE_MBREGEX
59-
#include "php_mbregex.h"
59+
# include "php_mbregex.h"
60+
# include "php_onig_compat.h"
61+
# include <oniguruma.h>
62+
# undef UChar
63+
#elif HAVE_PCRE || HAVE_BUNDLED_PCRE
64+
# include "ext/pcre/php_pcre.h"
6065
#endif
6166

6267
#include "zend_multibyte.h"
63-
64-
#if HAVE_ONIG
65-
#include "php_onig_compat.h"
66-
#include <oniguruma.h>
67-
#undef UChar
68-
#elif HAVE_PCRE || HAVE_BUNDLED_PCRE
69-
#include "ext/pcre/php_pcre.h"
70-
#endif
7168
/* }}} */
7269

7370
#if HAVE_MBSTRING
@@ -1002,7 +999,7 @@ static void *_php_mb_compile_regex(const char *pattern);
1002999
static int _php_mb_match_regex(void *opaque, const char *str, size_t str_len);
10031000
static void _php_mb_free_regex(void *opaque);
10041001

1005-
#if HAVE_ONIG
1002+
#if HAVE_MBREGEX
10061003
/* {{{ _php_mb_compile_regex */
10071004
static void *_php_mb_compile_regex(const char *pattern)
10081005
{
@@ -1756,13 +1753,6 @@ PHP_MINFO_FUNCTION(mbstring)
17561753
snprintf(tmp, sizeof(tmp), "%d.%d.%d", MBFL_VERSION_MAJOR, MBFL_VERSION_MINOR, MBFL_VERSION_TEENY);
17571754
php_info_print_table_row(2, "libmbfl version", tmp);
17581755
}
1759-
#if HAVE_ONIG
1760-
{
1761-
char tmp[256];
1762-
snprintf(tmp, sizeof(tmp), "%d.%d.%d", ONIGURUMA_VERSION_MAJOR, ONIGURUMA_VERSION_MINOR, ONIGURUMA_VERSION_TEENY);
1763-
php_info_print_table_row(2, "oniguruma version", tmp);
1764-
}
1765-
#endif
17661756
php_info_print_table_end();
17671757

17681758
php_info_print_table_start();

0 commit comments

Comments
 (0)