+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.