This is to announce m4-1.4.21, a stable release.
This release is being made mainly to cater to recent glibc changes in
light of the C23 language standard. However, it also includes fixes
for some corner-case bugs in eval and when using the defn macro on
builtins.
There have been 19 commits by 2 people in the 39 weeks since 1.4.20.
See the NEWS below for a brief summary.
Thanks to everyone who has contributed!
The following people contributed changes to this release:
Eric Blake (14)
Paul Eggert (5)
Eric Blake
[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.21.tar.gz (3.4MB)
https://ftpmirror.gnu.org/m4/m4-1.4.21.tar.bz2 (2.5MB)
https://ftpmirror.gnu.org/m4/m4-1.4.21.tar.xz (2.0MB)
Here are the GPG detached signatures:
https://ftpmirror.gnu.org/m4/m4-1.4.21.tar.gz.sig
https://ftpmirror.gnu.org/m4/m4-1.4.21.tar.bz2.sig
https://ftpmirror.gnu.org/m4/m4-1.4.21.tar.xz.sig
Use a mirror for higher download bandwidth:
https://www.gnu.org/order/ftp.html
Here are the SHA256 and SHA3-256 checksums:
File: m4-1.4.21.tar.gz
SHA256 sum: 38ae59f7a30bf9c108193cc5c25fbb06014f21e230c7ede2eff614f7b7c37ed8
SHA3-256 sum: 15e3726714fd70bfe4436a4f3214bbc007cb88eaaf00a119d302fb2c2cb3e60d
File: m4-1.4.21.tar.bz2
SHA256 sum: dc487e11d2f0c9e01555bb1af26be4eae983ec8f0726746505b4327186eb21fc
SHA3-256 sum: bf7ce4a68d060833e75741523d3d65a7eca329ace27689f5979a2803a42b9aae
File: m4-1.4.21.tar.xz
SHA256 sum: f25c6ab51548a73a75558742fb031e0625d6485fe5f9155949d6486a2408ab66
SHA3-256 sum: 17470ef40b4c09ef424e76e1418ffba4a2eb5b68ad9ca23cbd2659461468afed
Verify the SHA256 checksum with either sha256sum, sha256, or
'shasum -a 256'.
Verify the SHA3-256 checksum with 'cksum -a sha3 -l 256 --base64'
from coreutils-9.8.
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.21.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 <[email protected]>
uid [ unknown] Eric Blake (Free Software Programmer)
<[email protected]>
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)
<[email protected]>
uid [ unknown] Eric Blake <[email protected]>
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 [email protected]
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.21.tar.gz.sig
This release is based on the m4 git repository, available as
git clone https://https.git.savannah.gnu.org/git/m4.git
with commit fe2f13ab9ab9b3e712c6529f0b2a49a81feb6ce2 tagged as v1.4.21.
For a summary of changes and contributors, see:
https://gitweb.git.savannah.gnu.org/gitweb/?p=m4.git;a=shortlog;h=v1.4.21
or run this command from a git-cloned m4 directory:
git shortlog v1.4.20..v1.4.21
This release was bootstrapped with the following tools:
Autoconf 2.72.90
Automake 1.18.1
Gnulib 2026-02-03 c6842ec25c6d5b1596da4eb6b68603f9578b23e9
NEWS
* Noteworthy changes in release 1.4.21 (2026-02-06) [stable]
** Fix the `eval' builtin to reject input like `0x' that C does not
accept as an integer literal, rather than silently treating it as zero
(present since "the beginning").
** Fix the `define' and `pushdef' builtins to always warn when attempting
to concatenate the result of using the `defn' macro on a builtin macro
with anything else. This is a counterpart to the change in m4 1.4.11
that issues a warning when `defn' with multiple arguments attempts to
perform concatenation. Attempting to use the output of `defn' anywhere
other than a lone argument during macro definition has never been
portable, but now the outcome is always the remaining text, rather
than being dependent on whether `defn' was used before or after the
other text (present since "the beginning").
** Port to glibc 2.43, which implements functions like strchr as macros
when compiled with a C23 compiler.
--
Eric Blake, Principal Software Engineer
Red Hat, Inc.
Virtualization: qemu.org | libguestfs.org