From: Jeff Lucovsky Date: Sun, 17 Nov 2019 20:58:01 +0000 (-0500) Subject: configure: Determine whether pcre_jit_exec exists X-Git-Tag: suricata-6.0.0-beta1~625 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=94df0b08d46bf169d68b6188962177eed011452f;p=thirdparty%2Fsuricata.git 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 --- 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"