2021-05-28  Eric Blake  <eblake@redhat.com>

	version 1.4.19
	* NEWS: Record release date.

2021-05-28  Eric Blake  <eblake@redhat.com>

	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  <bruno@clisp.org>

	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  <eblake@redhat.com>

	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  <eblake@redhat.com>

	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  <eblake@redhat.com>

	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  <eblake@redhat.com>

	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  <eblake@redhat.com>

	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  <eblake@redhat.com>

	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  <eblake@redhat.com>

	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  <bruno@clisp.org>

	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  <eblake@redhat.com>

	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  <eblake@redhat.com>

	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  <eblake@redhat.com>

	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 <jemarch@gnu.org> on
	the gnu-prog-discuss mailing list.

2021-04-22  Eric Blake  <eblake@redhat.com>

	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  <eblake@redhat.com>

	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  <eblake@redhat.com>

	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  <eblake@redhat.com>

	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  <eblake@redhat.com>

	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  <eggert@cs.ucla.edu>

	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  <eblake@redhat.com>

	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  <eblake@redhat.com>

	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  <eblake@redhat.com>

	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  <eblake@redhat.com>

	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  <bruno@clisp.org>

	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  <eggert@cs.ucla.edu>

	* HACKING: Autoconf 2.64 required now.

2020-08-23  Bruno Haible  <bruno@clisp.org>

	build: Fix bootstrap failure with the newest gnulib.
	* configure.ac: Require Autoconf 2.64 at least.

2020-07-17  Paul Eggert  <eggert@cs.ucla.edu>

	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  <eggert@cs.ucla.edu>

	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  <eggert@cs.ucla.edu>

	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  <eggert@cs.ucla.edu>

	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  <bruno@clisp.org>

	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  <eggert@cs.ucla.edu>

	build: update gnulib submodule to latest

2017-01-02  Eric Blake  <eblake@redhat.com>

	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  <eblake@redhat.com>

	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  <eblake@redhat.com>

	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  <eblake@redhat.com>

	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  <eblake@redhat.com>

	maint: summarize highlights of pending release
	* NEWS: Add some blurbs.

2016-12-31  Eric Blake  <eblake@redhat.com>

	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  <eblake@redhat.com>

	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  <eblake@redhat.com>

	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  <eblake@redhat.com>

	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  <eblake@redhat.com>

	maint: regenerate bootstrap
	Missed during the copyright update.

	* bootstrap: Regenerate.

2016-12-29  Eric Blake  <eblake@redhat.com>

	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  <eblake@redhat.com>

	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.
