Skip to content

Commit e87de7c

Browse files
avargitster
authored andcommitted
grep: un-break building with PCRE < 8.32
Amend my change earlier in this series ("grep: add support for the PCRE v1 JIT API", 2017-04-11) to un-break the build on PCRE v1 versions earlier than 8.32. The JIT support was added in version 8.20 released on 2011-10-21, but it wasn't until 8.32 released on 2012-11-30 that the fast code path to use the JIT via pcre_jit_exec() was added[1] (see also [2]). This means that versions 8.20 through 8.31 could still use the JIT, but supporting it on those versions would add to the already verbose macro soup around JIT support it, and I don't expect that the use-case of compiling a brand new git against a 5 year old PCRE is particularly common, and if someone does that they can just get the existing pre-JIT slow codepath. So just take the easy way out and disable the JIT on any version older than 8.32. The reason this change isn't part of the initial change PCRE JIT support is to have a cleaner history showing which parts of the implementation are only used for ancient PCRE versions. This also makes it easier to revert this change if we ever decide to stop supporting those old versions. 1. http://www.pcre.org/original/changelog.txt ("28. Introducing a native interface for JIT. Through this interface, the compiled[...]") 2. https://bugs.exim.org/show_bug.cgi?id=2121 Signed-off-by: Ævar Arnfjörð Bjarmason <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent fbaceaa commit e87de7c

File tree

2 files changed

+8
-3
lines changed

2 files changed

+8
-3
lines changed

grep.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -369,7 +369,7 @@ static void compile_pcre1_regexp(struct grep_pat *p, const struct grep_opt *opt)
369369
if (!p->pcre1_extra_info && error)
370370
die("%s", error);
371371

372-
#ifdef PCRE_CONFIG_JIT
372+
#ifdef GIT_PCRE1_USE_JIT
373373
pcre_config(PCRE_CONFIG_JIT, &p->pcre1_jit_on);
374374
if (p->pcre1_jit_on == 1) {
375375
p->pcre1_jit_stack = pcre_jit_stack_alloc(1, 1024 * 1024);
@@ -391,7 +391,7 @@ static int pcre1match(struct grep_pat *p, const char *line, const char *eol,
391391
if (eflags & REG_NOTBOL)
392392
flags |= PCRE_NOTBOL;
393393

394-
#ifdef PCRE_CONFIG_JIT
394+
#ifdef GIT_PCRE1_USE_JIT
395395
if (p->pcre1_jit_on) {
396396
ret = pcre_jit_exec(p->pcre1_regexp, p->pcre1_extra_info, line,
397397
eol - line, 0, flags, ovector,
@@ -418,7 +418,7 @@ static int pcre1match(struct grep_pat *p, const char *line, const char *eol,
418418
static void free_pcre1_regexp(struct grep_pat *p)
419419
{
420420
pcre_free(p->pcre1_regexp);
421-
#ifdef PCRE_CONFIG_JIT
421+
#ifdef GIT_PCRE1_USE_JIT
422422
if (p->pcre1_jit_on) {
423423
pcre_free_study(p->pcre1_extra_info);
424424
pcre_jit_stack_free(p->pcre1_jit_stack);

grep.h

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,11 @@
33
#include "color.h"
44
#ifdef USE_LIBPCRE1
55
#include <pcre.h>
6+
#ifdef PCRE_CONFIG_JIT
7+
#if PCRE_MAJOR >= 8 && PCRE_MINOR >= 32
8+
#define GIT_PCRE1_USE_JIT
9+
#endif
10+
#endif
611
#ifndef PCRE_STUDY_JIT_COMPILE
712
#define PCRE_STUDY_JIT_COMPILE 0
813
#endif

0 commit comments

Comments
 (0)