René Scharfe <l.s.r@xxxxxx> writes: > "For enhanced basic REs, ‘+’, ‘?’ and ‘|’ remain regular characters, > but ‘\+’, ‘\?’ and ‘\|’ have the same special meaning as the > unescaped characters do for extended REs, i.e., one or more > matches, zero or one matches and alteration, respectively." > > So apparently Apple chose a middle ground between basic and extended > regular expressions for its grep and git grep. Sounds like GNU extension to me. > So GNU grep apparently made the same choice as Apple, probably far > earlier. Yup. > Based on that I suggest: > ... > > It would be simpler to use REG_ENHANCED everywhere it is defined instead > of adding a Makefile setting, but it's a non-standard extension and > might mean something else on other platforms. OK. Very conservative and good. > Reported-by: Marco Nenciarini <marco.nenciarini@xxxxxxxxxxxxxxxx> > Signed-off-by: René Scharfe <l.s.r@xxxxxx> > --- > Makefile | 8 ++++++++ > config.mak.uname | 1 + > grep.c | 4 ++++ > 3 files changed, 13 insertions(+) > > diff --git a/Makefile b/Makefile > index db447d0738..15e7edc9d2 100644 > --- a/Makefile > +++ b/Makefile > @@ -289,6 +289,10 @@ include shared.mak > # Define NO_REGEX if your C library lacks regex support with REG_STARTEND > # feature. > # > +# Define GIT_GREP_USES_REG_ENHANCED if your C library provides the flag > +# REG_ENHANCED to enable enhanced basic regular expressions and you'd > +# like to use it in git grep. > +# > # Define HAVE_DEV_TTY if your system can open /dev/tty to interact with the > # user. > # > @@ -2037,6 +2041,10 @@ endif > ifdef NO_REGEX > COMPAT_CFLAGS += -Icompat/regex > COMPAT_OBJS += compat/regex/regex.o > +else > +ifdef GIT_GREP_USES_REG_ENHANCED > + COMPAT_CFLAGS += -DGIT_GREP_USES_REG_ENHANCED > +endif > endif > ifdef NATIVE_CRLF > BASIC_CFLAGS += -DNATIVE_CRLF > diff --git a/config.mak.uname b/config.mak.uname > index d63629fe80..14c145ae42 100644 > --- a/config.mak.uname > +++ b/config.mak.uname > @@ -147,6 +147,7 @@ ifeq ($(uname_S),Darwin) > FREAD_READS_DIRECTORIES = UnfortunatelyYes > HAVE_NS_GET_EXECUTABLE_PATH = YesPlease > CSPRNG_METHOD = arc4random > + GIT_GREP_USES_REG_ENHANCED = YesPlease > > # Workaround for `gettext` being keg-only and not even being linked via > # `brew link --force gettext`, should be obsolete as of > diff --git a/grep.c b/grep.c > index 06eed69493..a8430daaba 100644 > --- a/grep.c > +++ b/grep.c > @@ -502,6 +502,10 @@ static void compile_regexp(struct grep_pat *p, struct grep_opt *opt) > regflags |= REG_ICASE; > if (opt->pattern_type_option == GREP_PATTERN_TYPE_ERE) > regflags |= REG_EXTENDED; > +#if defined(GIT_GREP_USES_REG_ENHANCED) && defined(REG_ENHANCED) > + else > + regflags |= REG_ENHANCED; > +#endif > err = regcomp(&p->regexp, p->pattern, regflags); > if (err) { > char errbuf[1024]; > -- > 2.39.0