Skip to content

Commit fb95e2e

Browse files
avargitster
authored andcommitted
grep: un-break building with PCRE >= 8.32 without --enable-jit
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 later than 8.31 compiled without --enable-jit. As explained in that change and a later compatibility change in this series ("grep: un-break building with PCRE < 8.32", 2017-05-10) the pcre_jit_exec() function is a faster path to execute the JIT. Unfortunately there's no compatibility stub for that function compiled into the library if pcre_config(PCRE_CONFIG_JIT, &ret) would return 0, and no macro that can be used to check for it, so the only portable option to support builds without --enable-jit is via a new NO_LIBPCRE1_JIT=UnfortunatelyYes Makefile option[1]. Another option would be to make the JIT opt-in via USE_LIBPCRE1_JIT=YesPlease, after all it's not a default option of PCRE v1. I think it makes more sense to make it opt-out since even though it's not a default option, most packagers of PCRE seem to turn it on by default, with the notable exception of the MinGW package. Make the MinGW platform work by default by changing the build defaults to turn on NO_LIBPCRE1_JIT=UnfortunatelyYes. It is the only platform that turns on USE_LIBPCRE=YesPlease by default, see commit df5218b ("config.mak.uname: support MSys2", 2016-01-13) for that change. 1. "How do I support pcre1 JIT on all versions?" (https://lists.exim.org/lurker/thread/20170601.103148.10253788.en.html) 2. https://github.com/Alexpux/MINGW-packages/blob/master/mingw-w64-pcre/PKGBUILD (referenced from "Re: PCRE v2 compile error, was Re: What's cooking in git.git (May 2017, #1; Mon, 1)"; <alpine.DEB.2.20.1705021756530.3480@virtualbox>) Signed-off-by: Ævar Arnfjörð Bjarmason <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent c30cf82 commit fb95e2e

File tree

3 files changed

+16
-0
lines changed

3 files changed

+16
-0
lines changed

Makefile

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,14 @@ all::
2929
# Perl-compatible regular expressions instead of standard or extended
3030
# POSIX regular expressions.
3131
#
32+
# When using USE_LIBPCRE1, define NO_LIBPCRE1_JIT if the PCRE v1
33+
# library is compiled without --enable-jit. We will auto-detect
34+
# whether the version of the PCRE v1 library in use has JIT support at
35+
# all, but we unfortunately can't auto-detect whether JIT support
36+
# hasn't been compiled in in an otherwise JIT-supporting version. If
37+
# you have link-time errors about a missing `pcre_jit_exec` define
38+
# this, or recompile PCRE v1 with --enable-jit.
39+
#
3240
# Define LIBPCREDIR=/foo/bar if your libpcre header and library files are in
3341
# /foo/bar/include and /foo/bar/lib directories.
3442
#
@@ -1094,6 +1102,10 @@ ifdef USE_LIBPCRE
10941102
EXTLIBS += -L$(LIBPCREDIR)/$(lib) $(CC_LD_DYNPATH)$(LIBPCREDIR)/$(lib)
10951103
endif
10961104
EXTLIBS += -lpcre
1105+
1106+
ifdef NO_LIBPCRE1_JIT
1107+
BASIC_CFLAGS += -DNO_LIBPCRE1_JIT
1108+
endif
10971109
endif
10981110

10991111
ifdef HAVE_ALLOCA_H
@@ -2241,6 +2253,7 @@ GIT-BUILD-OPTIONS: FORCE
22412253
@echo NO_CURL=\''$(subst ','\'',$(subst ','\'',$(NO_CURL)))'\' >>$@+
22422254
@echo NO_EXPAT=\''$(subst ','\'',$(subst ','\'',$(NO_EXPAT)))'\' >>$@+
22432255
@echo USE_LIBPCRE1=\''$(subst ','\'',$(subst ','\'',$(USE_LIBPCRE)))'\' >>$@+
2256+
@echo NO_LIBPCRE1_JIT=\''$(subst ','\'',$(subst ','\'',$(NO_LIBPCRE1_JIT)))'\' >>$@+
22442257
@echo NO_PERL=\''$(subst ','\'',$(subst ','\'',$(NO_PERL)))'\' >>$@+
22452258
@echo NO_PTHREADS=\''$(subst ','\'',$(subst ','\'',$(NO_PTHREADS)))'\' >>$@+
22462259
@echo NO_PYTHON=\''$(subst ','\'',$(subst ','\'',$(NO_PYTHON)))'\' >>$@+

config.mak.uname

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -550,6 +550,7 @@ else
550550
NO_GETTEXT =
551551
USE_GETTEXT_SCHEME = fallthrough
552552
USE_LIBPCRE= YesPlease
553+
NO_LIBPCRE1_JIT = UnfortunatelyYes
553554
NO_CURL =
554555
USE_NED_ALLOCATOR = YesPlease
555556
else

grep.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,11 @@
55
#include <pcre.h>
66
#ifdef PCRE_CONFIG_JIT
77
#if PCRE_MAJOR >= 8 && PCRE_MINOR >= 32
8+
#ifndef NO_LIBPCRE1_JIT
89
#define GIT_PCRE1_USE_JIT
910
#endif
1011
#endif
12+
#endif
1113
#ifndef PCRE_STUDY_JIT_COMPILE
1214
#define PCRE_STUDY_JIT_COMPILE 0
1315
#endif

0 commit comments

Comments
 (0)