I experimented with this, and my analysis of the gnulib emacs regexp wasn't quite correct.
When I reverted this autoconf change, and fixed m4 as below, regen works. I'm testing a full build of NetBSD now. On 23-05-25 06:36, Luke Mewburn wrote: | Hi Christos, | | Whilst this initially fixed my tools/compat regen problem, | I'm not sure it's correct long term. | | I think we need to revert this, and fix usr.bin/m4 -g (GNU) | emulation for m4 regexp() and patsubst() ? | | A quick comparison of usr.bin/m4/gnum4.c twiddle() versus | https://www.gnu.org/software/gnulib/manual/html_node/emacs-regular-expression-syntax.html | we may need to make the following changes to twiddle(): | 1. convert m4 \{ and \} into ERE { and } This we don't need; gnulib emacs regexp doesn't support { } intervals. | 2. convert m4 { and } into ERE \{ and \} This worked. | 3. possibly implement \b, \B, \`, and \' I haven't done this. | | but further analysis and addition of testsuites before & after, | comparing behaviour of GNU m4 versus our m4, is probably warranted. | | | Details: | | autoconf 'm4_bregexp' is GNU m4 1.4.x 'regexp' (well, GNU m4 before 2.x), | and 'm4_bpatsubst' is m4 'patsubst'. | See: | - https://www.gnu.org/software/autoconf/manual/autoconf-2.69/html_node/Redefined-M4-Macros.html | | | GNU m4 1.4.x defines 'regexp' as: | Searches for regexp in string. The syntax for regular expressions is | the same as in GNU Emacs, which is similar to BRE, Basic Regular | Expressions in POSIX. See Syntax of Regular Expressions in the GNU | Emacs Manual. | 'patsubst' is similar: | Searches string for matches of regexp, and substitutes replacement for | each match. The syntax for regular expressions is the same as in GNU | Emacs (see Regexp). | See: | - https://www.gnu.org/software/m4/manual/html_node/Regexp.html | - https://www.gnu.org/software/m4/manual/html_node/Patsubst.html | | | GNU m4 1.4.x defines 'regexp' as: | Searches for regexp in string. The syntax for regular expressions is | the same as in GNU Emacs, which is similar to BRE, Basic Regular | Expressions in POSIX. See Syntax of Regular Expressions in the GNU | Emacs Manual. | See: | - https://www.gnu.org/software/m4/manual/html_node/Regexp.html | | | Emacs regexps look to be BREs with extras including \| for alternation. | See: | - https://www.gnu.org/software/emacs/manual/html_node/emacs/Regexps.html | - https://www.gnu.org/software/emacs/manual/html_node/elisp/Regexp-Backslash.html | | Note: except that GNU m4 code inspection shows it's uses the gnulib | implementation of Emacs regex, which is documented differently to Emacs' | own regex! See below. | | | GNU m4 uses gnulib for its regexp implementation (per code inspection), | and doesn't seem to change the syntax from the gnulib default, which | as far as I can tell is Emacs (RE_SYNTAX_EMACS 0. | See: | - https://www.gnu.org/software/gnulib/manual/html_node/emacs-regular-expression-syntax.html | - https://www.gnu.org/software/gnulib/manual/html_node/Predefined-Syntaxes.html | Note that this seems to differ from the Emacs manual above. | | | POSIX BREs don't support '|' alternation at all, per NetBSD re_format(7): | Obsolete (“basic”) regular expressions differ in several respects. | ‘|’ is an ordinary character and there is no equivalent for its | functionality. | and Linux (glibc) regex(7): | Obsolete ("basic") regular expressions differ in several respects. | '|', '+', and '?' are ordinary characters and there is no equivalent | for their functionality. | | | It looks like usr.bin/m4's -g (GNU) compatibility option supports | rewriting the GNU m4 regexp() and patsubst() expressions to be POSIX ERE. | This is done in usr.bin/m4/gnum4.c by the twiddle() function if -g (mimic_gnu) | is in operation. | | See intro for proposed solution. | | | regards, | Luke. | | | | On 23-05-24 10:34, Christos Zoulas wrote: | | Module Name: src | | Committed By: christos | | Date: Wed May 24 14:34:16 UTC 2023 | | | | Modified Files: | | src/external/gpl3/autoconf/dist/lib/autoconf: general.m4 | | | | Log Message: | | quote { to make regcomp happy | | | | | | To generate a diff of this commit: | | cvs rdiff -u -r1.1.1.1 -r1.2 \ | | src/external/gpl3/autoconf/dist/lib/autoconf/general.m4 | | | | Please note that diffs are not public domain; they are subject to the | | copyright notices on the relevant files. | | | | | Modified files: | | | | Index: src/external/gpl3/autoconf/dist/lib/autoconf/general.m4 | | diff -u src/external/gpl3/autoconf/dist/lib/autoconf/general.m4:1.1.1.1 src/external/gpl3/autoconf/dist/lib/autoconf/general.m4:1.2 | | --- src/external/gpl3/autoconf/dist/lib/autoconf/general.m4:1.1.1.1 Sat Jan 16 13:36:00 2016 | | +++ src/external/gpl3/autoconf/dist/lib/autoconf/general.m4 Wed May 24 10:34:16 2023 | | @@ -2119,7 +2119,7 @@ m4_define([AC_DEFINE_UNQUOTED], [_AC_DEF | | # no backslash, no command substitution, no complex variable | | # substitution, and no quadrigraphs. | | m4_define([_AC_DEFINE_UNQUOTED], | | -[m4_if(m4_bregexp([$1], [\\\|`\|\$(\|\${\|@]), [-1], | | +[m4_if(m4_bregexp([$1], [\\\|`\|\$(\|\$\{\|@]), [-1], | | [AS_ECHO(["AS_ESCAPE([$1], [""])"]) >>confdefs.h], | | [cat >>confdefs.h <<_ACEOF | | [$1] | | |