Source-Changes-D archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: CVS commit: src/external/gpl3/autoconf/dist/lib/autoconf
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]
| |
|
Home |
Main Index |
Thread Index |
Old Index