1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
|
dnl By default we'll compile and link against the bundled PCRE library. If
dnl --with-external-pcre is supplied, we'll use that for linking.
PHP_ARG_WITH([external-pcre],,
[AS_HELP_STRING([--with-external-pcre],
[Use external library for PCRE support])],
[no],
[no])
PHP_ARG_WITH([pcre-jit],
[whether to enable PCRE JIT functionality],
[AS_HELP_STRING([--without-pcre-jit],
[Disable PCRE JIT functionality])],
[yes],
[no])
AH_TEMPLATE([PCRE2_CODE_UNIT_WIDTH],
[Number of bits in non-UTF mode for PCRE library.])
AH_TEMPLATE([HAVE_PCRE_JIT_SUPPORT],
[Define to 1 if PCRE JIT is enabled and supported.])
if test "$PHP_EXTERNAL_PCRE" != "no"; then
PKG_CHECK_MODULES([PCRE2], [libpcre2-8 >= 10.30])
PHP_EVAL_INCLINE([$PCRE2_CFLAGS])
PHP_EVAL_LIBLINE([$PCRE2_LIBS])
AC_DEFINE([PCRE2_CODE_UNIT_WIDTH], [8])
AS_VAR_IF([PHP_PCRE_JIT], [no],,
[AC_CACHE_CHECK([whether external PCRE2 library has JIT supported],
[php_cv_have_pcre2_jit],
[
CFLAGS_SAVE=$CFLAGS
LIBS_SAVE=$LIBS
CFLAGS="$CFLAGS $PCRE2_CFLAGS"
LIBS="$LIBS $PCRE2_LIBS"
AC_RUN_IFELSE([AC_LANG_SOURCE([
#include <pcre2.h>
#include <stdlib.h>
int main(void) {
uint32_t have_jit;
pcre2_config_8(PCRE2_CONFIG_JIT, &have_jit);
return !have_jit;
}
])],
[php_cv_have_pcre2_jit=yes],
[php_cv_have_pcre2_jit=no],
[AS_CASE([$host_cpu],
[arm*|i[[34567]]86|x86_64|mips*|powerpc*|sparc],
[php_cv_have_pcre2_jit=yes],
[php_cv_have_pcre2_jit=no])])
CFLAGS=$CFLAGS_SAVE
LIBS=$LIBS_SAVE
])
AS_VAR_IF([php_cv_have_pcre2_jit], [yes],
[AC_DEFINE([HAVE_PCRE_JIT_SUPPORT], [1])])
])
PHP_NEW_EXTENSION([pcre],
[php_pcre.c],
[no],,
[-DZEND_ENABLE_STATIC_TSRMLS_CACHE=1])
PHP_INSTALL_HEADERS([ext/pcre], [php_pcre.h])
else
AC_MSG_CHECKING([for PCRE library to use])
AC_MSG_RESULT([bundled])
pcrelib_sources=m4_normalize(["
pcre2lib/pcre2_auto_possess.c
pcre2lib/pcre2_chartables.c
pcre2lib/pcre2_chkdint.c
pcre2lib/pcre2_compile.c
pcre2lib/pcre2_config.c
pcre2lib/pcre2_context.c
pcre2lib/pcre2_convert.c
pcre2lib/pcre2_dfa_match.c
pcre2lib/pcre2_error.c
pcre2lib/pcre2_extuni.c
pcre2lib/pcre2_find_bracket.c
pcre2lib/pcre2_jit_compile.c
pcre2lib/pcre2_maketables.c
pcre2lib/pcre2_match_data.c
pcre2lib/pcre2_match.c
pcre2lib/pcre2_newline.c
pcre2lib/pcre2_ord2utf.c
pcre2lib/pcre2_pattern_info.c
pcre2lib/pcre2_script_run.c
pcre2lib/pcre2_serialize.c
pcre2lib/pcre2_string_utils.c
pcre2lib/pcre2_study.c
pcre2lib/pcre2_substitute.c
pcre2lib/pcre2_substring.c
pcre2lib/pcre2_tables.c
pcre2lib/pcre2_ucd.c
pcre2lib/pcre2_valid_utf.c
pcre2lib/pcre2_xclass.c
"])
AX_CHECK_COMPILE_FLAG([-Wno-implicit-fallthrough],
[PHP_PCRE_CFLAGS="$PHP_PCRE_CFLAGS -Wno-implicit-fallthrough"],,
[-Werror])
PHP_PCRE_CFLAGS="$PHP_PCRE_CFLAGS -DHAVE_CONFIG_H -I@ext_srcdir@/pcre2lib -DZEND_ENABLE_STATIC_TSRMLS_CACHE=1"
AC_DEFINE([HAVE_BUNDLED_PCRE], [1],
[Define to 1 if PHP uses the bundled PCRE library.])
AC_DEFINE([PCRE2_CODE_UNIT_WIDTH], [8])
AS_VAR_IF([PHP_PCRE_JIT], [no],,
[AC_DEFINE([HAVE_PCRE_JIT_SUPPORT], [1])
AC_CACHE_CHECK([whether Intel CET is enabled],
[php_cv_have_pcre2_intel_cet],
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
#ifndef __CET__
# error CET is not enabled
#endif
])],
[php_cv_have_pcre2_intel_cet=yes],
[php_cv_have_pcre2_intel_cet=no])
])
AS_VAR_IF([php_cv_have_pcre2_intel_cet], [yes],
[PHP_PCRE_CFLAGS="-mshstk $PHP_PCRE_CFLAGS"])
])
dnl Enable pcre Valgrind support only in DEBUG build (it affects performance).
AS_VAR_IF([PHP_VALGRIND], [no],,
[AS_VAR_IF([ZEND_DEBUG], [yes],
[AC_DEFINE([HAVE_PCRE_VALGRIND_SUPPORT], [1],
[Define to 1 if pcre has Valgrind support enabled.])])])
PHP_NEW_EXTENSION([pcre],
[$pcrelib_sources php_pcre.c],
[no],,
[$PHP_PCRE_CFLAGS])
PHP_ADD_BUILD_DIR([$ext_builddir/pcre2lib])
PHP_INSTALL_HEADERS([ext/pcre], [php_pcre.h pcre2lib/])
fi
|