Bump to 4.4
[platform/upstream/make.git] / ChangeLog
index 3dee3b6..59f71f5 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
+2022-10-31  Paul Smith  <psmith@gnu.org>
+
+       Release GNU Make 4.4
+       * NEWS: Update the version and date.
+       * configure.ac: Update the version.
+       * doc/make.texi: Update the EDITION.
+
+       * README.git: Update and clarify release operations
+
+       Fix issues found by ASAN and Coverity
+       * tests/test_driver.pl: Preserve the LSAN_OPTIONS variable.
+       * tests/scripts/targets/ONESHELL: Don't set a local variable.
+       * tests/scripts/functions/let: Test empty let variable.
+       * src/posixos.c (osync_parse_mutex): Free existing osync_tmpfile.
+       * src/misc.c (get_tmpfd): Set umask() before invoking mkstemp().
+       * src/ar.c (ar_parse_name): Check invalid name (shouldn't happen).
+       * src/function.c (define_new_function): Free previous function entry
+       when replacing it with a new one.
+       * src/job.c (child_execute_job): Initialize pid for safety.
+       (construct_command_argv_internal): In oneshell mode ensure that the
+       returned argv has the right format (0th element is a pointer to the
+       entire buffer).
+
+2022-10-29  Paul Smith  <psmith@gnu.org>
+
+       Avoid C99 constructs
+       Although gnulib requires C99, most of the code does compile with a
+       C90 compiler (perhaps with a lot of warnings).  Reinstate our C90
+       configuration test, and clean up a few C99 things that crept in.
+
+       * src/job.c (construct_command_argv_internal): Don't use loop-local
+       variables or C++ comments.
+       * src/read.c (eval_makefile): Don't use loop-local variables.
+
+2022-10-29  Paul Smith  <psmith@gnu.org>
+
+       * build.sh: Allow a "keep-going" mode during builds
+
+2022-10-29  Paul Smith  <psmith@gnu.org>
+
+       tests: Avoid the use of File::Temp->newdir()
+       This was added in Perl 5.8 but some systems still only provide older
+       versions such as Perl 5.6.  We don't really need it anyway.
+       Paul Eggert <eggert@cs.ucla.edu> reported this issue.
+
+       * tests/README: Update this to be a bit more modern.
+       * tests/test_driver.pl: Delete the $TEMPDIR variable.
+       * tests/scripts/features/temp_stdin: Use $temppath not $TEMPDIR.
+
+2022-10-29  Paul Smith  <psmith@gnu.org>
+
+       * src/posixos.c (os_anontmp): [SV 63287] Only fail O_TMPFILE once
+       Reported by Dmitry Goncharov <dgoncharov@users.sf.net>.
+
+2022-10-28  Paul Smith  <psmith@gnu.org>
+
+       [SV 62174] Force locale to be "C" before retrieving error messages
+       We attempt to do this with POSIX::setlocale() but apparently on some
+       systems (AIX) this isn't sufficient.  So, in addition force the LC
+       environment variables to use "C".
+       Reported by Dmitry Goncharov <dgoncharov@users.sf.net>.
+
+       * tests/run_make_tests.pl: Move the global setup into set_default().
+       Force the %ENV locale variables to use the ones we'll use when running
+       make, then reset them back again after we find error messages.
+
+2022-10-27  Paul Smith  <psmith@gnu.org>
+
+       * src/job.c: [SV 63185] Don't use ifdef with HAVE_DECL_* macros
+
+2022-10-25  Paul Smith  <psmith@gnu.org>
+
+       * tests/scripts/features/exec: Don't test with C shells
+       Using C shells (csh, tcsh) with make is known to be problematic due
+       to incorrect ways it handles open file descriptors, at least.  If
+       the user's shell is *csh then don't try it during exec tests.
+
+2022-10-25  Paul Smith  <psmith@gnu.org>
+
+       Increase the test framework timeout from 5s to 60s
+       It seems that some of the test environments hit the 5s timeout on
+       some tests.  Since it doesn't really matter, as long as we don't
+       hang forever, increase the timeout to 60s.
+
+       * tests/test_driver.pl: Increase $test_timout to 60.  We don't need
+       to handle VMS timeouts specially anymore.
+       * tests/scripts/features/parallelism: We don't need to override the
+       default timeout anymore.
+       * tests/scripts/features/patternrules: Remove confusing comment.
+
+2022-10-25  Paul Smith  <psmith@gnu.org>
+
+       * Makefile.am (check-regression): Add a random suffix to results file
+       Put the results into a subdirectory for easy unpacking.
+       * .gitignore: Ignore it.
+
+2022-10-24  Paul Smith  <psmith@gnu.org>
+
+       Release GNU Make 4.3.92
+       * configure.ac: Modify the release version.
+       * NEWS: Update the version and date.
+
+2022-10-24  Paul Smith  <psmith@gnu.org>
+
+       [SV 63260] Don't recurse forever if setup_tmpfile() fails
+       If we fail during setup_tmpfile() we'll try to write an error, which
+       will invoke setup_tmpfile() again, etc.  Avoid infinite recursion.
+       Original patch by Dmitry Goncharov <dgoncharov@users.sf.net>
+
+       * src/output.c (setup_tmpfile): Remember we're in this function and
+       return immediately if we enter it during recursion.
+       (message): Remember the starting location and use that instead of
+       fmtbuf.buffer.
+       (error): Ditto.
+       (fatal): Ditto.
+
+2022-10-24  Paul Smith  <psmith@gnu.org>
+
+       * src/output.c (_outputs): Don't use invalid output sync FDs
+       Just write to stdout/stderr in this situation.
+
+       * src/misc.c (get_tmpdir): Report errors if tmpdirs are invalid
+       * src/main.c (main): Set up initial temporary directories.
+
+2022-10-23  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       * src/posixos.c (os_anontmp): If O_TMPFILE fails try dup() method.
+
+2022-10-23  Paul Smith  <psmith@gnu.org>
+
+       * src/rule.c (get_rule_defn): Don't use STRING_SIZE_TUPLE in mempcpy
+       If mempcpy() is a macro then STRING_SIZE_TUPLE won't compile.
+
+2022-10-23  Paul Smith  <psmith@gnu.org>
+
+       Provide a maintainer-only debug method
+       Generating debug logs to stdout or stderr makes it impossible to
+       run tests etc. so create a dumb DBG facility to log to a temp file.
+       This exists only in maintainer mode and the DBG macro gives a
+       compile error if it's used in non-maintainer mode.
+
+       * src/makeint.h (DBG): Call dbg() in maintainer mode, else error.
+       (dbg): Define it in maintainer mode.
+       * src/misc.c (dbg): Open a log file for append, write, then close.
+
+2022-10-22  Paul Smith  <psmith@gnu.org>
+
+       * configure.ac: Check that we can link with Guile
+       On multi-arch systems we may be able to find the header file but
+       not successfully link the library.
+
+2022-10-22  Paul Smith  <psmith@gnu.org>
+
+       Set PATH_MAX on systems without a default value
+       Some systems (HURD) use fully-dynamic pathnames, with no limit.
+       We can't support this without significant effort so for now set
+       PATH_MAX to a large value.
+
+       * src/makeint.h: Set PATH_MAX to 4096 if not set and MAXPATHLEN
+       is also not set.  Remove MAXPATHLEN setting: we won't use it.
+       * src/misc.c (get_path_max): If we can't get the path max via
+       pathconf() use the default PATH_MAX.
+       * src/dir.c (find_directory) [W32]: Use MAX_PATH not MAXPATHLEN.
+       (local_stat) [W32]: Ditto.
+       * src/job.c (create_batch_file) [W32]: Ditto.
+       * src/remake.c (name_mtime) [W32]: Ditto.
+       * src/w32/w32os.c (os_anontmp) [W32]: Ditto.
+
+2022-10-22  Paul Smith  <psmith@gnu.org>
+
+       [SV 63098] Enhance detection of missing peer also-make targets
+       The previous attempt to detect missing peer targets for implicit
+       rules had some holes.  Move the detection to notice_finished_file().
+
+       * src/remake.c (check_also_make): If we don't have the current mtime
+       for the file, obtain it.
+       (update_goal_chain): Don't call check_also_make() here.
+       (check_dep): Ditto.
+       (notice_finished_file): If we finished running an implicit rule that
+       has also_make targets, invoke check_also_make().
+
+2022-10-22  Paul Smith  <psmith@gnu.org>
+
+       Collect failure details when the regression tests fail
+       * README.in: Add a section on running regression tests.
+       * Makefile.am (check-regression): Capture the test run output, and
+       on failure collect configure and test results into a tar file.
+
+2022-10-22  Paul Smith  <psmith@gnu.org>
+
+       Enhance tests to work on different systems
+       The GNU platform testers reported a number of test errors on
+       different systems; try to address them.
+
+       * tests/thelp.pl: A number of tests timed out with a 4-second
+       timeout.  Increase the default timeout to 10 seconds.
+       * tests/run_make_tests.pl: Executing directories on cygwin behaves
+       differently in Perl than make so skip these tests there.
+       * tests/scripts/options/symlinks: Check for the symlink feature
+       in make, rather than whether the system supports them.
+       * tests/scripts/features/implicit_search: On some systems "false"
+       exits with a different exit code.  Use the helper instead.
+       * tests/scripts/features/loadapi: Ditto.
+       * tests/scripts/features/output-sync: Sleep before make -f bar in
+       the first test as well as the second one.
+       * tests/scripts/features/exec: Skip on cygwin, which seems to
+       be "UNIX" but where scripts don't run normally.
+       * tests/scripts/misc/fopen-fail: Skip on cygwin, where make
+       eventually exits with exit code 0 and no error messages.
+
+2022-10-22  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 63243] tests: Avoid SIGTERM racing with make error messages
+       Original patch from Frank Heckenbach <f.heckenbach@fh-soft.de>.
+
+       * tests/scripts/features/output-sync: Introduce a sleep to let make
+       write its error message.  Some systems use different names for
+       SIGTERM so match with a regex.
+       * tests/scripts/features/temp_stdin: Ditto.
+
+2022-10-22  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 63236] Fix getloadavg related error message on AIX
+       On AIX getloadavg keeps errno intact when it fails, resulting in a
+       bogus error message from make.
+
+       * src/job.c (load_too_high): Reset errno before calling getloadavg.
+
+2022-10-22  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 63248] Ignore SIGPIPE
+       Don't terminate when make's output is redirected to a pipe and the
+       reader exits early; e.g.:
+         $ echo 'all:; sleep 2' | make -f- -j2 -O |:
+
+       This lets us unlink temporary files, and tell the user that make was
+       not able to write its output.
+       Reported by Frank Heckenbach <f.heckenbach@fh-soft.de>.
+
+       * src/main.c (main): Ignore SIGPIPE.
+       * src/posixos.c (osync_clear): Fix a memory leak.
+
+2022-10-18  Paul Smith  <psmith@gnu.org>
+
+       * NEWS: Release GNU make 4.3.91
+
+       * AUTHORS: Update the authors list.
+
+       * NEWS: Use GNU Make instead of GNU make
+       * README.git: Ditto.
+       * README.Amiga: Ditto.
+       * README.DOS: Ditto.
+       * README.OS2: Ditto.
+       * README.VMS: Ditto.
+       * README.W32: Ditto.
+       * README.customs: Ditto.
+       * make-gdb.py: Ditto.
+       * tests/run_make_tests.pl: Ditto.
+
+       Update URLs to use https rather than http
+       * (all): Change http:// to https://
+       * README.W32: Remove invalid link to mingw.org.
+
+2022-10-18  Paul Smith  <psmith@gnu.org>
+
+       Rework temp file handling to avoid GNU libc warnings
+       Original patch provided by Paul Eggert <eggert@cs.ucla.edu>.
+       GNU libc will generate a link-time warning if we use mktemp() even
+       though we are using it safely (we only use it with mkfifo()).
+       Avoid this and clean up some handling.
+
+       First, check all calls related to temporary files and exit with a
+       fatal error and a useful message if we can't obtain them.  In some
+       situations it might be possible to continue with reduced capability
+       but it's not worth the effort.
+
+       On POSIX systems we can create anonymous temp files using O_TMPFILE
+       if it's supported, else if we're using the default location and we
+       have dup(2), we can use standard tmpfile() and get an FD from it.
+
+       If we need a named temp file and FILE* and we have mkstemp() we can
+       use that, else if we have fdopen() we can get a temp FD and open it.
+       If none of those are available all we can do is generate a temp name
+       then open it with fopen() which is not secure.
+
+       * src/makeint.h (get_tmpdir): Declare it for use elsewhere.
+       * src/misc.c (get_tmpdir): Make it public not static.
+       (get_tmptemplate): Simplify the implementation.
+       (get_tmppath): Only define this if we have to have it to avoid
+       warnings from GNU libc.
+       (get_tmpfd): Generate fatal errors on error.
+       (get_tmpfile): Ditto.  Open files in "wb+" mode to match tmpfile().
+       Require a filename pointer (all callers want it).
+       * src/os.h (os_anontmp): Implement for posixos.c as well.
+       * src/posix.c (jobserver_setup): Don't use mktemp to avoid GNU libc
+       errors.  Instead construct the FIFO name based on the PID.
+       (osync_setup): get_tmpfd() can't fail so don't check it.
+       (os_anontmp): If the system supports O_TMPFILE use it.  If not, and
+       we want to create the temporary file in the default directory, we
+       can use tmpfile() then use dup() to copy the file descriptor.
+       * src/main.c (main): get_tmpfile() can't fail.
+       * src/vmsjobs.c (child_execute_job): get_tmpfile() can't fail.
+
+2022-10-18  Paul Smith  <psmith@gnu.org>
+
+       Add ISDIRSEP() helper macro and use it
+       Create a ISDIRSEP() macro to check for directory separator chars
+       using the stopchar_map, and replace inline checks and explicit
+       STOP_SET calls with this macro.
+
+       * src/makeint.h (ISDIRSEP): Create the macro using MAP_DIRSEP.
+       * src/dir.c (find_directory): Replace inline checks with ISDIRSEP.
+       (file_exists_p): Ditto.
+       (file_impossible): Ditto.
+       (file_impossible_p): Ditto.
+       (local_stat): Ditto.
+       * src/file.c (lookup_file): Ditto.
+       * src/function.c (abspath): Ditto.
+       * src/job.c (_is_unixy_shell): Ditto.
+       (is_bourne_compatible_shell): Ditto.
+       (construct_command_argv): Ditto.
+       * src/main.c (find_and_set_default_shell): Ditto.
+       (main): Ditto.
+       * src/read.c (eval): Ditto.
+       (parse_file_seq): Ditto.
+       * src/remake.c (name_mtime): Ditto.
+       * src/vpath.c (construct_vpath_list): Ditto.
+
+2022-10-18  Paul Smith  <psmith@gnu.org>
+
+       Add preprocessor macros for different platforms
+       * configure.ac: MK_CONFIGURE shows config.h was generated by configure.
+       * src/config.ami: Define MK_AMIGAOS.
+       * src/config.h-vms: Define MK_VMS.
+       * src/configh.dos: Define MK_DJGPP.
+       * src/config.h.W32: Define MK_W32 and WINDOWS32.
+       * src/build_w32.bat: Let WINDOWS32 be defined by config.h.  Remove
+       unused setting of WIN32.
+       * src/job.c: Clean up use of WIN32.
+       * src/main.c: Ditto.
+       * tests/scripts/features/default_names: Ditto.
+
+2022-10-18  Paul Smith  <psmith@gnu.org>
+
+       Check for recipe line count overflow before it overflows
+       awk 'BEGIN {
+              print "x:"
+              for (i = 0; i < 65536; i++)
+                printf "\techo %d\n", i}
+           ' | make -f -
+
+       Outputs only "make: 'x' is up to date."  Larger values run only the
+       lines above 65536.  Reported by Paul Eggert <eggert@cs.ucla.edu>.
+
+       * src/commands.c (chop_commands): Check the line count before it has
+       a chance to overflow.  Use size_t for max count so it can't overflow.
+       Remove stray 'd' in diagnostic.
+
+2022-10-18  Paul Smith  <psmith@gnu.org>
+
+       Remove template files to simplify distribution creation
+       The README templates were not useful since the replacement step
+       didn't have anything to replace: rename them.
+
+       Rather than creating template files for the config variants, create
+       mkconfig.h.in containg PACKAGE_* variables to be replaced, and have
+       config variant header files include it.  Note on POSIX we don't use
+       this, and continue to generate a single config.h.in file.
+
+       Use config.status to convert the README.in and mkconfig.h.in files
+       during distribution creation.
+
+       Modify all users of VERSION to use PACKAGE_VERSION instead.
+
+       * configure.ac: Use GNU Make not GNU make as the package name.
+       * README.in: Use GNU Make not GNU make.
+       * README.git: Remove references to README.W32.template.
+       * .gitignore: Update for new behavior.
+       * Basic.mk.template: Remove unused posix_SOURCES and VERSION, and
+       references to unshipped mk/Posix.mk
+       * Makefile.am: Add src/mkconfig.h as an extra dist file.
+       * bootstrap.bat: Rewrite mkconfig.h.in to mkconfig.h
+       * maintMakefile: Remove obsolete template files; add mkconfig.h.in.
+       * prepare_vms.com: Rewrite mkconfig.h.in to mkconfig.h
+       * mk/VMS.mk: Fix incorrect header file prerequisite.
+       * src/mkconfig.h.in: New file containing PACKAGE variables.
+       * src/config.ami: Include mkconfig.h.
+       * src/config.h.W32: Ditto.
+       * src/configh.dos: Ditto.
+       * src/config.h-vms: Ditto.
+       * src/version.c: Use PACKAGE_VERSION not VERSION.
+
+2022-10-16  Juan M. Guerrero  <juan.guerrero@gmx.de>
+
+       Support building with DJGPP 2.05
+       * builddos.bat: Use env var settings for paths.  Fix a typo in
+       expand.o.  Add the missing load.o compilation and link.  Enable
+       Guile support.  Copy Basic.mk from the correct location.
+       * src/configh.dos.templage: DJGPP supports strtoll() and ssize_t
+       given new enough versions.  Set preprocessor variables to 1 not 0.
+
+2022-10-16  Paul Smith  <psmith@gnu.org>
+
+       * src/job.c: [SV 63185] Include sys/loadavg.h if needed.
+
+2022-10-16  Paul Smith  <psmith@gnu.org>
+
+       [SV 63215] Remember the random seed for shuffle mode
+       Basic fix provided by James Hilliard <james.hilliard1@gmail.com>.
+       Ensure we remember and propagate the random seed we generate during
+       shuffle mode.  Also add a debug statement displaying the seed.
+
+       * src/shuffle.c (shuffle_set_mode): Init and save the randoms seed.
+       * src/misc.c (make_rand): Code cleanups.
+       * src/main.c (main): Show a debug message containing the seed.
+
+2022-10-15  Paul Smith  <psmith@gnu.org>
+
+       Use (void) rather than () in function declarations
+       In C, a function declaration with () allows any set of arguments.
+       Use (void) to mean "no arguments".
+
+       * src/dep.h: Switch () to (void) for functions with no arguments.
+       * src/makeint.h: Ditto.
+       * src/os.h: Ditto.
+       * src/shuffle.h: Ditto.
+       * src/variable.h: Ditto.
+
+2022-10-15  Paul Smith  <psmith@gnu.org>
+
+       [SV 63157] Ensure temporary files are removed when signaled
+       Original patch from Dmitry Goncharov <dgoncharov@users.sf.net>.
+       When handling a fatal signal ensure the temporary files for
+       stdin and the jobserver fifo (if in use) are deleted.
+
+       * src/makeint.h (temp_stdin_unlink): Declare a new method.
+       * src/main.c (temp_stdin_unlink): Delete the stdin temporary file
+       if it exists.  If the unlink fails and we're not handling a signal
+       then show an error.
+       (main): Call temp_stdin_unlink() instead of unlinking by hand.
+       * src/commands.c (fatal_error_signal): Invoke cleanup methods if
+       we're handling a fatal signal.
+       * tests/scripts/features/output-sync: Test signal handling during
+       output sync and jobserver with FIFO.
+       * tests/scripts/features/temp_stdin: Test signal handling when
+       makefiles are read from stdin.
+
+2022-10-15  Paul Smith  <psmith@gnu.org>
+
+       * src/posixos.c (job_root): Remember root jobserver instances
+       (jobserver_setup): Set job_root to true.
+       (jobserver_clear): if we're the root instance and we're using a
+       FIFO, unlink it.  If we're not in a signal handler, free memory.
+       (jobserver_acquire_all): Call jobserver_clear().
+       (sync_root): Rename from sync_parent for consistency.
+
+       Set the proper type for variables set in signal handlers
+       * bootstrap.conf: Get gnulib's sig_atomic_t type checking M4 macro.
+       * configure.ac: Invoke it.
+       * src/makeint.h (handling_fatal_signal): Set the type correctly.
+       * src/commands.c (handling_fatal_signal): Ditto.
+
+2022-10-08  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       * tests/test_driver.pl (toplevel): [SV 63156] Keep temp env vars
+
+2022-10-03  Paul Smith  <psmith@gnu.org>
+
+       Clean up some warnings on Windows builds
+       * src/arscan.c (parse_int): Avoid conversion from int to char and
+       check for overflow given a max value.
+       (ar_scan): Check intmax sizes then cast to the proper type.
+       (ar_member_touch): Get proper return type from ar_scan and cast it
+       to off_t.
+       * src/function.c (a_word_hash_cmp): Don't cast from size_t to int.
+       (func_filter_filterout): Count using unsigned long to avoid casts.
+       (construct_include_path): Explicitly cast to void*.
+       * src/shuffle.c (reverse_shuffle_array): Use size_t index.
+       * src/w32/subproc/sub_proc.c (process_wait_for_multiple_objects):
+       Initialize the return value in case the count is 0.
+
+       * src/misc.c (make_lltoa): Use printf format macro from makeint.h
+       (make_ulltoa): Ditto.
+
+       * src/arscan.c (ar_scan): Avoid sign comparison warnings
+       Pacify 12.2.1 20220819 (Red Hat 12.2.1-2) -Wsign-compare by checking
+       the readbuf() return explicitly for errors then casting from ssize_t.
+       Initial patch provided by Paul Eggert <eggert@cs.ucla.edu>.
+
+2022-10-03  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Support systems with 32-bit long and 64-bit time_t
+       Don't assume that time_t fits in long, as some hosts (e.g.,
+       glibc x86 -D_TIME_BITS=64) have 32-bit long and 64-bit time_t.
+
+       * bootstrap.conf (gnulib_modules): Add largefile, to support files
+       with timestamps after Y2038 on hosts with 32-bit long.
+       * configure.ac: Do not call AC_SYS_LARGEFILE, as the largefile module
+       does that for us.
+       * src/makeint.h (PRIdMAX, PRIuMAX, SCNdMAX): Define if not already
+       defined (taken from gnulib).
+       * src/ar.c: Include intprops.h, for TYPE_MAXIMUM, as
+       INTEGER_TYPE_MAXIMUM does not work on time_t without issuing a bunch
+       of warnings.
+       (ar_member_date): Check that result is in time_t range.
+       (ar_member_date_1): Use intmax_t to hold the date.
+       (ar_glob_match): Ditto.
+       * src/arscan.c (VMS_function, VMS_function_ret, ar_scan)
+       (parse_int, ar_scan, ar_member_pos, ar_member_touch)
+       (describe_member): Convert long int to intmax_t.
+       * src/file.c (file_timestamp_sprintf): Use intmax_t/uintmax_t instead
+       of long/unsigned long for values that might be time_t.
+       * src/arscan.c (ar_member_touch): Fix buffer overrun if the timestamp
+       is too large.
+
+2022-10-03  Paul Smith  <psmith@gnu.org>
+
+       Add support for intmax_t
+       * configure.ac: Ask autoconf to detect it.
+       * src/config.ami.template: Add #define intmax_t for AmigaOS.
+       * src/config.h-vms.template: Add #define intmax_t for VMS.
+       * src/config.h.W32.template: Add #define intmax_t for Windows.
+       * src/configh.dos.template: Add #define intmax_t for MS-DOS/DJPP.
+
+       * NEWS: Deprecate Xenix
+
+2022-10-02  Paul Smith  <psmith@gnu.org>
+
+       [SV 63098] Temporarily revert the change to pattern rule behavior
+       The fix for SV 12078 caused a backward-compatibility issue with some
+       makefiles.  In order to allow users to resolve this issue, revert
+       that change for this release cycle: it will be reinstated in the
+       next release cycle.  Introduce a warning if we detect that the recipe
+       of a multi-target pattern rule doesn't create all the targets.
+
+       * NEWS: Announce the future backward-incompatibility.
+       * doc/make.texi (Pattern Intro): Describe the behavior and that it
+       will change in the future.
+       * src/remake.c (check_also_make): Check for also_make targets that
+       were not created and generate a warning.
+       (update_goal_chain): Call the new function.
+       (check_dep): Ditto.
+       (update_file_1): Defer implicit rule detection until after we check
+       all the also_make files (as it used to be).
+       * tests/scripts/features/patternrules: Add tests of the new warning.
+       Skip the tests for SV 12078.
+
+2022-10-02  Paul Smith  <psmith@gnu.org>
+
+       * doc/make.texi (Prerequisite Types): [SV 58056] Clarify ordering.
+
+       * src/filedef.h (is_ordinary_mtime): Check for "ordinary" mod time.
+       * src/remake.c (update_file_1): Use the new macro.
+
+       * src/remake.c (update_file_1): Return valid enum element, not 0.
+
+       * NEWS: Announce deprecation of OS/2 and AmigaOS ports
+
+       * src/main.c (main): Add debug output for jobserver and osync.
+       * src/posixos.c (jobserver_setup): Remove redundant debug output.
+       (jobserver_parse_auth): Ditto.
+
+2022-10-02  Andreas Schwab  <schwab@suse.de>  (tiny change)
+
+       [SV 63111] Ensure output-sync is cleaned on re-exec and recursion
+       Now that output-sync is using a separate file as a mutex rather than
+       stdout, ensure the new file descriptor is closed before re-exec and
+       not inherited by children.
+
+       * src/main.c (main): Call osync_clear() before re-exec.
+       * src/posixos.c (osync_setup): Reset output-sync handle inheritance.
+       (osync_parse_mutex): Ditto.
+
+2022-10-01  Paul Smith  <psmith@gnu.org>
+
+       * src/function.c: Change int to uint to align with gmk_func_ptr
+
+2022-10-01  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       * doc/make.texi (Loaded Object API): [SV 63126] Fix typos and examples
+
+2022-10-01  Paul Smith  <psmith@gnu.org>
+
+       Implement a simple xorshift 32bit random number generator
+       Avoid relying on the system random number generator for our random
+       shuffle, so that the same seed gives the same results on all systems.
+       This generator doesn't need to be amazing, just pretty good, so don't
+       bother with xorshift* or xorshift+, etc.
+
+       * src/makeint.h: Declare make_seed() and make_rand().
+       * src/misc.c (make_seed): Set the seed value for the RNG.
+       (make_rand): Return the next random number.  If the seed was not set
+       initialize it first.
+       * src/shuffle.c (shuffle_set_mode): If we don't get a seed from the
+       user just leave it unset (0).
+       (shuffle_deps_recursive): Use make_seed() not srand().
+       (random_shuffle_array): Use make_rand() not rand().
+
+2022-09-25  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 63100] Set the floc of every created goal dep struct
+       * src/read.c (eval): Initialize the goaldep floc pointer.
+       * tests/scripts/features/loadapi: Verify that the floc is set after
+       unloading and reloading dynamic objects.
+
+2022-09-25  Paul Smith  <psmith@gnu.org>
+
+       * doc/make.texi: Update out of date behavior for grouped targets.
+
+       * README.git: Announce releases to the platform-testers list
+
+2022-09-25  Paul Smith  <psmith@gnu.org>
+
+       Provide new functions to convert long long to string
+       The previous attempt to use PRI* macros to avoid compiler-specific
+       printf format specifiers didn't work because we are using raw
+       long long type, not the uintX_t types.  On systems where long and
+       long long are the same size, uint64_t might be type "long" and PRId64
+       is just "ld".
+
+       Instead write new functions that convert [unsigned] long long to a
+       string and call those instead.
+
+       * src/makeint.h: Declare make_lltoa() and make_ulltoa().
+       * src/misc.c (make_lltoa): New function that writes a long long value
+       into a provided buffer.  Return the buffer for ease-of-use.
+       (make_ulltoa): Ditto, for unsigned long long.
+       * src/function.c (func_wordlist): Call these new methods.  Also
+       rework the error strings so we share the translated string.
+       * src/dir.c (print_dir_data_base): Call the new methods instead of
+       using MSVC macros.
+
+2022-09-25  Paul Smith  <psmith@gnu.org>
+
+       Always restore global environ if we use vfork
+       We may change the global environ variable in the child; when using
+       vfork() this also sets it in the parent.  Preserve the parent's
+       environ in child_execute_job() so it takes effect for all callers.
+
+       Reported by Denis Excoffier <bug-tar@Denis-Excoffier.org>
+       Root cause found by Martin Dorey <Martin.Dorey@hitachivantara.com>
+
+       * src/job.c (start_job_command): Remove save/restore of the parent
+       environment.
+       (child_execute_job): Add save/restore of the parent environment,
+       if we use vfork().
+       * tests/scripts/functions/shell: Add a test the crashes if we don't
+       reset environ after we run $(shell ...).
+
+2022-09-25  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       * configure.ac: [SV 63070] Clean up the test program for posix_spawn.
+
+2022-09-25  Paul Smith  <psmith@gnu.org>
+
+       * src/posixos.c (osync_clear): Don't close invalid FDs.
+
+       * maintMakefile: Use gnulib ncftpput-ftp if ncftpput is missing.
+
+       * src/misc.c (strncasecmp): Use size_t for length to match std.
+       * src/misc.h (strncasecmp): Fix the declaration.
+
+       * configure.ac: Update to GNU make 4.3.91
+       * NEWS: Update the version and clarify some backward-compat issues.
+
+2022-09-25  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix compiler warnings in the MS-Windows build.
+       * src/w32/w32os.c (osync_get_mutex, osync_parse_mutex): Cast to
+       DWORD_PTR when converting integers to HANDLEs and vice versa.
+
+       * src/w32/pathstuff.c (w32ify): Pacify compiler warnings about
+       'strncpy'.
+
+       * src/makeint.h (PRId64) [!HAVE_INTTYPES_H]: Define if undefined.
+       * src/function.c (func_wordlist): Use PRId64 instead of %lld.
+
+2022-09-24  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid compilation warnings
+       * src/implicit.c: (pattern_search):
+       * src/main.c: (main): Avoid compilation warnings for variables
+       only used when compiling a debug version with assertions.
+
+2022-09-20  Paul Smith  <psmith@gnu.org>
+
+       Release GNU make 4.3.90
+       * NEWS: Update for the prerelease.
+       * bootstrap.conf: Choose the latest stable gnulib.
+       * README.git: Updates.
+
+       * tests/script/parallelism: Force wait to remove races.
+
+2022-09-20  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 56301] Fail if an included makefile can't be built
+       Fail if a mandatory include file fails to be built even if it's
+       built as part of a grouped target where the other include file
+       is optional.
+
+       * src/main.c (main): If a makefile doesn't build set any_failed.
+       * tests/scripts/features/include: Add tests.
+       * tests/scripts/options/dash-k: Stop after include build failure.
+
+2022-09-20  Paul Smith  <psmith@gnu.org>
+
+       * tests/scripts/features/statipattrules: [SV 17374] Add test
+       Verify that double-colon static pattern rules work.
+
+2022-09-20  Paul Smith  <psmith@gnu.org>
+
+       [SV 12078, SV 62809] Rebuild grouped targets if any is missing
+       If any of a set of grouped targets is missing or out of date, even
+       if make is not trying to build that target, rebuild them all.
+       Ensure this is true for explicit grouped targets as well as pattern
+       rule grouped targets.
+
+       Original patch by Jonathan Gravel <jo@stashed.dev>
+
+       * src/remake.c (update_file_1): After matching any pattern rules,
+       go through the also_make targets and set noexist as needed.  Also
+       compute the oldest this_mtime.
+       * tests/scripts/features/grouped_targets: Add regression tests.
+       * tests/scripts/features/patternrules: Ditto.
+       * tests/features/vpath: Rewrite to use modern run_make_test().
+       Add a test that we check for VPATH before implicit rule search.
+       Move the tests in vpath2 and vpath3 into this suite.
+       * tests/features/vpathplus: Rewrite to use modern run_make_test().
+
+2022-09-17  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       * tests/scripts/targets/WAIT: [SV 63071] Remove possible test races.
+
+2022-09-13  Paul Smith  <psmith@gnu.org>
+
+       * doc/make.texi (Parallel Disable): Add clarifications.
+       * NEWS: Suggest how to change makefiles that use $(MAKEFLAGS).
+
+2022-09-12  Paul Smith  <psmith@gnu.org>
+
+       [SV 13862] Implement the .WAIT special target
+       The next version of the POSIX standard defines parallel execution
+       and requires the .WAIT special target as is implemented in some other
+       versions of make.
+
+       This implementation behaves similarly to others in that it does not
+       create a relationship between targets in the dependency graph, so
+       that the same two targets may be run in parallel if they appear as
+       prerequisites elsewhere without .WAIT between them.
+
+       Now that we support .WAIT it's trivial to also support prerequisites
+       of the .NOTPARALLEL special target, which forces the prerequisites of
+       those targets to be run serially (as if .WAIT was specified between
+       each one).
+
+       * NEWS: Announce the new .WAIT and .NOTPARALLEL support.
+       * doc/make.texi (Parallel Disable): A new section to discuss ways in
+       which parallel execution can be controlled.  Modify cross-refs to
+       refer to this section.
+       * src/dep.h (struct dep): Add a new wait_here boolean.
+       (parse_file_seq): Add PARSEFS_WAIT to check for .WAIT dependencies.
+       * src/file.c (split_prereqs): Use PARSEFS_WAIT.
+       (snap_deps): If .NOTPARALLEL has prerequisites, set .WAIT between
+       each of _their_ prerequisites.
+       (print_prereqs): Add back in .WAIT when printing prerequisites.
+       * src/implicit.c (struct patdeps): Preserve wait_here.
+       (pattern_search): Ditto.  Use PARSEFS_WAIT when parsing prereqs for
+       pattern rule expansion.
+       * src/read.c (check_specials): Don't give up early: remembering to
+       update these options is not worth the rare speedup.
+       (check_special_file): If .WAIT is given as a target show an error--
+       once--if it has prereqs or commands.
+       (record_files): Call check_special_file on each target.
+       (parse_file_seq): If PARSEFS_WAIT is given, look for .WAIT prereqs.
+       If we see one assume that we are building a struct dep chain and set
+       the wait_here option while not putting it into the list.
+       * src/remake.c (update_file_1): If wait_here is set and we are still
+       running, then stop trying to build this target's prerequisites.
+       * src/rule.c (get_rule_defn): Add .WAIT to the prerequisite list.
+       * src/shuffle.c (shuffle_deps): Don't shuffle the prerequisite list
+       if .WAIT appears anywhere in it.
+       * tests/scripts/targets/WAIT: Add a test suite for this feature.
+
+2022-09-12  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 63045] Reload each intact unloaded shared object
+       If makefile rules do not update an unloaded shared object, load it
+       again.  Avoid double loading of the same object if the setup function
+       returns -1.
+
+       * src/filedef.h (struct file): Add "unloaded" flag.
+       * src/makeint.h (load_file): Take struct file *.
+       (unload_file): Return int.
+       * src/main.c (main): Reload unloaded shared objects if they weren't
+       updated.
+       * src/commands.c (execute_file_commands): Set "unloaded" and reset
+       "loaded" when a shared object is unloaded.
+       * src/read.c (eval): Set "loaded" and reset "unloaded" when a shared
+       object is loaded.  Add successfully loaded files to the db.
+       * src/load.c (load_file): Check "loaded" to avoid double loading the
+       same object.  Fix a memory leak of string loaded.  Return -1, rather
+       than 1, if the object is already loaded. This fixes double loading of
+       the same object when the setup routine returns -1.
+       (load_object): Add a log message.
+       (unload_file): Return an error on dlclose failure.  Log a message.
+       * tests/scripts/features/loadapi: Add new tests.
+
+2022-09-12  Sergei Trofimovich  <siarheit@google.com>
+
+       [SV 63047] Fix shuffle of SECONDEXPANSION prerequisites
+       Commit 07eea3aa4 `make --shuffle` prevented shuffling prerequisites
+       that use .SECONDEXPANSION, since shuffle happens before expansion.
+       This has two problems:
+       1. No shuffling happens for such prerequisites.
+       2. Use-after-free when outdated '->shuf' links are used.
+
+       Add a reshuffle into expansion phase right after dependency changes.
+
+       * src/file.c (expand_deps): Add reshuffle if dependencies change.
+       * src/shuffle.c (identity_shuffle_array): Fix comment typo.
+       * tests/scripts/options/shuffle: Add new SECONDEXPANSION test.
+
+2022-09-11  Paul Smith  <psmith@gnu.org>
+
+       * doc/make.texi (How Make Works): Clarify default goal exceptions.
+
+       * src/shuffle.c: Minor coding changes.
+
+2022-09-11  Paul Smith  <psmith@gnu.org>
+
+       Support the MAKE_TMPDIR environment variable
+       Allow build systems to choose an alternative location for make to
+       store its temporary files.
+
+       * NEWS: Announce the new environment variable.
+       * doc/make.texi (Temporary Files): Provide documentation.
+       * src/misc.c (get_tmpdir): Split into a new function.  Compute the
+       temporary directory and store it in a static location.
+       * tests/scripts/features/jobserver: Add a test of MAKE_TMPDIR.
+
+2022-09-10  Paul Smith  <psmith@gnu.org>
+
+       [SV 62898] Document ways to hide special chars from make functions
+       * doc/make.texi (Function Call Syntax): Add a subsubheading describing
+       which special characters may need to be hidden from make functions.
+
+2022-09-10  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 63044] load: Update .LOADED if the setup function returns -1
+       * src/load.c (load_file): Update .LOADED if setup returns non-0.
+       * tests/scripts/features/load: Change the return value based on an
+       environment variable.  Ensure that returning -1 still adds to
+       .LOADED.  Also add a test that verifies that make doesn't try to
+       rebuild the loaded file if -1 is returned.
+
+2022-09-10  Paul Smith  <psmith@gnu.org>
+
+       Enhance the make.texi formatting
+       Notes provided by Tzvetelin Katchov <katchov@gnu.org>.
+
+       * doc/make.texi: Remove obsolete @refill statements.  Add some breaks
+       to overfull lines.  Fix up some example text.
+
+2022-09-10  Paul Smith  <psmith@gnu.org>
+
+       Clean up maintMakefile
+       Notes provided by Tzvetelin Katchov <katchov@gnu.org>
+
+       * maintMakefile (git-very-clean): Add -x to git clean.
+       (GNULIBDIR): Use GNULIB_SRCDIR, or the local module if not set.
+
+2022-09-10  Paul Smith  <psmith@gnu.org>
+
+       [SV 63037] Fix tests for newer OS / compiler
+       * tests/scripts/features/load: Add function prototypes.
+       * tests/scripts/features/temp_stdin: Only set user execute bits.
+       Some configurations don't allow changing the group bits...??
+
+2022-09-10  Paul Smith  <psmith@gnu.org>
+
+       [SV 63040] shell: Fall back to the callers environment
+       If we detect a recursive variable reference when constructing the
+       environment for the shell function, return the original value from the
+       caller's environment.  Other options such as failing, returning the
+       empty string, or returning the unexpanded make variable value have
+       been shown to not behave well in real-world environments.  If the
+       variable doesn't exist in the caller's environment, return the empty
+       string.
+
+       Found by Sergei Trofimovich <slyich@gmail.com> when testing older
+       versions of autoconf.
+
+       * NEWS: Clarify this behavior.
+       * doc/make.texi (Shell Function): Ditto.  Also add info about !=.
+       * src/expand.c (recursively_expand_for_file): Search the caller's
+       environment if we detect a recursive variable expansion.
+       * tests/scripts/functions/shell: Add tests for this behavior.
+
+2022-09-08  Paul Smith  <psmith@gnu.org>
+
+       [SV 63016] Don't fail exporting to $(shell ...)
+       The fix for SV 10593 caused recursive expansion errors when exporting
+       a variable that contains a $(shell ...) invocation.  If we see this
+       type of recursion, ignore it and expand to the empty string rather
+       than failing.
+
+       * src/variable.h (env_recursion): New global variable.
+       * src/variable.c (target_environment): If creating the environment
+       for a $(shell ...) function increment env_recursion.  Remove the
+       check for expansion in a shell function context.
+       * src/expand.c (recursively_expand_for_file): Check for recursive
+       expansion in a $(shell ...) environment context and if present,
+       show the verbose message and return the empty string.
+       * tests/scripts/functions/shell: Add a test for this situation.
+
+2022-09-08  Paul Smith  <psmith@gnu.org>
+
+       Ensure debug output ends in newline
+       * src/load.c (load_object): Debug output strings must include \n.
+       * src/variable.c (target_environment): Ditto.
+       * src/posixos.c: Remove extra newlines.
+
+2022-09-08  Paul Smith  <psmith@gnu.org>
+
+       Sanitize tar file ownership, mode, and order
+       For reproducibility ensure all files in the dist tar file are owned by
+       root, and sorted by name.  Force the mode on all files to be writable
+       by the owner and not writable by group or user, by default.
+
+       Remove unnecessary execute permissions from build_w32.bat.
+
+       Recommended by Tzvetelin Katchov <katchov@gnu.org>.
+
+2022-09-08  Paul Smith  <psmith@gnu.org>
+
+       bootstrap: Update to the latest gnulib bootstrap model
+       * README.git: Document the changes.
+       * bootstrap.conf: Set GNULIB_REVISION to avoid random updates.
+       * configure.ac: Set the minimum autoconf version back to 2.69:
+       that's the most common version deployed today, and it still works.
+       * bootstrap: Copy the latest from gnulib.
+       * autogen.sh: Ditto.
+       * autopull.sh: Ditto.
+       * bootstrap-funclib.sh: Ditto.
+
+2022-08-30  Paul Smith  <psmith@gnu.org>
+
+       Fix tests for MacOS and Windows
+       * maintMakefile: Remove the template headers as prerequisites.
+       * tests/scripts/features/jobserver: Only test fifo if enabled.
+       * tests/scripts/variables/INCLUDE_DIRS: On MacOS none of the default
+       directories exist so .INCLUDE_DIRS is empty by default.
+       * tests/scripts/features/se_explicit: Fail via exit.  cp will show
+       different error messages on different systems.
+       * tests/scripts/features/se_implicit: Ditto.
+       * tests/scripts/features/se_statpat: Ditto.
+
+2022-08-30  Paul Smith  <psmith@gnu.org>
+
+       [SV 62840] Don't change IO buffering before printing version
+       If users run 'make --version | head -n1' they expect make to exit
+       with a success (0) code.  This works because the pipe forces the
+       default buffering on stdout to be fully buffered so all the output
+       is printed to the pipe in a single write(2) and won't fail.  However
+       due to output sync we forcibly set stdout to line buffered, which
+       means if the reader closes the pipe fast enough make will exit with
+       an error code because the write to stdout failed.
+
+       Move the setup done in output_init() back into main() where it can
+       be done in a proper order.  Rework the order of operations during
+       startup so that we check for help and version flags before we change
+       the buffering.  Clean up the behavior of print_usage().
+
+       Original changes from Dmitry Goncharov <dgoncharov@users.sf.net>.
+
+       * src/main.c (switches): Don't send --version in the environment.
+       (print_usage): Add a blank line after the version before the usage.
+       Move the die() into this function since we always die() afterward.
+       Note the die will flush so no need to do it explicitly.
+       (print_version): The caller will fflush when appropriate.
+       (close_stdout): Move from output.c so it is installed early.
+       (decode_switches): Only call print_usage on error, not for --help.
+       (main): Install the close_stdout handler immediately after start.
+       Move the calls to print_usage() due to --help and --version to be
+       called immediately after we decode the switches.  Move the buffer set
+       here from output_init(), immediately after we know we'll be running.
+       * src/output.c (output_init): Move buffer setting to main().
+       (close_stdout): Move to main().
+
+2022-08-30  Paul Smith  <psmith@gnu.org>
+
+       Rework output sync to lock a temp file on POSIX
+       Some POSIX systems do not allow locks to be taken on non-files, such
+       as pipes.  This is a problem since very often make is invoked with
+       its stdout redirected to a pipe.  Also, if stdout is redirected to a
+       file that already has a lock on it for some other reason (perhaps a
+       shared file such as /dev/null) it can cause a hang.
+
+       This means our previous method of locking stdout, although it had some
+       nice advantages, is not portable enough.  Instead, use a temporary
+       file and take the lock on that.  We pass the name of the file to child
+       make processes.  On Windows we continue to use a shared mutex for
+       output sync.
+
+       Remove POSIX emulation functions like fcntl from Windows; instead
+       follow the lead of the jobserver and create an interface in os.h for
+       output sync, and move the OS-specific content to posixos.c and
+       w32os.c.
+
+       * NEWS: Add a note.
+       * src/makeint.h (ALL_SET): Check that all bits are set.
+       * src/os.h: Add bits for checking the state of stdin/stdout/stderr.
+       Add prototypes for OS-specific output sync methods.
+       * src/posixos.c (check_io_state): Determine the status of stdin,
+       stdout, stderr an return a suite of bits describing them.
+       (osync_enabled): If the global variable holding the FD of the lock
+       file (osync_handle) is valid return true.
+       (osync_setup): Create a temporary file and remember its name in a
+       global variable (osync_tmpfile), and set osync_handle.
+       (osync_get_mutex): If output sync is enabled, return the filename
+       of the lock file prefixed with "fnm:" to denote a filename.
+       (osync_parse_mutex): If the provided filename has the wrong format
+       disable output sync.  Else open the lock file and set osync_handle.
+       (osync_clear): Close osync_handle.  If we're the parent make, then
+       also unlink the temporary file.
+       (osync_acquire): Take a lock on the osync_handle descriptor.
+       (osync_release): Release the lock on the osync_handle descriptor.
+       (fd_set_append): Add APPEND mode to a file descriptor.
+       * src/w32/w32os.c: Perform the same actions as posixos.c, copying
+       the details from src/w32/compat/posixfcn.c.  Use a mutex rather
+       than locking a temporary file.
+       * src/output.h: Remove all the OS-specific content.
+       * src/output.c: Remove all the OS-specific content.
+       (set_append_mode): Remove and replace with fd_set_append().
+       (sync_init): Remove and replace with check_io_state().
+       (acquire_semaphore): Remove and replace with osync_acquire().
+       (release_semaphore): Remove and replace with osync_release().
+       (setup_tmpfile): If the IO state is not obtained, get it.  If stdout
+       and/or stderr are valid, set up a tempfile to capture them.
+       (output_init): Set io_state if not set already, and check it when
+       deciding whether to close stdout on exit.
+       * src/main.c (main): If we're syncing, set up the mutex using the
+       new osync_setup() / osync_parse_mutex() methods.
+       (prepare_mutex_handl_string): Replace with osync_parse_mutex().
+       (die): Call osync_clear().
+       * src/w32/compat/posixfcn.c: Remove implementations of fcntl(),
+       record_sync_mutex(), create_mutex(), and same_stream().
+
+2022-08-30  Paul Smith  <psmith@gnu.org>
+
+       Add get_tmpfd() and allow anonymous temp files
+       The output sync feature wants a file descriptor not a FILE*.  We were
+       using tmpfile() but this returns FILE* which means we needed to dup()
+       the descriptor then fclose() the original, which is just unnecessary
+       overhead for every command we run.
+
+       Create a get_tmpfd() method that returns a file descriptor directly
+       by using mkstemp() if available, else do the best we can.
+
+       Also allow anonymous temp files if the filename pointer is NULL.
+       This causes the file to be unlinked.  On Windows this requires a
+       special open so add an os_anontmp() method to handle this.
+
+       * src/makeint.h: Add prototype for get_tmpfd().
+       * src/misc.c (get_tmpfd): If we have mkstemp() use that, else just
+       open(2).  If we don't want to keep the filename, unlink the file.
+       (get_tmpfile): Use get_tmpfd() if we have fdopen(), else use fopen().
+       * src/output.c (output_tmpfd): Call get_tmpfd() with NULL.
+       * src/os.h (os_anontmp): On Windows make this a function, else fails.
+       * src/w32/compat/posixcfn.c (tmpfile): Move to w32os.c:os_anontmp().
+       * src/w32/w32os.c (os_anontmp): Create a temp file that will be deleted
+       when the process exits, and return a file descriptor to it.
+
+2022-08-29  Paul Smith  <psmith@gnu.org>
+
+       test_driver: check for leftover temp files after each test
+       Reset the temp directory for every test to a local directory, then
+       after each test see if any new temp files were created and not
+       deleted: if they were then fail the test.  Rather than delete the
+       temp files we leave them there and avoid reporting files that were
+       seen before, so the user can investigate them.
+
+       Rewrite the temp_stdin tests to rely on this built-in behavior
+       rather than implementing the checks directly.
+
+       * tests/test_driver.pl: Create a $TEMPDIR variable pointing to a
+       temporary directory outside the test temp directory.
+       (toplevel) Before starting any tests create a temp directory and set
+       the POSIX and Windows temp directory environment variables to use it.
+       (compare_output) Check the contents of the temp directory.  If any
+       new files have appeared, fail the test.
+       * tests/scripts/features/temp_stdin: Remove check_tempfile() and
+       all users of it, plus setting of temp environment variables.
+
+2022-08-22  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 62908] Don't free fifo_name twice during error handling
+       * src/posixos.c (jobserver_setup): Set fifo_name to NULL after free.
+       * tests/scripts/features/jobserver: Add tests.
+
+2022-08-22  Paul Smith  <psmith@gnu.org>
+
+       Fix bootstrap.bat for bootstrapping on Windows
+       * README.git: Clarify that these methods are lightly tested.
+       * build_w32.bat: Don't support any config step: fail if not completed.
+       Move the config steps into bootstrap.bat.  Don't print compile lines
+       by default and add a --verbose option to show them.
+       * bootstrap.bat: Ensure we have curl and sed before we do anything.
+       Pull the latest necessary files from gnulib.  Create a convert.sed
+       script that can update the various template files, and update
+       Basic.mk, config.h.W32, and gmk-default.h.
+       * tests/run_make_tests.pl: Remove CRLF rather than using chop.  If we
+       run perl in Git for Bash it seems to handle newlines differently.
+       * tests/scripts/features/temp_stdin: Remove the make copy and close
+       STDIN so we can delete the temp file on Windows.
+       * .gitignore: Ignore the convert.sed script.
+
+2022-08-14  Paul Smith  <psmith@gnu.org>
+
+       * doc/make.texi (Variables/Recursion): [SV 56446] Clarify export docs
+
+2022-08-07  Paul Smith  <psmith@gnu.org>
+
+       * doc/make.texi (Goals): [SV 51306] Improve MAKECMDGOALS example
+
+2022-08-07  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       * doc/make.texi (Remaking Makefiles): [SV 61623] Add optimization
+
+2022-08-03  Paul Smith  <psmith@gnu.org>
+
+       * doc/make.texi (Chained Rules): [SV 61957] Clarify NOTINTERMEDIATE
+
+       [SV 62496] Fix example of testing MAKEFLAGS
+       * doc/make.texi (Options/Recursion): Define the layout of MAKEFLAGS.
+       (Testing Flags): Fix the example to test the first word.
+
+2022-08-02  Paul Smith  <psmith@gnu.org>
+
+       Support implementing the jobserver using named pipes
+       Using anonymous pipes for jobserver support has some advantages:
+       for example there is nothing on disk that needs to be cleaned up.
+       However it has many obscure problems, related to the fact that in
+       order for it to work we need to ensure these resources are properly
+       passed through to child processes that want to use the jobserver.
+       At the same time we don't want to pass the pipe to process which
+       DON'T know about the jobserver.
+
+       Other processes can open file descriptors which we then think are
+       our jobserver, but aren't.  And, we open the pipe file descriptors
+       in blocking mode which doesn't work for all users.
+
+       See issues such as SV 57178, SV 57242, and SV 62397
+
+       To avoid these issues, use named pipes (on systems where they are
+       available) instead of anonoymous pipes.  This simplifies many things:
+       we never need to pass open file descriptors to our children; they
+       can open the jobserver named pipe.  We don't need to worry about
+       recursive vs. non-recursive children.  Users don't have to "pass
+       through" the resources if they are invoking sub-makes.  Each child
+       can open its own file descriptor and set blocking as needed.
+
+       The downside is the named pipe exists on disk and so must be cleaned
+       up when the "top-level" make instance exits.
+
+       In order to allow make to continue to be used in build systems where
+       older versions of GNU make, or other tools that want to use the
+       jobserver, but don't understand named pipes, introduce a new option
+       --jobserver-style that allows the user to choose anonymous pipes.
+
+       * NEWS: Announce the change and the --jobserver-style option.
+       * doc/make.1: Add --jobserver-style documentation.
+       * doc/make.texi (Special Variables): Add missing items to .FEATURES.
+       (Options Summary): Add --jobserver-style.
+       (POSIX Jobserver): Named pipes, changes to --jobserver-auth, and the
+       --jobserver-style option.
+       (Windows Jobserver): Document --jobserver-style for Windows.
+       * configure.ac: Check for mkfifo.
+       * src/config.h-vms.template: Undefined HAVE_MKFIFO.
+       * src/config.h.W32.template: Ditto.
+       * src/main.c: Add jobserver-style as a new command line option.
+       (main): Add jobserver-fifo to .FEATURES if supported.  Pass the style
+       option to jobserver_setup().
+       * src/os.h (jobserver_setup): Accept a style string option.
+       * src/posixos.c (enum js_type): Enumeration of the jobserver style.
+       (js_type): Which style we are currently using.
+       (fifo_name): The path to the named pipe (if in use).
+       (jobserver_setup): If no style is given, or "fifo" is given, set up a
+       named pipe: get a temporary file and use mkfifo() on it, then open it
+       for reading and writing.  If something fails fall back to anonymous
+       pipes.
+       (jobserver_parse_auth): Parse jobserver-auth to determine the style.
+       If we are using a named pipe, open it.  If we're using anonymous pipes
+       ensure they're valid as before.
+       (jobserver_get_invalid_auth): Don't invalidate the jobserver when
+       using named pipes.
+       (jobserver_clear): Clean up memory used for named pipes.
+       (jobserver_acquire_all): Unlink the named pipe when done.
+       * src/w32/w32os.c (jobserver_setup): Check the style argument.
+       * tests/scripts/features/jobserver: Use --jobserver-style to test
+       the anonymous pipe behavior, and also test named pipe/semaphore
+       behavior.  Check invalid jobserver-style options.
+       * tests/scripts/functions/shell: Use --jobserver-style to test the
+       anonymous pipe behavior, and also test named pipe/semaphore
+       behavior.
+
+2022-08-02  Paul Smith  <psmith@gnu.org>
+
+       Enhance get_tmpfile() and add get_tmppath()
+       Move all the logic on creating temporary files into misc.c, and add
+       a new function get_tmppath() that returns the pathname to a temporary
+       file without creating or opening it.
+
+       * src/makeint.h: Add a declaration for get_tmppath().  Remove the
+       template argument from get_tmpfile(): it will compute its own.
+       * src/main.c (main): Remove the logic for computing templates.
+       * src/vmsjobs.c (child_execute_job): Ditto.
+       * src/misc.c (get_tmptemplate): New function to return an allocated
+       template string for use with various mktemp-style functions.
+       (get_tmppath): Return an allocated path to a temporary file, but do
+       not create it.  Generally this should be avoided due to TOCTOU issues.
+       (get_tmpfile): Use get_tmptemplate() to generate a template rather
+       than using one passed in.  If we don't have mkstemp() then use
+       get_tmppath() to compute the path of a temp file.
+
+2022-07-30  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 62706] Only second-expand targets that might be built
+       Second-expand only the prerequisites of the targets being built.
+       Defer second-expanding the prerequisites of targets until we need
+       to decide if they should be built.
+
+       * NEWS: Mention the change in behavior.
+       * doc/make.texi (Secondary Expansion): Document the new behavior.
+       * src/filedef.h (struct file): Add flag snapped.
+       (expand_deps): Declare a function to second expand the
+       prerequisites of a target.
+       * src/file.c (rehash_file): Merge flag snapped.
+       (expand_deps): Remove qualifier static. Check flag snapped.
+       (snap_deps): Remove the loop which performed second expansion for all
+       targets.
+       * src/remake.c (update_file_1): Second expand the prerequisites of
+       the considered target.
+       * tests/scripts/features/se_explicit: Add tests.
+       * tests/scripts/features/se_implicit: Ditto.
+       * tests/scripts/features/se_statpat: Ditto.
+
+2022-07-30  Paul Smith  <psmith@gnu.org>
+
+       Disable the jobserver in non-recursive children
+       Savannah issues such as SV 57242 and SV 62397 show how passing
+       references to closed file descriptors via the --jobserver-auth option
+       in MAKEFLAGS can lead to problematic outcomes.
+
+       When computing the child environment for a non-recursive shell, add
+       an extra option to MAKEFLAGS to disable the file descriptors for the
+       jobserver.
+
+       Unfortunately this doesn't modify the value of the make variable
+       MAKEFLAGS, it only modifies the value of the sub-shell environment
+       variable MAKEFLAGS.  This can lead to confusion if the user is not
+       considering the distinction.
+
+       * src/makeint.h: Publish the jobserver-auth value.  Add a global
+       definition of the name of the command line option.
+       * src/os.h (jobserver_get_invalid_auth): New function to return a
+       string invalidating the jobserver-auth option.
+       * src/w32/w32os.c (jobserver_get_invaid_auth): Implement it.  On
+       Windows we use a semaphore so there's no need to invalidate.
+       * src/posixos.c (jobserver_parse_auth): If we parse the invalid
+       auth string, don't set up the jobserver.
+       (jobserver_get_invalid_auth): Return an invalid option.
+       * src/variable.h (target_environment): Specify if the target
+       environment is for a recursive shell or non-recursive shell.
+       * src/variable.c (target_environment): Move checking for MAKELEVEL
+       into the loop rather than doing it at the end.
+       Along with this, check for MAKEFLAGS and MFLAGS, and update them
+       based on whether we're invoking a recursive or non-recursive child,
+       and also on whether it's necessary to invalidate the jobserver.
+       * src/function.c (func_shell_base): Shell functions can never be
+       recursive to pass 0 to target_environment().
+       * src/job.c (start_job_command): Specify whether the child is
+       recursive when calling target_environment().
+       * src/main.c: Export jobserver_auth.  sync_mutex doesn't need to
+       be exported.  Use the global definition for the option name.
+       * tests/scripts/variables/MAKEFLAGS: Add tests for $MAKEFLAGS.
+
+2022-07-30  Paul Smith  <psmith@gnu.org>
+
+       Ensure that MAKEFLAGS is set when invoking $(shell ...)
+       * src/main.c (main): Don't reset the jobserver if the number of
+       slots has not changed.
+       (define_makeflags): Add all normal flags even when ALL is not set.
+       * tests/scripts/functions/shell: Test invoking make in $(shell ...).
+       * tests/scripts/variables/MAKEFLAGS: Test the value of MAKEFLAGS in
+       $(shell ...).
+
+       Take advantage of mempcpy() and stpcpy()
+       * src/makeint.h (stpcpy): Add missing declaration.
+       * src/amiga.c (MyExecute): Avoid extra strlen using stpcpy.
+       * src/function.c (func_shell_base): Ditto.
+       (func_error): Use memcpy() not strcpy() when we know the length.
+       * src/job.c (construct_command_argv_internal): Use stpcpy().
+       * src/main.c (main): Ditto.
+       (define_makeflags): Ditto.
+       * src/variable.c (print_target_variables): Use memcpy() when we know
+       the length.
+       * src/commands.c (set_file_variables): Use mempcpy().
+       * src/expand.c (variable_buffer_output): Ditto.
+       * src/file.c (expand_deps): Ditto.
+       * src/function.c (abspath): Ditto.
+       (handle_function): Ditto.
+       * src/implicit.c (pattern_search): Ditto.
+       * src/job.c (construct_command_argv_internal): Use mempcpy() and
+       don't add multiple spaces when there are no shell flags.
+       * src/main.c (decode_env_switches): Use mempcpy() to simplify.
+       (define_makeflags): Ditto.
+       * src/variable.c (selective_vpath_search): Ditto.
+
+2022-07-09  Paul Smith  <psmith@gnu.org>
+
+       Convert HAVE_GETLOADAVG to HAVE_DECL_GETLOADAVG
+       We want to know if getloadavg() is declared, not if we have it.
+
+       * configure.ac: Add it as a define (why is this not the default?)
+       * src/job.c: Conditionalize declaration on HAVE_DECL_GETLOADAVG.
+       * config.ami.template: Rename HAVE_GETLOADAVG to HAVE_DECL_GETLOADAVG.
+       * config.h-vms.template: Ditto.
+       * config.h.W32.template: Ditto.
+       Clean up and add new elements from latest config.h.
+
+2022-07-09  Paul Smith  <psmith@gnu.org>
+
+       Merge in the latest gnulib findprog-in module
+
+       Merge in the latest gnulib concat-filename module
+
+       Merge in the latest gnulib getloadavg module
+
+       Initial merge of the gnulib-port branch
+
+2022-07-09  Paul Smith  <psmith@gnu.org>
+
+       Move our local m4 macros to gl/m4
+       The gl subdirectory contains our local versions of gnulib module
+       implementations, so move m4/acinclude.m4 and m4/dospaths.m4 there.
+
+       * gl/modules/make-macros: Create a new module to handle the macros.
+       * bootstrap.conf: Add the new module.
+       * configure.ac: Macro invocation is moved to make-macros.
+       * m4/.gitignore: Delete unnecessary ignore file: m4 is empty.
+       * .gitignore: Add m4/ as an ignored directory.
+
+2022-07-09  Paul Smith  <psmith@gnu.org>
+
+       Move our fnmatch/glob implementation into gl/lib
+       The gl subdirectory contains our local versions of gnulib module
+       implementations, so move fnmatch* and glob* from lib to gl/lib.
+
+       * gl/modules/make-glob: Add a proper Files: section.
+       * lib/.gitignore: Delete unnecessary ignore file: lib is empty.
+       * .gitignore: Add lib/ as an ignored directory.
+
+2022-07-09  Paul Smith  <psmith@gnu.org>
+
+       * tests/run_make_tests.pl: Exit 1 if we detect an error.
+
+       * configure.ac: Remove AC_FUNC_SETVBUF_REVERSED.
+       This macro is obsolete: no useful system has this problem anymore.
+       * src/output.c (output_init): Remove reference to SETVBUF_REVERSED.
+       * src/config.ami.template: Remove undef of SETVBUF_REVERSED.
+       * src/config.h-vms.template: Ditto.
+       * src/config.h.W32.template: Ditto.
+
+       * configure.ac: Check for stpcpy() support.
+       * src/misc.c (stpcpy): Define it if not provided.
+
+2022-07-09  Paul Smith  <psmith@gnu.org>
+
+       getloadavg: Remove support for privileged invocation
+       This was needed when getloadavg required privileged access; in this
+       case GNU make needed to be installed as a setgid program.  But this
+       hasn't been supported by gnulib getloadavg() since 2011 and systems
+       are no longer using it, so remove it.
+
+       * src/makeint.h (user_access): Remove unnecessary function.
+       (make_access): Ditto.
+       (child_access): Ditto.
+       * src/misc.c: Remove implementations of the *_access() functions.
+       * src/main.c (main): Remove unneeded call to user_access().
+       * src/job.c (load_too_high): Remove calls to {make,user}_access().
+       (exec_command): Remove call to child_access().
+       * src/remote-cstms.c: Remove calls to these methods.  I suppose it
+       might be possible this is needed and was piggy-backing on the
+       privileged setting but since that's been broken for a while I doubt
+       this is needed.  If so we can bring back the implementation into
+       this source file.
+       * src/config.h.W32.template: Remove GETLOADAVG_PRIVILEGED undef.
+       * src/config.h-vms.template: Ditto.
+       * src/config.ami.template: Ditto.
+
+2022-07-09  Paul Smith  <psmith@gnu.org>
+
+       * maintMakefile: Allow checkcfg rules to succeed.
+       We can no longer pass our mondo-warnings options to the builds,
+       as these will impact all the code including gnulib code, and this
+       won't work.  Also allow the caller to disable either the build.sh
+       or makefile invocation, for testing.
+       * Makefile.am: Allow the caller to reset the path to the make
+       binary to be tested.  Remove c90 test: gnulib doesn't support it.
+
+       * build.sh: Manage libgnu_a-prefixed source files
+
+       bootstrap: Remove strerror()
+       * bootstrap.conf: Remove strerror module
+       * configure.ac: Add a check for strerror
+       * src/misc.c: Add a default strerror() if not found
+
+2022-07-09  Paul Smith  <psmith@gnu.org>
+
+       bootstrap: Remove strtoll()
+       This pulls in entirely too much stuff we don't need.  Instead grab
+       just the gnulib source file, then include it in src/misc.c.
+
+       * bootstrap.conf: Add just the lib/strtol.c source file.
+       * configure.ac: Check for strtoll.
+       * src/misc.c: Include strtol.c, with QUAD set, if needed.
+
+2022-07-09  Paul Smith  <psmith@gnu.org>
+
+       bootstrap: Remove gnulib version of mempcpy()
+       This pulls in a metric ton of stuff that we otherwise don't need, just
+       for a one-liner that we already have a replacement for in src/misc.c.
+
+       * bootstrap.conf: Remove mempcpy
+       * configure.ac: Add mempcpy to AC_CHECK_FUNCS
+
+2022-07-09  Paul Smith  <psmith@gnu.org>
+
+       Run autoupdate and clean up autoconf usage
+       We can assume that the return type of a signal handler is void.
+       We can assume that, if sys/time.h exists, it can be included
+       with time.h.
+
+       * bootstrap: Get the latest version
+       * configure.ac: Require a newer version of autoconf.
+       Remove unnecessary AC_PROG_CC_C99 (already have AC_PROC_CC).
+       Remove unnecessary AC_AIX, AC_ISC_POSIX, AC_MINIX.
+       Remove unnecessary AC_HEADER_STDC, AC_HEADER_TIME, AC_TYPE_SIGNAL.
+       Use strerror to search for the cposix library.
+       * src/commands.c (fatal_error_signal): Assume return type is void.
+       * src/commands.h: Ditto.
+       * src/job.c: Ditto.
+       * src/job.h: Ditto.
+       * src/main.c: Ditto.
+       * src/makeint.h: Ditto.
+       Don't bother with TIME_WITH_SYS_TIME.
+       * src/remote-cstms.c: Check HAVE_SYS_TIME_H.
+       * src/config.ami.template: Remove RETSIGTYPE.
+       * src/config.h-vms.template: Ditto.
+       * src/config.h.W32.template: Ditto.
+       Remove TIME_WITH_SYS_TIME.
+
+2022-07-09  Paul Smith  <psmith@gnu.org>
+
+       [SV 10593] Export variables to $(shell ...) commands
+       Export all variables, including exported makefile variables, when
+       invoking a shell for the $(shell ...) function.  If we detect a
+       recursive variable expansion, silently ignore that variable and do
+       not export it.  We do print a debug message.
+
+       * NEWS: Announce the potential backward-incompatibility.
+       * doc/make.texi (Shell Function): Document the export behavior.
+       * src/main.c (main): Add "shell-export" to .FEATURES.
+       * src/job.h: New function to free struct childbase.
+       * src/job.c (free_childbase): Implement it; call from free_child.
+       * src/function.c (func_shell_base): Use target_environment() to
+       obtain the proper environment for the shell function.
+       Use free_childbase() to free memory.
+       (windows32_openpipe): Don't reset the environment: the caller
+       already provided a proper PATH variable in envp.
+       * src/variable.c (target_environment): If we detect a recursive
+       expansion and we're called from func_shell, ignore the variable.
+       (sync_Path_environment): Simplify and reduce memory allocation.
+       * tests/scripts/functions/shell: Add tests for this.
+
+2022-07-09  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 62650] Show correct warning when combining targets
+       * src/file.c (rehash_file): Fix warning message.
+       (rehash_file): Fix comment to match the behavior.
+       * tests/scripts/features/se_explicit: Fix test.
+       * tests/scripts/features/mult_rules: Add a new test.
+
+2022-07-09  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 62514] Honor command line interface flags
+       Commit f2771aa614 introduced a bug where some switches were left out
+       of MAKEFLAGS.  Instead of resetting switches, get the same results by
+       filtering out duplicates.
+
+       * src/makeint.h: Remove reset_switches.
+       * src/main.c: (reset_switches): Remove reset_switches.
+       * (main): Remove call to reset_switches.
+       * (decode_switches): Filter out duplicate flags.
+       * src/variable.c: (set_special_var):  Remove call to reset_switches.
+       * tests/scripts/variables/MAKEFLAGS: Verify that duplicate flags are
+       properly filtered out.
+
+2022-07-07  Paul Smith  <psmith@gnu.org>
+
+       Add gnulib findprog-in
+
+       Add gnulib concat-filename
+
+       Add gnulib getloadavg
+
+       Initial gnulib-port branch commit
+
+2022-06-19  Paul Smith  <psmith@gnu.org>
+
+       Don't add GNUMAKEFLAGS to the environment
+       If GNUMAKEFLAGS was not present in the environment when we started,
+       don't add it.
+
+       * src/main.c (main): Don't mess with GNUMAKEFLAGS unless it exists.
+       * tests/scripts/variables/GNUMAKEFLAGS: Test this behavior.
+
+2022-06-18  Paul Smith  <psmith@gnu.org>
+
+       * tests/test_driver.pl: Don't freak if diff can't be found
+
+       * build_w32.bat [WIN]: Use call for all invocations
+
+2022-06-17  Paul Smith  <psmith@gnu.org>
+
+       Avoid overwriting buffers with long pathnames
+       Reported, with initial patch, by Gisle Vanem <gvanem@online.no>
+
+       * src/main.c (find_and_set_default_shell) [W32]: Pass search_token
+       directly to w32ify: no need to make a copy first.  When we need to
+       construct a path, use snprintf() to be sure we don't overwrite
+       the locally-allocated buffer.
+       * src/w32/pathstuff.c (w32ify) [W32]: Use the malloc version of
+       _fullpath(), followed by strncpy(), to avoid overwriting buffers.
+
+2022-06-04  Paul Smith  <psmith@gnu.org>
+
+       * tests/scripts/features/temp_stdin: Remove nested "my"
+       * tests/scripts/features/statipattrules: Remove unset variable refs.
+
+2022-06-04  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       * tests/scripts/features/archives: Fix typo
+
+2022-06-04  Sergei Trofimovich  <siarheit@google.com>
+
+       [SV 62100] Add '--shuffle' option support
+       Introduce non-deterministic ordering into goal and prerequisite
+       traversal to help tease out inconsistent failures that may happen
+       when running in parallel build mode.
+
+       Introduce second order into each dependency chain:
+       1. Existing order is syntactic order reachable via 'dep->next'
+       2. New order is shuffled order stored as 'dep->shuf' in each 'dep'
+
+       When updating goals and prerequisites and '--shuffle' is provided,
+       use the shuffled order to walk the graph.  When automatic variable
+       are set always use the syntactic order of parameters.
+
+       * Makefile.am: Add new src/shuffle.c and src/shuffle.h file.
+       * build_w32.bat: Ditto.
+       * builddos.bat: Ditto.
+       * makefile.com: Ditto.
+       * po/POTFILES.in: Ditto.
+       * doc/make.texi: Add documentation for --shuffle.
+       * doc/make.1: Ditto.
+       * src/dep.h (DEP): Add the shuf pointer.
+       * src/filedef.h (struct file): Add was_shuffled flag.
+       * src/main.c: (shuffle_mode): Global flag for the shuffle mode.
+       (usage): Add the --shuffle option.
+       (switches): Ditto.
+       (main): Set shuffle_mode based on the command line parameter.
+       Reshuffle prerequisites if requested.
+       * src/remake.c (update_goal_chain): Walk the shuffled list if enabled.
+       (update_file_1): Ditto.
+       * src/shuffle.h: Provide an interface for shuffling prerequisites.
+       * src/shuffle.c: Implement option parsing and prerequisite shuffling.
+       * tests/scripts/options/shuffle: Test shuffle option and modes.
+
+2022-06-04  Paul Smith  <psmith@gnu.org>
+
+       * src/misc.c (make_toui): Parse a string into an unsigned int
+       * src/makeint.h: Declare it.
+       * src/arscan.c (ar_scan): Replace atoi() calls with make_toui().
+       Modify some integral types to be more correct.
+       * src/job.c (load_too_high): Replace atoi() calls with make_toui().
+       * src/main.c (main): Ditto.
+       (decode_switches): Ditto.
+
+       * src/misc.c (make_pid): A function to return the PID
+       * src/makeint.h: Declare it.
+       * src/commands.c (fatal_error_signal): Call it.
+
+       * po/LINGUAS: Add a translation for Romanian
+
+2022-04-24  Noah Goldstein  <goldstein.w.n@gmail.com>
+
+       Replace strcmp() with memcmp() where possible
+       memcmp() is always faster than strcmp().  In places where we already
+       know that both buffers have sufficient size, replace strcmp() with
+       memcmp().
+
+       * src/main.c (main): Replace strncmp() with memcmp()==0.
+       * src/read.c (word1eq): Ditto.
+       * src/commands.c (set_file_variables): Ditto.
+       * src/function.c (func_filter_filterout): Ditto.
+       (a_word_hash_cmp): Use STRING_N_COMPARE since we know the length.
+       (func_sort): Replace strcmp() with memcmp().
+
+2022-04-24  Noah Goldstein  <goldstein.w.n@gmail.com>
+
+       hash: Remove unnecessary isupper() check before tolower()
+       The standard requires that tolower() returns its argument if there's
+       no valid lowercase conversion: it's not necessary to check isupper()
+       before invoking tolower().
+
+       Comparing the performance of the old ISTRING_HASH to the new one
+       on all the files present in GLIBC.
+
+         Data Type            Old Time   New Time
+         Alternating case    24985.754  13883.422
+         random case         35211.777  13569.051
+         all lower           18818.974  13706.645
+         all upper           38859.454  13506.315
+
+       * src/hash.h (ISTRING_HASH_1): Omit isupper() check.
+       (ISTRING_HASH_2): Ditto.
+
+2022-04-24  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 62206] Fix %-substitution in second expansion of pattern rules
+       During second expansion of pattern rules only the first pattern in
+       each "group" was being substituted.  E.g. in this makefile:
+
+         .SECONDEXPANSION:
+         all: hello.x
+         %.x: $$(wordlist 1, 99, %.1 %.%.2) ; $(info $@ from $^)
+         hello.1 hello.\%.2 \%.1 \%.\%.2: ;
+
+       the output would build "hello.1" and "%.%.2" because each function
+       is considered a single "word" and only the first pattern is replaced.
+
+       Fix the expansion so each whitespace-separated string is considered a
+       word and the first pattern is replaced, giving "hello.1" and
+       "hello.%.2".
+
+       * src/rule.c (snap_implicit_rules): Keep enough space to replace %
+       with $(*F) if necessary.
+       * src/implicit.c (pattern_search): During second expansion break each
+       get_next_word result into individual words and replace the first % in
+       each with $* or $(*F) as needed.
+       * tests/scripts/features/patternrules: Add tests for variations.
+
+2022-04-24  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 62175] Rework secondary expansion tests
+       The hash function we use can yield different results on big- and
+       little-endian systems which makes test output different.  Choose
+       names to avoid this.
+
+       * tests/scripts/features/patternrules: Choose portable target names.
+       * tests/scripts/features/se_explicit: Ditto.
+       * tests/scripts/features/se_implicit: Ditto.
+
+2022-04-24  Paul Smith  <psmith@gnu.org>
+
+       * Makefile.am (check-regression): Rename jhelp to thelp
+
+       * tests/scripts/options/dash-f: [SV 62118] Close STDIN
+       On Windows we can't delete open files, so close STDIN before
+       removing the temporary input file.
+
+       * tests/scripts/features/reinvoke: [SV 62088] Close STDIN
+       On Windows we can't delete open files, so close STDIN before
+       removing the temporary input file.
+
+       * tests/test_driver.pl (run_all_tests): Keep one copy of STDIN
+
+       * Makefile.am: Add INSTALL to the EXTRA_DIST files
+
+2022-04-24  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 62356] If -R is set in the makefile, disable -r
+       If -R is given on the command line it implies -r as well; make this
+       same assumption if -R is provided in MAKEFLAGS set in the makefile.
+
+       * src/main.c (main): Check no_builtin_variables_flag after reading
+       makefiles.
+       * tests/scripts/options/dash-r: Add a test.
+
+2022-04-24  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 62324] Simplify set_file_variables by passing in the stem
+       Previously we always used the file->stem value as our stem in
+       set_file_variables(); when that wasn't correct we had to temporarily
+       set that value while the function was called, then reset it afterward.
+       This led to issues (for example when we assumed the stem was a cached
+       string but it wasn't).
+
+       Avoid this by passing in the stem as an argument so that different
+       values can be provided.
+
+       Add tests to verify this.
+
+       * src/commands.c (set_file_variables): Take second parameter stem to
+       relieve the callers of set_file_variables() from setting/restoring
+       file->stem.
+       * src/commands.h (set_file_variables): Ditto.
+       (execute_file_commands): Pass file->stem to set_file_variables().
+       * src/file.c (expand_deps): Pass d->stem to set_file_variables() and
+       remove set and restore of file->stem.
+       * src/implicit.c (pattern_search): Pass stem to set_file_variables()
+       and remove set and restore of file->stem.
+       * tests/scripts/features/se_explicit: Add new tests.
+       * tests/scripts/features/se_implicit: Ditto.
+       * tests/scripts/features/se_statpat: Ditto.
+       * tests/scripts/variables/automatic: Ditto.
+
+2022-04-24  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 62278] Only expand the first pattern during secondary expansion
+       During normal pattern rule expansion only the first pattern (%) is
+       expanded; however during secondary expansion all patterns were
+       expanded.  Modify secondary expansion to match the behavior of normal
+       expansion.
+
+       Implementation tweaked by Paul Smith <psmith@gnu.org>
+
+       * src/file.c (expand_deps): Don't use subst_expand() which replaces
+       all % with $*: instead replace only the first one, by hand.
+       Fix a memory leak where the dep structure was not always freed.
+       * tests/scripts/features/statipattrules: Use .RECIPEPREFIX not TAB.
+       Add a series of tests verifying that static pattern rules with and
+       without secondary expansion both return the same results.
+
+2022-04-24  Paul Smith  <psmith@gnu.org>
+
+       * src/commands.h: [SV 62213] Forward-declare struct file / child
+
+       * tests/test_driver.pl (toplevel): [SV 62174] Enforce the C locale
+
+2022-04-24  Paul Smith  <psmith@gnu.org>
+
+       [SV 62173] Fix archive tests for non-GNU systems
+       Original patch from Dmitry Goncharov <dgoncharov@users.sf.net>
+
+       Fix the ar flags to match the default values in make.  If the
+       U option is supported, add it to the end not the beginning,
+       since ARFLAGS now starts with a "-".
+
+       * tests/test_driver.pl: Add defaults for global variables.
+       (get_osname): Preserve $osname if it's set from $^O
+       * tests/scripts/features/archive: Set the default arflags.
+       If "U" is available add it to the end of the flags.
+
+2022-04-24  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       * tests/scripts/options/dash-l: [SV 62172] Skip if not available
+
+       * src/read.c (check_specials): [SV 62171] Reset ARFLAGS under .POSIX
+
+2022-04-24  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 62145] Remove a stdin temp file on re-exec failure.
+       If the re-exec fails, be sure to remove a temp makefile that was
+       created to read from stdin.
+
+       * src/job.c (exec_command): Return on failure.
+       (child_execute_job): Call exit if exec_command returns.
+       * src/job.h (exec_command): Don't mark as NORETURN.
+       * src/main.c (main): Unlink stdin temporary file if re-exec fails.
+       * tests/run_make_tests.pl: Get value for ERR_nonexe_file/ERR_exe_dir.
+       * tests/scripts/features/temp_stdin: Test that temp file unlink works.
+
+2022-04-18  Paul Smith  <psmith@gnu.org>
+
+       * tests/scripts/features/errors: Fix Perl warnings
+       * tests/scripts/options/dash-f: Ditto.
+
+2022-02-27  Paul Smith  <psmith@gnu.org>
+
+       [SV 62118] Correctly handle -f- options on re-exec
+       The -f, -file, and --makefile options were not properly handled when
+       re-exec'ing due to makefile updates.  This problem, plus a patch and
+       tests, was reported by Dmitry Goncharov <dgoncharov@users.sf.net>.
+
+       While examining this I found another bug: after re-exec we forgot the
+       batch file was temporary and never deleted it.
+
+       I decided to fix all these problems at once using a different fix
+       than Dmitry's: I created a new internal-only command-line option,
+       --temp-stdin.  When reconstructing the make options for a re-exec,
+       replace the -f/--file/--makefile option that reads from stdin with
+       --temp-stdin=<filename> so that the re-exec'd version of make knows
+       it's a temporary batch file and will delete it.
+
+       We no longer need to add the -o options because the re-exec'd make
+       knows this is a temporary makefile and treats it as such.
+
+       To simplify, replace the --file and --makefile options taking a
+       filename, with just -f<filename> on re-exec.
+
+       Some examples of the rewrite:
+
+         User command line               Re-exec command line
+         -----------------               --------------------
+         -f-                             --temp-stdin=<batch>
+         --file -                        --temp-stdin=<batch>
+         -f - --makefile a.mk            --temp-stdin=<batch> -fa.mk
+         --file=a.mk                     -fa.mk
+         -fa.mk                          -fa.mk
+         -Rf a.mk                        -Rf a.mk
+         -Rf-                            -R --temp-stdin=<batch>
+
+       * src/main.c (stdin_offset): Remember the offset into the makefiles
+       list of the batch file read from stdin.  Remove stdin_nm.
+       (struct command_switch): Create a new --temp-stdin option, which
+       also updates the makefiles list.
+       (main): Add the temporary filename to the string cache.
+       Move the tempfile handling after checking makefile arguments for "-"
+       so that files provided via --temp-stdin are also handled specially.
+       When rewriting re-exec options, we may need one more than we had
+       originally so create a new argv list.  Walk through the original
+       list and convert it to the new list, following the above process.
+       (decode_switches): Set the stdin_offset flag if we see --temp-stdin.
+       * tests/scripts/options/dash-f: Add many more tests, provided by
+       Dmitry Goncharov <dgoncharov@users.sf.net>.
+
+2022-02-27  Paul Smith  <psmith@gnu.org>
+
+       * tests/scripts/variables/MAKE_RESTARTS: Remove TAB chars
+
+       * README.git: Fix compiler options for ASAN
+
+2022-02-27  Paul Smith  <psmith@gnu.org>
+
+       Remove extraneous characters from fatal() calls
+       The fatal() method adds ".  Stop.\n" to every message.
+
+       * src/amiga.c (MyExecute): Remove newline from fatal() message.
+       * src/job.c (<various>): Ditto.
+       * src/file.c (snap_deps): Remove "." from fatal() message.
+       * src/main.c (main): Ditto.
+       * src/load.c: Ditto.
+       * tests/scripts/targets/NOTINTERMEDIATE: Fix expected output.
+
+2022-02-27  Paul Smith  <psmith@gnu.org>
+
+       * src/main.c: Ensure the stdin temp file is deleted when dying.
+
+2022-02-27  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 62088] Avoid re-exec due to stdin.
+       The fix for SV 60595 causes make to re-execute when the makefile is
+       read from stdin.  E.g.
+           $ printf 'all:; $(info hello)' | make -sf -
+
+       Reported by Sergei Trofimovich <siarheit@google.com>
+       Test added by Paul Smith <psmith@gnu.org>
+
+       * src/main.c (main): Set the mtime of the stdin temporary file.
+       * tests/scripts/features/reinvoke: Add a test.
+
+2022-02-27  Paul Smith  <psmith@gnu.org>
+
+       tests: Allow run_make_test() to avoid passing -f
+       We already use undef makefile strings to mean "re-use the previous
+       makefile", so if the string is empty we'll assume it means "don't
+       use a makefile at all" (don't add -f).
+
+       * tests/run_make_tests.pl (run_make_test): If the makefile string
+       is empty, don't create a makefile or add -f.
+       * tests/scripts/features/include: Change empty makefile to "\n".
+       * tests/scripts/misc/close_stdout: Ditto.
+       * tests/scripts/options/dash-r: Ditto.
+
+2022-02-27  Paul Smith  <psmith@gnu.org>
+
+       tests: Preserve Windows temp environment variables
+       * src/main.c (main): Show the temp filename on error.  Also on
+       Windows prefer TMP, then TEMP, and only lastly TMPDIR.
+       * tests/test_driver.pl: Add TMP, TEMP, and USERPROFILE to the list
+       of environment variables to preserve.
+
+2022-02-26  Paul Smith  <psmith@gnu.org>
+
+       * tests/test_driver.pl: Support STDIN redirection.
+       Before running tests, duplicate STDIN then reset it after the test
+       completes.  Also when -keep is provided, preserve the base and run
+       files.
+
+2022-02-21  Paul Smith  <psmith@gnu.org>
+
+       Ensure buffers are large enough for integer values
+       Issue raised by Sergei Trofimovich <siarheit@google.com>
+
+       * src/makeint.h (INTSTR_LENGTH): Update for unsigned values.
+       * src/function.c (func_lastword): Use INTSTR_LENGTH as buffer size.
+       (shell_function_completed): Ditto.
+       (func_call): Ditto.
+       * src/remote-cstms.c (start_remote_job): Ditto.
+
+2022-02-10  Paul Smith  <psmith@gnu.org>
+
+       * <all>: Update copyright notices.
+
+2022-02-06  Paul Smith  <psmith@gnu.org>
+
+       * doc/make.1: Use "target" from the SYNOPSIS.
+       Reported by Helge Kreutzmann <debian@helgefjell.de>
+
+2022-02-06  Paul Smith  <psmith@gnu.org>
+
+       Don't write $(shell ...) stdout to stderr on failure
+       If a $(shell ...) invocation failed due to a command-not-found error,
+       make wrote the stdout of that shell to our stderr for some reason.
+       That seems very wrong.
+
+       If the command's stderr was not redirected then its output would have
+       already been written to its stderr, and if it was redirected then we
+       shouldn't take it upon ourselves to force it to go to stderr!
+
+       * src/function.c (func_shell_base): Append shell stdout even if the
+       shell command failed.
+       * tests/run_make_tests.pl: Determine the error generated for
+       command-not-found situations.
+       * tests/scripts/functions/shell: Verify that redirecting stderr to
+       stdout will behave properly if the command is not found.
+
+2022-02-06  Paul Smith  <psmith@gnu.org>
+
+       * Basic.mk.template: Allow arguments to the check target.
+
+2022-02-06  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 61805] Support quoted whitespace in .SHELLFLAGS with .ONESHELL
+       * src/job.c (construct_command_argv_internal): Call recursively to
+       parse .SHELLFLAGS when .ONESHELL is active.
+       * tests/scripts/targets/ONESHELL: Add tests.
+
+2022-02-06  Paul Smith  <psmith@gnu.org>
+
+       * tests/scripts/features/double_colon: Update for modern tests.
+
+       * tests/scripts/features/implicit_search: Add -r for safety.
+
+2022-02-06  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 48643] Add more tests of intermediates and unrelated targets
+       If a prereq of a pattern is explicitly mentioned as a prereq of an
+       unrelated rule, it should not be considered an intermediate file.
+
+       * tests/scripts/features/double_colon: Add tests mentioning unrelated
+       explicit targets.
+       * tests/scripts/features/grouped_targets: Ditto.
+       * tests/scripts/features/implicit_search: Ditto.
+       * tests/scripts/features/patternrules: Ditto.
+       * tests/scripts/features/se_implicit: Ditto.
+       * tests/scripts/features/statipattrules: Ditto.
+
+2022-02-06  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 48643] Make prereqs mentioned in unrelated rules explicit
+       * src/implicit.c (pattern_search): Set is_explicit when a prereq
+       is mentioned in an unrelated rule.
+
+       * src/implicit.c (pattern_search): [SV 61864] Fix debug output.
+
+2022-02-06  Paul Smith  <psmith@gnu.org>
+
+       Avoid interleaved $(info ) output
+       Since $(info ) function output is written using two system calls for
+       the message and the newline, it's possible for output from another
+       parallel make job to sneak in between them.
+
+       Reported by Paul Eggert <eggert@cs.ucla.edu>, who saw the report from
+       Lars Ingebrigtsen <https://bugs.gnu.org/53358>.
+
+       * src/function.c (func_error): Paul provided a fix but instead I
+       rewrote the entire function: it's not possible for it to be invoked
+       with anything other than exactly one argument so don't worry about
+       re-combining the arguments.
+
+2022-02-06  Paul Smith  <psmith@gnu.org>
+
+       * tests/scripts/features/implicit_search: [SV 48643] Cleanups.
+
+       * src/implicit.c (pattern_search): Use const ptrs when possible.
+       Change suggested by Joe Filion <joefilion4@gmail.com>
+
+       * src/job.c (load_too_high): Re-enable Linux /proc/loadavg checks.
+       Further experimentation shows that my previous thinking that there
+       was a problem using this was woefully mistaken.  The value generated
+       by the kernel shows runn*ABLE* processes not runn*ING* processes.
+       * NEWS: Announce the change.
+
+       * doc/make.texi (Using One Shell): Correct example to use $<.
+
+2022-01-17  Jouke Witteveen  <j.witteveen@gmail.com>
+
+       * src/function.c (parse_textint): Handle ints without 0 properly.
+       * tests/scripts/functions/intcmp: Add tests for values without 0.
+
+2022-01-17  Paul Smith  <psmith@gnu.org>
+
+       [SV 61226] Revert changes to detect missing included files
+       The fix for SV 60595 introduced a backward-incompatibility: rules that
+       purported to rebuild included files, but didn't actually do so, were
+       treated as errors whereas before they were ignored.  This breaks a
+       common idiom in makefiles where an empty recipe is created for an
+       included makefile so make doesn't complain if it doesn't exist.
+
+       Unfortunately this means make cannot diagnose some types of errors.
+
+       Extra tests supplied by Dmitry Goncharov <dgoncharov@users.sf.net>.
+
+       * doc/make.texi (Including Other Makefiles): Clarify this behavior.
+       * src/main.c (main): Don't run the new check-for-errors behavior.
+       * tests/scripts/features/reinvoke: Reset tests of the "old" behavior
+       and add new tests for this situation.
+
+2022-01-17  Paul Smith  <psmith@gnu.org>
+
+       Ensure that loaded functions increment the command count
+       Since we don't know what a loaded function (via Guile or load) may
+       do, increment the command count just in case.
+
+       * src/function.c (struct file_table_entry): New adds_command bool.
+       (FT_ENTRY): Initialize it to 0 for built-in functions.
+       (expand_builtin_function): If adds_command, increment the count.
+       (define_new_function): Set adds_command for loaded functions.
+
+2022-01-17  Paul Smith  <psmith@gnu.org>
+
+       * src/read.c (tilde_expand): Put back '/' before returning.
+       Joe Filion <joefilion4@gmail.com> noted that the string is modified,
+       and Henrik Carlqvist <hc94@poolhem.se> noticed that it wasn't put
+       back in all cases.
+
+2021-12-29  Paul Smith  <psmith@gnu.org>
+
+       * tests/scripts/targets/INTERMEDIATE: Rewrite for new test method
+
+2021-12-29  Paul Smith  <psmith@gnu.org>
+
+       Do not force targets to be SECONDARY
+       In SV 43677 we forced targets to be secondary if we found an
+       intermediate file that was listed as a prerequisite of another
+       target.  This overrides .INTERMEDIATE settings, so doesn't work.
+       Now that we have an is_explicit flag in targets, use that instead.
+
+       * src/implicit.c (pattern_search): Remove setting of secondary.
+       Preserve the value of the is_explicit flag when creating a new
+       file target, and consider it when setting the intermediate flag.
+       * tests/scripts/features/patternrules: Add a test w/out INTERMEDIATE
+       * tests/scripts/targets/INTERMEDIATE: Add a test with INTERMEDIATE
+
+2021-12-29  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 48643] Preserve target-specific variables on intermediate files
+       Target-specific variables used to define the target as "ought to
+       exist" so they could never be intermediate.  Now they can be, so
+       merge the target-specific variables from the intermediate target
+       so they're not lost.
+
+       * src/implicit.c (pattern_search): Use merge_variable_set_lists
+       to merge target-specific variables.
+       * tests/scripts/features/implicit_search: Add tests of target-
+       specific variable assignments and implicit rules.
+
+2021-12-29  Paul Smith  <psmith@gnu.org>
+
+       * README.template: Clean up patch submission information
+
+2021-12-19  Jouke Witteveen  <j.witteveen@gmail.com>
+
+       * src/read.c (find_percent_cached): [SV 60798] Silence GCC11 warnings
+
+       [SV 60798] Silence bogus GCC10 and GCC11 warnings
+       * src/main.c (main): Use a separate variable to track final character.
+       * src/read.c (eval): Track the semicolon position not one beyond it.
+       * src/variable.c (do_variable_definition): Include a default switch
+       case to ease the work of the exhaustiveness prover.
+
+2021-12-19  Paul Smith  <psmith@gnu.org>
+
+       Update documentation with instructions for patch submission
+       * README.template: Add notes on how to submit patches.
+       * README.git: Point to the README.
+       * doc/make.texi: Ditto.
+
+2021-12-19  Paul Smith  <psmith@gnu.org>
+
+       Change HTTP URLs to use HTTPS instead
+       Also remove unnecessary tests/COPYING file.
+
+       * README.template: Change http: to https:
+       * README.git: Ditto
+       * doc/make.texi: Ditto
+       * doc/make.1: Ditto
+       * src/main.c: Ditto
+       * maintMakefile: Remove invalid URL
+
+2021-12-19  Paul Smith  <psmith@gnu.org>
+
+       * src/makeint.h: Compute INTSTR_LENGTH based on size of intmax_t
+       Math suggested by Edward Welbourne <edward.welbourne@qt.io>
+
+2021-12-19  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Remove arbitrary limits on intcmp integers
+       We don't need to parse strings into C integer values to compare them.
+
+       * src/function.c (parse_textint): Find boundaries of a numeric string.
+       (func_intcmp): Use parse_textint() to compare integers textually.
+       * tests/scripts/functions/intcmp: Test with extra-large numbers.
+
+2021-12-19  Paul Smith  <psmith@gnu.org>
+
+       Use a well-known error string for out-of-bound function arguments
+       * src/function.c (parse_numeric): Check for empty value and error.
+       If we find ERANGE just print our own error, not strerror.
+       (func_word): Use a generic "not good" error message.
+       (func_wordlist): Ditto
+       (func_intcmp): Ditto
+       * tests/run_make_tests.pl: Remove code to find strerror(ERANGE)
+       * tests/scrips/functions/intcmp: Update the error message.
+       * tests/scrips/functions/word: Ditto.
+
+       * doc/make.text (Wildcards): Document that glob results are sorted.
+
+2021-12-19  Paul Smith  <psmith@gnu.org>
+
+       [SV 61621] Don't use POSIX_SPAWN_RESETIDS with posix_spawn()
+       When make is invoked in a environment where the user namespace is
+       restricted, such as under unshare(1) (on GNU/Linux), it won't be able
+       to find its real UID so the effective UID can't be set to it and
+       posix_spawn() will fail with EINVAL.
+
+       It's not less safe to run recipe jobs using the same UID values that
+       make was invoked with, so don't worry about this flag.
+
+       * src/job.c (child_execute_job): Don't set POSIX_SPAWN_RESETIDS flag.
+
+2021-12-05  Paul Smith  <psmith@gnu.org>
+
+       * .gitignore: Ignore patch files.
+
+2021-11-28  U2FsdGVkX1  <u2fsdgvkx1@gmail.com>  (tiny change)
+
+       * src/commands.c (fatal_error_signal) [W32]: Use %lu for DWORD.
+       * src/function.c (windows32_openpipe) [W32]: Ditto.
+
+2021-11-28  Paul Smith  <psmith@gnu.org>
+
+       * NEWS: Update with author details
+
+       Special-case Windows error results
+       * tests/scripts/features/errors: Match Windows-specific errors.
+       * tests/scripts/features/targetvars: Match Windows-specific errors.
+       * tests/scripts/misc/general4: Match Windows-specific errors.
+
+2021-11-28  Paul Smith  <psmith@gnu.org>
+
+       Convert word, wordlist, and intcmp functions to use long long
+       Modify make functions that parse integer values to use long long
+       values instead of long: on Windows long is the same as int (4 bytes)
+       and we don't want behavior to differ between different platforms.
+
+       * bootstrap.conf: Change strtol module to strtoll module.
+       * src/function.c (parse_numeric): Use strtoll() and return long long.
+       (func_word): Use long long.
+       (func_wordlist): Use long long.  Verify second argument is >= 0.
+       (func_intcmp): Use long long.
+       * src/config.ami.template: Don't define HAVE_STRTOLL.
+       * src/config-vms.template: Define HAVE_STRTOLL.
+       * src/config.W32.template: Define HAVE_STRTOLL.
+       * tests/run_make_tests.pl: Set $ERR_out_of_range to the proper string.
+       * tests/scripts/functions/word: Rework to use the new style and avoid
+       TAB characters.  Verify trailing whitespace is ignored.  Add a test
+       for a negative second argument to wordlist.  Add tests for max signed
+       integer values.  Use $ERR_out_of_range for the error string.
+       * tests/scripts/functions/intcmp: Add tests for min and max signed
+       integer values.  Use $ERR_out_of_range for the error string.
+
+2021-11-28  Jouke Witteveen  <j.witteveen@gmail.com>
+
+       Introduce $(intcmp ...) for numerical comparison
+       Numbers can come from $(words ...), automatic variables such as
+       $(MAKELEVEL), from environment variables, or from shell output such as
+       through $(shell expr ...).  The $(intcmp ...) function allows
+       conditional evaluation controlled by numerical variables.
+
+       * NEWS: Announce this feature.
+       * doc/make.texi (Functions for Conditionals): Document 'intcmp'.
+       * src/function.c (func_intcmp): Create the 'intcmp' built-in function.
+       * tests/scripts/functions/intcmp: Test the 'intcmp' built-in function.
+
+2021-11-28  Jouke Witteveen  <j.witteveen@gmail.com>
+
+       Use strtol() instead of atoi()
+       strtol() is part of C89 and a fallback is provided by gnulib.
+
+       * src/function.c (func_word, func_wordlist): Change atoi to strtol.
+       * test/scripts/functions/word: Add out-of-range verification testing.
+
+2021-11-27  Jouke Witteveen  <j.witteveen@gmail.com>
+
+       * src/makeint.h: Removed unused atol declaration
+
+2021-11-27  Paul Smith  <psmith@gnu.org>
+
+       * src/implicit.c (pattern_search): Fix text for easier translation.
+
+       [SV 48643] Update the implicit rule search docs
+       * NEWS: Announce the change.
+       * doc/make.texi (Implicit Rule Search): Update the definition of
+       "ought to exist" and add the extra step for compatibility mode.
+
+2021-11-27  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 48643] Enhance "ought to exist" definition
+       The traditional definition of "ought to exist" in the user's manual can
+       lead to make choosing a poor series of chained implicit rules.  Modify
+       that rule so that we first attempt to resolve implicit rules by
+       considering targets which are only (a) targets or (b) explicit
+       prerequisites of the current target.
+
+       For backward-compatibility, if we don't find a solution using that
+       algorithm use the previous definition where "ought to exist" means
+       "mentioned as a prerequisite of any target".
+
+       * src/implicit.c (pattern_search): An extra argument controls whether
+       to perform the backward-compatible rule search or not.  If a prereq is
+       a target, or if it's a prerequisite of THIS target, then choose it.
+       If we get to the end and haven't found a match, but we have found a
+       potential compatibility rule, then retry with compat rules enabled.
+       If we're searching with compat rules enabled and we find a file
+       mentioned as a prerequisite of ANY target, then use it.
+       * tests/features/implicit_search: Provide a large suite of tests for
+       different steps of implicit rule search.
+
+2021-11-27  Paul Smith  <psmith@gnu.org>
+
+       tests: Enhance output to contain filename/line number info
+       * tests/scripts/options/dash-I: Use string comparison operator.
+       * tests/test_driver.pl (cmd2str): New method to convert a
+       command line to a string with proper quoting.
+       * tests/run_make_tests.pl (create_command): Call cmd2str() to format
+       the command.  Add the filename/line number to the output.
+
+2021-10-18  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 61042] Enhance logging of implicit rule search
+       Logging of implicit rule search gives limited information as to why a
+       given implicit rule was rejected, and if no implicit rule is found we
+       get the confusing "No rule to make target" result when the real issue
+       is that some prerequisite of some implicit rule could not be built.
+
+       Enhance logging around implicit rule search as follows:
+       1. The messages which refer to a rule print a description (the targets
+          and prerequisites) of the rule.
+       2. A new message tells when a rule is rejected, along with the reason.
+       3. The 'Looking for an implicit rule...' message is printed for every
+          prerequisite, not just the top-level target.
+       4. "Trying harder" message is printed, when intermediate prerequisites
+          are going to be searched.
+       5. The 'No rule found...' and 'Found implicit rule...' messages are
+          printed for every prerequisite, not just the top-level target.
+       6. "Ought to exist...", "Found..." or "Not found..." message is
+          printed for each prerequisite.
+
+       * src/rule.h (struct rule): Remember the definition of the rule.
+       * src/rule.c (get_rule_defn): Compute the definition of a rule.
+       (install_pattern_rule): Initialize the definition to empty.
+       (create_pattern_rule): Ditto.
+       (freerule): Free the definition.
+       (print_rule): Use the definition when printing rules.
+       * src/remake.c (update_file_1): Push debug output down into
+       try_implicit_rule().
+       * src/implicit.c (try_implicit_rule): Add debugging
+       (pattern_search): Show the rule definition in various debug output.
+       Add new debug messages for implicit rule search.
+
+       Additional changes by Paul Smith <psmith@gnu.org>:
+
+       Since we usually don't need the rule definition, defer computing it
+       until we do.
+
+       * bootstrap.conf: Include the mempcpy Gnulib module.
+       * src/makeint.h (mempcpy): Declare mempcpy if not available.
+       * src/misc.c (mempcpy): Define mempcpy if not available.
+       * src/config.h-vms.template: Don't set HAVE_MEMPCPY.
+       * src/config.h.W32.template: Ditto.
+       * src/rule.h (get_rule_defn): Return the definition of a rule.
+       * src/rule.c (get_rule_defn): If we don't have a definition compute
+       it; either way return it.
+       * src/implicit.c (pattern_search): Rework the handling of explicit
+       prerequisites to pattern rules to be more clear.  There is no change
+       in behavior.
+
+2021-10-17  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       * doc/make.texi (Special Targets): [SV 61122] Add .SECONDARY example
+
+2021-10-17  Paul Smith  <psmith@gnu.org>
+
+       * README.git: Update C version prerequisite
+
+2021-09-20  Paul Smith  <psmith@gnu.org>
+
+       Add support for the POSIX :::= assignment operator.
+       POSIX Issue 8 will require a new assignment operator, :::=.
+       This operator behaves similarly to the BSD make := operator: the
+       right-hand side is expanded immediately, but then the value is
+       re-escaped (all '$' are converted to '$$') and the resulting variable
+       is considered a recursive variable: the value is re-expanded on use.
+
+       * src/variable.h (enum variable_flavor): Add f_expand flavor.
+       * src/variable.c (do_variable_definition): When defining f_expand,
+       post-process the result to re-escape '$' characters.
+       Remove default: to the compiler warns about un-handled enum values.
+       Set recursive values for both f_recursive and f_expand.
+       (parse_variable_definition): Rewrite this method.
+       The previous version was annoying to extend to ':::='.
+       (print_variable): Remove default: so the compiler warns us about
+       un-handled enum values.
+       * src/function.c (func_origin): Remove default: so the compiler warns
+       us about un-handled enum values.
+       * doc/make.texi: Add documentation for :::=.
+       * tests/scripts/variables/define: Add a test for define :::=.
+       * tests/scripts/variables/flavors: Add tests for :::=.
+       * tests/scripts/variables/negative: Add tests for :::=.
+
+2021-09-07  Paul Smith  <psmith@gnu.org>
+
+       Clean up more Windows warnings.
+       * src/config.h.W32.template: Re-enable warnings that we don't violate.
+       Add a new disabled warning: 4130 (logical operation on address of
+       string constant).
+       * src/w32/compat/posixfcn.c: Make makeint.h the first included header.
+       * src/w32/subproc/sub_proc.c: Ditto.  It includes config.h already.
+
+2021-09-07  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 60435] Ensure intermediate grouped files are removed
+       If multiple intermediate files are built together be sure all of them
+       are removed after make is finished.  Continue to ensure that targets
+       that exist before make starts are not removed even if they appear to be
+       intermediate.
+
+       Add a number of tests to pattern rules to verify this behavior.
+
+       * src/filedef.h (struct file): Add a new is_explicit bitfield.
+       * src/file.c (rehash_file): Merge the is_explicit bit.
+       (enter_prereqs): Set is_explicit if the file is explicitly mentioned.
+       * src/implicit.c (pattern_search): Set intermediate on the file if it's
+       not explicit.
+       (record_files): Set is_explicit if a file is mentioned as a target.
+       * src/remake.c (update_file_1): Set secondary on files that already
+       exist so they won't be removed.
+       * tests/scripts/features/double_colon: Add a test for double-colon
+       pattern rules.
+       * tests/scripts/features/patternrules: Update KGO for tests where more
+       files are removed.
+       Add new tests to verify handling removal of intermediate files in the
+       context of grouped pattern targets.
+
+2021-09-06  Paul Smith  <psmith@gnu.org>
+
+       * src/default.c (default_variables): Use CPP in PREPROCESS.S.
+
+2021-09-06  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       * src/main.c (decode_debug_flags): [SV 607777] Preserve -d options
+       * tests/scripts/options/dash-d: Test that -d --trace keeps -d.
+
+2021-09-06  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 57778] Don't ignore included makefiles that can't be read
+       If we find an included makefile but it's not readable, stop
+       immediately with an error rather than continuing to look in other
+       directories.
+
+       * src/read.c (eval_makefile): Only keep searching if the fopen error
+       is ENOENT, else stop and fail.
+       * tests/scripts/features/include: Add tests to verify this behavior.
+
+2021-09-06  Paul Smith  <psmith@gnu.org>
+
+       [SV 60795] Don't remake phony included makefiles and show errors
+       Change the handling of included makefiles which are phony targets to
+       be similar to double-colon rules with no prerequisites: simply don't
+       build them at all during the remake a makefile phase.
+
+       Ensure that any included makefile which is needed but not built
+       results in an error.
+
+       Update the documentation to make this clear.
+       Add tests to verify this behavior.
+
+       * doc/make.texi (Remaking Makefiles): Clarify double-colon exception.
+       Document that phony targets are handled the same way.
+       (Phony Targets): Ditto.
+       * src/main.c (main): Check for phony targets when skipping goals.
+       Rather than throwing out skipped but failed goals keep them
+       separately then report them as errors.
+       * src/read.c (eval): Set the file location on included makefiles even
+       when there's no error.
+       * tests/scripts/features/include: Add tests for handling included
+       makefiles with both phony and double-colon rules to rebuild them.
+
+2021-09-06  Paul Smith  <psmith@gnu.org>
+
+       * doc/make.texi (Environment): [SV 60841] Clarify variable exporting.
+
+       * doc/make.texi (Chained Rules): [SV 60904] Clarify intermediate files.
+
+2021-09-06  Paul Smith  <psmith@gnu.org>
+
+       Remove UBSAN issues discovered via fuzzing tests.
+       The arithmetic conversions in C say that if a binary operator has an
+       unsigned and signed type as operands and the unsigned type has a greater
+       rank then the signed value is converted to unsigned.  This is bad if the
+       signed value is negative.
+
+       There are a few places in the code which have this situation; convert
+       the signed value to positive and add instead of subtracting.
+
+       Reported by He Jingxuan <jingxuan.he@inf.ethz.ch>
+
+       * src/read.c (find_map_unquote): Use a positive int in memmove().
+       (find_char_unquote): Ditto.
+       (find_percent_cached): Ditto.
+
+2021-09-05  Paul Smith  <psmith@gnu.org>
+
+       * doc/make.texi (Prerequisite Types): [SV 61069] Mention PHONY prereqs
+
+       * doc/make.1: Clean up man page text.
+
+       * README.git: Add a section on ways to test.
+
+       * src/main.c (decode_switches): Fix memory leak.
+
+       Clean up a few Windows build warnings (not all!)
+       * build_w32.bat: Quote uses of %VSWHERE% so it can contain spaces
+       * src/hash.c (hash_init): Avoid use of an undefined struct.
+       (hash_rehash): Ditto.
+       * src/vpath.c (construct_vpath_list): Cast explicitly to void*.
+
+2021-09-05  Paul Smith  <psmith@gnu.org>
+
+       [SV 45211] Parse MAKEFLAGS immediately when it's reset
+       When MAKEFLAGS is set in a makefile, reparse it immediately rather
+       than waiting until after all makefiles have been read and parsed.
+       This change doesn't actually fix the SV bug referenced because, even
+       though we do reparse MAKEFLAGS, we don't handle the -r or -R options
+       immediately.  Doing this will require more effort.
+
+       * NEWS: Announce the change.
+       * src/makeint.h: Publish reset_switches() and decode_env_switches()
+       from main.c
+       * src/main.c (main): Don't call construct_include_path(); it will be
+       invoked decode_switches().
+       Preserve the old values of builtin_rules, builtin_variables, and
+       job_slots before we read makefiles since they can be changed now.
+       (reset_switches): Publish (remove static).  Set the initial value of
+       the stringlist list to NULL.
+       (decode_switches): Call construct_include_path() after decoding.
+       (decode_env_switches): Publish (remove static).
+       (define_makeflags): Set the MAKEFLAGS variable for special handling.
+       * src/read.c (eval_makefile): Check for empty include_directories.
+       (construct_include_path): Clear any old value of .INCLUDE_DIRS before
+       appending new values.  Free the previous include_directories.
+       * src/variable.c (lookup_special_var): When MAKEFLAGS is set, first
+       reset the switches then re-parse the variable.
+       * tests/run_make_tests.pl: Memo-ize some default variable values.
+       * tests/scripts/options/dash-r: Create tests for setting -r and -R.
+       * tests/scripts/variables/MAKEFLAGS: Test that resetting -I from
+       within the makefile takes effect immediately.
+
+2021-09-05  Paul Smith  <psmith@gnu.org>
+
+       * make-gdb.py: Add pretty-printers and clean up.
+       Create a pretty-printer for next-pointer lists.
+       Create a pretty-printer for stringlists.
+       Change showargv from a function to a command (easier to use).
+
+       Clean up some Python PEP violations.  Add support for testing null
+       pointers and caching gdb.Types.
+
+2021-09-03  Paul Smith  <psmith@gnu.org>
+
+       [SV 60595] Restart whenever any makefile is rebuilt
+       Previously if an included makefile was rebuilt as a prerequisite of
+       another included makefile which didn't need to be rebuilt, make would
+       not realize that it needed to re-exec itself.
+
+       Ensure that if any included makefile target is rebuilt we re-exec.
+       Also ensure that if an included makefile is not readable, and our rule
+       for rebuilding it doesn't actually change it, we will still fail.
+
+       * src/remake.c (update_goal_chain): If a goal's update was successful
+       then check its status, even if no actual commands were run because it
+       was already up to date.
+       (show_goal_error): Remove superfluous cast.
+       * src/main.c (main): If the makefile remake did nothing, check that we
+       were able to successfully include all the makefiles we care about; if
+       not fail.  When generating error messages about included makefiles be
+       sure to show the filename/linenumber information.
+       * test/scripts/features/reinvoke: Add tests for this behavior.
+       * test/scripts/options/dash-k: Update error messages.
+
+2021-09-03  Paul Smith  <psmith@gnu.org>
+
+       [SV 60412] Allow -I- to throw out the current directory path
+       Accept a "-" directory value to the -I option to clear the set of
+       directories to be searched up to that point, including the default
+       directories.
+
+       * NEWS: Announce the change.
+       * doc/make.texi (Summary of Options): Add documentation.
+       * src/read.c (construct_include_path): Check for '-' and if found,
+       clear the list of directories to be searched.
+       * tests/scripts/options/dash-I: Add tests for -I-.
+       * tests/scripts/variables/INCLUDE_DIRS: Add tests for -I-.
+
+2021-07-25  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 60699] Avoid calling strlen() repeatedly in a loop
+       * src/variable.c (lookup_pattern_var): Accept target length parameter.
+       (initialize_file_variables): Pass computed target length to lookup.
+
+2021-07-25  Paul Smith  <psmith@gnu.org>
+
+       * NEWS: Add a few missing attributions
+       * AUTHORS: Add some missing attributions
+
+2021-07-25  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 60297] Add .NOTINTERMEDIATE special target
+       Support a new special target, .NOTINTERMEDIATE.  Any file or pattern
+       prerequisite of this target will never be considered intermediate.
+       This differs from .SECONDARY in that .SECONDARY files won't be deleted
+       but they will still not be built if they are missing.
+
+       .NOTINTERMEDIATE files are treated the same way as a target which is
+       explicitly mentioned in the makefile.  This is mostly useful with
+       patterns; obviously mentioning a target explicitly here is enough in
+       and of itself to make something not intermediate.
+
+       Some adjustments made by psmith@gnu.org
+
+       * NEWS: Announce the new feature.
+       * doc/make.texi (Special Targets): Document .NOTINTERMEDIATE.
+       (Chained Rules): Describe how to use .NOTINTERMEDIATE.
+       * src/main.c (main): Add "notintermediate" to the .FEATURES variable.
+       * src/filedef.h (struct file): Add "notintermediate" flag.
+       * src/file.c (no_intermediates): Mark global .NOTINTERMEDIATE.
+       (snap_file): Support .NOTINTERMEDIATE special target.  Throw an error
+       if the same target is marked both .NOTINTERMEDIATE and .SECONDARY or
+       .INTERMEDIATE.
+       (rehash_file): Merge intermediate, notintermediate, secondary flags.
+       (remove_intermediates): Check notintermediate flag before removing.
+       (print_file):
+       * src/implicit.c (pattern_search): Set notintermediate based on the
+       pattern.
+       * tests/scripts/targets/NOTINTERMEDIATE: Add a new test suite.
+
+2021-05-30  Paul Smith  <psmith@gnu.org>
+
+       * make.texi (Reading Makefiles): != creates recursive variables.
+       Reported by Ronald Hoogenboom <RHoogenboom@irdeto.com>.
+
+2021-05-30  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 60659] Set $$< properly in second expansion
+       Set the $$< automatic variable as best we can during secondary
+       expansion of prerequisites.
+
+       * src/commands.c (set_file_variables): Don't break without setting
+       'less' if secondary expansion is enabled.
+       * tests/scripts/features/se_explicit: Test secondary expansion results.
+       * tests/scripts/features/se_implicit: Test secondary expansion results.
+
+2021-05-30  Paul Smith  <psmith@gnu.org>
+
+       [SV 58341] Add non-trivial options to $(MAKEFLAGS)
+       Previously only trivial (single-letter) options were available in
+       $(MAKEFLAGS) when it is examined from inside a makefile (the full
+       value was set before expanding recipes).
+
+       Ensure that all options (but, not command line variable overrides!)
+       are visible in the $(MAKEFLAGS) variable.  In order to do this
+       reset the default values of options, particularly options which are
+       lists, before re-reading MAKEFLAGS after makefiles have been read.
+       Otherwise we'll get duplicate values for options such as -I.
+
+       Unfortunately there are complications here as well: sometimes (for
+       jobserver options in particular) we modify the values of these
+       options while running: we must not reset these modifications.
+
+       * NEWS: Announce this change
+       * src/main.c (main): Call new reset_switches() before re-parsing
+       MAKEFLAGS.
+       (reset_switches): Reset the value of non-special options to their
+       defaults.
+       (define_makeflags): Add non-special options into MAKEFLAGS even
+       if 'all' is not set.
+
+2021-05-30  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 60378] Don't add duplicate default search directories
+       Depending on how make was configured it may add duplicate
+       directories in the default include search path: avoid this.
+
+       (Tweaked by psmith@gnu.org)
+
+       * configure.ac: Set AM variable KNOWN_PREFIX if --prefix is known
+       * Makefile.am: Only set INCLUDEDIR if prefix is not known
+       * read.c [default_include_directories]: Only add INCLUDEDIR if set
+
+2021-05-30  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       * tests/scripts/targets/INTERMEDIATE: [SV 60188] Add one more test
+
+2021-05-29  Eli Zaretskii  <eliz@gnu.org>
+
+       [SV 58656] Fix mtime for large files on MS-Windows
+       In MSVC builds, 'stat' fails when called on files larger than
+       2GB.  Call '_stat64' instead to work around this.
+
+       * src/remake.c (STAT): Define to '_stat64' for MSVC builds.
+       (name_mtime) [WINDOWS32]: Use STAT instead of 'stat'.
+       Suggested by Makoto Kato <m_kato@ga2.so-net.ne.jp>.
+
+2021-03-28  Paul Smith  <psmith@gnu.org>
+
+       Fix build and test issues on Windows
+       * src/dep.h (DEP): Remove extraneous semicolon.
+       * src/dir.c (find_directory) [W32]: Replace removed variable.
+       * tests/scripts/features/include: Allow the extra default makefile
+       searched for on Windows.
+       * tests/scripts/functions/file: Use $(info ...) to avoid "command
+       too long" errors on Windows.
+
+2021-03-28  Tobias Stoeckmann  <tobias@stoeckmann.org>  (tiny change)
+
+       * src/remake.c (name_mtime): Reserve space for nul in readlink result
+
+2021-03-25  Cao jin  <caoj.fnst@cn.fujitsu.com>  (tiny change)
+
+       * doc/make.texi (Call Function): Apply consistent formatting
+
+2021-03-25  Pete Dietl  <petedietl@gmail.com>  (tiny change)
+
+       * src/job.c (child_execute_job): Update gnulib find_in_given_path()
+
+2021-03-25  Mike Frysinger  <vapier@gentoo.org>  (tiny change)
+
+       * doc/make.texi (Automatic Variables): Relocate the $? example
+
+2021-03-15  Paul Smith  <psmith@gnu.org>
+
+       [SV 58497] Ensure $(file <) newline removal succeeds
+       Keep a count of bytes read rather than comparing pointers since the
+       variable_buffer might get reallocated.
+
+       Bug and patch by Ken Tossell <ken@tossell.net>
+       Regression tests by Dmitry Goncharov <dgoncharov@users.sf.net>
+       Tweaked by Paul Smith <psmith@gnu.org>
+
+       * src/function.c (func_file): Use bytes read rather than a pointer.
+       * tests/scripts/functions/file: Provide various tests for reading
+       empty files, files with/without newlines, and large files.
+
+2021-03-15  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 60188] Explicit prereqs cannot be intermediate files
+       If a prereq of a pattern is an explicit target, it should not be
+       considered an intermediate file.
+
+       (Minor tweaks by Paul Smith <psmith@gnu.org>)
+
+       * src/dep.h (struct nameseq): Add is_explicit flag.
+       * src/implicit.c (struct patdeps): Ditto.
+       (pattern_search): Set the is_explicit flag appropriately for each
+       prerequisite, based on whether it contained a pattern or not.
+       Update the help output to note implicit vs. explicit prereqs.
+       * tests/scripts/features/double_colon: Add tests.
+       * tests/scripts/features/grouped_targets: Ditto.
+       * tests/scripts/features/patternrules: Ditto.
+       * tests/scripts/features/se_implicit: Ditto.
+       * tests/scripts/features/statipattrules: Ditto.
+
+2021-03-15  Paul Smith  <psmith@gnu.org>
+
+       * tests/scripts/features/exec: Small cleanup
+
+2021-03-15  Paul Smith  <psmith@gnu.org>
+
+       Ensure variable_buffer is always set.
+       Initialize the global variable_buffer in main() so that it is never
+       a null pointer.  Then invoking variable_expand("") is never needed:
+       simply use the variable_buffer pointer when we want to restart the
+       variable buffer.  The main point of this simplification is not to
+       keep a separate pointer to the beginning of the buffer: this is
+       dangerous because the buffer may be re-allocated.  Instead always
+       use the variable_buffer pointer itself.
+
+       * src/variable.h (initialize_variable_output): Publish.
+       * src/expand.c (initialize_variable_output): Remove static.
+       * src/main.c (main): Initialize variable_buffer.
+       * src/file.c (enter_prereqs): Don't call variable_expand("") and
+       don't save a separate buffer pointer than might be outdated.
+       (expand_deps): Ditto.
+       * src/read.c (record_files): Ditto.
+       * src/remake.c (library_search): Ditto.
+
+2021-03-15  Paul Smith  <psmith@gnu.org>
+
+       [SV 59881] Handle vertical TAB consistently
+       While parsing makefiles get_next_mword() was treating VTAB as a word
+       character rather than a word separator.  However, when using
+       find_next_token(), for example in patsubst_expand_pat(), we treated
+       VTAB as a word separator causing multiple words to appear where we
+       didn't expect them.
+
+       * src/makeint.h (END_OF_TOKEN): Change from a loop to a boolean check.
+       * src/misc.c (end_of_token): Move the loop here.
+       * src/read.c (get_next_mword): Skip whitespace, not just blank, to
+       find the start of the word and use END_OF_TOKEN() to decide when the
+       current word is finished.
+
+2021-03-14  Paul Smith  <psmith@gnu.org>
+
+       [SV 59870] define/undefine prerequisites are not target-specific vars
+       * src/read.c (parse_var_assignment): If called in a target-specific
+       variable context don't allow define/undefine as variable assignments.
+       * test/scripts/variables/define: Add a test.
+       * test/scripts/variables/undefine: Add a test.
+
+       * maintMakefile: Don't make .check-git-HEAD .PHONY
+
+2021-03-07  Jouke Witteveen  <j.witteveen@gmail.com>
+
+       More correctly describe the scope of variables
+       * NEWS: Use "local" instead of the incorrect "lexically-scoped".
+       * doc/make.texi: Refer to let/foreach variables as local variables.
+
+2021-03-07  Paul Smith  <psmith@gnu.org>
+
+       * doc/make.text: Clarify that patsubst doesn't touch unmatched words
+
+       * .dir-locals.el: Update for newer LSP config
+
+       * file.c (remove_intermediates): Restart "rm ..." on error
+
+2020-12-07  Paul Smith  <psmith@gnu.org>
+
+       * doc/make.texi (How Patterns Match): [SV 58639] Fix chaining info.
+
+2020-12-06  Jouke Witteveen  <j.witteveen@gmail.com>
+
+       Create $(let ...) providing lexically scoped variables
+       Add a new function $(let ...) which allows lexically scoped variables.
+
+       * NEWS: Add information on this feature.
+       * doc/make.texi (Let Function): Document the 'let' function.
+       * src/function.c (func_let): Create the 'let' built-in function.
+       * tests/scripts/functions/let: Test the 'let' built-in function.
+
+2020-12-06  Paul Smith  <psmith@gnu.org>
+
+       * doc/make.texi (Phony Targets): [SV 58961] Clarify pattern handling
+
+       * doc/make.texi (Synchronized Terminal Output): [SV 58960] Fix link
+
+2020-12-05  Paul Smith  <psmith@gnu.org>
+
+       [SV 59169] Add --debug=why and --debug=print options
+       Add debug options to print recipes even if they would otherwise be
+       silent, and to print the reason that a target was considered out of
+       date.
+
+       Modify --trace to simply be a shorthand for --debug=print,why.
+
+       * NEWS: Announce changes.
+       * doc/make.texi (Summary of Options): Document the new options.
+       * doc/make.1: Ditto.
+       * src/debug.h: Add new flags DB_PRINT and DB_WHY.
+       * src/makeint.h: Remove the trace_flag variable.
+       * src/job.c (start_job_command): Check debug flags not trace_flag.
+       (new_job): Ditto.
+       * src/main.c (trace_flag): Make a static variable for switches.
+       (decode_debug_flags): Set DB_PRINT and DB_WHY if trace_flag is set.
+       * tests/scripts/variables/GNUMAKEFLAGS: Update known-good messages.
+       * tests/scripts/variables/MAKEFLAGS: Ditto.
+
+2020-12-05  Paul Smith  <psmith@gnu.org>
+
+       * configure.ac: [SV 58836] Copy build.sh to the build directory
+
+2020-12-05  Paul Smith  <psmith@gnu.org>
+
+       [SV 57676] Support included files being built after failing
+       If a -include file does not exist, then some subsequent operation
+       creates it, then allow it to be successfully included.
+
+       * src/read.c (eval_makefile): If our last mtime was NONEXISTENT then
+       reset it to 0 so we'll check it again.
+       * tests/scripts/features/include: Add a test for this behavior.
+
+2020-12-02  Paul Smith  <psmith@gnu.org>
+
+       * src/makeint.h (free_alloca): Check for builtin alloca
+
+       * src/main.c (main): [SV 59601] Check for malformed env. variables
+
+2020-11-29  Paul Smith  <psmith@gnu.org>
+
+       * maintMakefile: [SV 58794] Check for file existence in the release
+
+       * Makefile.am (HAVE_GUILE): Only use Guile options if HAVE_GUILE.
+
+       * tests/scripts/features/vpathgpath: Avoid duplicate function name.
+
+       Resolve unused-result warnings for alloca(0)
+       * src/makeint.h (free_alloca): New macro to defeat warn_unused_result.
+       * src/read.c (eval_makefile): Call it.
+       (eval_buffer): Ditto.
+       * src/remake.c (update_file): Ditto.
+
+2020-11-29  Paul Smith  <psmith@gnu.org>
+
+       Avoid some valgrind warnings
+       Using sscanf() to parse archive header values (struct ar_hdr) can lead
+       to valgrind warnings which are probably bogus but are annoying.
+       To be safer, create a local method to convert the ASCII integer
+       strings into integers.
+
+       * src/arscan.c (parse_int): Turn integer strings into integers.
+       (ar_scan): Initialize struct ar_hdr memory.
+       Call parse_int() rather than sscanf/atol.
+
+2020-11-29  Paul Smith  <psmith@gnu.org>
+
+       [SV 41273] Allow the directory cache to be invalidated
+       Each time we invoke a command it's possible that it will change the
+       filesystem in ways that were not described by the target.  If that
+       happens but we have cached previous directory contents then we may
+       make decisions or report results based on obsolete information.
+
+       Keep a count of how many commands we've invoked, and remember the
+       current command count every time we load the contents of a directory.
+       If we request the directory and the current command count has changed
+       we know the cache is outdated so reload from scratch.
+
+       * NEWS: Announce the change.
+       * src/makeint.h (command_count): Create a global counter.
+       * src/main.c (command_count): Ditto.
+       * src/job.c (reap_children): Increment the counter on job completion.
+       * src/function.c (func_file): Increment if we write a file.
+       * src/dir.c (clear_directory_contents): Clear the current contents of
+       a cached directory.
+       (struct directory_contents): Remember the counter value.
+       (struct directory): Remember the counter value for non-existing dirs.
+       (find_directory): If we have a cached directory and the count hasn't
+       changed then return it.  Else, clear the previous contents and re-read
+       from scratch.
+       * tests/scripts/features/dircache: Add tests of the directory cache.
+
+2020-11-29  Paul Smith  <psmith@gnu.org>
+
+       Support "unexport" in target-specific variables.
+       Rewrite the environment variable algorithm to correctly inherit
+       export settings from parent variable sets.  The new algorithm
+       for computing the table of environment variables is:
+
+       - Start with the most local variable set and proceed to global.
+       - If the variable already exists in the table and we don't know
+         its export status, update it with the current variable's status.
+       - If the variable is not in the table and it's not global, add it
+         regardless of its status so if it's unexported we remember that.
+       - If the variable is not in the table and is global, check its
+         export status and don't add it if we won't export it.
+
+       Then when generating the environment variables, check the export
+       status of each variable in case it was a target-specific variable
+       and we have determined it should not be exported.
+
+       Rework SHELL handling to check at the end whether we added it or
+       not and if we didn't, add the value from the environment.
+
+       * NEWS: Announce support for target-specific "unexport"."
+       * doc/make.texi (Target-specific): Document the support.
+       * src/variable.h (enum variable_export): Make into a global type.
+       * src/read.c (struct vmodifiers): Use enum variable_export rather
+       than individual booleans.
+       (parse_var_assignment): Parse the "unexport" keyword.
+       (eval): Remember the vmodifier value in the variable.
+       (record_target_var): Ditto.
+       * src/variable.c (should_export): Check if the variable should be
+       exported.
+       (target_environment): Implement the above algorithm.
+       * tests/scripts/features/export: Test export/unexport with variable
+       assignments on the same line.
+       * tests/scripts/features/targetvars: Add a comprehensive suite of
+       tests for different types of target-specific export / unexport.
+       * tests/scripts/variables/SHELL: Update the comment.
+
+2020-11-29  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       [SV 59230] Preserve export settings for target-specific vars
+       * src/read.c (record_target_var): Don't overwrite pre-existing export
+       flag unless we're changing it.
+       * tests/scripts/features/targetvars: Add a test.
+
+2020-11-29  Paul Smith  <psmith@gnu.org>
+
+       [SV 59230] Ensure environment variables are exportable
+       When checking for invalid environment variable names we searched the
+       entire name string instead of just the first LENGTH chars; this could
+       cause us to incorrectly decide the variable was not exportable.
+
+       Dmitry Goncharov <dgoncharov@users.sf.net> found this bug and
+       provided a test case and sample fix: I used the test but chose a
+       slightly different fix.
+
+       * src/variable.c (define_variable_in_set): check the variable name
+       not the input string.
+       * tests/scripts/features/targetvars: Ensure environment variable
+       values are exported.
+
+2020-11-29  Paul Smith  <psmith@gnu.org>
+
+       * src/default.c (default_variables) [AIX]: [SV 59096] Fix ARFLAGS
+       Reported by Dmitry Goncharov <dgoncharov@users.sf.net>, with a patch
+       changing the pattern rule for building archives.  I decided to
+       change the default value of ARFLAGS on AIX instead.
+
+2020-11-29  Paul Smith  <psmith@gnu.org>
+
+       [SV 35711] Check for special targets earlier
+       GNU make must recognize some special targets as they are defined.
+       Because of the way targets are defined, we were not recognizing these
+       special targets until we were handling the NEXT statement.  However
+       that's too late for some special targets such as .POSIX etc. which can
+       change the behavior of make during parsing.
+
+       Check for special targets earlier, as soon as we've finished parsing
+       the target introduction line (before we've even parsed the recipe).
+
+       * NEWS: Mention the change.
+       * src/read.c (check_specials): New function to look for special
+       targets.  Move checks from eval() and record_files() to this new
+       function.
+       (eval): Call check_specials() after we've completed parsing the target
+       introduction line.  Move default goal detection to check_specials().
+       (record_files): Move handling of .POSIX, .SECONDEXPANSION, and
+       .ONESHELL to check_specials().
+       * tests/scripts/misc/bs-nl: Remove workaround for late .POSIX issue.
+       * tests/scripts/targets/POSIX: Add a comment.
+
+2020-11-29  Paul Smith  <psmith@gnu.org>
+
+       * .ccls: Disable clang compare against static string warning
+
+2020-11-13  Paul Smith  <psmith@gnu.org>
+
+       [SV 59093] Rewrite filter/filter-out to avoid large stack usage
+       * src/function.c (func_filter_filterout): Allocate arrays to hold
+       pattern and word information rather than creating linked lists on
+       the stack.
+       * tests/scripts/functions/filter-out: Test large filters.
+
+2020-10-28  Paul Smith  <psmith@gnu.org>
+
+       * doc/make.texi (Include): Update behavior for missing included files
+
+2020-07-19  Paul Smith  <psmith@gnu.org>
+
+       * NEWS: [SV 58435] Document minimum C compiler version requirement
+       * configure.ac: Require c99 via AC_PROG_CC_C99
+
+2020-07-19  Paul Smith  <psmith@gnu.org>
+
+       [SV 58735] Define the order that makefiles are rebuilt.
+       Ensure that makefiles are rebuilt in the order in which make first
+       considered them, and document this behavior in the manual.
+
+       * NEWS: Add a note about the new behavior
+       * doc/make.text (How make Processes a Makefile): Document it.
+       * main.c (main): Inverse the list of makefile goals.
+       * read.c (read_all_makefiles): Add default makefiles to the list at
+       the front in reverse order, the same way other makefiles are added.
+       * tests/scripts/features/include: Add tests to verify rebuild order.
+
+2020-07-10  Paul Smith  <psmith@gnu.org>
+
+       * src/makeint.h: [ARM] [SV 58347] Don't assume ARM is not POSIX
+
+       * src/job.c (unblock_sigs): [!POSIX] [SV 58743]  Fix syntax errors
+
+2020-05-14  Paul Smith  <psmith@gnu.org>
+
+       * NEWS: Fix some tortured grammar.
+
+2020-05-03  Paul Smith  <psmith@gnu.org>
+
+       [SV 57930] Cast char to unsigned char to call ctype functions
+       This cast was already done almost everywhere: fix some stragglers.
+
+       * src/load.c (load_file): Cast char to unsigned char.
+       * src/misc.c (strcasecmp, strncasecmp): [!POSIX] Ditto.
+       * src/dir.c (vms_hash): [VMS] Ditto.
+       * src/vms_progname.c (set_program_name): [VMS] Ditto.
+       * src/vms_jobs.c (posix_parse_dq): [VMS] Ditto.
+       (posix_parse_dollar): [VMS] Ditto.
+       (build_vms_cmd): [VMS] Ditto.
+       (child_execute_job): [VMS] Ditto.
+
+2020-05-03  Paul Smith  <psmith@gnu.org>
+
+       Convert [ ... ] to test ... in scripting.
+       The "[" link may be missing during OS boostrapping.
+
+       * build.sh: Convert "[ ... ]" to "test ..."
+       * maintMakefile: Ditto.
+       * scripts/copyright-update: Ditto
+       * tests/scripts/features/reinvoke: Ditto
+       * tests/scripts/features/targetvars: Ditto
+
+2020-05-03  Paul Smith  <psmith@gnu.org>
+
+       * maintMakefile: Clean up output
+
+       * mainMakefile: Check that INSTALL exists in the dist file
+       For some reason the INSTALL file symlinked to gnulib was omitted from
+       the 4.3 release package: I can't reproduce this but check for it.
+
+2020-05-02  Kevin Buettner  <kevinb@redhat.com>  (tiny change)
+
+       [SV 58232] Disable inheritance of jobserver FDs for recursive make
+       A parent make will invoke a sub-make with close-on-exec disabled for
+       the jobserver pipe FDs.  Force close-on-exec to be to be enabled in
+       the sub-make so the pipe is not always passed to child jobs.
+
+       I have a test case which, when invoked with a suitable -j switch,
+       will hang if the recipe inherits the jobserver pipe.  This test case
+       was inspired by a real world case in which testing GDB on Fedora
+       would hang due to some poorly written test GDB cases having been
+       passed the jobserver file descriptors.
+
+       * src/posixos.c (jobserver_parse_auth): Call fd_noinherit() for
+       jobserver pipe descriptors.
+
+2020-04-01  Paul Smith  <psmith@gnu.org>
+
+       [SV 57674] Use the system default PATH if $PATH is not set
+       When using execvp() if $PATH is not present in the environment
+       it will automatically search the system default PATH string.  Emulate
+       this by passing the system default PATH to find_in_given_path() if
+       we don't find PATH in the environment.
+
+       * src/job.c (child_execute_job): Use confstr(_CS_PATH) if PATH is not
+       found.
+
+2020-04-01  Paul Smith  <psmith@gnu.org>
+
+       tests: Simplify customization of %ENV
+       Rather than having an %extraENV that is added to the default %ENV
+       and resetting %ENV _before_ each test, allow the test setup to
+       modify %ENV directly as needed then reset %ENV _after_ each test.
+
+       * tests/test_driver.pl: Remove unused %extraENV.
+       (resetENV): Don't add in %extraENV.
+       (_run_command): Reset after we run the command rather than before.
+       * tests/scripts/features/export: Convert %extraENV to %ENV
+       * tests/scripts/features/jobserver: Ditto
+       * tests/scripts/features/parallelism: Ditto
+       * tests/scripts/features/targetvars: Ditto
+       * tests/scripts/functions/eval: Ditto
+       * tests/scripts/functions/foreach: Ditto
+       * tests/scripts/functions/origin: Ditto
+       * tests/scripts/misc/general4: Ditto
+       * tests/scripts/options/dash-e: Ditto
+       * tests/scripts/targets/POSIX: Ditto
+       * tests/scripts/variables/GNUMAKEFLAGS: Ditto
+       * tests/scripts/variables/SHELL: Ditto
+
+2020-03-31  Jens Rehsack  <sno@netbsd.org>  (tiny change)
+
+       * src/output.h: [WINDOWS32] [SV 57888] Use gnulib fcntl if available
+       If gnulib fcntl is available (for MinGW32) use it rather than our
+       homegrown version.
+
+       * src/w32/compat/dirent.c: [SV 57888] Use gnulib opendir on MinGW32
+
+       * src/dir.c (local_stat): [WINDOWS32] Fix buffer-overflow warning.
+       [SV 57888] Provide space for the path to use MAXPATHLEN plus nul.
+
+2020-03-31  Paul Smith  <psmith@gnu.org>
+
+       [SV 57896] Change directories before checking jobserver auth
+       We want to process -C options as early as possible, before we might
+       write informational messages, so that Entering/Leaving messages have
+       the correct directory.
+
+       * src/main.c (main): Move code dealing with changing directories
+       before parsing of the jobserver auth flag.
+       * tests/scripts/features/jobserver: Test the order of enter/leave.
+
+2020-03-31  Paul Smith  <psmith@gnu.org>  (tiny change)
+
+       [SV 57967] Only set APPEND mode for regular files
+       APPEND is a permanent mode shared by all users of a file.  If we
+       set it on a tty, pipe, etc. it will stay in effect even after make
+       exits, which can cause problems.
+
+       Patch provided by 0xef967c36@gmail.com
+
+       * src/output.c (set_append_mode): Check for a regular file.
+
+2020-03-31  Paul Smith  <psmith@gnu.org>
+
+       Obey order of multiple print/no-print directory options
+       Previously if --no-print-directory was seen anywhere even once
+       (environment, command line, etc.) it would always take precedence
+       over any --print-directory option.  Change this so that the last
+       seen option (which will be the command line, if present there) takes
+       precedence.
+
+       * NEWS: Mark this change in behavior.
+       * src/makeint.h (print_directory): A new variable to control printing.
+       * src/output.c (output_dump): Use the new variable.
+       (output_start): Ditto.
+       * src/main.c: Add a new variable print_directory.  Use -1 for
+       print_directory_flag so we know of the option was seen or not.  Add a
+       new default_print_directory_flag set to -1 to keep options from being
+       added.
+       (switches): Use flag_off for --no-print-directory, rather than a
+       separate inhibit_print_directory_flag.
+       (main): If print_directory_flag was set by the user, use that for
+       print_directory.  If not, compute the print_directory value based on
+       -s, -C, and sub-makes as before.
+       * tests/scripts/variables/GNUMAKEFLAGS: -w is not added automatically
+       * tests/scripts/options/print-directory: Add tests for overriding
+       print-directory options.
+
+2020-03-29  Paul Smith  <psmith@gnu.org>
+
+       * NEWS: Update 4.3 with information on .SILENT / -s
+
+2020-02-29  Eli Zaretskii  <eliz@gnu.org>
+
+       * NEWS: Mention the new tcc support.
+
+2020-02-29  Christian Jullien  <eligis@orange.fr>
+
+       Add support for building with Tiny C for MS-Windows
+       * src/config.h.W32.template (HAVE_DIRECT_H, HAVE_STRCASECMP)
+       (HAVE_STRNCASECMP, HAVE_UMASK): Add __TINYC__ to MinGW condition.
+       (BATCH_MODE_ONLY_SHELL): Make this the default for Tiny C.
+
+       * build_w32.bat: Support building with Tiny C's tcc compiler.
+
+2020-01-20  Paul Smith  <psmith@gnu.org>
+
+       Apply spelling corrections from Fossies spellcheck
+       See https://fossies.org/features.html#codespell
+       Spelling issues in Git commit messages or lib/* source are not applied.
+
+       * README.OS2.template: Apply spelling corrections.
+       * README.VMS: Ditto.
+       * src/commands.c: Ditto.
+       * src/config.ami.template: Ditto.
+       * src/configh.dos.template: Ditto.
+       * src/job.c: Ditto.
+       * src/job.h: Ditto.
+       * src/read.c: Ditto.
+       * src/variable.c: Ditto.
+       * src/vms_exit.c: Ditto.
+       * src/vms_export_symbol.c: Ditto.
+       * src/vms_progname.c: Ditto.
+       * src/vmsfunctions.c: Ditto.
+       * src/vmsjobs.c: Ditto.
+       * src/w32/pathstuff.c: Ditto.
+       * tests/scripts/variables/automatic: Ditto.
+       * tests/test_driver.pl: Ditto.
+
+2020-01-20  Paul Smith  <psmith@gnu.org>
+
+       Update to GNU make 4.3.90
+       * NEWS: Add a 4.3.90 section and update Savannah bug URL
+       * configure.ac (AC_INIT): Change release to 4.3.90
+
+2020-01-19  Paul Smith  <psmith@gnu.org>
+
+       GNU Make release 4.3
+       * NEWS: Update for the release
+       * configure.ac: New release number
+       * doc/make.texi: New edition number
+
+       * configure.ac (guile): Check for Guile 3.0 installations
+
+       * src/job.c (sh_cmds): [SV 57625] Update builtin shell command list
+
+       Resolve some documentation issues
+       * doc/make.texi (Interrupts): [SV 46193] Recommend defensive recipes
+       * doc/make.texi: [SV 49262] Clarify interaction of prerequisites and
+       non-terminal match-anything rules.
+
+2020-01-19  Paul Smith  <psmith@gnu.org>
+
+       [SV 40657] Reinstate old behavior for suffix rules with prereqs
+       POSIX says that suffix rules cannot have prerequisites, but after
+       making this change we observed a number of makefiles "in the wild"
+       that were relying on this behavior and failed.
+
+       For .POSIX: makefiles, obey POSIX.  Otherwise preserve the old
+       behavior.  However, generate a warning so users know this is a
+       problem.  In a future version we will change all behavior to be
+       POSIX-conforming.
+
+       * NEWS: describe the change
+       * src/rule.c (convert_to_pattern): If posix_pedantic don't make a
+       pattern rule if prereqs exist.  Otherwise show a warning.
+       * tests/scripts/features/suffixrules: Add tests for the new behavior
+       including .POSIX vs. non-.POSIX.
+
+2020-01-05  Dmitry Goncharov  <dgoncharov@users.sf.net>
+
+       * tests/test_driver.pl: Enhance error messages
+
+2020-01-04  Paul Smith  <psmith@gnu.org>
+
+       * doc/make.texi: Change the GFDL to an Appendix
+
+       * NEWS: Clarify authorship of new features.
+
+       Enable compilation with C90 compilers
+       * configure.ac: Try compiling Guile headers: they don't work with C90.
+       * maintMakefile: Simplify config checks via target-specific variables.
+       * src/makeint.h: Use ATTRIBUTE rather than defining __attribute__,
+       as that causes compile issues with system headers.
+       (ENUM_BITFIELD): Don't use enum bitfields in ANSI mode.
+       * src/main.c: Use ATTRIBUTE instead of __attribute__.
+       * src/job.h: Ditto.
+       * src/file.c: Don't define variables inside for loops.
+       * src/rule.c: Ditto.
+       * src/dep.h (SI): Only use static inline in non-ANSI mode.
+
+2020-01-03  Paul Smith  <psmith@gnu.org>
+
+       * bootstrap: Update to the latest gnulib version
+
+       Release GNU make 4.2.93
+       * NEWS: Update the release and date
+       * configure.ac: Update the release number
+
+       Update copyright statements for 2020
+
+2020-01-03  Paul Smith  <psmith@gnu.org>
+
+       Support the .EXTRA_PREREQS special variable
+       Initial implementation by Christof Warlich <cwarlich@gmx.de>
+
+       * NEWS: Announce the new feature.
+       * doc/make.texi (Other Special Variables): Document .EXTRA_PREREQS.
+       * src/dep.h (struct dep): New flag to note extra prereq deps.
+       * src/filedef.h (expand_extra_prereqs): Declare a function to expand
+       the value of .EXTRA_PREREQS.
+       * src/file.c (expand_extra_prereqs): Given a struct variable lookup
+       of .EXTRA_PREREQS, convert it into a list of deps and for each one
+       make sure it has a struct file and has the new flag set.
+       (snap_file): A new function invoked by hash_map that will perform
+       per-file operations: set up second expansion, intermediate, and also
+       .EXTRA_PREREQS.  Manage circular dependencies by ignoring them.
+       (snap_deps): Defer per-file operations until the end.  Look up the
+       global .EXTRA_PREREQS and pass it along to snap_file for each file.
+       * src/implicit.c (struct patdeps): Remember the extra prereqs flag.
+       (pattern_search): Transfer extra prereqs flag settings into the
+       matched pattern rule.
+       * src/rule.h (snap_implicit_rules): Rename count_implicit_rules to
+       snap_implicit_rules since we now do more than count.
+       * src/rule.c (snap_implicit_rules): As we walk through all the pattern
+       rules, add in any global .EXTRA_PREREQS to the dep list.  Ensure we
+       take them into account for the max number of prereqs and name length.
+       * src/main.c (main): Add extra-prereqs to .FEATURES.
+       Call the renamed snap_implicit_rules.
+       * tests/scripts/variables/EXTRA_PREREQS: Add tests.
+
+2020-01-03  Paul Smith  <psmith@gnu.org>
+
+       * tests/scripts/features/patternrules: Use Windows-compatible quoting
+
+       * tests/test_driver.pl: Compute full path to Perl interpreter
+
+       * tests/scripts/features/exec: Don't use $ENV in the description
+
+       * src/makeint.h: Add a declaration for memrchr()
+
+2019-12-27  Paul Smith  <psmith@gnu.org>
+
+       * NEWS: Remove info about disabled /proc/loadavg usage.
+
+2019-12-27  Paul Smith  <psmith@gnu.org>
+
+       [SV 57022] Avoid posix_spawn which fails asynchronously
+       Avoid using posix_spawn implementations that fail asynchronously when
+       the spawned program can't be invoked: this means instead of getting
+       an error such as "No such file or directory" we get just "Exit 127".
+
+       Original implementation of the configure.ac macro provided by
+       Martin Dorey <martin.dorey@hds.com>
+
+       Original implementation of the regression tests provided by
+       Dmitry Goncharov <dgoncharov@users.sf.net>
+
+       * configure.ac: Test whether posix_spawn fails asynchronously.  In a
+       cross-compilation environment, assume that it does not.  If we detect
+       that it does, fall back to fork/exec.
+       * tests/scripts/features/exec: Add regression tests for different
+       shebang invocation methods.
+
+2019-12-26  Paul Smith  <psmith@gnu.org>
+
+       [SV 56655] Allow pattern expansion to contain spaces
+       * src/dep.h: Add a new flag PARSEFS_ONEWORD
+       * src/read.c (parse_file_seq): If PARSEFS_ONEWORD is given, treat the
+       entire incoming string as a single pattern.
+       * src/implicit.c (pattern_search): Pass PARSEFS_ONEWORD when parsing
+       patterns for wildcards.
+       * tests/scripts/features/patternrules: Add a new test.
+
+2019-12-18  Ben Wijen  <ben@wijen.net>
+
+       * src/misc.c (spin): On WINDOWS32 use Sleep() instead of sleep()
+
+       * bootstrap.bat: Fix typo in batch file name
+
+2019-12-18  Paul Smith  <psmith@gnu.org>
+
+       * src/config.h.W32.template: [SV 57152] MinGW32 doesn't support d_type
+
+2019-12-18  Jouke Witteveen  <j.witteveen@gmail.com>
+
+       [SV 54161] Fix second expansion of $* for paths
+       If the stem matches a path containing a directory not just a
+       filename, make sure the second expansion of $* in the
+       prerequisites matches $* in the recipe.  This requires using
+       $(*F) when replacing % in the first expansion to preserve the
+       simple filename.
+
+       * src/implicit.c (pattern_search): If lastslash is set prepend
+       the directory onto the stem.  Then use $(*F) when expanding %.
+       * tests/scripts/features/se_implicit: Add a test case
+
+2019-12-17  Jouke Witteveen  <j.witteveen@gmail.com>
+
+       * src/implicit.c (pattern_search): Set lastslash correctly
+       If filename contained multiple slashes lastslash is wrongly set to 0.
+       * configure.ac: Check for the GNU memrchr() extension function.
+       * src/misc.c (memrchr): Supply memrchr() if not available.
+
+       * src/implicit.c (pattern-search): Remove unneeded 'dir' variable
+
+2019-12-17  Paul Smith  <psmith@gnu.org>
+
+       * Makefile.am: Build lzip package instead of bzip2
+       * README.git: Mention changed requirements.
+
+       * src/job.c (load_too_high): Disable Linux /proc/loadavg for now
+       This new feature has a problem: if you provide a load which is
+       larger than the number of cores then it will always run every job.
+       Before we can enable it we need to at the least learn how to clamp
+       this value to the number of cores.  To experiment with it, set
+       PROC_FD_INIT to -2 in job.c to re-enable the feature.
+
+       * tests/run_make_tests.pl (set_more_defaults): Fix typo
+
+2019-12-16  Paul Smith  <psmith@gnu.org>
+
+       * tests/run_make_tests.pl (subst_make_string): Force use of /
+       On Windows the path to the helper tool will contain '\': this will
+       fail if recipes are run with a POSIX shell.  Convert '\' to '/'
+       on Windows.  While here, escape any spaces in the path as well.
+
+       Rename jhelp.pl to thelp.pl and make it a generic test helper.
+       * tests/thelp.pl: Rename from tests/jhelp.pl.
+       (op): Use names instead of options for the operations.
+       (op): Add new operations for sleep, mkdir, and rm.
+       (op): Enhance wait to time out
+       * tests/run_make_tests.pl: Add a new #HELPER# replacement
+       (subst_make_string): Use fully-qualified path to thelp.pl
+       * tests/scripts/features/parallelism: Update to use thelp.pl
+       and the new named operations.  Use thelp.pl sleep instead of
+       system-specific sleep commands.
+       * tests/scripts/features/output-sync: Update to use thelp.pl
+       instead of complex shell scripts.
+       * Makefile.am: Distribute tests/thelp.pl instead of tests/jhelp.pl
+
+2019-10-10  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Port functions/shell test to Solaris 10
+       * tests/scripts/functions/shell: Port exit-status calculation
+       to Solaris 10 with Perl 5.8.4.
+
+2019-10-08  Paul Smith  <psmith@gnu.org>
+
+       Release GNU make 4.2.92
+       * NEWS: Update the release and date
+       * configure.ac: Update the release number
+
+2019-10-06  Paul Smith  <psmith@gnu.org>
+
+       * doc/make.text (Reading Makefiles): Rewrite to be more clear.
+
+2019-10-05  Paul Smith  <psmith@gnu.org>
+
+       * Makefile.am (check-regression): Use PERLFLAGS when running Perl
+       * maintMakefile: Set PERLFLAGS to enable warnings.
+       * tests/run_make_tests.pl: Clean up issues pointed out by perl -w.
+
+       * tests/scripts/functions/wildcard: Skip slash tests for local glob.
+
+       tests: Convert %CONFIG_FLAGS to get_config()
+       * tests/config-flags.pm.W32: Create a predefined Windows file.
+       * Makefile.am (test_FILES): Add it to the distribution.
+       * build_w32.bat: Install tests/config-flags.pm if not existing.
+       * tests/run_make_tests.pl (get_config): Create new function.
+       * tests/scripts/features/archives: Call get_config() rather than
+       using %CONFIG_FLAGS directly.
+       * tests/scripts/features/load: Ditto.
+       * tests/scripts/features/loadapi: Ditto.
+       * tests/scripts/functions/wildcard: Ditto.
+
+       * src/hash.c (jhash_string): Don't read past end of string.
+       Original patch from Dmitry Goncharov <dgoncharov@users.sf.net>.
+
+       * tests/run_make_tests.pl (valid_option): Add missing File::Spec
+
+2019-09-23  Paul Smith  <psmith@gnu.org>
+
+       * src/function.c (func_realpath) [AIX]: Remove trailing slashes.
+
+2019-09-22  Paul Smith  <psmith@gnu.org>
+
+       * tests/scripts/features/vpathplus: Fix output for big-endian systems.
+       Our hashing algorithm gives different ordering on LE vs BE systems.
+       Patch from Dmitry Goncharov <dgoncharov@users.sf.net>.
+
+2019-09-22  Florian Weimer  <fweimer@redhat.com>  (tiny change)
+
+       * configure.ac (HAVE_GETTIMEOFDAY): Avoid undeclared exit function.
+
+2019-09-22  Paul Smith  <psmith@gnu.org>
+
+       * test/test_driver.el (_run_with_timeout): Show error message.
+
+       * job.c (child_error): Modify error message string.
+       This reverts commit 6264deece3bb77798240a906ceed79097adbcf48.
+       Further investigation discovers that the real issue is that
+       GNU Emacs compile mode doesn't have a matching regex for GNU
+       make error messages generated when targets fail.  I submitted
+       a patch to GNU Emacs adding a matcher for compile mode.
+
+2019-09-21  Paul Smith  <psmith@gnu.org>
+
+       * tests: Convert from File::Spec::Functions to File::Spec.
+       Users report the Functions version doesn't work correctly for some
+       older versions of Perl.
+
+       * tests/scripts/function/guile: Valgrind doesn't work with Guile.
+
+       * src/job.c (child_execute_job): Allocate space for argv NULL.
+
+2019-09-21  Paul Smith  <psmith@gnu.org>
+
+       [SV 56918] Compute job slots properly on failing command
+       Ensure we properly reduce job_slots_used if a command fails because
+       it doesn't exist/can't be started.
+
+       * src/job.h (struct child): Add a field jobslot to be set when using
+       a job slot.
+       * src/job.c (start_waiting_job): Remember if we are using a job slot.
+       (reap_children): Reduce number of job slots used by jobslot.
+
+2019-09-21  Paul Smith  <psmith@gnu.org>
+
+       * src/arscan.c (ar_scan): Restrict length for sscanf of ar_mode.
+
+       * tests/scripts/functions/shell: Detect correct SHELLSTATUS code.
+
+       * tests/run_make_test.pl: Fix support for valgrind.
+       Change the variable holding the make command to be a list that can
+       hold extra commands and options, not just a string.
+
+       * tests/run_make_tests.pl (find_prog): Fix syntax error.
+
+2019-09-16  Paul Smith  <psmith@gnu.org>
+
+       * NEWS: Update date and clarify -l change.
+
+       * tests/run_make_tests.pl: Create $scriptsuffix for Windows/VMS.
+       * tests/scripts/features/targetvars: Add a suffix to scripts.
+       * tests/scripts/misc/general4: Ditto.
+
+2019-09-16  Paul Smith  <psmith@gnu.org>
+
+       Refresh the test suite framework implementation.
+       Go through both run_make_tests.pl and test_driver.pl and slightly
+       modernize the Perl and clean up indentation etc.  Fix a number of
+       warnings in the test scripts detected by running with -w.
+
+       * tests/test_driver.pl: Move make error string detection out of the
+       base test driver.
+       (run_all_tests): Ensure that we always look for tests in the cwd.
+       * tests/run_make_tests.pl: Use File::Spec for path manipulations.
+       Correctly use setlocale() when detecting error strings.
+       Get configuration from the config-flags.pm file not config.status.
+       * tests/scripts/features/archives: Use new $cwddir variable.
+       * tests/scripts/features/reinvoke: Add missing semicolon.
+       * tests/scripts/features/vpath2: Avoid non-existent variable.
+       * tests/scripts/functions/foreach: Escape variables.
+       * tests/scripts/misc/bs-nl: Remove non-existing \v escape sequence.
+       * tests/scripts/misc/general4: Use handy create_file().
+       * tests/scripts/options/dash-C: Use Cwd/$cwddir.
+       * tests/scripts/options/dash-I: Use subst_make_string() and #PWD#.
+       * tests/scripts/options/symlinks: Use File::Spec.
+       * tests/scripts/targets/DEFAULT: Use create_file and run_make_test.
+       * tests/scripts/variables/CURDIR: Use run_make_test.
+       * tests/scripts/variables/automatic: Remove extraneous "\".
+       * tests/scripts/vms/library: Remove extra "my" and extraneous "\".
+
+2019-09-16  Paul Smith  <psmith@gnu.org>
+
+       * tests/config-flags.pm.in: Add USE_SYSTEM_GLOB.
+       * tests/config_flags_pm.com [VMS]: Ditto.
+
+       * README.git: [SV 56895] Provide more info about "maintainer mode".
+       * src/read.c (get_next_mword) [HAVE_DOS_PATHS]: Don't fall through to
+       parsing variable references if we find a drivespec in a word!
+
+       * tests/test_driver.pl: Remember error for "running" a directory.
+       * tests/scripts/features/errors: Check errors "running" a directory.
+
+       * src/job.c (child_execute_job): Use errno from find_in_given_path().
+       * tests/test_driver.pl: Determine non-executable error message.
+       * tests/scripts/features/errors: Use the local non-executable error.
+
+       * src/job.c (child_execute_job): Use newer gnulib findprog version.
+
+2019-09-10  Eli Zaretskii  <eliz@gnu.org>
+
+       Revert "[SV 56449] (Windows) Use slow path if '%' appears in the command"
+       This reverts commit 38e96eadea6e2cd42a0f414959bac327de9f468a.
+       Per discussion on Savannah, the modified behavior matches
+       the way % is handled in batch files, but not in cmd command
+       lines.  And since Make mostly tries to emulate the command
+       line, the new behavior is unexpected and backward-incompatible.
+
+2019-09-09  Paul Smith  <psmith@gnu.org>
+
+       Rework the creation of build.sh so it's not a template.
+       * build.sh: Rename from build.template.  Get the list of objects
+       from the Makefile.  Move configure-replaced variables ...
+       * build.cfg.in: to this new .in file.
+       * configure.ac: Remove special handling of build.sh.in and add
+       build.cfg as a generated file.
+       * Makefile.am (EXTRA_DIST): Remove build.sh.in and add build.sh
+       and build.cfg.in for build.sh.in.
+       * maintMakefile: Remove handling for build.template.  Treat
+       build.sh as a source file, not a generated file.
+       * .gitignore: Ignore generated build.cfg file.
+
+2019-09-08  Paul Smith  <psmith@gnu.org>
+
+       * gl/modules/make-glob: Move local glob configure.ac to here
+       * configure.ac: from here.
+
+2019-09-08  Paul Smith  <psmith@gnu.org>
+
+       [SV 56834] Support local PATH search with posix_spawnp
+       When using exec we install the child's environment before invoking
+       execlp(), so commands are found on the child's PATH.  posix_spawnp
+       searches on the parent's PATH, which we don't want.
+
+       Import gnulib's findprog-in module and use it to search the child's
+       PATH, then use posix_spawn() to run it.
+
+       Also, posix_spawn() does not fall back to trying sh on ENOEXEC, as
+       execlp() does, so implement that as well.
+
+       * bootstrap.conf: Add the findprog-in gnulib module
+       * src/job.c: Include findprog.h if we're using posix_spawn.
+       (start_job_command): Remove the handling of child->cmd_name,
+       (child_execute_job): and add it here.  Look up the command to be
+       run in the child's path and invoke it if found.  If it fails with
+       ENOEXEC then retry it as an argument to the default shell.
+       * tests/scripts/misc/general4: Test makefile PATH assignments.
+       * tests/scripts/features/targetvars: Ditto, for target variables.
+
+2019-09-07  Paul Smith  <psmith@gnu.org>
+
+       * doc/make.texi (Recipe Execution): Correct example to use $(<[DF])
+
+       * configure.ac: Check whether struct dirent has a d_type field
+       * src/dir.c (dir_contents_file_exists_p): Use the autoconf macro
+       HAVE_STRUCT_DIRENT_D_TYPE rather than relying on the GNU libc-
+       specific _DIRENT_HAVE_D_TYPE.
+       * lib/glob.c: Set HAVE_D_TYPE if HAVE_STRUCT_DIRENT_D_TYPE.
+
+       * src/config.h.W32.template [W32]: Add support for dirent.d_type
+       * src/w32/include/dirent.h: Add DT_* values for dirent.d_type
+       (struct dirent): Add d_type
+       * src/w32/compat/durent.c (readdir): Set dirent.d_type based on
+       Windows file attributes.
+
+       * src/makeint.h: Add typedef for mode_t if !HAVE_UMASK
+
+       * build.template: Rewrite to allow gnulib support.
+
+       * doc/make.texi: Clarify that the jobserver pipe is "blocking"
+
+2019-09-07  Paul Smith  <psmith@gnu.org>
+
+       Align child_execute_job among different ports
+       Create a struct childbase which is the basics of struct child needed
+       to invoke child_execute_job(), and can be cast back and forth to a
+       struct child.  Ensure all implementations of child_execute_job() take
+       the same arguments.
+
+       * src/job.h (CHILDBASE): Create a macro to hold the base parts.
+       (struct childbase): A structure containing CHILDBASE.
+       (struct child): Use CHILDBASE as the initial part of child.
+       [VMS]: Remove declaration of VMS version of child_execute_job.
+       * src/job.c (start_job_command): Use new child_execute_job() call.
+       (child_execute_job) [__EMX__]: Implement new calling signature.
+       (child_execute_job): Implement new calling signature.
+       * src/main.c (main) [__EMX__]: Use new child_execute_job() call.
+       * src/function.c (func_shell_base): Use new child_execute_job() call.
+       * src/vmsjobs.c (vmsHandleChildTerm): Accept struct childbase.
+       * src/vmsjobs.c (child_execute_job): Implement new calling signature.
+       Modify the return value to be pid_t, not a boolean, and return the
+       PID rather than setting it in the child.  This is OK because our only
+       caller immediately reset PID to -1 anyway if we return 0.
+
+2019-09-07  Paul Smith  <psmith@gnu.org>
+
+       * doc/make.tex (Substitution Refs): Clarify patsubst relationship.
+
+       * src/job.c (start_job_command) [VMS]: Correct VMS comment.
+
+2019-09-07  Paul Smith  <psmith@gnu.org>
+
+       Show useful errors when posix_spawn() doesn't do so
+       The posix_spawn() function may not detect that the command to run is
+       invalid when it's invoked.  Instead, it will run then exit with
+       error code 127.  If that happens do our best to present the user
+       with a useful error message.
+
+       * src/job.h (struct child): Add cmd_name to hold the command we ran.
+       * src/job.c (start_job_command): On success, remember the cmd_name.
+       (reap_children): On exit 127, stat cmd_name and show a useful error.
+       (free_child): Free cmd_name.
+
+2019-09-07  Paul Smith  <psmith@gnu.org>
+
+       * README.git: Describe GCC and GNU make requirements
+       * maintMakefile: Put custom C flags into a separate variable
+       so they can be overridden more easily on the command line.
+
+       * tests/scripts/features/archives: Fix expected long ar name output.
+
+       * tetss/run_make_test.pl: Avoid 'sh -c' for Windows portability.
+
+       Update to GNU make release candidate 4.2.91
+
+       * tests/scripts/functions/wildcard: Skip dangling symlink test.
+       The built-in glob implementation does not correctly handle dangling
+       symlinks.  This needs to be fixed by switching to the latest glob
+       implementation from gnulib but that's a big job: for now avoid the
+       test if we know it will fail.
+
+       * maintMakefile: Use check-local when testing build.sh.
+       Running 'make check' will rebuild 'make' so we're not testing the
+       build.sh-generated make binary.
+
+2019-09-07  Paul Smith  <psmith@gnu.org>
+
+       Don't reset stack size when using posix_spawn()
+       There's no way to run setrlimit() from posix_spawn() so we can't reset
+       the stack limit in children; thus, don't change it in the parent.
+
+       * src/makeint.h (SET_STACK_SIZE): Don't set this when HAVE_POSIX_SPAWN.
+       * src/job.c (child_execute_job): Remove useless comment.
+
+2019-09-07  Paul Smith  <psmith@gnu.org>
+
+       * configure.ac: Remove redundant getloadavg gnulib support
+
+       * src/dir.c (dir_setup_glob): Initialize unused gl_offs.
+       * tests/scripts/functions/wildcard: Add trailing slash tests.
+       Initial changes by Dmitry Goncharov <dgoncharov@users.sf.net>
+
+2019-09-02  Paul Eggert  <eggert@cs.ucla.edu>
+
+       Pacify Oracle Studio c99
+       * src/dep.h (DEP):
+       * src/function.c (struct function_table_entry):
+       Use unsigned int, not unsigned short.  Without this patch, c99
+       complains â€˜warning: nonportable bit-field type’.
+
+       Port grouped_targets test to Solaris 10
+       * tests/scripts/features/grouped_targets: Use â€˜printf ''’
+       instead of â€˜echo -n’, as POSIX says the latter is not portable.
+
+       Remove useless code in eval
+       * src/read.c (eval): Remove useless code.  Without this patch,
+       Oracle Studio 12.6 complains â€˜"src/read.c", line 1405: warning:
+       loop not entered at top’.
+
+       Pacify Oracle Studio 12.6 in init_switches
+       * src/main.c (init_switches): Use a cast to convert char const *
+       to char *.  Without this patch, the compiler complains
+       â€˜"src/main.c", line 2643: warning: assignment type mismatch:
+       pointer to char "=" pointer to const char’.
+
+       Pacify Oracle Studio 12.6
+       * src/arscan.c [VMS]: Use â€˜#if !defined LBR$_HDRTRUNC’ instead
+       of â€˜#ifndef LBR$_HDRTRUNC’ to pacify Oracle Studio 12.6, which
+       looks inside unused #if branches for preprocessor syntax errors.
+       Without this patch it complains â€˜"src/arscan.c", line 43: warning:
+       tokens ignored at end of directive line’.
+
+2019-09-02  Paul Smith  <psmith@gnu.org>
+
+       * NEWS: Fix incorrect notes.
+
+       * src/read.c (parse_file_seq): [SV 52076] Don't reverse glob() results.
+
+2019-08-28  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix MS-Windows MinGW build
+       * src/w32/subproc/sub_proc.c (process_wait_for_multiple_objects):
+       Fix format specifier for GetLastError's value.
+
+       * src/job.c (reap_children): Define the 'remote_status_lose' label
+       only for Posix platforms, to avoid compiler warning.
+
+       * build_w32.bat (LNKOUT): New variable, using forward slashes.
+       Use forward slashes in calls to :Compile, so that linking with GNU
+       ld works.
+
+       * src/makeint.h [!HAVE_UMASK]: Prototype for 'umask'.
+       (UMASK, MODE_T): Don't define.
+
+       * src/misc.c (get_tmpfile): Don't call UMASK, call umask, to
+       avoid compilation warning on !HAVE_UMASK platforms.
+       * src/output.c (output_tmpfd): Likewise.
+
+       * src/misc.c (umask) [!HAVE_UMASK]: New no-op function.
+
+       * src/config.h.W32.template (__USE_MINGW_ANSI_STDIO)
+       [__MINGW32__]: Define to 1, to force Make use ANSI-compatible
+       stdio functions, which also support the non-standard 'Id' and 'Ix'
+       specifiers.
+       (HAVE_UMASK) [__MINGW32__]: Define to 1.
+
+       * src/arscan.c (ar_member_touch): Type-cast argument of strlen to
+       avoid compiler warnings.
+
+2019-08-26  Paul Smith  <psmith@gnu.org>
+
+       * NEWS: Update for pre-release
+
+2019-08-26  Paul Smith  <psmith@gnu.org>
+
+       Update maintainer mode to support debug wait points.
+       Make a spin() method available when compiled in maintainer mode.
+       If a file exists in the working directory with a specific name,
+       make will sleep until the file is deleted.
+
+       Ensure that maintainer mode is enabled on Windows, using the same
+       algorithm we use on POSIX / autoconf systems.
+
+       * build_w32.bat: If maintMakefile exists, enable maintainer mode.
+       * src/main.c (main): Replace Windows-only suspend flag with spin().
+       * src/makeint.h: A SPIN() macro calls spin() in maintainer mode.
+       * src/misc.c (spin): If a spin file exists sleep until it's deleted.
+
+2019-08-26  Paul Smith  <psmith@gnu.org>
+
+       * tests/scripts/features/archives: [SV 54395] Support non-GNU ar.
+
+       * tests/scripts/misc/general3: Add more tests for SHELL/.SHELLFLAGS
+
+2019-08-25  Paul Smith  <psmith@gnu.org>
+
+       * src/job.c (construct_command_argv): Remove unused VMS code
+
+       * src/job.c (child_execute_job): Set pid to -1 on posix_spawn failure.
+
+2019-08-24  Paul Smith  <psmith@gnu.org>
+
+       * bootstrap: Update from latest gnulib version
+
+       * scripts/copyright-update: Use git ls-files for controlled files
+
+       * po/LINGUAS: Add a translation for Bulgarian.
+
+2019-07-14  Christian Eggers  <ceggers@arri.de>  (tiny change)
+
+       [SV 56449] (Windows) Use slow path if '%' appears in the command
+       * src/job.c (sh_chars_dos): Add '%' as a special character
+       * src/job.c (construct_command_argv_internal): Check for '%' in quotes
+
+       For the windows version of make, a recipe line cannot be executed
+       diretly by make (without a shell) if a '%' character is present. This
+       character starts a cmd.exe escape sequence.
+
+2019-07-14  Paul Smith  <psmith@gnu.org>
+
+       * src/read.c (parse_file_seq): Update comments.
+
+2019-07-13  Mike Haboustak  <haboustak@gmail.com>  (tiny change)
+
+       [SV 28456] Don't override $< when no default rule has been defined
+       The check for matching a file's command to the default rule's command
+       does not account for null. If no .DEFAULT is defined a rule with no
+       recipe has it's $< variable set to the value of $@. This breaks second
+       expansion, particularly when used with pattern rules.
+
+       * src/commands.c [set_file_variables]: Check that cmds is set
+       * tests/scripts/features/se_explicit: Test case
+       * tests/scripts/features/se_implicit: Test case
+
+2019-07-13  Paul Smith  <psmith@gnu.org>
+
+       Switch to the gnulib version of strerror()
+       * bootstrap.conf: Add strerror module
+       * configure.ac: Remove strerror check
+       * src/misc.c: Remove local strerror() implementation
+       * src/config.ami.template: Remove HAVE_STRERROR
+       * src/config.h-vms.template: Ditto.
+       * src/config.h.W32.template: Ditto.
+
+2019-05-19  Paul Smith  <psmith@gnu.org>
+
+       * doc/make.texi: [SV 51974] Clarify makefile parsing operations.
+
+       * doc/make.texi: [SV 54116] Document whitespace removal trick.
+       Discovered and explained by Michael Henry <gnu@drmikehenry.com>
+       * tests/scripts/variables/flavors: Add a test to preserve the behavior.
+
+2019-05-19  Paul Smith  <psmith@gnu.org>
+
+       [SV 46013] Allow recursive variable overrides from Makefiles
+       Ensure that variable overrides are passed to recursive make instances
+       even if no overrides were provided on the command line.
+       Fix suggested by Rici Lake <ricilake@gmail.com>
+
+       * src/main.c (define_makeflags): Add overrides without respect to the
+       value of command_variables.
+       * tests/scripts/features/recursion: Add a test.
+
+2019-05-19  Paul Smith  <psmith@gnu.org>
+
+       Update developer customizations
+       * .ccls: Remove -std=c99: it disables __attribute__ causing warnings.
+       * .dir-locals.el: Force the C coding style to "gnu".
+       * make-gdb.py: Add GDB macros for pretty-printing GNU make structs.
+       * scripts/copyright-update: Use GNULIB_SRCDIR to find update-copyright.
+
+2019-05-19  Paul Smith  <psmith@gnu.org>
+
+       [SV 54549] Don't free used set_lists during merge
+       When merging the variable_set_lists for two targets it could be
+       that the "from" set list is a subset of the "to" set list: check
+       for this situation to avoid freeing used memory.
+
+       * src/variable.c (merge_variable_set_lists): Walk the "to" list and
+       if the "from" list is contained in it, nothing to do.
+       * tests/scripts/features/se_explicit: Add a test.
+
+2019-05-19  Paul Smith  <psmith@gnu.org>
+
+       * src/hash.c (jash_string): [SV 54980] Avoid ASAN error
+
+2019-05-19  Paul Smith  <psmith@gnu.org>
+
+       [SV 54740] Ensure .SILENT settings do not leak into sub-makes
+       Create a new variable run_silent to hold the current instance's global
+       silence setting, allowing silent_flag to represent only whether the -s
+       option was provided on the command line.
+
+       * src/makeint.h: Change silent_flag variable to run_silent.
+       * src/job.c: Ditto.
+       * src/remake.c: Ditto.
+       * src/file.c: Ditto.
+       * src/main.c: Add a new global variable run_silent.
+       (decode_switches): After switches are decoded, initialize run_silent.
+       * tests/scripts/targets/SILENT: Add a test for recursive behavior.
+
+2019-05-19  Paul Smith  <psmith@gnu.org>
+
+       Update copyright statements for 2019
+
+2019-05-12  Kaz Kylheku  <kaz@kylheku.com>
+
+       [SV 8297] Implement "grouped targets" for explicit rules.
+       This patch allows "grouped targets" using the &: syntax:
+
+         tgt1 tgt2 ... tgtn &: pre1 pre2 ...
+               recipe
+
+       When the &: separator is used (in single or double colon forms), all
+       the targets are understood to be built by a single invocation of the
+       recipe.  This is accomplished by piggy-backing on the already-existing
+       pattern rule feature, using the file's "also_make" list.
+
+       * NEWS: Add information about grouped targets.
+       * doc/make.texi (Multiple Targets): Add information on grouped targets.
+       (Pattern Intro): Refer to the new section to discuss multiple patterns.
+       * src/main.c (main): Add "grouped-targets" to .FEATURES
+       * src/read.c (make_word_type): Add new types for &: and &::.
+       (eval): Recognize the &: and &:: separator and remember when used.
+       (record_files): Accept an indicator of whether the rule is grouped.
+       If so, update also_make for each file to depend on the other files.
+       (get_next_mword): Recognize the &: and &:: word types.
+       * tests/scripts/features/grouped_targets: New test script.
+       * AUTHORS: Add Kaz Kylheku
+
+2019-05-12  Paul Smith  <psmith@gnu.org>
+
+       * variable.c (define_variable_in_set): Clear new structs
+
+       * po/LINGUAS: Add Portuguese translation
+
+       Add developer customizations
+       * .ccls: Configure the ccls LSP server
+       * .dir-locals.el: Reset some parameters for ccls and lsp-mode
+       * .gitignore: Update for GTAGS and ccls
+       * maintMakefile: Don't search hidden directories for sources
+
+2018-09-16  Paul Smith  <psmith@gnu.org>
+
+       * src/arscan.c (ar_member_touch): [SV 54533] Stop \0 in archive headers
+
+       Change output_write() to writebuf(), add readbuf() helper.
+       * src/misc.c (writebuf, readbuf): Create helper functions that will
+       reliably write a buffer to a file descriptor in the face of EINTR
+       causing short writes, and read from a file descriptor into a buffer
+       in the face of EINTR causing short reads.
+       * src/makeint.h: Declare these functions.
+       * src/output.c: Remove output_write() and replace with writebuf().
+       (_outputs, out_of_memory): Call writebuf(), not output_write().
+       * src/arscan.c (ar_scan): Call readbuf() instead of read(2).
+       (ar_member_touch): Remove duplicate header write, call writebuf()
+       instead of output_write(), and readbuf() instead of read(2).
+
+2018-09-15  Paul Smith  <psmith@gnu.org>
+
+       * doc/make.texi (Remaking Makefiles): [SV 52273] Note MAKE_RESTARTS
+
+       * src/main.c (main): Set jobserver permissions before re-execing
+       Fixes an issue seen in the Linux kernel build system, reported by
+       Masahiro Yamada <yamada.masahiro@socionext.com>.  Fix suggested
+       on the bug-make mailing list by Mike Shal <marfey@gmail.com>.
+       * tests/scripts/features/parallelism: Add a test to verify this.
+
+       * doc/make.texi: [SV 48970] Clarify the value of $?
+
+       * doc/make.text: [SV 54360] Weaken "obsolete" language in the manual.
+       There's no need to frighten users away from capabilities which are
+       perfectly reasonable and definitely not going away, by calling them
+       obsolete or discouraged in the manual.
+
+       [SV 40657] Don't create pattern rules for suffix rules with deps.
+       * NEWS: Update with a backward-compatibility warning.
+       * src/rule.c (convert_to_pattern): If a suffix rule has dependencies,
+       do not create a pattern rule for it.  According to the manual suffix
+       rules with prerequisites are treated as normal targets.
+       * tests/scrips/features/suffixrules: Create some regression tests for
+       .SUFFIXES and suffix rules.
+
+2018-08-04  Paul Smith  <psmith@gnu.org>
+
+       * NEWS: Update for the latest changes.
+
+2018-08-04  Paul Smith  <psmith@gnu.org>
+
+       [SV 54233] Preserve higher command_state values on also_make targets.
+       If multiple pattern rules have the same pattern as also-make targets
+       and we attempt to run them at the same time, we might downgrade the
+       command state from 'running' to 'deps_running'; this will prevent
+       that also_make from being considered complete causing make to wait
+       forever for it to finish.
+
+       Ensure that set_command_state never downgrades the state of a target.
+
+       * src/file.c (set_command_state): Don't downgrade command_state.
+       * src/filedef.h (struct file): Document the order prerequisite.
+       * test/scripts/features/patternrules: Test the behavior.
+
+2018-08-04  Paul Smith  <psmith@gnu.org>
+
+       * src/job.c (reap_children): Fix inverted win/lose message.
+
+       * tests/scripts/functions/wildcard: [SV 52018] Test dangling symlink.
+
+2018-08-04  Bernhard M. Wiedemann  <bwiedemann@suse.de>
+
+       * src/read.c (parse_file_seq): [SV 52076] Sort wildcard results.
+
+2018-08-04  Paul Smith  <psmith@gnu.org>
+
+       * tests/scripts/features/archives: [SV 54395] Test long archive names.
+
+2018-08-04  Ben Hutchings  <ben@decadent.org.uk>
+
+       * src/arscan.c (ar_scan): [SV 54395] Allow long names in archives.
+       Commit bc9d72beb0cb "Resolve issues discovered by static code
+       analysis." added range checks on archive member name length.  However,
+       on non-AIX systems it also checked BSD-style long names against the
+       short name limits and and checked the *offset* for GNU-style long
+       names against the short name limits.  This caused valid long names to
+       be rejected.
+
+       * Record the size of the GNU name map and validate offsets against it
+       * Ensure that the last entry in the name map is null-terminated
+       * Apply a maximum length of INT_MAX for element sizes
+
+       Reported-by: Philipp Wolski <philipp.wolski@kisters.de>
+
+2018-08-04  Paul Smith  <psmith@gnu.org>
+
+       * lib/glob.c (glob_in_dir): [SV 53465] Allow symlinks to directories.
+       Fix from Rich Felker <bugdal@aerifal.cx> on the musl mailing list.
+       * tests/scripts/functions/wildcard: Create a regression test for this.
+
+       * configure.ac: Add --disable-posix-spawn option
+       * maintMakefile: Add a test for the option
+       * src/job.c: Change HAVE_* preprocessor checks to USE_POSIX_SPAWN
+
+       * src/job.c (child_execute_job): Clean up posix_spawn invocation
+
+2018-08-04  Aron Barath  <baratharon@caesar.elte.hu>
+
+       * job.c (child_execute_job): Prefer posix_spawn() over fork()/exec()
+
+2018-08-04  Paul Smith  <psmith@gnu.org>
+
+       Clean up errors for invalid commands and add regression tests.
+       * src/function.c (func_shell_base): Use error() instead of recreating
+       the error output.
+       * src/job.c (exec_command): Show more standard error messages.
+       * src/load.c (unload_file): Fix whitespace in the error message.
+       * tests/scripts/features/errors: Add tests for starting non-
+       existent commands and new error message formats.
+       * tests/scripts/features/output-sync: New error message formats.
+       * tests/scripts/functions/shell: Ditto.
+
+2018-08-04  Paul Smith  <psmith@gnu.org>
+
+       Queue failed fork() (etc.) to be handled like any other failed job.
+       If we failed to fork() we were essentially exiting make immediately
+       without respect to ignore flags, etc.  On one hand that makes sense
+       because if you can't fork you're in real trouble, but it doesn't
+       work so well on systems where we don't fork at all.  Instead, treat
+       a fork error like any other error by delaying the handling until
+       the next call to reap_children().  Any child with a PID of -1 is
+       considered to have died before starting so check these first without
+       waiting for them.
+
+       * src/commands.c (fatal_error_signal): Don't kill children that
+       never started.
+       * src/function.c (func_shell_base): Handle cleanup properly if the
+       child doesn't start.
+       * src/job.c (reap_children): Check for children that died before
+       starting and handle them without waiting for the PID.
+       (start_job_command): Free memory when the child doesn't start.
+       (start_waiting_job): Don't manage children who never started.
+       (child_execute_job): If the fork fails return PID -1.
+       * src/vmsjobs.c: Check for children that never started.
+       * tests/run_make_tests.pl: Parse config.status to get all options.
+
+2018-08-02  Aron Barath  <baratharon@caesar.elte.hu>
+
+       * configure.ac: Check for posix_spawnattr_setsigmask
+
+       * configure.ac: Check for spawn.h and posix_spawn()
+
+       * src/makeint.h: Use pid_t to store PIDs, of int.
+       * src/commands.c (getpid): Ditto.
+       * src/job.h (*): Ditto.
+       * src/job.c (*): Ditto.
+       * src/main.c (main): Ditto.
+       * src/remote-cstms.c (start_remote_job): Ditto.
+       * src/remote-stub.c (start_remote_job): Ditto.
+
+2018-08-02  spagoveanu@gmail.com  <spagoveanu@gmail.com>  (tiny change)
+
+       * src/dir.c: Preserve glob d_type field
+       When using GNU make on a system with glibc glob a pattern ending in
+       a slash is also matching regular files, but only in subdirectories:
+
+       $ mkdir -p dir/subdir
+       $ cd dir
+       $ touch file1 subdir/file2
+       $ echo 'test:; @echo $(wildcard */ */*/)' | make -f -
+       subdir/ subdir/file2
+       $ echo 'test: */ */*/; @echo "$?" != */ */*/' | make -f -
+       subdir/ subdir/file2 != subdir/ */*/
+
+       It happens because in the gl->gl_readdir callback supplied to glob(),
+       dirent->d_type is set to DT_UNKNOWN, and the glob() implementation
+       in glibc assumes that such a directory entry *cannot* possibly be a
+       regular file.
+
+       Pass the actual d_type down to glob(); this is the right thing to do
+       even if glibc is fixed, because it saves an extra stat() syscall for
+       each dirent.
+
+2018-08-02  Paul Smith  <psmith@gnu.org>
+
+       * src/read.c(unescape_char): Use C comments not C++ comments.
+       * src/posixos.c(set_blocking): Ditto.
+       * src/w32/subproc/sub_proc.c(process_init): Ditto
+
+       Enhance the Basic.mk environment to work with Gnulib
+       * maintMakefile: Omit generated headers from Basic.mk prerequisites.
+       * Basic.mk.template: Rework commands to use with $(call ...) macros.
+       * mk/Amiga.mk: Ditto.
+       * mk/VMS.mk: Ditto.
+       * mk/Windows32.mk: Ditto, plus P2W to convert POSIX to Windows paths.
+       * mk/msdosdjgpp.mk: Ditto.
+
+2018-07-02  Paul Smith  <psmith@gnu.org>
+
+       Resolve most of the Windows Visual Studio warnings.
+       * Convert integer types to size_t where necessary.
+       * Align other integral types to avoid casts and type warnings.
+
+2018-07-02  Paul Smith  <psmith@nuodb.com>
+
+       Update regression tests for Windows.
+       * tests/scripts/features/jobserver: Windows doesn't use pipes
+       * tests/scripts/functions/shell: Don't test kill -2 on Windows
+       * tests/scripts/misc/bs-nl: Windows doesn't handle single quotes
+       * tests/scripts/misc/general3: Ditto.
+
+       * maintMakefile: Preserve comments during compilation
+
+       * function.c(abspath): Use memcpy() to avoid GCC 8.1 warnings
+
+2018-07-02  Paul Smith  <psmith@nuodb.com>
+
+       Convert GNU make to use the gnulib portability library
+       Move content from glob/* and config/* into standard GNU directory
+       locations lib/* and m4/*.
+
+       Install the gnulib bootstrap script and its configuration file, and
+       create a bootstrap.bat file for Windows.  Update the README.git file
+       with new requirements and instructions for building from Git.
+
+       At this point we only install the alloca, getloadavg, and FDL modules
+       from gnulib.  We keep our old glob/fnmatch implementation since the
+       gnulib versions require significant amounts of infrastructure which
+       doesn't exist on Windows yet.  Further work is required here.
+
+       Due to a problem with gnulib's version of getloadavg, we need to bump
+       the minimum required version of automake to 1.16.1 unfortunately.
+
+       * README.git: Update instructions
+       * NEWS: Move developer news to a separate section
+       * configure.ac: Update for use with gnulib modules
+
+       * bootstrap: Bootstrap from Git workspace (import from gnulib)
+       * bootstrap.conf: Bootstrap configuration for GNU make
+       * bootstrap.bat: Bootstrap from Git workspace for Windows
+       * gl/modules/make-glob: Support our local fnmatch/glob implementation
+
+       * config/acinclude.m4: Move to m4/
+       * config/dospaths.m4: Move to m4/
+       * glob/fnmatch.c: Move to lib/
+       * glob/fnmatch.h.in: Move to lib/
+       * glob/glob.c: Move to lib/
+       * glob/glob.h.in: Move to lib/
+
+       * Makefile.am: Update for new directories
+       * build.template: Update for new directories
+       * build_w32.bat: Update for new directories
+       * builddos.bat: Update for new directories
+       * maintMakefile: Update for new directories
+       * makefile.com: Update for new directories
+       * mk/Amiga.mk: Update for new directories
+       * mk/Posix.mk.in: Update for new directories
+       * mk/VMS.mk: Update for new directories
+       * mk/Windows32.mk: Update for new directories
+       * mk/msdosdjgpp.mk: Update for new directories
+
+       * po/LINGUAS: One language per line (needed by gnulib)
+
+       * INSTALL: Remove (obtained from gnulib)
+       * src/alloca.c: Remove (obtained from gnulib)
+       * src/getloadavg.c: Remove (obtained from gnulib)
+       * po/Makevars: Remove (created by bootstrap)
+       * config/*: Remove leftover files
+       * glob/*: Remove leftover files
+
+2018-07-01  Paul Smith  <psmith@nuodb.com>
+
+       * Makefile.ami, glob/Makefile.ami: Remove obsolete files
+
+2018-07-01  Ola Olsson  <ola1olsson@gmail.com>
+
+       * doc/make.texi: Updated language
+
+2018-07-01  Paul Smith  <psmith@gnu.org>
+
+       * all: Update Copyright statements for 2018
+
+       * scripts/copyright-update: Maintainer's script for copyright mgmt
+
+2018-02-10  Paul Smith  <psmith@gnu.org>
+
+       * build_w32.bat: Support Visual Studio 17.
+
+2017-11-19  Paul Smith  <psmith@gnu.org>
+
+       * configure.ac: Support GLIBC glob interface version 2
+
+2017-11-19  Paul Smith  <psmith@gnu.org>
+
+       Rework directory structure to use GNU-recommended "src" directory.
+       Move the source code (other than glob) into the "src" subdirectory.
+       Update all scripting and recommendations to support this change.
+
+       * *.c, *.h, w32/*: Move to src/
+       * configure.ac, Makefile.am, maintMakefile: Locate new source files.
+       * Basic.mk.template, mk/*: Update for new source file locations.
+       * NEWS, README.DOS.template: Update for new locations.
+       * build.template, build_w32.bat, builddos.bat: Ditto.
+       * po/POTFILES.in: Ditto
+       * tests/run_make_tests.pl, tests/scripts/features/load*: Ditto.
+       * make.1: Move to doc.
+       * mk/VMS.mk: Add support for building on VMS (hopefully).
+       * makefile.vms, prepare_w32.bat: Remove.
+       * SCOPTIONS: Update to define HAVE_CONFIG_H
+
+2017-11-18  Paul Smith  <psmith@gnu.org>
+
+       * job.c: Add "command" as a known shell built-in.
+       This is not a POSIX shell built-in but it's common in UNIX shells.
+       Reported by Nick Bowler <nbowler@draconx.ca>.
+
+       * tests/scripts/features/output-sync: Revert bad change in 0c5a9f9b92a
+
+2017-11-18  Paul Smith  <psmith@gnu.org>
+
+       Remove unsupported build facilities.
+       Over time the non-standard build and install systems (nmake files,
+       smake files, Visual Studio project files, etc.) have atrophied and
+       maintaining them is not worth the effort, for such a simple utility
+       as make.  Remove all the non-standard build tool support and unify
+       OS-specific build rules under a basic set of (GNU make) makefiles.
+
+       Preserve the existing bootstrapping scripts (for POSIX, Windows,
+       and MS-DOS).  Also the existing VMS build scripts are left unchanged:
+       I don't have enough experience with VMS to venture into this area.
+       Perhaps one of the VMS maintainers might like to determine whether
+       conversion would be appropriate.
+
+       Rather than create libraries for w32 and glob (non-POSIX), simply
+       link the object files directly to remove the complexity.
+
+       * NEWS: Update with user-facing notes.
+       * Makefile.am: Clean up to use the latest automake best practices.
+       Build Windows code directly from the root makefile to avoid recursion.
+       * README.Amiga, README.DOS.template, README.W32.template: Updated.
+       * INSTALL: Point readers at the README.git file.
+       * maintMakefile: Remove obsolete files.  Create Basic.mk file.
+       * Basic.mk.template, mk/*.mk: Create basic GNU make-based makefiles.
+       * build_w32.bat: Copy Basic.mk to Makefile
+       * configure.ac: We no longer need AM_PROG_AR.
+       * dosbuild.bat: Rename to builddos.bat.  Incorporate configure.bat.
+       * Makefile.DOS.template: Remove.
+       * NMakefile.template, w32/subproc/NMakefile: Remove.
+       * SMakefile.template, glob/SMakefile, glob/SCOPTIONS, make.lnk: Remove.
+       * configure.bat, glob/configure.bat: Remove.
+       * w32/Makefile.am: Remove.
+       * make_msvc_net2003.sln, make_msvc_net2003.vcproj: Remove.
+
+2017-11-11  Paul Smith  <psmith@gnu.org>
+
+       * Makefile.am: Add jhelp.pl to remote test setup.
+
+2017-11-11  Paolo Bonzini  <pbonzini@redhat.com>
+
+       Do not use STOP_SET for singleton compares.
+       Compare against '$' directly rather than using MAP_VARIABLE.
+       This saves ~10% for find_map_function, which is the top hotspot in
+       QEMU's no-op build.  The build is sped up overall by about 1.5%
+       more (from 11.1s to 10.95s).
+
+       * read.c (find_map_function): Do not compare against singleton sets.
+
+2017-11-11  Paolo Bonzini  <pbonzini@redhat.com>
+
+       Speedup parsing of functions.
+       Use the stopchar map to quickly jump over everything that is
+       not an open/close brace, an open/close parenthesis or a comma.
+
+       This saves 1% on QEMU's noop build (from 11.23s to 11.1s).
+
+       * function.c (find_next_argument, handle_function): Check
+       with STOP_SET before comparing against individual characters.
+       * main.c (initialize_stopchar_map): Initialize MAP_VARSEP
+       mappings in stopchar_map.
+       * makeint.h (MAP_VARSEP): New.
+
+2017-11-11  Paolo Bonzini  <pbonzini@redhat.com>
+
+       Remove MAP_PERCENT as strchr is faster.
+       * read.c (find_percent_cached): Use strchr instead of STOP_SET
+       to find % or nul.
+       * makeint.h (MAP_PERCENT): Remove.
+       * main.c (initialize_stopchar_map): Remove.
+
+2017-11-11  Paolo Bonzini  <pbonzini@redhat.com>
+
+       Use Jenkins hash.
+       This is about twice as fast as the current hash, and removes the
+       need for double hashing (improving locality of reference).  The
+       hash function is based on Bob Jenkins' design, slightly adapted
+       wherever Make needs to hash NUL-terminated strings.  The old hash
+       function is kept for case-insensitive hashing.
+
+       This saves 8.5% on QEMU's no-op build (from 12.87s to 11.78s).
+
+       * configure.ac: Check endianness.
+       * hash.c (rol32, jhash_mix, jhash_final, JHASH_INITVAL,
+       sum_get_unaligned_32, jhash): New.
+       * hash.h (STRING_HASH_1, STRING_N_HASH_1): Use jhash.
+       (STRING_HASH_2, STRING_N_HASH_2): Return a dummy value.
+       (STRING_N_COMPARE, return_STRING_N_COMPARE): Prefer memcmp to strncmp.
+
+2017-11-11  Paolo Bonzini  <pbonzini@redhat.com>
+
+       Use strchr for simple case of find_char_unquote.
+       In most cases, find_char_unquote has a single stopchar.  In that
+       case we can look for it using strchr's optimized implementation.
+
+       This saves 3.5% on QEMU's noop build (from 11.78s to 11.37s).
+
+       * read.c (find_char_unquote): Rename to find_map_unquote.  Replace
+       with an implementation optimized for the case where the stopchar
+       is a singleton.  Adjust all callers.
+
+2017-11-11  Paolo Bonzini  <pbonzini@redhat.com>
+
+       Use strchr/memmove in collapse_continuations.
+       collapse_continuations is already using strchr to speed up the
+       common case of no backslash-newline sequence, but on modern
+       processors it is faster to scan the string twice with
+       strchr+memmove (or strlen+memmove) than to move bytes manually.
+
+       Saves about 1.5% on QEMU's no-op build (from 11.37s to 11.23s).
+
+       * misc.c (collapse_continuations): Rewrite the scanning of LINE.
+
+2017-10-31  Paul Smith  <psmith@gnu.org>
+
+       * main.c (main): [SV 48274] Allow -j in makefile MAKEFLAGS variable.
+       * tests/jhelp.pl: New file to allow testing parallelism without sleep.
+       * tests/scripts/features/parallelism: Test this.
+       * tests/scripts/features/jobserver: Update tests.
+       * tests/scripts/features/output-sync: Remove useless rm command.
+
+2017-10-30  Paul Smith  <psmith@gnu.org>
+
+       * job.c (child_error): Modify error message string.
+       Ensure Emacs compile-mode's next-error doesn't match target failure
+       messages.  Syntax errors in makefiles are still matched.
+
+       * function.c (func_if): Check the first character of condition.
+       Reported by Rob W <robw9739@gmail.com>
+
+2017-10-30  Paul Eggert  <eggert@cs.ucla.edu>
+
+       glob: Do not assume glibc glob internals.
+       It has been proposed that glibc glob start using gl_lstat,
+       which the API allows it to do.  GNU 'make' should not get in
+       the way of this.  See:
+       https://sourceware.org/ml/libc-alpha/2017-09/msg00409.html
+
+       * dir.c (local_lstat): New function, like local_stat.
+       (dir_setup_glob): Use it to initialize gl_lstat too, as the API
+       requires.
+
+2017-10-30  Paul Smith  <psmith@gnu.org>
+
+       Compute load from number of running processes.
+       * job.c (load_too_high): If /proc/loadavg is available, compare the
+       maximum load against the number of processes currently running.  If
+       we can't parse /proc/loadavg, use the previous algorithm.
+
+       Concept and initial patch from Sven C. Dack <sven.c.dack@sky.com>
+
+2017-09-30  Eli Zaretskii  <eliz@gnu.org>
+
+       Fix checking existence of directories on MS-Windows
+       * remake.c (name_mtime) [WINDOWS32]: Emulate Posix behavior of
+       'stat' with the likes of "foo/" and "foo/.".
+
+2017-07-09  Paul Smith  <psmith@gnu.org>
+
+       Update copyright statements for 2017.
+
+       Remove uses of unnecessary "register" keyword.
+
+       * variable.c (create_pattern_var): [SV 51266] Create with xcalloc().
+       Reported by Chris Metcalf <cmetcalf@mellanox.com>
+
+       [SV 51400] Only unblock fatal signals after child invocation
+       * job.c (unblock_sigs): Only unblock fatal signals not all signals.
+       (unblock_all_sigs): Unblock all signals not just fatal signals.
+       (child_execute_job): Call unblock_all_sigs() in child process.
+       * job.h: Remove unused function definitions.
+       * remote-cstms.c (start_remote_job): Call unblock_all_sigs() in
+       child process.
+       Reported by Koen Van Hoof <koen.van_hoof@nokia.com>
+
+2017-07-01  Paul Smith  <psmith@gnu.org>
+
+       * function.c (shell_completed): [SV 51014] Add signal to .SHELLSTATUS
+       * tests/scripts/functions/shell: Verify that .SHELLSTATUS contains
+       a non-0 value when the shell exits due to a signal.
+
+2017-06-07  Eli Zaretskii  <eliz@gnu.org>
+
+       Avoid crashes when SHELL=abcde is specified on the command line
+       * variable.c (do_variable_definition): If $SHELL was not found,
+       process "SHELL=foo" as any other variable definition.  This avoids
+       segfaults when SHELL=foo is specified on the Make command line.
+       Reported by Orgad Shaneh <orgads@gmail.com>.
+
+2017-06-04  Paul Smith  <psmith@gnu.org>
+
+       [SV 51159] Use a non-blocking read with pselect to avoid hangs.
+       * posixos.c (set_blocking): Set blocking on a file descriptor.
+       (jobserver_setup): Set non-blocking on the jobserver read side.
+       (jobserver_parse_auth): Ditto.
+       (jobserver_acquire_all): Set blocking to avoid a busy-wait loop.
+       (jobserver_acquire): If the non-blocking read() returns without
+       taking a token then try again.
+
+       [SV 50823] Support filenames containing '$' in MAKEFILE_LIST
+       * variable.h (enum variable_flavor: Add a new flavor for appended
+       values that shouldn't be expanded.
+       * variable.c (do_variable_definition): If given this new flavor,
+       do not expand the value before appending it.
+       * read.c (eval_makefile): Use this new flavor for MAKEFILE_LIST
+       * tests/scripts/variables/MFILE_LIST: Test filenames containing '$'.
+
+       * tests/test_driver.pl: Useful error if given an invalid test name.
+
+       * NEWS: Do not insert a space during '+=' if the value is empty.
+       * doc/make.texi (Appending): Document this behavior.
+       * variable.c (do_variable_definition): Only add a space if the variable
+       value is not empty.
+       * tests/scripts/variables/flavors: Test this behavior.
+
+2017-06-04  Enrique Olaizola  <enrique_olaizola16@hotmail.com>  (tiny change)
+
+       * read.c (read_all_makefiles): [SV 50909] Add MAKEFILES to strcache
+
+2017-06-04  Paul Smith  <psmith@gnu.org>
+
+       * po/LINGUAS: Add support for traditional Chinese (zh_TW)
+
+       Rename output_tmpfile() to a misc function get_tmpfile()
+       * output.c: Remove output_tmpfile() and umask handling.
+       * output.h: Ditto.
+       * misc.c: Add get_tmpfile() and umask handling.
+       * makeint.h: Ditto.
+       * function.c: Rename output_tmpfile() to get_tmpfile().
+       * main.c: Ditto.
+       * vmsjobs.c: Ditto.
+
+       [SV 13651] Handle out-of-memory conditions slightly more gracefully.
+       * makeint.h: Change OUT_OF_MEM() macro to out_of_memory() function.
+       * output.h, job.h: Move FD_* macros from job.h to output.h.
+       * output.c (output_write): Write a buffer to an FD directly.
+       (out_of_memory): Use output_write() to avoid allocating more
+       memory while writing the error, and call exit() instead of die().
+       This does mean we can't translate the error string, though.
+       * misc.c (xmalloc, xcalloc, xrealloc, xstrdup, xstrndup): Call new
+       out_of_memory() rather than OUT_OF_MEM().
+       * read.c (parse_file_seq): Ditto.
+
+       Clean up close-on-exec, particularly with jobserver pipes.
+       * configure.ac: Check sys/file.h and assume fileno() always exists.
+       * output.h: Move output-specific content from job.h to output.h.
+       * os.h (fd_inherit, fd_noinherit): New functions manage FD inheritance.
+       * posixos.c (fd_inherit, fd_noinherit): Implement for POSIX systems.
+       (jobserver_setup): Force jobserver FDs to not be inherited by default.
+       (jobserver_pre_child): Enable inheritance in recursive invocations.
+       (jobserver_post_child): Disable inheritance after recursive invocations.
+       * w32/w32os.c (fd_inherit, fd_noinherit): Implement for W32 systems.
+       * job.h (CLOSE_ON_EXEC): Remove macro in deference to new fd_noinherit.
+       * function.c (func_shell_base): Convert CLOSE_ON_EXEC to fd_noinherit.
+       * job.c (child_execute_job): Ditto.
+       * output.c (setup_tmpfile): Ditto.
+       * read.c (eval_makefile): Ditto, plus remove HAVE_FILENO check.
+       * w32/include/sub_proc.h: Remove process_noinherit for fd_noinherit.
+       * w32/subproc/sub_proc.c: Ditto.
+
+       [SV 50300] Use CFLAGS value of "-O1" in POSIX mode.
+       * read.c (record_files): Use "-O1" not "-O" for CFLAGS and FFLAGS.
+       * tests/scripts/targets/POSIX: Test for the new value.
+
+       * configure.ac: [SV 50648] Detect Guile 2.2 packages.
+
+       * doc/make.texi: [SV 50304] Add missing close parenthesis.
+
+       Add test suite support to Windows
+       * main.c (main): Sanitize program name detection on Windows.
+       * makeint.h: 'program' is a const string on all platforms now.
+       * tests/run_make_tests.bat: Windows bat file to invoke tests
+       * tests/test_driver.pl: Obtain system-specific error messages.
+       (get_osname): Compute the $port_type here.  Add more $osname checks
+       for different Windows Perl ports.
+       (_run_command): Rewrite the timeout capability to work properly
+       with Windows.  Don't use Perl fork/exec; instead use system(1,...)
+       which allows a more reliable/proper kill operation.
+       Also, allow options to be given as a list instead of a string, to
+       allow more complex quoting of command-line arguments.
+       * tests/run_make_tests.pl (run_make_with_options): Allow options
+       to be provided as a list in addition to a simple string.
+       (set_more_defaults): Write sample makefiles and run make on them
+       instead of trying to run echo and invoking make with -f-, to avoid
+       relying on shell and echo to get basic configuration values.  Also
+       create a $sh_name variable instead of hard-coding /bin/sh.
+       * tests/scripts/features/archives: Skip on Windows.
+       * tests/scripts/features/escape: Use list method for passing options.
+       * tests/scripts/features/include: Use system-specific error messages.
+       * tests/scripts/features/output-sync: "Command not found" errors
+       generate very different / odd output on Windows.  This needs to be
+       addressed but for now disable these tests on Windows.
+       * tests/scripts/functions/abspath: Disable on Windows.
+       * tests/scripts/functions/file: Use system-specific error messages.
+       * tests/scripts/functions/shell: "Command not found" errors generate
+       very different / odd output on Windows.  This needs to be addressed
+       but for now disable these tests on Windows.
+       * tests/scripts/misc/close_stdout: Disable on Windows.
+       * tests/scripts/options/dash-k: Use system-specific error messages.
+       * tests/scripts/options/dash-l: Disable on Windows.
+       * tests/scripts/options/eval: Use list method for passing options.
+       * tests/scripts/options/general: Skip some non-portable tests.
+       * tests/scripts/targets/ONESHELL: Skip some non-portable tests.
+       * tests/scripts/targets/POSIX: Skip some non-portable tests.
+       * tests/scripts/variables/MAKEFILES: Skip some non-portable tests.
+       * tests/scripts/variables/SHELL: Use a makefile not -f- for testing.
+
+2017-06-04  Enrique Olaizola  <enrique_olaizola16@hotmail.com>
+
+       * tests/run_make_tests.pl: [SV 50902] Find Perl modules
+
+2017-01-11  Eli Zaretskii  <eliz@gnu.org>
+
+       [SV 50021] Avoid infloop on MS-Windows with short scripts
+       * job.c (reap_children) [WINDOWS32]: Avoid recursive call to
+       reap_children when the argument passed to
+       map_windows32_error_to_string is negative or too large.
+
+2016-12-28  Paul Smith  <psmith@gnu.org>
+
+       * main.c (switches): Add -E as an alias for --eval.
+       * make.1: Document the -E and --eval options.
+       * doc/make.texi: Document the -E option.
+       * tests/scripts/options/eval: Test the -E option and MAKEFILES.
+       * NEWS: Add information about the new option.
+
+       * main.c (switches): Add --no-silent to undo -s options.
+       * make.1: Document the new flag.
+       * doc/make.texi: Document the new flag.  Remove suggestions that the
+       .SILENT special target is deprecated or should not be used.
+       * tests/scripts/options/dash-s: Test the -s and --no-silent options.
+       * NEWS: Add information about the new option.
+
+2016-12-26  Martin Dorey  <martin.dorey@hds.com>
+
+       * job.c (child_execute_job): [SV 49938] Avoid spurious GCC warning.
+
+       * main.c (main): [SV 49935] Fix uninitialized variable.
+
+2016-12-26  Paul Smith  <psmith@gnu.org>
+
+       [SV 40236] Handle included file open failures properly.
+       * read.c (eval_makefile): Set deps->error if we discovered any
+       error reading makefiles, and set NONEXISTENT_MTIME so we know
+       it needs to be rebuilt.
+       * main.c (main): Clean up management of makefile_mtimes.
+       * tests/scripts/features/include: Add open failure testcases.
+
+       Portability changes for the test suite.
+       * tests/test_driver.pl: Save error strings for later comparison.
+       * tests/run_make_tests.pl: Create portable commands for later use.
+       * tests/*: Use these new variables.
+
+       [SV 20513] Un-escaped # are not comments in function invocations
+       * NEWS: Document the change, as a backward-incompatible change.
+       * main.c (main): Add 'nocomment' to the .FEATURES variable.
+       * read.c (remove_comments): Skip variable references during remove.
+       (find_char_unquote): Fix comments for new STOPMAP support.
+       * tests/scripts/features/escape: Test new escape syntax.
+       * tests/scripts/functions/guile: Ditto.
+       * tests/scripts/functions/shell: Ditto.
+
+       * main.c (main): [SV 40234] Show correct error message.
+
+2016-12-26  Christoph Schulz  <develop@kristov.de>
+
+       * main.c (switches): [SV 48809] Accept obsolete jobserver flag.
+
+2016-12-26  Paul Smith  <psmith@gnu.org>
+
+       * read.c (get_next_mword): [SV 49865] Make fallthrough explicit.
+
+       [SV 49114] Remove support for the NO_FLOAT compile flag.
+       * makeint.h (max_load_average): Always a double.
+       * main.c (max_load_average, default_load_average): Always doubles.
+       (switches): -l option is a "floating" format.
+       (decode_switches, define_makeflags): Support "floating" format.
+       * remake.c (f_mtime): Show time skew as double.
+       * rule.c (print_rule_data_base): Show percentages as double.
+       * Makefile.ami, README.DOS.template, SMakefile.template: Remove
+       references to NO_FLOAT.
+       * SCOPTIONS, glob/SCOPTIONS: Remove NO_FLOAT settings.
+
+       [SV 45477] [SV 49115] Parse DOS/Windows drivespecs correctly.
+       * read.c (parse_file_seq) [WINDOWS32]: Only consider a colon part of
+       a path if it's in a valid Windows drivespec.
+
+2016-12-25  Paul Smith  <psmith@gnu.org>
+
+       [SV 49116] Check potential null pointer dereference.
+       * w32/subproc/sub_proc.c (make_command_line): Simplify cygwin shell
+       check for correctness.
+
+2016-12-25  Jaak Ristioja  <jaak@ristioja.ee>
+
+       * expand.c (variable_append): [SV 49113] Possible null ptr deref
+
+       * w32/*/dirent.*: [SV 49111] Remove unused telldir()
+
+2016-12-25  Paul Smith  <psmith@gnu.org>
+
+       Add more GCC warnings to the maintainer build.
+       * arscan.c: [SV 49112] Correct TEST printf() formatting.
+       Recommended by Jaak Ristioja <jaak@ristioja.ee>
+       * hash.c: Correct fprintf() formatting.
+       * maintMakefile: Add extra GCC warning flags.
+
+       * po/Makevars, makeint.h, debug.h: Add xgettext C format flags.
+
+       * po/LINGUAS: Added Serbian translation.
+
+       * README.template: Clarify some items in the README
+
+       * doc/make.texi: [SV 48951] Fix documentation typo.
+
+       * maintMakefile: Update default GPG ID for new key.
+
+2016-12-14  Paul Smith  <psmith@gnu.org>
+
+       Resolve issues discovered by static code analysis.
+       * maintMakefile: Add a rule to submit code for analysis.
+       * configure.ac: Check for availability of the umask() function.
+       * output.c (output_tmpfd, output_tmpfile): Use umask on temp files.
+       * makeint.h (PATH_VAR): Reserve an extra character for nul bytes.
+       * function.c (func_error): Initialize buffer to empty string.
+       * job.c (child_execute_job): Verify validity of fdin.
+       * main.c (main): Simplify code for makefile updating algorithm.
+       * arscan.c (ar_scan): Verify member name length before reading.
+       * read.c (readline): Cast pointer arithmetic to avoid warnings.
+       * remake.c (update_file): Remove unreachable code.
+       (name_mtime): Verify symlink name length.
+
+2016-11-12  Eli Zaretskii  <eliz@gnu.org>
+
+       * NEWS: Mention the extended support for -jN on MS-Windows.
+
+2016-11-12  Marc Ullman  <marc@mathworks.com>
+
+       Support more than 63 jobs on MS-Windows
+       * job.c (start_waiting_job, load_too_high):
+       * w32/w32os.c (jobserver_setup, jobserver_acquire): Abstracted out
+       MAXIMUM_WAIT_OBJECTS.  Call process_table_full instead.
+       * w32/include/sub_proc.h: Update and add prototypes.
+       * w32/subproc/sub_proc.c (GMAKE_MAXIMUM_WAIT_OBJECTS): New macro.
+       (process_wait_for_multiple_objects): Drop-in replacement for Windows
+       API WaitForMultipleOjects.
+       (process_wait_for_any_private): Replaced MAXIMUM_WAIT_OBJECTS with
+       GMAKE_MAXIMUM_WAIT_OBJECTS.
+       (process_table_full): Replacement for process_used_slots.
+       (process_used_slots): Removed, as no longer needed.
+       (process_table_usable_size): Returns maximum usable size of process
+       table.
+       (process_table_actual_size): Returns actual size of process table.
+       (process_register): Added assertion.
+       (process_easy): Abstracted out MAXIMUM_WAIT_OBJECTS.
+
+2016-10-09  Eli Zaretskii  <eliz@gnu.org>
+
+       Only include strings.h in MinGW builds
+       * main.c:
+       * job.c: Include strings.h only if HAVE_STRINGS_H is defined.
+
+       * config.h.W32.template (HAVE_STRINGS_H): Define only for MinGW,
+       as MSVC doesn't have this header.
+
+2016-10-06  Eli Zaretskii  <eliz@gnu.org>
+
+       Update the Guile version tested with the MS-Windows build.
+
+       Avoid compiler warnings with MinGW runtime 3.22.2
+       * main.c:
+       * job.c: Include strings.h, to get the prototypes of strcasecmp
+       and strncasecmp with latest MinGW runtime versions.
+       * config.h.W32.template (HAVE_STRINGS_H): Define.
+
+2016-06-24  Paul Smith  <psmith@gnu.org>
+
+       * README.W32.template: Update the build documentation.
+       * build_w32.bat: Fix issues with Visual Studio builds.  Fix an error
+       that always created Debug builds.  Support 32bit and 64bit builds.
+
+       * Update to pre-release version 4.2.90.
+
 2016-06-10  Paul Smith  <psmith@gnu.org>
 
        GNU Make release 4.2.1.