This is to announce m4-1.4.20, a stable release. This release collects several years of portability improvements, as well as a couple of minor optimizations to performance. Notable improvements in this release include faster execution of the 'eval' builtin.
GNU 'm4' is an implementation of the traditional Unix macro processor. It is mostly SVR4 compatible, although it has some extensions (for example, handling more than 9 positional parameters to macros). 'm4' also has built-in functions for including files, running shell commands, doing arithmetic, etc. Autoconf needs GNU 'm4' for generating 'configure' scripts, but not for running them. There have been 69 commits by 4 people in the 206 weeks since 1.4.19. See the NEWS below for a brief summary. Thanks to everyone who has contributed! The following people contributed changes to this release: Bruno Haible (7) Eric Blake (51) Paul Eggert (10) Sam James (1) Eric [on behalf of the m4 maintainers] ================================================================== Here is the GNU m4 home page: https://gnu.org/s/m4/ Here are the compressed sources: https://ftpmirror.gnu.org/m4/m4-1.4.20.tar.gz (3.4MB) https://ftpmirror.gnu.org/m4/m4-1.4.20.tar.bz2 (2.5MB) https://ftpmirror.gnu.org/m4/m4-1.4.20.tar.xz (2.0MB) Here are the GPG detached signatures: https://ftpmirror.gnu.org/m4/m4-1.4.20.tar.gz.sig https://ftpmirror.gnu.org/m4/m4-1.4.20.tar.bz2.sig https://ftpmirror.gnu.org/m4/m4-1.4.20.tar.xz.sig Use a mirror for higher download bandwidth: https://www.gnu.org/order/ftp.html Here are the SHA1 and SHA256 checksums: File: m4-1.4.20.tar.gz SHA1 sum: 4234ef3811c45d917b12bfb0694c793d548a27d2 SHA256 sum: 6ac4fc31ce440debe63987c2ebbf9d7b6634e67a7c3279257dc7361de8bdb3ef File: m4-1.4.20.tar.bz2 SHA1 sum: 17b6f32ed5c30b066aafdc61bc2cd577407233aa SHA256 sum: ac6989ee5d2aed81739780630cc2ce097e2a6546feb96a4a54db37d46a1452e4 File: m4-1.4.20.tar.xz SHA1 sum: 025df51430845178f926b20a078f994eefaa50fd SHA256 sum: e236ea3a1ccf5f6c270b1c4bb60726f371fa49459a8eaaebc90b216b328daf2b Use a .sig file to verify that the corresponding file (without the .sig suffix) is intact. First, be sure to download both the .sig file and the corresponding tarball. Then, run a command like this: gpg --verify m4-1.4.20.tar.gz.sig The signature should match the fingerprint of the following key: pub rsa2048/0xA7A16B4A2527436A 2010-04-16 [SC] Key fingerprint = 71C2 CC22 B1C4 6029 27D2 F3AA A7A1 6B4A 2527 436A uid [ unknown] Eric Blake <ebl...@redhat.com> uid [ unknown] Eric Blake (Free Software Programmer) <e...@byu.net> uid [ unknown] [jpeg image of size 6874] Key fingerprint = 4441 8D9D 02D6 9912 052A 708E D205 1C2F D2E4 726C pub rsa2048/0xA7A16B4A2527436A 2010-04-16 [SC] Key fingerprint = 71C2 CC22 B1C4 6029 27D2 F3AA A7A1 6B4A 2527 436A uid [ unknown] Eric Blake (Free Software Programmer) <e...@byu.net> uid [ unknown] Eric Blake <ebl...@redhat.com> uid [ unknown] [jpeg image of size 6874] Key fingerprint = 4441 8D9D 02D6 9912 052A 708E D205 1C2F D2E4 726C If that command fails because you don't have the required public key, or that public key has expired, try the following commands to retrieve or refresh it, and then rerun the 'gpg --verify' command. gpg --locate-external-key ebl...@redhat.com gpg --recv-keys A7A16B4A2527436A wget -q -O- 'https://savannah.gnu.org/project/release-gpgkeys.php?group=m4&download=1' | gpg --import - As a last resort to find the key, you can try the official GNU keyring: wget -q https://ftp.gnu.org/gnu/gnu-keyring.gpg gpg --keyring gnu-keyring.gpg --verify m4-1.4.20.tar.gz.sig This release is based on the m4 git repository, available as git clone https://git.savannah.gnu.org/git/m4.git with commit 8103916f2cbf885cae4f6c7c6e6f142f4b8c43f2 tagged as v1.4.20. For a summary of changes and contributors, see: https://git.sv.gnu.org/gitweb/?p=m4.git;a=shortlog;h=v1.4.20 or run this command from a git-cloned m4 directory: git shortlog v1.4.19..v1.4.20 This release was bootstrapped with the following tools: Autoconf 2.72 Automake 1.17 Gnulib 2025-05-10 9fc42e5f5711e501f80559539a78aed2b7c842ac NEWS * Noteworthy changes in release 1.4.20 (2025-05-10) [stable] ** Fix a bug in the `eval' builtin where it does not suppress warnings about division by zero that occurs within a more complex expression on the right hand side of || or && (present since short-circuiting was introduced in 1.4.8b). ** The `syscmd' and `esyscmd' builtins no longer mishandle a command line starting with `-' or `+' (present since "the beginning"). ** Fix regression introduced in 1.4.19 where trace output (such as with `debugmode(t)') could read invalid memory when tracing a series of pushed macros that are popped during argument collection. ** Fix regression introduced in 1.4.19 where the `format' builtin inadvertently took on locale-dependent parsing and output of floating point numbers as a side-effect of introducing message translations. While it would be nice for m4 to be fully locale-aware, such a behavior change belongs in a major version release such as 1.6, and not a minor release. ** Fix regression introduced in 1.4.11 where the experimental `changeword' builtin could cause a crash if given a regex that does not match all one-byte prefixes of valid longer matches. As a reminder, `changeword' is not recommended for production use, and will likely not be present in the next major version release. ** On non-Unix platforms where binary files differ from text, loading a frozen file (which should be cross-platform compatible) now correctly uses binary mode. ** Several documentation improvements to the manual. ** Update to comply with newer C standards, and inherit portability improvements from gnulib. -- Eric Blake, Principal Software Engineer Red Hat, Inc. Virtualization: qemu.org | libguestfs.org