2021-05-28 Eric Blake version 1.4.19 * NEWS: Record release date. 2021-05-28 Eric Blake tests: Skip signal detection on Haiku On Haiku, using 'kill -9' fromm /bin/shactually causes a process to die with the non-standard SIGKILLTHR 15, which causes 198.sysval to fail from the unexpected value. * doc/m4.texi (Sysval): Skip test on Haiku. Reported by Bruno Haible, https://lists.gnu.org/archive/html/bug-m4/2021-05/msg00004.html 2021-05-26 Bruno Haible Enable more single-thread optimizations in gnulib code On many systems (esp. BSD ones), building a recent m4 snapshot produces these warnings: -------------------------------------------------------------------------------- CC regex.o In file included from ../../lib/regex_internal.h:57:0, from ../../lib/regex.c:70: ../../lib/regcomp.c: In function 'rpl_regfree': ../../lib/glthread/lock.h:640:38: warning: statement with no effect [-Wunused-value] # define glthread_lock_destroy(NAME) 0 ^ ../../lib/regex_internal.h:60:26: note: in expansion of macro 'glthread_lock_destroy' # define lock_fini(lock) glthread_lock_destroy (&(lock)) ^ ... -------------------------------------------------------------------------------- According to the Gnulib documentation section "Optimizations of multithreaded code" several more optimizations can be enabled. This patch - enables these single-threading optimizations, - by doing so, gets rid of the warnings in regex.c, - causes no test failures. * configure.ac (GNULIB_REGEX_SINGLE_THREAD, GNULIB_MBRTOWC_SINGLE_THREAD, GNULIB_WCHAR_SINGLE_LOCALE): Define as C macros. Message-Id: <3311608.oHEOCP8NKg@omega> 2021-05-26 Eric Blake maint: Update to newer gnulib Gnulib has improved stack overflow detection (the c-stack module now uses gnulib's stripped-down libsigsegv on more platforms, without having to install GNU libsigsegv); with this update, GNU Linux systems get stack overflow protection without an external library dependency. * gnulib: Update to latest. * NEWS: Mention the impact. 2021-05-12 Eric Blake maint: translation string tweak * src/m4.c (usage): Tweak translation of a newline. Reported by Benno Schulenberg, https://lists.gnu.org/archive/html/m4-discuss/2021-05/msg00011.html 2021-05-11 Eric Blake maint: post-release administrivia * NEWS: Add header line for next release. * .prev-version: Record previous version. * cfg.mk (old_NEWS_hash): Auto-update. version 1.4.18d * NEWS: Recored release date. 2021-05-10 Eric Blake po: fix syntax-check * po/POTFILES.in: Update list to match previous patch. m4: translate more strings * src/m4.c (usage): Split large paragraphs, and mark for translation. (main): Translate more strings. * src/builtin.c: Likewise. * src/eval.c (evaluate): Likewise. * src/format.c (expand_format): Likewise. * src/freeze.c: Likewise. * src/input.c: Likewise. * src/macro.c: Likewise. * src/output.c: Likewise. Reported by Benno Schulenberg: https://lists.gnu.org/archive/html/m4-discuss/2021-05/msg00005.html 2021-05-10 Eric Blake maint: update gnulib Fix several issues reported by Bruno Haible while testing 1.4.18b: https://lists.gnu.org/archive/html/bug-m4/2021-05/msg00002.html https://lists.gnu.org/archive/html/bug-m4/2021-05/msg00003.html * gnulib: Bump to latest, for various fixes. * NEWS: Mention this. 2021-05-10 Eric Blake maint: update m4-latest* symlinks during upload Avoid the situation we had for several years where m4-latest.tar.xz pointed to m4-1.4.17.tar.xz in spite of m4-1.4.18.tar.xz existing. https://lists.gnu.org/archive/html/m4-discuss/2021-05/msg00003.html * cfg.mk (GNUPLOADFLAGS): Update *-latest symlinks during gnupload. 2021-05-10 Eric Blake maint: mention ci project Bruno Haible has added a continuous integration environment: https://lists.gnu.org/archive/html/bug-m4/2020-03/msg00000.html * HACKING (Continuous Integration): New section. 2021-05-10 Bruno Haible eval: avoid undefined behaviour when parsing -2147483648 * src/eval.c (eval_lex): Use an unsigned variable for accumulating the value. https://lists.gnu.org/archive/html/bug-m4/2021-05/msg00001.html 2021-05-07 Eric Blake maint: post-release administrivia * NEWS: Add header line for next release. * .prev-version: Record previous version. * cfg.mk (old_NEWS_hash): Auto-update. version 1.4.18b * NEWS: Record release date. maint: prepare for beta release * all: Prefer https over http in URLs. * doc/m4.texi (History): Update URLs to follow redirects. * NEWS: Prepare for release. * cfg.mk (old_NEWS_hash): Regenerate via 'make update-NEWS-hash' * HACKING: Update URL to gnulib, drop reference to CVS. maint: update gnulib to latest * gnulib: Pick up latest in preparation for release. 2021-05-07 Eric Blake maint: update bootstrap, (re-)enable po file generation In commit 4694c4e67, I disabled bootstrap pulling in po files, because I got an error while attempting to get them, and remembered that while the experimental 2.0 has a .pot file, branch-1.4 (and the 1.4.18 release) historically did not. Basically, since the translation project does not have any m4.pot corresponding to a released m4 that needs it, they deleted tp/latest/m4, and with nothing to pull from, rsync fails. I did not, however, realize that commit 610290de had intentionally added translation support, such that m4 1.4.19 WILL have translations; so until I get that directory reinstated by releasing 1.4.18b, I'll just use './bootstrap --skip-po'. Meanwhile, Gary's upstream bootstrap has had some commits (https://github.com/gnulib-modules/bootstrap.git) Regenerate them via: for f in gl/build-aux/*; do cp ~/bootstrap/build-aux/$(basename $f) $f; done gl/build-aux/inline-source gl/build-aux/bootstrap.in > bootstrap * gl/build-aux/*: Sync from upstream. * bootstrap: Regenerate. * bootstrap.conf (m4_bootstrap_options_prep): Re-enable po. * NEWS: Document this as intentional. Fixes: 4694c4e67 2021-05-07 Eric Blake maint: fix syntax-check issues * src/Makefile.am (m4_LDADD): Rename... (LDADD): ...to this, and use spelling that satisfies syntax-check. * po/POTFILES.in: Update to satisfy syntax-check. * cfg.mk (old_NEWS_hash): Update with 'make update-NEWS-hash'. maint: bump copyright year * all: Use 'make update-copyright' to add 2021. README: add GNU Project notice * README: Add section to attract more people towards the GNU project. Inspired by a suggestion from Jose E. Marchesi on the gnu-prog-discuss mailing list. 2021-04-22 Eric Blake m4: change command-line -H default * src/m4.h (HASHMAX): Bump to ~64k. * doc/m4.texi (Limits control): Document it. * NEWS: Likewise. maint: another gnulib update * gnulib: Update to latest, to fix build on rawhide. 2021-04-21 Eric Blake symtab: use less memory in pushdef stacks No need to xstrdup identical names when we can share the same name across the pushdef stack. * src/symtab.c (free_symbol): Don't free shared name. (lookup_symbol): Share name across pushdef stack. 2021-04-21 Eric Blake symtab: make symtab private No need for a leaky abstraction of freezing to have to duplicate how our symbol hash table is organized; use the public function hack_all_symbols instead. This will make it easier to refactor the symbol table (such as automatic resizing, or switching to a trie). * src/m4.h (symtab, SYMBOL_NEXT): Make private. * src/freeze.c (produce_frozen_state): Split out... (freeze_symbol): ...new helper, for use by hack_all_symbols. * src/symtab.c (lookup_symbol, symtab_print_list): Update to treat next as internal-only code. 2021-04-21 Eric Blake symtab: sort by hash before name It is faster to do an integer compare than a string compare when managing hash table collisions (reserving a string compare for ties). Testing with CFLAGS=-DDEBUG_SYM=1 and 'time M4=src/m4 autoconf -f', the results are noticeable; on my machine, execution speeds up from 2.3s to 2.2s, and the debug trace that used to report: m4: lookup mode 0 called 1243301 times, 7859589 compares, 6734330 misses, 23941043 bytes now reports m4: lookup mode 0 called 1243301 times, 1125259 compares, 0 misses, 12433237 bytes * src/m4.h (struct symbol): Add hash member. * src/symtab.c (lookup_symbol): Sort by hash first, then name. (symtab_print_list): Add hash debug. 2021-04-21 Eric Blake maint: switch from git:// to https:// for gnulib submodule https:// is nicer than git:// for a transport for avoiding man-in-the-middle attacks, provided that the server is using a new-enough version of git to make https:// efficient (which savannah does). * .gitmodules: Prefer better URL. 2021-04-21 Paul Eggert maint: port to Solaris 10 Add libraries needed by current Gnulib. * src/Makefile.am (m4_LDADD): Add LIB_CLOCK_GETTIME, LIB_GETRANDOM, LIB_HARD_LOCALE, LIB_POSIX_SPAWN, LIB_SETLOCALE_NULL, LIBUNISTRING, INTL_MACOSX_LIBS. These are all needed by current Gnulib, according to gnulib-tool. LIB_CLOCK_GETTIME is certainly needed for Solaris 10; otherwise the m4 link fails with clock_gettime not found. maint: port to macOS 11.2.3 (arm64) * m4/gnulib-cache.m4: Add fopen-gnu, replacing cloexec and fopen. Avoid getopt-posix-tests, since they are not needed for m4 and currently fail on macOS 11.2.3 (arm64). * src/builtin.c (m4_incr, m4_decr): Avoid undefined behavior on integer overflow that causes tests to fail on macOS. * src/debug.c (debug_set_output): * src/output.c (m4_tmpfile, m4_tmpopen): * src/path.c (m4_fopen): Use GNU fopen with "e" rather than set_cloexec_flag. This is simpler, and works around a Gnulib bug on macOS with fopen being replaced by rpl_fopen sometimes but not other times. * src/freeze.c (produce_frozen_state): Use GNU fopen with "e"; no need to expose the fd to subprocesses. build: update gnulib submodule to latest 2021-04-17 Eric Blake symtab: drop redundant symbol flag In writing the previous patch, I noticed that the shadow flag is only ever set when a pushdef stack is present, which makes it redundant now that the pushdef stack is separate from the hash collision stack. * src/m4.h (SYMBOL_SHADOWED): Delete. * src/builtin.c (dump_symbol): Simplify, now that hack_all_symbols no longer visits shadowed macros. * src/symtab.c (lookup_symbol, symtab_print_list): Simplify. 2021-04-17 Eric Blake symtab: better handling of macro stacks I ran into a scenario where running a program took 22s with the default -H509, but less than a second with -H517 [1]. The culprit? A collision between 'stack' and 'substr' in the default hash table size caused lookups for substr to get progressively slower as pushdef stack got deeper. This is easy enough to fix, and may also make it easier to dynamically grow the hashtable. [1] https://lists.gnu.org/archive/html/bug-m4/2021-04/msg00000.html * src/m4.h (struct symbol): Add stack member. * src/symtab.c (lookup_symbol): Separate stack from bucket list. (symtab_print_list): Update traversal to match. * src/freeze.c (produce_frozen_state): Likewise. (reverse_symbol_list): Reverse stack, not bucket. 2021-04-17 Eric Blake input: optimize macro tail-call memory usage I encountered an m4 program that performed over 20 million iterations of a tail-call recursion paradigm. Without this patch, memory usage grew to over 6 gigabytes, pausing the program for several seconds when the recursion finally ended just to reclaim the memory. But with the patch, m4 never needed more than 3 megabytes of resident memory. * src/input.c (push_string_init): Prune empty string blocks before starting another one. 2021-04-17 Eric Blake maint: update gnulib and fix build failures I got failures when trying to bootstrap: bootstrap: getting translations into po/.reference for m4... receiving incremental file list rsync: change_dir "/latest/m4" (in tp) failed: No such file or directory (2) since m4-1.4 has no translation files, and the translation project dropped the stale .po files for the unreleased 1.9 development branch. Once that was fixed, I also got compilation failures, from an incomplete update to the gnulib execute module: builtin.c: In function 'm4_syscmd': builtin.c:968:44: error: passing argument 3 of 'execute' from incompatible pointer type [-Werror=incompatible-pointer-types] 968 | status = execute (ARG (0), SYSCMD_SHELL, prog_args, NULL, false, | ^~~~~~~~~ | | | const char ** Fixes: 4e5c2c0157 * gnulib: Update to latest. * bootstrap.conf (copyright_holder): Silence bootstrap warning. (m4_bootstrap_options_prep): Turn off po update. 2020-12-12 Bruno Haible Update after gnulib changed. * src/builtin.c (m4_syscmd): Update 'execute' invocation. (m4_esyscmd): Update 'create_pipe_in' invocation. * po/POTFILES.in: Remove lib/w32spawn.h. Add lib/openat-die.c, lib/os2-spawn.c. 2020-08-23 Paul Eggert * HACKING: Autoconf 2.64 required now. 2020-08-23 Bruno Haible build: Fix bootstrap failure with the newest gnulib. * configure.ac: Require Autoconf 2.64 at least. 2020-07-17 Paul Eggert Port recent changes to AIX 7.1 * src/Makefile.am (m4_LDADD): Add LIB_MBRTOWC, LIB_SETLOCALE. AIX 7.1 needs these to get the pthread support linked in. 2020-07-13 Paul Eggert Support gettext and proper names This way, ‘m4 --version’ outputs “Written by René Seindal” instead of “Written by Rene' Seindal” when in a UTF-8 locale. As the Translation project adds translations, NLS should get better. * .gitignore: Add translation-related file names. * AUTHORS, ChangeLog-2014, NEWS, README, acinclude.m4, c-boxes.el: Spell “François” and “René” without ASCIIfying. * HACKING: Add Gettext as a prereq. * Makefile.am (SUBDIRS): Add po. * configure.ac: Do not use -Wvla. Add AM_GNU_GETTEXT and AM_GNU_GETTEXT_VERSION calls. * lib/Makefile.am (MAINTAINERCLEANFILES): Define to empty. * m4/gnulib-cache.m4: Add configmake, gettext-h, propername, and setlocale modules. * po/POTFILES.in: New file. * src/Makefile.am (m4_LDADD): Add $(LIBICONV), $(LIBINTL). * src/m4.c: Include configmake.h, propername.h. (main): Set the locale. * src/m4.h: Include locale.h, gettext.h. (textdomain, bindtextdomain) [!ENABLE_NLS]: Provide defaults. (_): Now an alias for gettext, instead of a no-op. Use c-ctype.h instead of ctype.h This simplifies the code a bit, and prepares for setlocale. * m4/gnulib-cache.m4: Add c-ctype module. * src/builtin.c (numeric_arg, m4_undivert, expand_user_macro): * src/eval.c (eval_lex): * src/format.c (arg_int, arg_long, arg_double, expand_format): * src/freeze.c (GET_NUMBER): m * src/input.c (next_token, peek_token): * src/macro.c (expand_argument): Prefer c-ctype macros to ctype macros. Omit now-unnecessary calls to to_uchar. * src/m4.h: Include c-ctype.h instead of ctype.h. 2020-07-11 Paul Eggert Regenerate bootstrap Convert m4.texi from Latin-1 to UTF-8 * HACKING: Texinfo 4.11 and Autoconf 2.63 are now prereqs. * doc/m4.texi: Convert to UTF-8. 2020-07-05 Paul Eggert Port to recent GCC with --enable-gcc-warnings * m4/gnulib-cache.m4: Add attribute, verify. * src/m4.c (m4_failure, m4_failure_at_line): New functions. These replace all uses of M4ERROR ((EXIT_FAILURE, ...)) and M4ERROR_WITH_LINE ((EXIT_FAILURE, ...), so that the compiler can deduce they do not return. * src/m4.h: Include attribute.h, verify.h. (M4_GNUC_ATTRIBUTE, M4_GNUC_UNUSED, M4_GNUC_PRINTF) (M4_GNUC_NORETURN, M4_GNUC_PURE): Remove. All uses replaced by corresponding attributes from attribute.h. Also, use attribute.h’s FALLTHROUGH macro as needed in all files. * src/macro.c (expand_macro): Cast to uintptr_t instead of to char * to pacify GCC alignment warning. maint: update copyright date Arrived at via: make update-copyright gl/build-aux/inline-source gl/build-aux/bootstrap.in > bootstrap build: adjust to gnulib changes * configure.ac: Require Autoconf 2.63; needed by Gnulib. * m4/gnulib-cache.m4: Regenerate. 2020-07-05 Bruno Haible Update after gnulib changed * src/output.c (m4_tmpfile, m4_tmpopen): Update fopen_temp invocations. * gl/lib/clean-temp.c.diff: Remove file, no longer needed. 2020-07-05 Paul Eggert build: update gnulib submodule to latest 2017-01-02 Eric Blake maint: bump copyright year Needed to keep 'make syntax-check' passing. * gnulib: Update to latest. * bootstrap: Regenerate. * all files: Use 'make update-copyright' to bump year. 2016-12-31 Eric Blake maint: post-release administrivia * NEWS: Add header line for next release. * .prev-version: Record previous version. * cfg.mk (old_NEWS_hash): Auto-update. version 1.4.18 * NEWS: Record release date. doc: abbreviate and update release history * doc/m4.texi (History): Shorten, and call out today's release. 2016-12-31 Eric Blake maint: automate creation of release tag The gnulib makefile was already set up to automate things with 'make release ...', but we were still doing things by hand, and thereby risking missing some steps. * m4/gnulib-cache.m4 (gl_MODULES): Import do-release-commit-and-tag. * gnulib: Update, for latest version of the script. * HACKING: Mention its use. 2016-12-31 Eric Blake maint: generate ChangeLog from git commits Follow the practice set in numerous other GNU projects, where the ChangeLog (since 2015) is generated from git commit messages. This avoids duplication or subtle differences between the two, as well as making it easier to merge patches across branches (as good as Bruno Haible's 'git-merge-changelog' helper program is, it still doesn't handle cross-branch cherry-picks very well). * ChangeLog: Move... * ChangeLog-2014: ...to this. * Makefile.am (EXTRA_DIST): Ship renamed file. (gen-ChangeLog): New rule, copied mostly from coreutils. (dist-hook): Generate the ChangeLog. * m4/gnulib-cache.m4 (gl_MODULES): Import gitlog-to-changelog. * .gitignore: Ignore ChangeLog. * .gitattributes: Likewise. * HACKING: Reword to match new procedure, and simplify by referring to an external description of ChangeLog style. 2016-12-31 Eric Blake maint: summarize highlights of pending release * NEWS: Add some blurbs. 2016-12-31 Eric Blake maint: make silent builds the default The user still has full control over verbosity levels, both setting their per-project defaults at configure time (or even in a config.site file), as well as a per-run override. But these days, most projects are defaulting to silent rules without user intervention. * configure.ac (AM_SILENT_RULES): Add, to match what most projects are doing these days. 2016-12-31 Eric Blake maint: release no longer creates a diff file Ever since commit f1cf390 (1.4.14 release), we no longer create diff files as part of the release process. These days, it is assumed that it is easier to download a fresh tarball rather than to try and use a diff file to patch an older tarball. 2016-12-30 Eric Blake doc: drop obsolete @setcontentsaftertitlepage texinfo 6.1 complains (during 'make dvi'): /home/eblake/m4-1.4/doc/./m4.texi:9: @setcontentsaftertitlepage has been remove d as a Texinfo command; move your @contents command if you want the contents af ter the title page.. It turns out that eliminating the command has no effect - modern tools correctly emit the contents in-place, right after the title page, so it was leftover cruft from an older time. * doc/m4.texi: Satisfy newer texinfo. 2016-12-29 Eric Blake build: update to latest gnulib I hit a weird failure during 'make check', and traced it to a recent gnulib regression in parallel test safety. Pick up the gnulib fix. * gnulib: Update to latest, to fix failure in getopt tests. 2016-12-29 Eric Blake maint: regenerate bootstrap Missed during the copyright update. * bootstrap: Regenerate. 2016-12-29 Eric Blake maint: bump copyright year Sadly, there's no commit in 2015, which means we don't get to benefit from using a copyright range. Done with 'make update-copyright'. * all files: Version control now has a commit in 2016. 2016-12-29 Eric Blake gnulib: Update to latest * gnulib: Update to latest. * m4/gnulib-cache.m4: Regenerate. * src/macro.c (expand_macro): Deal with obstack API change. * src/builtin.c (mkstemp_helper): Likewise.