From 94df0b08d46bf169d68b6188962177eed011452f Mon Sep 17 00:00:00 2001 From: Jeff Lucovsky Date: Sun, 17 Nov 2019 15:58:01 -0500 Subject: [PATCH] configure: Determine whether pcre_jit_exec exists This commit adds logic to determine whether pcre_jit_exec is present in the system's pcre library using AC_RUN_ELSEIF --- configure.ac | 40 +++++++++++++++++++++++++++++++++++----- 1 file changed, 35 insertions(+), 5 deletions(-) diff --git a/configure.ac b/configure.ac index 5fe1e6808b..187b73db41 100644 --- a/configure.ac +++ b/configure.ac @@ -710,13 +710,10 @@ AC_MSG_CHECKING(for PCRE JIT support usability) AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include ]], [[ - const char* regexstr = "(a|b|c|d)"; - pcre *re; const char *error; - pcre_extra *extra; int err_offset; - re = pcre_compile(regexstr,0, &error, &err_offset,NULL); - extra = pcre_study(re, PCRE_STUDY_JIT_COMPILE, &error); + pcre *re = pcre_compile("(a|b|c|d)",0, &error, &err_offset,NULL); + pcre_extra *extra = pcre_study(re, PCRE_STUDY_JIT_COMPILE, &error); if (extra == NULL) exit(EXIT_FAILURE); int jit = 0; @@ -740,6 +737,39 @@ AC_MSG_RESULT(no) fi + if test "x$pcre_jit_works" = "xyes"; then + + AC_MSG_CHECKING(for PCRE JIT EXEC support usability) + AC_RUN_IFELSE([AC_LANG_PROGRAM([[ + #include + #include + ]], + [[ + const char *error; + int err_offset; + pcre *re = pcre_compile("(a|b|c|d)", 0, &error, &err_offset,NULL); + pcre_extra *study = pcre_study(re, PCRE_STUDY_JIT_COMPILE, &error); + if (study == NULL) + exit(EXIT_FAILURE); + pcre_jit_stack *stack = pcre_jit_stack_alloc(32*1024,40*1024); + if (stack == 0) + exit(EXIT_FAILURE); + int ret = pcre_jit_exec(re, study, "apple", 5, 0, 0, NULL, 0, stack); + if (ret != 0) + exit(EXIT_FAILURE); + exit(EXIT_SUCCESS); + ]])],[ pcre_jit_exec_works=yes ],[:] + ) + if test "x$pcre_jit_exec_works" != "xyes"; then + AC_MSG_RESULT(no) + else + AC_MSG_RESULT(yes) + AC_DEFINE([PCRE_HAVE_JIT_EXEC], [1], [Pcre with JIT compiler support enabled supporting pcre_jit_exec]) + fi + else + AC_MSG_RESULT(no) + fi + # libhs enable_hyperscan="no"