]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
configure: Determine whether pcre_jit_exec exists
authorJeff Lucovsky <jeff@lucovsky.org>
Sun, 17 Nov 2019 20:58:01 +0000 (15:58 -0500)
committerVictor Julien <victor@inliniac.net>
Thu, 19 Mar 2020 16:47:45 +0000 (17:47 +0100)
This commit adds logic to determine whether pcre_jit_exec is present in
the system's pcre library using AC_RUN_ELSEIF

configure.ac

index 5fe1e6808b325ebf3472f3f0b6a90ba78b5e4b33..187b73db41474943130ee66e63d914617dc28cf8 100644 (file)
        AC_MSG_CHECKING(for PCRE JIT support usability)
        AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <pcre.h> ]],
            [[
-           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;
         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 <pcre.h>
+                          #include <string.h>
+                          ]],
+           [[
+           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"