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 df5218b4c3 ("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, #01; Mon, 1)"; <alpine.DEB.2.20.1705021756530.3480@virtualbox>) Signed-off-by: Ævar Arnfjörð Bjarmason <avarab@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Ævar Arnfjörð Bjarmason committed Jun 1, 2017 at 18:20 UTC fb95e2e38dd4e8301b3992bacfac4c87b8262181
3 files changed +16
Makefile
+13
@@ -29,6 +29,14 @@ all::
29 # Perl-compatible regular expressions instead of standard or extended
30 # POSIX regular expressions.
31 #
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 +#
40 # Define LIBPCREDIR=/foo/bar if your libpcre header and library files are in
41 # /foo/bar/include and /foo/bar/lib directories.
42 #
@@ -1094,6 +1102,10 @@ ifdef USE_LIBPCRE
1102 EXTLIBS += -L$(LIBPCREDIR)/$(lib) $(CC_LD_DYNPATH)$(LIBPCREDIR)/$(lib)
1103 endif
1104 EXTLIBS += -lpcre
1105 +
1106 +ifdef NO_LIBPCRE1_JIT
1107 + BASIC_CFLAGS += -DNO_LIBPCRE1_JIT
1108 +endif
1109 endif
1110
1111 ifdef HAVE_ALLOCA_H
@@ -2241,6 +2253,7 @@ GIT-BUILD-OPTIONS: FORCE
2253 @echo NO_CURL=\''$(subst ','\'',$(subst ','\'',$(NO_CURL)))'\' >>$@+
2254 @echo NO_EXPAT=\''$(subst ','\'',$(subst ','\'',$(NO_EXPAT)))'\' >>$@+
2255 @echo USE_LIBPCRE1=\''$(subst ','\'',$(subst ','\'',$(USE_LIBPCRE)))'\' >>$@+
2256 + @echo NO_LIBPCRE1_JIT=\''$(subst ','\'',$(subst ','\'',$(NO_LIBPCRE1_JIT)))'\' >>$@+
2257 @echo NO_PERL=\''$(subst ','\'',$(subst ','\'',$(NO_PERL)))'\' >>$@+
2258 @echo NO_PTHREADS=\''$(subst ','\'',$(subst ','\'',$(NO_PTHREADS)))'\' >>$@+
2259 @echo NO_PYTHON=\''$(subst ','\'',$(subst ','\'',$(NO_PYTHON)))'\' >>$@+
config.mak.uname
+1
@@ -550,6 +550,7 @@ else
550 NO_GETTEXT =
551 USE_GETTEXT_SCHEME = fallthrough
552 USE_LIBPCRE= YesPlease
553 + NO_LIBPCRE1_JIT = UnfortunatelyYes
554 NO_CURL =
555 USE_NED_ALLOCATOR = YesPlease
556 else
grep.h
+2
@@ -5,9 +5,11 @@
5 #include <pcre.h>
6 #ifdef PCRE_CONFIG_JIT
7 #if PCRE_MAJOR >= 8 && PCRE_MINOR >= 32
8 +#ifndef NO_LIBPCRE1_JIT
9 #define GIT_PCRE1_USE_JIT
10 #endif
11 #endif
12 +#endif
13 #ifndef PCRE_STUDY_JIT_COMPILE
14 #define PCRE_STUDY_JIT_COMPILE 0
15 #endif