2013-09-22  Paul Smith  <psmith@gnu.org>

	* configure.ac: Update version to 3.99.92.
	* NEWS: Ditto.

	* implicit.c (pattern_search): After second expansion be sure to
	handle order-only markers inside the expansion properly.
	Fixes Savannah bug #31155.

	* guile.c (guile_define_module): Technically a void* cannot
	contain a pointer-to-function and some compilers warn about this.
	Cast the function pointers.
	* load.c (load_object): Ditto.

	* read.c (eval): If load_file() returns -1, don't add this to the
	"to be rebuilt" list.
	* doc/make.texi (load Directive): Document it.

	* guile.c (guile_gmake_setup): Don't initialize Guile so early.
	(func_guile): Lazily initialize Guile the first time the $(guile ..)
	function is invoked.  Guile can steal file descriptors which
	confuses our jobserver FD checking, so we don't want to initialize
	it before we have to.

	VMS port updates by Hartmut Becker <becker.ismaning@freenet.de>

	* makefile.com: Add output to the filelist.
	* output.c (va_copy): Add an implementation of this macro for VMS.
	* commands.c: Ensure filedef.h is #included before dep.h.
	* dir.c: Ditto.
	* file.c: Ditto.
	* guile.c: Ditto.
	* main.c: Ditto.
	* misc.c: Ditto.
	* read.c: Ditto.
	* rule.c: Ditto.
	* variable.c: Ditto.
	* readme.vms: Renamed to README.VMS and updates for this release.
	* Makefile.am: Ditto.
	* NEWS: Ditto.
	* README.template: Ditto.
	* Makefile.DOS.template: Ditto.

2013-09-21  Paul Smith  <psmith@gnu.org>

	* maintMakefile (check-alt-config): Create a target to test
	alternative configurations.  Each one will build make with a
	different configuration then run the test suite.

	Invert the output-sync #define to NO_OUTPUT_SYNC

	* configure.ac: Don't set OUTPUT_SYNC.
	* makeint.h: Ditto.
	* main.c: Use NO_OUTPUT_SYNC instead of OUTPUT_SYNC.
	* output.c: Ditto.
	* output.h: Ditto.
	* job.h: Ditto.
	* job.c: Ditto.
	* config.ami.template: Set NO_OUTPUT_SYNC.
	* config.h-vms.template: Ditto.
	* config.h.W32.template: Ditto.
	* configh.dos.template: Ditto.

	Output generated while reading makefiles should be synced.

	* main.c (make_sync): Define a context for syncing while reading
	makefiles and other top-level operations.
	(main): If we request syncing, enable it while we are parsing
	options, reading makefiles, etc. to capture that output.  Just
	before we start to run rules, dump the output if any.
	(die): Dump any output we've been syncing before we die
	* output.h (OUTPUT_SET): Disable output_context if not syncout.

	Stderr generated from shell functions in recipes should be synced.

	* job.h (FD_STDIN, FD_STDOUT, FD_STDERR): Create new macros to
	avoid magic numbers.
	(child_execute_job): Take a FD for stderr.
	* job.c (child_execute_job): Handle STDERR FD's in addition to
	stdin and stdout.
	(start_job_command): Call child_execute_job() with the new STDERR
	parameter.  Instead of performing the dup() here, send it to
	child_execute_job() where it's already being done.
	* function.c (func_shell_base): Pass the OUTPUT_CONTEXT stderr to
	child_execute_job() if it's set, otherwise FD_STDERR.
	* main.c (main): Pass FD_STDERR to child_execute_job().

2013-09-19  Paul Smith  <psmith@gnu.org>

	* main.c (main): Set MAKE_RESTARTS to negative before re-exec if
	we've already generated an "Entering" message.  If we are started
	and notice that MAKE_RESTARTS is negative, assume we already wrote
	"Entering" and don't write it again.

2013-09-18  Paul Smith  <psmith@gnu.org>

	* main.c (main): Set starting_directory before we write any
	errors.  Fixes Savannah bug #40043.

2013-09-16  Eli Zaretskii  <eliz@gnu.org>

	* output.c [WINDOWS32]: Include windows.h and sub_proc.h, to avoid
	compiler warnings for CLOSE_ON_EXEC.

2013-09-16  Paul Smith  <psmith@gnu.org>

	* configure.ac: Update version to 3.99.91.
	* NEWS: Ditto.

2013-09-15  Paul Smith  <psmith@gnu.org>

	* doc/make.texi (Error Messages): Add a bit more info to the
	section on static pattern errors, since they're common.
	Fixes Savannah bug #31326.

	* read.c (eval_makefile): If the file open fails with an
	unrecoverable error, stop now rather than trying to make it.
	Fixes Savannah bug #27374.

	* main.c (main): Perform the validation of the jobserver FDs
	early, before we read makefiles, to ensure that something hasn't
	opened and used those FDs for some other reason.
	Fixes Savannah bug #39934.

	* main.c (main): Don't set MAKEFLAGS in the environment when we
	restart.  We have the original command line flags so keep the
	original MAKEFLAGS settings as well.
	Fixes Savannah bug #39203.

2013-09-14  Paul Smith  <psmith@gnu.org>

	* main.c (decode_debug_flags): Add support for the "n" flag to
	disable all debugging.
	* make.1: Document the "n" (none) flag.
	* doc/make.texi (Options Summary): Ditto.
	* NEWS: Ditto.
	Fixes Savannah bug #35248.

	* misc.c (close_stdout): Move to output.c.
	* main.c (main): Move atexit call to output_init().
	* makeint.h: Remove close_stdout() declaration.
	* output.c (output_init): Add close_stdout at exit only if it's	open.
	Fixes Savannah bug #33134.  Suggested by David Boyce <dsb@boyski.com>.

2013-09-14  Paul Smith  <psmith@gnu.org>

	* misc.c (set_append_mode, open_tmpfd, open_tmpfile): Move to output.c.
	* misc.h: Ditto.
	* output.h: Ditto.
	* main.c (main): Move stdio init into output.c:output_init().
	Change open_tmpfile() to output_tmpfile().
	* output.c: Rename open_*() to output_*().  set_append_mode() and
	open_tmpfd() are static.
	(_outputs, log_working_directory): Accept a struct output and
	print to that rather than the global context.
	(output_dump): In recurse mode print enter/leave once for the
	whole makefile.
	(output_init): Initialize this processes stdio as well as child's.

	* vmsjobs.c: Reformat to be closer to convention.

2013-09-12  Paul Smith  <psmith@gnu.org>

	Rework output to handle synchronization and directory logging more
	reliably.

	* output.c: New file.  Implement lazy synchronization and
	directory logging so that we manage them "just in time", and the
	destination of the output is set via a global state variable.
	* output.h: New file.
	* function.c (func_shell_base): Ensure the output is set up before
	running a shell command, in case it writes to stderr.
	(func_error): Use outputs() to generate output.
	* job.h (struct child): Add struct output to track the child's output.
	* job.c: Use struct output in the child structure to track output.
	(child_out, sync_init, assign_child_tempfiles, pump_from_tmp)
	(acquire_semaphore, release_semaphore, sync_output): Move most of
	the output_sync handling to output.c.
	(child_error): Set output, then use simple message() and error()
	not _s versions.
	* main.c (log_working_directory): Moved to output.c
	(trace_option, decode_trace_flags) Remove.  Remove support for
	different trace modes; we don't use it anymore.
	(die) Invoke output_close() before we exit.
	* misc.c (message_s, error_s): Removed; no longer needed.
	(message, error, fatal, perror_with_name, pfatal_with_name): Moved
	to output.c.
	* makeint.h: Remove message_s(), error_s(), and
	log_working_directory().  Remove the TRACE_* macros.
	* doc/make.texi: Enhance documentation for output sync, and remove
	MODE assignment for --trace.
	* make.1: Remove MODE assignment for --trace.
	* Makefile.am: Add new files.
	* NMakefile.template: Ditto.
	* SMakefile.template: Ditto.
	* build_w32.bat: Ditto.
	* dosbuild.bat: Ditto.
	* make.lnk: Ditto.
	* make_nsvc_net2003.vcproj: Ditto.
	* makefile.vms: Ditto.
	* po/POTFILES.in: Ditto.

2013-08-22  Petr Machata  <pmachata@redhat.com>

	* function.c (func_shell_base): Get rid of any avoidable limit on
	stack size for processes spawned via $(shell).

2013-07-22  Paul Smith  <psmith@gnu.org>

	* implicit.c (pattern_search): Use PARSE_SIMPLE_SEQ() even for
	non-second expansion prerequisites, to handle globbing in patterns.
	Fixes Savannah bug #39310.

	* dep.h (PARSE_SIMPLE_SEQ): Macro for simple file sequence parsing.
	* default.c (set_default_suffixes): Use it.
	* file.c (split_prereqs): Ditto.
	* main.c (main): Ditto.
	* read.c (eval): Ditto.
	* rule.c (install_pattern_rule): Ditto.
	* file.c (split_prereqs): Use PARSEFS_NONE instead of 0.

2013-07-21  Paul Smith  <psmith@gnu.org>

	Cleanups detected by cppcheck.  Fixes Savannah bug #39158.
	* arscan.c (ar_scan): Reduce the scope of local variables.
	* dir.c (vms_hash): Ditto.
	(find_directory): Ditto.
	(file_impossible_p): Ditto.
	* expand.c (variable_expand_string): Ditto.
	* function.c (func_sort): Ditto.
	(func_and): Ditto.
	* job.c (reap_children): Ditto.
	(exec_command): Ditto.
	* main.c (main): Ditto.
	* misc.c (collapse_continuations): Ditto.
	* read.c (eval): Ditto.
	(parse_file_seq): Ditto.
	* vpath.c (gpath_search): Ditto.
	(selective_vpath_search): Ditto.
	* job.c (is_bourne_compatible_shell): Simplify for non-Windows systems.
	* remake.c (f_mtime): Remove duplicate test.
	* signame.c (strsignal): Fix bogus conditional.

	* job.c (assign_child_tempfiles): Assign OUTFD to -1 for safety.
	(start_job_command): Don't test output_sync and sync_cmd: redundant.
	Changes suggested by Frank Heckenbach <f.heckenbach@fh-soft.de>.

2013-07-14  Paul Smith  <psmith@gnu.org>

	* filedef.h (update_status): Convert UPDATE_STATUS from a char to
	an enumeration.  Some systems declare "char" to be "unsigned"
	which broke the code (which expected to be able to use -1 as a
	flag).  Using magic values was unpleasant, so rather than just
	force "signed char" I reworked it to use an enum.

	* dep.h (update_goal_chain): Return an update_status value not int.
	* remake.c (touch_file): Ditto.
	(update_goal_chain): Track the update_status enum.

	* file.c (enter_file): Use new enumeration values with update_status.
	(remove_intermediates): Ditto.
	(print_file): Ditto.
	* commands.c (execute_file_commands): Ditto.
	* job.c (reap_children): Ditto.
	(start_job_command): Ditto.
	(start_waiting_job): Ditto.
	* main.c (main): Ditto.
	* remake.c (update_file): Ditto.
	(complain): Ditto.
	(update_file_1): Ditto.
	(notice_finished_file): Ditto.
	(remake_file): Ditto.
	* vmsjobs.c (vmsHandleChildTerm): Ditto.

2013-07-09  Paul Smith  <psmith@gnu.org>

	* implicit.c (pattern_search): Keep a local copy of the number of
	deps in deplist: the global max might change due to recursion.
	Fixes a bug reported by Martin d'Anjou <martin.danjou14@gmail.com>.

2013-06-28  Paul Smith  <psmith@gnu.org>

	* misc.c (set_append_mode): Set the O_APPEND flag on a file descriptor.
	(open_tmpfd): Set append mode on the temporary file descriptor.
	* main.c (main): Set append mode on stdout and stderr.
	* makeint.h (set_append_mode): Declare it.

2013-06-22  Eli Zaretskii  <eliz@gnu.org>

	* build_w32.bat (LinkGCC): Prevent a comment from being displayed
	at build time.

	* job.c (construct_command_argv_internal) [WINDOWS32]: Use
	case-insensitive comparison with internal commands of non-Unix
	shells.

	* main.c (find_and_set_default_shell): Don't use file_exists_p or
	dir_file_exists_p, as those call readdir, which can fail if PATH
	includes directories with non-ASCII characters, and that would
	cause Make to fail at startup with confusing diagnostics.  See
	https://sourceforge.net/mailarchive/message.php?msg_id=30846737
	for the details.

2013-06-22  Paul Smith  <psmith@gnu.org>

	Improve performance by using a character map to determine where we
	want to stop searching strings, rather than discrete comparisons.

	* read.c (find_char_unquote): Pass a stop map instead of various
	flags and use that to check when to stop parsing the string.
	(eval): Use the new find_char_unquote() calling signature.
	(remove_comments): Ditto.
	(unescape_char): Ditto.
	(find_percent_cached): Ditto.
	(parse_file_seq): Use a stop-map flag.
	* main.c (stopchar_map): Character map definition.
	(initialize_stopchar_map): Initialize the map definition.
	(main): Invoke the map initialization function.
	* misc.c (end_of_token_w32): Remove unused function.
	* dir.c (dosify): Use STOP_SET to check for stop chars.
	* main.c (main): Ditto.
	* misc.c (end_of_token): Ditto.
	* function.c (subst_expand): Ditto.
	(func_notdir_suffix): Ditto.
	(func_basename_dir): Ditto.
	(abspath): Ditto.
	* job.c (is_bourne_compatible_shell): Ditto.
	* variable.c (parse_variable_definition): Ditto.
	* read.c (eval): Ditto.
	(conditional_line): Ditto.
	(find_percent_cached): Ditto.
	* dep.h (PARSE_FILE_SEQ): Update function declaration.
	* default.c (set_default_suffixes): Update PARSE_FILE_SEQ() call.
	* file.c (split_prereqs): Ditto.
	* function.c (string_glob): Ditto.
	* implicit.c (pattern_search): Ditto.
	* rule.c (install_pattern_rule): Ditto.
	* main.c (main): Ditto.

2013-06-21  Paul Smith  <psmith@gnu.org>

	* main.c (verify_flag): Global variable to determine whether to
	verify the database or not.
	(decode_debug_flags): If debug mode, enable verify_flag.
	(main): If MAKE_MAINTAINER_MODE, enable verify_flag, otherwise not.
	(die): Only verify the database if verify_flag is set.
	* file.c (enter_file): Don't check caching unless verify_flag.
	* makeint.h: Export verify_flag.

2013-05-27  Paul Smith  <psmith@gnu.org>

	* variable.c (define_automatic_variables): Create a new variable
	MAKE_HOST.

2013-05-27  Hartmut Becker  <becker.ismaning@freenet.de>

	* function.c (func_shell_base) [VMS]: Support VMS.
	* makefile.com [VMS]: Ditto.
	* makefile.vms [VMS]: Ditto.
	* makeint.h [VMS]: Ditto.
	* vmsjobs.c [VMS]: Ditto.
	* job.h: Define RECORD_SYNC_MUTEX() when OUTPUT_SYNC is not set.
	* load.c (unload_file): Fix signature if MAKE_LOAD is not set.

2013-05-26  Paul Smith  <psmith@gnu.org>

	* remake.c (f_mtime): Ensure that archive file names are in the
	string cache.  Fixes Savannah bug #38442.

	* read.c (readline): To be safe, move the entire buffer if we
	detect a CR.  Fixes Savannah bug #38945.

	* job.c (new_job): Compare OUT to the beginning of the OUT
	var/function, not IN.  Fixes Savannah bug #39035.

2013-05-22  Paul Smith  <psmith@gnu.org>

	* main.c (switches[]): Order switches so simple flags all come first.
	(define_makeflags): Rework to make option passing more
	reliable and the code less tricksy.  Ensure simple flags are kept
	in the initial batch of flags.  Do not allow any flags with
	options in that batch.  If there are only non-simple flags MAKEFLAGS
	begins with ' '.
	(print_data_base): Print the version.  Fixes part of Savannah #35336.

	* read.c (eval_buffer): Initialize lineno.

2013-05-18  Alexey Pavlov  <alexpux@gmail.com>  (tiny change)

	* w32/Makefile.am (libw32_a_SOURCES): Add compat/posixfcn.c.

	* configure.ac (OUTPUT_SYNC): Define for mingw32 target.

	* job.c (construct_command_argv_internal) <sh_cmds_dos>
	[WINDOWS32]: Add "move".  Fixes Savannah bug #30714.

	* guile.c: Move inclusion of makeint.h before gnumake.h.  This
	order must be observed when building Make, because gnumake.h must
	be included with GMK_BUILDING_MAKE defined, which makeint.h
	already does.  Otherwise, the linker will look for, and fail to
	find, gmk_* functions in some external dynamic library.

2013-05-17  Benno Schulenberg  <bensberg@justemail.net>

	* main.c (decode_output_sync_flags): Fix output message.
	* read.c (EXTRANEOUS): Ditto.
	(record_files): Ditto.
	* remake.c (update_file_1): Ditto.

2013-05-17  Eli Zaretskii  <eliz@gnu.org>

	* main.c (prepare_mutex_handle_string): Define conditioned on
	OUTPUT_SYNC.

	* build_w32.bat: Copy config.h.W32 to config.h regardless of
	whether or not we are building from SCM.

2013-05-17  Paul Smith  <psmith@gnu.org>

	* configure.ac: Update version to 3.99.90.
	* NEWS: Ditto.

	* Source (*.[ch]): Remove TABs, use GNU coding styles.

	* ALL: Update copyright.

	* hash.c (CALLOC): Use xcalloc() to handle out of memory errors.

	* makeint.h: Prototype new unload_file() function.
	* load.c (unload_file): Create a function to unload a file.
	(struct load_list): Type to remember loaded objects.
	(loaded_syms): Global variable of remembered loaded objects so we
	can unload them later.  We don't have to remove from the list
	because the only time we unload is if we're about to re-exec.
	(load_object): Remove unneeded extra DLP argument.
	(load_file): Remove unneeded extra DLP argument.
	* filedef.h (struct file): Remove the DLP pointer and add the
	LOADED bit flag.  Saves 32/64 bytes per file, as this pointer is
	almost never needed.
	* read.c (eval): Set the new LOADED bit flag on the file.
	* file.c (rehash_file): Merge the loaded bitfield.
	* commands.c (execute_file_commands): Call unload_file() instead
	of dlclose() directly.

2013-05-14  Paul Smith  <psmith@gnu.org>

	* doc/make.texi (Loaded Object API): Document the requirement for
	the plugin_is_GPL_compatible symbol.
	* load.c (load_object): Check for plugin_is_GPL_compatible symbol.

2013-05-13  Paul Smith  <psmith@gnu.org>

	* filedef.h (struct file): Add a builtin flag.
	* file.c (enter_file): Unset the builtin flag.
	(rehash_file): Ditto.
	(print_file): Don't print builtin files if we've omitted them.
	* default.c (undefine_default_variables): New function: go through
	the default variables and undefine them.
	(set_default_suffixes): Mark these suffix rules as builtin.
	* makeint.h: Prototype.
	* main.c (main): Handle addition of -r and -R to MAKEFLAGS in the
	makefile.  Fixes Savannah bug #20501.

	* main.c (define_makeflags): Assign o_env_override level to
	MAKEFLAGS to ensure it's set even in the presence of -e.
	Fixes Savannah bug #2216.

	* makeint.h (TRACE_NONE, TRACE_RULE, TRACE_DIRECTORY): Define
	constants for the trace mode.
	* main.c: Add new --trace mode parsing.
	(decode_trace_flags): New function.
	(decode_switches): Call it.
	(define_makeflags): Fix a bug with long-name options.
	* misc.c (fatal): Remove special output-sync handling.
	* make.1: Document new --trace mode flags.
	* doc/make.texi (Options Summary): Ditto.

2013-05-11  Eli Zaretskii  <eliz@gnu.org>

	* job.c (child_out): Output the newline following the message
	before fllush-ing the stream.  Avoids displaying the following
	failure message, which goes to stderr, on the same line.

2013-05-06  Eli Zaretskii  <eliz@gnu.org>

	* gnumake.h (GMK_EXPORT) [_WIN32]: Move the dllexport declaration
	here from makeint.h.

	* makeint.h (GMK_BUILDING_MAKE) [WINDOWS32]: Define before
	including gnumake.h.

	* doc/make.texi (Loaded Object Example): Add a note about building
	shared objects on MS-Windows.

2013-05-05  Paul Smith  <psmith@gnu.org>

	* makeint.h (OUTPUT_SYNC_LINE, OUTPUT_SYNC_RECURSE): Rename
	output-sync options "job" to "line" and "make" to "recurse".
	* main.c (decode_output_sync_flags): Ditto.
	* job.c (reap_children): Ditto.
	(start_job_command): Ditto.
	* make.1: Ditto.
	* doc/make.texi (Parallel Output): Ditto.

	* job.c (child_out): Write newlines explicitly, and don't do
	anything if the message is empty.
	(sync_output): Put working dir messages around stdout AND stderr.
	(start_job_command): Move the tmp file assignment earlier.  After
	we do it, write the command line to the temp file to get the order
	correct.

	* misc.c (message): Remove special handling for output_sync.
	(error): Ditto.

2013-05-04  Paul Smith  <psmith@gnu.org>

	* loadapi.c (gmk_alloc): New function.
	* gnumake.h: Add gmk_alloc().  Clean GMK_EXPORT a bit to avoid MAIN.
	* makeint.h (GMK_EXPORT): New handling, vs. MAIN.
	* doc/make.texi (Loaded Object API): Add information on the memory
	handling functions.
	(Loaded Object Example): Create an example.

	* job.c (pump_from_tmp): (Rename) Write to stdout/stderr using
	FILE* rather than fd.  It's not a good idea to mix and match.

2013-05-04  Eli Zaretskii  <eliz@gnu.org>

	* makeint.h (ftruncate) [_MSC_VER]: Redirect to _chsize.
	(_S_ISDIR): If not defined (MinGW64), define to S_ISDIR.

2013-05-04  Paul Smith  <psmith@gnu.org>

	* job.c (child_out): Handle EINTR and incomplete write scenarios.
	(sync_init): New function: separate the initialization code.
	(assign_child_tempfiles): Remove truncation from this function,
	(sync_output): and add it here after output is generated.
	(reap_children): Always call sync_output() in case output_sync was
	reset after the child started, due to error.
	(start_job_command): Create new sync_cmd variable.  Use new method
	for initializing the handle.
	If we're not syncing the output be sure any output we've saved is
	dumped immediately before starting the child.

2013-05-04  Eli Zaretskii  <eliz@gnu.org>

	* job.c (start_job_command): Make the condition for creating a
	temporary output file be identical to the Posix code branch.
	Suggested by Frank Heckenbach <f.heckenbach@fh-soft.de>.

2013-05-03  Eli Zaretskii  <eliz@gnu.org>

	* w32/subproc/sub_proc.c: Include makeint.h.  Remove a private
	incompatible prototype of xmalloc.
	(batch_file_with_spaces): New function, detects Windows batch
	files whose names include whitespace characters.
	(process_begin): If exec_name is a batch file with whitespace
	characters in its name, pass NULL as the first argument to
	CreateProcess.  This avoids weird failures due to buggy quoting by
	CreateProcess.  For the details, see the discussion starting at
	http://lists.gnu.org/archive/html/make-w32/2013-04/msg00008.html.

	* load.c (load_object, load_file): Accept an additional argument
	DLP and return in it a pointer that can be used to unload the
	dynamic object.

	* read.c (eval): Call load_file with an additional argument, and
	record the pointer returned there in the 'struct file' object of
	dynamic objects in that object's 'struct file'.

	* commands.c (execute_file_commands): Unload dynamic objects
	before remaking them, to avoid failure to remake if the OS doesn't
	allow overwriting objects that are in use.

	* filedef.h (struct file): New member dlopen_ptr.

	* gnumake.h (GMK_EXPORT): Define to dllexport/dllimport
	decorations for Windows and to nothing on other platforms.
	(gmk_eval, gmk_expand, gmk_add_function): Add GMK_EXPORT qualifier
	to prototypes.

	* makeint.h (MAIN): Define before including gnumake.h, to give
	correct dllexport decorations to exported functions.
	(load_file): Adjust prototype.

	* loadapi.c: Don't include gnumake.h, since makeint.h already
	includes it, and takes care of defining MAIN before doing so.

	* build_w32.bat (LinkGCC): Produce an import library for functions
	exported by Make for loadable dynamic objects.

	* w32/compat/posixfcn.c (dlclose): New function.

	* w32/include/dlfcn.h (dlclose): Add prototype.

2013-05-01  Eli Zaretskii  <eliz@gnu.org>

	* job.c (start_job_command) [WINDOWS32]: Make the same fix for
	MS-Windows as the previous commit did for Posix platforms.
	(construct_command_argv_internal): Don't treat a backslash as an
	escape character before whitespace, if the shell is not a Posix
	shell.   For the description of the problem, see
	http://lists.gnu.org/archive/html/make-w32/2013-04/msg00014.html.

2013-05-01  Paul Smith  <psmith@gnu.org>

	* job.c (start_job_command): Don't redirect output for recursive
	make jobs, unless we're in makefile synchronization mode.

2013-04-30  Stefano Lattarini <stefano.lattarini@gmail.com>  (tiny change)

	build: enable the 'silent-rules' automake options

	* configure.ac (AM_INIT_AUTOMAKE): Here.  The future major Automake
	version 2.0 (ETA about one, one and half year from now) will enable
	it by default, so better prepare ourselves.

2013-04-30  Stefano Lattarini <stefano.lattarini@gmail.com>  (tiny change)

	build: require Autoconf >= 2.62 and Automake >= 1.11.1

	Older versions of those tools should be considered fully obsolete.
	Also, GNU make already requires Gettext >= 0.18.1, which has been
	released six months after Automake 1.11.1 and two years after
	Autoconf 2.62; so the new requirement shouldn't be problematic
	for people already bootstrapping GNU make from the Git repository.

	* configure.ac (AC_PREREQ): Require Autoconf 2.62 or later.
	(AM_INIT_AUTOMAKE): Require Automake 1.11.1 or later (1.11 had
	some serious bugs, and should not be used).

2013-04-30  Stefano Lattarini <stefano.lattarini@gmail.com>  (tiny change)

	build: get rid of 'HAVE_ANSI_COMPILER' C preprocessor conditional

	GNU make already assume C89 or later throughout the codebase, and
	that preprocessor conditional was no longer used anyway.

	* configure.ac: Remove AC_DEFINE of HAVE_ANSI_COMPILER.
	* config.ami.template: Remove #define of HAVE_ANSI_COMPILER.
	* config.h-vms.template: Likewise.
	* config.h.W32.template: Likewise.
	* configh.dos.template: Likewise.

2013-04-30  Stefano Lattarini <stefano.lattarini@gmail.com>  (tiny change)

	cosmetics: fix few innocuous typos

	Most of these were found using Lucas De Marchi's 'codespell' tool.

	* ChangeLog: Fix minor typos.
	* ChangeLog.2: Likewise.
	* README.Amiga: Likewise.
	* TODO.private: Likewise.
	* function.c: Likewise.
	* glob/glob.h: Likewise.
	* job.c: Likewise.
	* main.c: Likewise.
	* readme.vms: Likewise.
	* remake.c: Likewise.
	* tests/ChangeLog: Likewise.
	* tests/NEWS: Likewise.
	* tests/README: Likewise.
	* tests/scripts/variables/private: Likewise.
	* vmsdir.h: Likewise.
	* signame.c: Likewise.  While at it, improve line wrapping in the
	touched comment.

2013-04-29  Eli Zaretskii  <eliz@gnu.org>

	* w32/include/dlfcn.h: New file.

	* w32/compat/posixfcn.c: Include dlfcn.h.
	(dlopen, dlerror, dlsym) [MAKE_LOAD]: New functions, in support of
	dynamic loading.

	* config.h.W32.template (MAKE_LOAD): Define.

	* load.c (load_object) [HAVE_DOS_PATHS]: Support backslashes and
	drive letters in file names of dynamic objects.

	* job.c (construct_command_argv_internal) [WINDOWS32]: Return
	right after generating new_argv for one_shell case.  This fixes
	the Windows build for both Unixy shell and stock Windows shells.

2013-04-28  Eli Zaretskii  <eliz@gnu.org>

	* dir.c (local_stat) [WINDOWS32]: Use the wrapper on MS-Windows.
	If the argument ends in "dir/.", make sure the parent dir exists
	and is indeed a directory.  Fixes Savannah bug #37065.

2013-04-28  Paul Smith  <psmith@gnu.org>

	* makeint.h (message_s, error_s): Functions that print to strings
	rather than directly to files.
	* misc.c (message_s, error_s): Create them.
	* job.c (child_error): Print error messages to the output sync
	logs, if one exists, rather then directly to the terminal.
	(reap_children): Move the per-line sync after child_error().

	* configure.ac: Remove support for pre-ANSI variadic function calls.
	* makeint.h: Ditto.
	* misc.c: Ditto.
	* config.ami.template: Ditto.
	* config.h-vms.template: Ditto.
	* config.h.W32.template: Ditto.
	* configh.dos.template: Ditto.

	Implement a "per-job" output synchronization option.

	* main.c (decode_output_sync_flags): Recognize the new option.
	* makeint.h (OUTPUT_SYNC_JOB): Add new values for "job"
	* job.c (assign_child_tempfiles): In per-job mode, truncate the
	temp file for re-use by the next job.
	(sync_output): Don't close the temp files as we may still use them.
	(free_child): Close the temp files here as we definitely don't
	need them.
	(new_job): In per-job output mode, sync_output() after each job.
	* job.h (struct child): Avoid ifdefs.
	* make.1: Add new options to the man page.
	* doc/make.texi (Parallel Output): Break documentation on input
	and output into separate sections for readability.  Document the
	new "job" and "none" modes.

2013-04-27  Paul Smith  <psmith@gnu.org>

	* job.c (construct_command_argv_internal): Fix oneshell support
	for non-POSIX-sh shells.

	* load.c (load_object): Extract all POSIX-isms into a separate
	function for portability.
	(load_file): Check the .LOADED variable first and don't invoke
	load_object() if it's already been loaded.

2013-04-27  Eli Zaretskii  <eliz@gnu.org>

	* read.c (record_files): Pay attention to .ONESHELL in MS-Windows.

	* job.c (construct_command_argv_internal): Support .ONESHELL on
	MS-Windows, when the shell is not a Unixy shell.

2013-04-27  Eli Zaretskii  <eliz@gnu.org>

	* job.c: Fix compilation error on GNU/Linux due to "label at end
	of compound statement".

2013-04-27  Frank Heckenbach <f.heckenbach@fh-soft.de>  (tiny change)

	* job.c (sync_output): Don't discard the output if
	acquire_semaphore fails; instead, dump the output unsynchronized.

2013-04-27  Eli Zaretskii  <eliz@gnu.org>

	Support --output-sync on MS-Windows.
	* w32/compat/posixfcn.c: New file, with emulations of Posix
	functions and Posix functionality for MS-Windows.

	* w32/subproc/sub_proc.c: Include io.h.
	(process_noinherit): New function, forces a file descriptor to not
	be inherited by child processes.
	(process_easy): Accept two additional arguments, and use them to
	set up the standard output and standard error handles of the child
	process.

	* w32/include/sub_proc.h (process_easy): Adjust prototype.
	(process_noinherit): Add prototype.

	* read.c [WINDOWS32]: Include windows.h and sub_proc.h.

	* makeint.h (LOCALEDIR) [WINDOWS32}: Define to NULL if not
	defined.  This is needed because the MS-Windows build doesn't have
	a canonical place for LOCALEDIR.
	(WIN32_LEAN_AND_MEAN) [WINDOWS32]: Define, to avoid getting from
	windows.h header too much stuff that could conflict with the code.

	* main.c <sync_mutex>: New static variable.
	<switches>: Add support for "--sync-mutex" switch.
	(decode_output_sync_flags): Decode the --sync-mutex= switch.
	(prepare_mutex_handle_string) [WINDOWS32]: New function.
	(main): Add "output-sync" to .FEATURES.

	* job.h (CLOSE_ON_EXEC) [WINDOWS32]: Define to call
	process_noinherit.
	(F_GETFD, F_SETLKW, F_WRLCK, F_UNLCK, struct flock) [WINDOWS32]:
	New macros.
	(RECORD_SYNC_MUTEX): New macro, a no-op for Posix platforms.
	(sync_handle_t): New typedef.

	* job.c <sync_handle>: Change type to sync_handle_t.
	(FD_NOT_EMPTY): Seek to the file's end.  Suggested by Frank
	Heckenbach <f.heckenbach@fh-soft.de>.
	(pump_from_tmp_fd) [WINDOWS32]: Switch to_fd to binary mode for
	the duration of this function, and then change back before
	returning.
	(start_job_command) [WINDOWS32]: Support output_sync mode on
	MS-Windows.  Use a system-wide mutex instead of locking
	stdout/stderr.  Call process_easy with two additional arguments:
	child->outfd and child->errfd.
	(exec_command) [WINDOWS32]: Pass two additional arguments, both
	-1, to process_easy, to adjust for the changed function signature.

	* function.c (windows32_openpipe) [WINDOWS32]: This function now
	returns an int, which is -1 if it fails and zero otherwise.  It
	also calls 'error' instead of 'fatal', to avoid exiting
	prematurely.
	(func_shell_base) [WINDOWS32]: Call perror_with_name if
	windows32_openpipe fails, now that it always returns.  This avoids
	a compiler warning that error_prefix is not used in the MS-Windows
	build.

	* config.h.W32.template (OUTPUT_SYNC): Define.

	* build_w32.bat: Add w32/compat/posixfcn.c to compilation and
	linking commands.

2013-04-20  Stefano Lattarini <stefano.lattarini@gmail.com>  (tiny change)

	* README.git: Our autoconf input file is 'configure.ac', not
	'configure.in'.  Adjust accordingly.
	* build_w32.bat: Likewise.
	* config.h-vms.template: Likewise.
	* Makefile.DOS.template: Likewise.

2013-04-16  Paul Smith  <psmith@gnu.org>

	* misc.c (open_tmpfd): Add a new function that returns a temporary
	file by file descriptor.
	(open_tmpfile): Move here from main.c.
	* job.c (assign_child_tempfiles): Use the new open_tmpfd().

2013-04-15  Paul Smith  <psmith@gnu.org>

	* makeint.h (OUTPUT_SYNC_TARGET, OUTPUT_SYNC_MAKE): Rename.
	* job.c (start_job_command): Use new constants.
	* main.c: New -O argument format.

	* doc/make.texi (Options Summary): Document the argument to -O.
	* make.1: Ditto.

	* main.c (define_makeflags): Don't add space between a single-char
	option and its argument.

2013-04-06  Paul Smith  <psmith@gnu.org>

	* doc/make.texi (Implicit Variables): Clarify LDFLAGS vs. LDLIBS.
	Fixes Savannah bug #37970.

	* remake.c (check_dep): Reconsider files waiting on prerequisites,
	as they may have finished.  Fixes Savannah bug #37703.

2013-02-28  Paul Smith  <psmith@gnu.org>

	* function.c (func_realpath): On Solaris (at least) realpath() can
	fail due to EINTR, so loop it.  Fixes Savannah bug #38420.

2013-02-25  Paul Smith  <psmith@gnu.org>

	Add a proposed supported API for GNU make loaded objects.

	* doc/make.texi (Loaded Object API): Document it.
	* Makefile.am (make_SOURCES): Add new loadapi.c.
	* dep.h: Remove eval_buffer(); moved to loadapi.c:gmk_eval().
	* read.c (eval_buffer): Change eval_buffer() signature.
	* main.c (main): Change eval_buffer() signature.
	* variable.h (define_new_function): Change func_ptr signature.
	* load.c (SYMBOL_EXTENSION): Change the extension.
	* loadapi.c: Implement the new API.
	* gnumake.h (gmk_eval): New function prototype.
	(gmk_expand) Ditto.
	(gmk_add_function) Ditto.
	* gmk-default.scm (gmk-eval): Remove: now implemented in guile.c.
	* guile.c (guile_expand_wrapper): Use gmk_expand()
	(guile_eval_wrapper): Implement eval here to avoid double-expansion.
	(guile_define_module): Define gmk-eval.
	(func_guile): Use new func_ptr calling model.
	(guile_gmake_setup): Use gmk_add_function() to declare $(guile ...)
	* function.c (function_table_entry): Provide alternative func_ptr.
	(func_eval): New signature for eval_buffer();
	(function_table_init): New initialization for function_table_entry.
	(expand_builtin_function): Support alternative invocation signature.
	(define_new_function): Ditto.

2013-01-20  Paul Smith  <psmith@gnu.org>

	* gnumake.h: New file to contain externally-visible content.
	* makeint.h: Include gnumake.h.  Move gmk_floc type to gnumake.h.
	* Makefile.am (include_HEADERS): Install the gnumake.h header.

	* makeint.h: Change struct floc to gmk_floc typedef.
	* Many: Use the new typedef.

	* make.h: Rename to makeint.h.
	* Many: Use the new name makeint.h.

2013-01-19  Paul Smith  <psmith@gnu.org>

	* doc/make.texi (load Directive): Update to discuss location of
	loaded object file.
	(Remaking Loaded Objects): Document remaking of loaded objects.

	* main.c (main): Rename READ_MAKEFILES to READ_FILES.
	* read.c: Change READ_MAKEFILES to READ_FILES since it now
	contains loaded object files as well.
	(read_all_makefiles): Ditto.
	(eval_makefile): Ditto.
	(eval): Add any loaded file to the READ_FILES list, so that it
	will be considered for re-build.

	* load.c (load_file): Return the simple filename (no symbol) in
	the LDNAME argument (now a const char **).
	This filename should no longer have "./" prepended: modify the
	function to always check the current directory if the name has no
	"/", before using the normal methods.
	* make.h: Change the load_file() prototype.

	* README.git: Add a bit more documentation on Git workflow & rules.

2013-01-13  Paul Smith  <psmith@gnu.org>

	* main.c (main): Restore all make flags after re-exec is complete.
	Fixes Savannah bug #38051.

2013-01-12  Paul Smith  <psmith@gnu.org>

	Convert CVS archive to Git.

	* configure.in: Rename to configure.ac.
	* README.cvs: Rename to README.git and rework for Git.
	* maintMakefile: Use git clean for cleanup.
	* ChangeLog: Use new Git repository URL.
	* ChangeLog.2: Ditto.
	* Makefile.am: Change documentation for Git
	* Makefile.DOS.template: Ditto.
	* README.template: Ditto.
	* build_w32.bat: Ditto.
	* prepare_w32.bat: Ditto.
	* .cvsignore: Rename to .gitignore, and change to Git format.

2012-12-08  Eli Zaretskii  <eliz@gnu.org>

	* job.c (create_batch_file): Fix last change: always increment the
	counter of batch files before trying to use it.

2012-12-07  Eli Zaretskii  <eliz@gnu.org>

	* job.c (construct_command_argv_internal): Remove " from
	sh_chars_dos[].  Ignore an escaped backslash inside a string
	quoted with "..".  This lifts the 4KB or 8KB command-line length
	limitation imposed by the Windows shells when a command uses quoted
	strings, because we now don't call the shell in that case.

	* job.c (create_batch_file): Declare the counter of batch files
	static, to avoid having 2 jobs using the same file name and
	stepping on each other's toes.  When all 64K names are used up,
	make one more loop looking for slots that became vacant.  This
	avoids leaving behind temporary batch files in the temporary
	directory, which happens frequently on a fast machine when using
	parallel builds.
	(reap_children): Add debug message for when removal of a temporary
	batch file fails.

2012-10-29  Paul Smith  <psmith@gnu.org>

	New feature: "load" directive for dynamically-loaded objects.

	* NEWS: Document new "load" directive.
	* doc/make.texi (Extending make): New chapter on extensions to make.
	* configure.in: Check for dlopen/dlsym/dlerror and -ldl.
	* Makefile.am (make_SOURCES): Add new file load.c.
	* make.h: Prototype for load_file().
	* main.c (main): Add "load" to .FEATURES if it's available.
	* read.c (eval): Parse "load" and "-load" directives.

2012-09-29  Paul Smith  <psmith@gnu.org>

	* configure.in: Require a new version of gettext (1.18.1).
	Fixes Savannah bug #37307.

2012-09-09  Paul Smith  <psmith@gnu.org>

	* configure.in (bsd_signal): Define _GNU_SOURCE, a la make.h.
	Fixes Savannah bug #32247.

	* remake.c (update_file_1): Force intermediate files to be
	considered, not pruned, if their non-intermediate parent needs to
	be remade.  Fixes Savannah bug #30653.

	* job.c (construct_command_argv_internal): Keep the command line
	on the heap for very long lines.  Fixes Savannah bug #36451.

	* function.c (func_realpath): BSD realpath(3) doesn't fail if the
	file does not exist: use stat.  Fixes Savannah bug #35919.

	* file.c (expand_deps): Duplicate the current variable buffer, not
	the old pointer.  Fixes Savannah bug #36925.

	* read.c (eval): If we detect an initial UTF-8 BOM, skip it.
	Fixes Savannah bug #36529.
	(record_target_var): Remove unused variable "fname".
	(eval): Use the correct pointer when adding to the variable buffer.
	Fixes Savannah bug #36106.

2012-09-09  Eli Zaretskii  <eliz@gnu.org>

	* read.c (unescape_char): Fix a thinko in the last change.

2012-09-09  Paul Smith  <psmith@gnu.org>

	* default.c (default_variables): Use a correct default LIBPPATERNS
	for MacOS.  Fixes Savannah bug #37197.

	* read.c (record_files): Reset the default macro values if .POSIX
	is set.  Fixes Savannah bug #37069.
	(parse_file_seq): Break out of an infinite loop if we're not
	making progress when parsing archive references.

2012-09-01  Eli Zaretskii  <eliz@gnu.org>

	* README.W32.template: Update for job-server and Guile support.

	* read.c (unescape_char): Advance 'p' after copying the unescaped
	characters.  Otherwise the backslashes are incorrectly erased from
	the original string.

2012-03-05  Paul Smith  <psmith@gnu.org>

	Update copyright notices to use year ranges, as allowed by
	clarifications in the GNU Maintainer's Manual.

2012-03-04  Paul Smith  <psmith@gnu.org>

	* read.c (unescape_char): New function to remove escapes from a char.
	(record_files): Call it on the dependency string to unescape ":".
	Fixes Savannah bug #12126 and bug #16545.

	* make.h (CSTRLEN): Determine the length of a constant string.
	* main.c: Use the new macro.
	* read.c: Ditto.
	* variable.h: Ditto.
	* function.c: Simplify checks for function alternatives.

	* expand.c (variable_append): If the current set is local and the
	next one is not a parent, then treat the next set as
	local as well.  Fixes Savannah bug #35468.

2012-03-03  Paul Smith  <psmith@gnu.org>

	* acinclude.m4 (AC_STRUCT_ST_MTIM_NSEC): Add support for AIX 5.2+
	nanosecond timestamps.  Fixes Savannah bug #32485.

	Convert uses of `foo' for quoting to 'foo' to reflect changes in
	the GNU Coding Standards.  Fixes Savannah bug #34530.

	* job.c (construct_command_argv_internal): In oneshell we need to
	break the SHELLFLAGS up for argv.  Fixes Savannah bug #35397.

	* function.c (func_filter_filterout): Recompute the length of each
	filter word in case it was compressed due to escape chars.  Don't
	reset the string as it's freed.  Fixes Savannah bug #35410.

	* misc.c (collapse_continuations): Only use POSIX-style
	backslash/newline handling if the .POSIX target is set.
	Addresses Savannah bug #16670 without backward-incompatibility.
	* NEWS: Document behavior change.
	* doc/make.texi (Splitting Lines): New section describing how to
	use backslash/newline to split long lines.

2012-02-26  Paul Smith  <psmith@gnu.org>

	* implicit.c (pattern_search): Check the stem length to avoid
	stack overflows in stem_str.  Fixes Savannah bug #35525.

2012-02-03  Eli Zaretskii  <eliz@gnu.org>

	* w32/subproc/sub_proc.c (proc_stdin_thread, proc_stdout_thread)
	(proc_stderr_thread, process_pipe_io): Ifdef away unused
	functions.

	* w32/subproc/w32err.c (map_windows32_error_to_string) [_MSC_VER]:
	Don't use TLS storage for szMessageBuffer.  Ifdef away special
	code for handling Winsock error codes.  Make the function return a
	`const char *'.  Suggested by Ozkan Sezer.  Fixes Savannah bug #34832.

2012-01-29  Paul Smith  <psmith@gnu.org>

	* gmk-default.scm (to-string-maybe): Variables map to empty strings.
	In Guile 2.0, (define ...) results in a variable object so make
	sure that maps to an empty string in make.

	* variable.c (parse_variable_definition): New POSIX assignment ::=
	Take a struct variable to return more information after parsing.
	(assign_variable_definition): New parse_variable_definition() call.
	* variable.h: New declaration of parse_variable_definition().
	* read.c (do_define): New parse_variable_definition() call.
	(parse_var_assignment): Ditto.
	(get_next_mword): Parse ::= as a variable assignment.
	* doc/make.texi (Flavors): Describe the new ::= syntax.
	* NEWS: Mention the ::= operator.

	* variable.h (struct variable): Rearrange elts to reduce struct size.

	* function.c (func_file): Create a new function, $(file ...)
	* doc/make.texi (File Function): Document the $(file ..) function.
	* NEWS: Announce it.

	* gmk-default.scm (to-string-maybe): Use a more portable way to
	test for unprintable characters.
	* configure.in [GUILE]: Guile 1.6 doesn't have pkg-config
	* build_w32.bat: Ditto.

2012-01-28  Eli Zaretskii  <eliz@gnu.org>

	* config.h.W32.template: Update from config.h.in.

	Support a Windows build with Guile.

	* README.W32.template: Update with instructions for building with
	Guile.

	* build_w32.bat: Support building with Guile.

	* make.h [HAVE_STDINT_H]: Include stdint.h.

	* main.c (main, clean_jobserver): Move declarations of variables
	not used in the WINDOWS32 build to the #else branch, to avoid
	compiler warnings.

	Fix failures on MS-Windows when Make's standard handles are invalid.
	This can happen when Make is invoked from a GUI application.

	* w32/subproc/sub_proc.c (process_init_fd): Don't dereference
	pproc if it is a NULL pointer.
	(process_begin, process_cleanup): Don't try to close pipe handles
	whose value is INVALID_HANDLE_VALUE.
	(process_easy): Initialize hIn, hOut, and hErr to
	INVALID_HANDLE_VALUE.  If DuplicateHandle fails with
	ERROR_INVALID_HANDLE, duplicate a handle for the null device
	instead of STD_INPUT_HANDLE, STD_OUTPUT_HANDLE or
	STD_ERROR_HANDLE.  Don't try to close pipe handles whose value is
	INVALID_HANDLE_VALUE.

	* function.c (windows32_openpipe): Initialize hIn and hErr to
	INVALID_HANDLE_VALUE.  If DuplicateHandle fails with
	ERROR_INVALID_HANDLE, duplicate a handle for the null device
	instead of STD_INPUT_HANDLE or STD_ERROR_HANDLE.  Fix indentation.
	Don't try to close handles whose value is INVALID_HANDLE_VALUE.

2012-01-25  Eli Zaretskii  <eliz@gnu.org>

	* function.c (define_new_function): Fix format strings in calls to
	`fatal'.

2012-01-17  Paul Smith  <psmith@gnu.org>

	* guile.c (func_guile): Handle NULL returns from Guile.

2012-01-16  Paul Smith  <psmith@gnu.org>

	* make.h (PATH_SEPARATOR_CHAR): Allow resetting for crosscompiling
	for Windows.  Patch by Chris Sutcliffe <ir0nh34d@gmail.com>
	Fixes Savannah bug #34818.

2012-01-15  Paul Smith  <psmith@gnu.org>

	* variable.h: Prototype an interface for defining new make functions.
	* function.c (define_new_function): Define it.
	(func_guile): Remove the "guile" function.
	(function_table_init): Ditto.
	* guile.c (func_guile): Add the "guile" function here.
	(setup_guile): Call define_new_function() to define it.
	(guile_eval_string): Obsolete.

	* all: Update copyright notices.

2012-01-12  Paul Smith  <psmith@gnu.org>

	Support GNU Guile as an embedded extension language for GNU make.

	* NEWS: Note the new Guile capability.
	* Makefile.am (EXTRA_DIST, make_SOURCES): Add new guile source files.
	(AM_CFLAGS): Add Guile compiler flags.
	(guile): Add a rule for converting default SCM into a C header.
	* configure.in: Add support for --with-guile.
	Also, convert the entire file to properly escaped autoconf m4, and
	utilize newer features such as AS_IF() and AS_CASE().
	* doc/make.texi (Guile Function): Document the GNU guile integration.
	* make.h (guile_eval_string, guile_boot): Prototypes for Guile.
	* main.c (main): Run guile_boot() to handle main().
	(real_main): All the previous content of main() is here.
	(real_main): Add "guile" to the .FEATURES variable.
	* function.c (func_guile): Call Guile.
	* guile.c: New file implementing GNU make integration with GNU Guile.
	* gmk-default.scm: The integration of GNU make with Guile uses
	Guile itself for much of the parsing and conversion of return
	types, etc.  This implementation is embedded into GNU make.
	* config.h-vms.template: Disable Guile support.
	* config.h.W32.template: Ditto.
	* configh.dos.template: Ditto.
	* config.ami.template: Ditto.
	* makefile.vms: Add new Guile files.
	* Makefile.DOS.template: Ditto.
	* Makefile.ami: Ditto.
	* NMakefile.template: Ditto.
	* SMakefile.template: Ditto.
	* build_w32.bat: Ditto.
	* dosbuild.bat: Ditto.
	* make_msvc_net2001.vcproj: Ditto.

2011-11-15  Paul Smith  <psmith@gnu.org>

	* main.c (main): Use %ld when printing DWORD values.
	* job.c (new_job): Ditto.
	* w32/include/sub_proc.h: Use const.
	* w32/subproc/sub_proc.c (open_jobserver_semaphore): Use const.
	Fixes Savannah bug #34830.  Changes suggested by Ozkan Sezer.

	* configure.in (MAKE_JOBSERVER): Enable jobserver on W32 systems.
	* config.h.W32.template (MAKE_JOBSERVER): Ditto.

2011-11-14  Paul Smith  <psmith@gnu.org>

	* read.c (eval): parse_file_seq() might shorten the string due to
	backslash removal.  Start parsing again at the colon.
	Fixes Savannah bug #33399.

2011-11-13  Paul Smith  <psmith@gnu.org>

	* file.c (file_timestamp_cons): Match up data types to avoid warnings.
	* filedef.h: Ditto.
	* misc.c (concat): Ditto.
	* read.c (eval): Assign value to avoid warnings.
	* function.c (func_shell_base): Use fork() instead of vfork() to
	avoid warnings.
	* make.h (INTEGER_TYPE_SIGNED): Use <=0 to avoid warnings.
	Fixes Savannah bug #34608.

	* job.c (construct_command_argv): Remove _p.
	(construct_command_argv_internal): Remove _ptr.
	Fixes Savannah bug #32567.

	* main.c (clean_jobserver): Don't write the free token to the pipe.
	Change suggested by Tim Newsome <tnewsome@aristanetworks.com>

	* acinclude.m4 (AC_STRUCT_ST_MTIM_NSEC): Add support for Darwin.
	* filedef.h (FILE_TIMESTAMP_STAT_MODTIME): Ditto.
	Patch provided by Troy Runkel <Troy.Runkel@mathworks.com>

2011-10-11  Troy Runkel  <Troy.Runkel@mathworks.com>

	* config.h.W32: Enable job server support for Windows.
	* main.c [WINDOWS32]: Include sub_proc.h
	(main): Create a named semaphore to implement the job server.
	(clean_jobserver): Free the job server semaphore when make is finished.
	* job.c [WINDOWS32]: Define WAIT_NOHANG
	(reap_children): Support non-blocking wait for child processes.
	(free_child): Release job server semaphore when child process finished.
	(job_noop): Don't define function on Windows.
	(set_child_handler_action_flags): Don't define function on Windows.
	(new_job): Wait for job server semaphore or child process termination.
	(exec_command): Pass new parameters to process_wait_for_any.
	* w32/include/sub_proc.h [WINDOWS32]: New/updated EXTERN_DECL entries.
	* w32/subproc/sub_proc.c [WINDOWS32]: Added job server implementation.
	(open_jobserver_semaphore): Open existing job server semaphore by name.
	(create_jobserver_semaphore): Create new job server named semaphore.
	(free_jobserver_semaphore): Close existing job server semaphore.
	(acquire_jobserver_semaphore): Decrement job server semaphore count.
	(release_jobserver_semaphore): Increment job server semaphore count.
	(has_jobserver_semaphore): Returns whether job server semaphore exists.
	(get_jobserver_semaphore_name): Returns name of job server semaphore.
	(wait_for_semaphore_or_child_process): Wait for either the job server
	semaphore to become signalled or a child process to terminate.
	(process_wait_for_any_private): Support for non-blocking wait for child.
	(process_wait_for_any): Added support for non-blocking wait for child.
	(process_file_io): Pass new parameters to process_wait_for_any_private.

2011-09-18  Paul Smith  <psmith@gnu.org>

	* main.c (main): If we're re-exec'ing and we're the master make,
	then restore the job_slots value so it goes back into MAKEFLAGS
	properly.  See Savannah bug #33873.

	* remake.c (library_search): STD_DIRS is computed when other
	static vars like buflen etc. are computed, so it must be static
	as well.  See Savannah bug #32511.

2011-09-16  Paul Smith  <psmith@gnu.org>

	* maintMakefile (do-po-update): Apparently we have to avoid
	certificate checks on the http://translationproject.org site now.

2011-09-12  Paul Smith  <psmith@gnu.org>

	* read.c (eval): Ensure exported variables are defined in the
	global scope.  Fixes Savannah bug #32498.

2011-09-11  Paul Smith  <psmith@gnu.org>

	* Makefile.am (dist-hook): Remove w32/Makefile and .deps/ from the
	dist file.  Fixes Savannah bug #31489.

	* doc/make.texi (Complex Makefile): Add a hint about using
	#!/usr/bin/make (for Savannah support request #106459)

2011-09-02  Paul Smith  <psmith@gnu.org>

	* remake.c (touch_file): If we have both -n and -t, -n takes
	precedence.  Patch from Michael Witten <mfwitten@gmail.com>

2011-08-29  Paul Smith  <psmith@gnu.org>

	* expand.c (variable_expand_string): Always allocate a new buffer
	for a string we're expanding.  The string we're working on can get
	freed while we work on it (for example if it's the value of a
	variable which modifies itself using an eval operation).
	See Savannah patch #7534 for the original report by Lubomir Rintel.

2011-06-12  Paul Smith  <psmith@gnu.org>

	* read.c (parse_file_seq): Move the check for empty members out of
	the loop so we can go to the next member properly.
	Another fix for Savannah bug #30612.

	* config.h-vms.template: Newer versions of VMS have strncasecmp()
	Patch provided by: Hartmut Becker <becker.ismaning@freenet.de>

2011-05-07  Paul Smith  <psmith@gnu.org>

	* expand.c (variable_append): Add a LOCAL argument to track
	whether this is the first invocation or not.  If it's not and
	private_var is set, then skip this variable and try the next one.
	Fixes Savannah bug #32872.

	* read.c (parse_file_seq): Ensure existence checks use glob().

2011-05-07  Eli Zaretskii  <eliz@gnu.org>

	* job.c (construct_command_argv_internal): Don't assume shellflags
	is always non-NULL.  Escape-protect characters special to the
	shell when copying the value of SHELL into new_line.  Fixes
	Savannah bug #23922.

2011-05-02  Paul Smith  <psmith@gnu.org>

	* doc/make.texi (Special Variables): Add documentation for the new
	words in .FEATURES.  Fixes Savannah bug #32058.
	(Flavor Function): Rewrite the section on the flavor function.
	Fixes Savannah bug #31582.

	* function.c (func_sort): Use the same algorithm to count the
	number of words we will get after the split, as we use to split.
	Based on a patch from Matthias Hopf.  Fixes Savannah bug #33125.

	* make.h: Make global variable stack_limit extern.
	Fixes Savannah bug #32753.

2011-05-01  Paul Smith  <psmith@gnu.org>

	* read.c (parse_file_seq): Don't try to invoke glob() unless there
	are potential wildcard characters in the filename.  Performance
	enhancement suggested by Michael Meeks <michael.meeks@novell.com>

2011-04-29 Boris Kolpackov  <boris@codesynthesis.com>

	* read.c (eval_makefile): Delay caching of the file name until after
	all the expansions and searches.

2011-04-17  David A. Wheeler  <dwheeler@dwheeler.com>

	* doc/make.texi (Reading Makefiles): Document "!=".
	(Setting): Ditto.
	(Features): Ditto.
	* variable.h (enum variable_flavor): New type "f_shell".
	* variable.c (shell_result): Send a string to the shell and store
	the output.
	(do_variable_definition): Handle f_shell variables: expand the
	value, then send it to the shell and store the result.
	(parse_variable_definition): Parse "!=" shell assignments.
	* read.c (get_next_mword): Treat "!=" as a varassign word.
	* function.c (fold_newlines): If trim_newlines is set remove all
	trailing newlines; otherwise remove only the last newline.
	(func_shell_base): Move the guts of the shell function here.
	(func_shell): Call func_shell_base().

2011-02-21  Paul Smith  <psmith@gnu.org>

	* strcache.c (various): Increase performance based on comments
	from Ralf Wildenhues <Ralf.Wildenhues@gmx.de>.  Stop looking for
	a buffer when we find the first one that fits, not the best fit.
	If there is not enough free space in a buffer move it to a
	separate list so we don't have to walk it again.
	* make.h (NDEBUG): Turn off asserts unless maintainer mode is set.
	(strcache_add_len, strcache_setbufsize): Use unsigned length/size.
	* maintMakefile (AM_CPPFLAGS): Enable MAKE_MAINTAINER_MODE.

	* remake.c (complain): Move translation lookups closer to use.

2011-02-13  Paul Smith  <psmith@gnu.org>

	* doc/make.texi: Clean up references to "static" variables and
	semicolon errors.  Patch from Michael Witten <mfwitten@gmail.com>.

2010-12-27  Paul Smith  <psmith@gnu.org>

	* make.1: Update the header/footer info in the man page.

2010-11-28  Paul Smith  <psmith@gnu.org>

	* read.c (record_target_var): Don't reset v if it's the same as
	the global version.  Fixes Savannah bug #31743.

2010-11-06  Paul Smith  <psmith@gnu.org>

	* variable.c (print_auto_variable): Print auto variables; ignore others.
	(print_noauto_variable): Print non-auto variables; ignore others.
	(print_variable_set): Allow the caller to select which type to print.
	(print_target_variables): Show all the non-auto variables for a target.

	* default.c (install_default_suffix_rules): Initialize recipe_prefix.
	* rule.c (install_pattern_rule): Ditto.
	* read.c (record_files): Pass in the current recipe prefix.  Remember
	it in the struct command for these targets.
	(eval): Remember the value of RECIPEPREFIX when we start parsing.
	Do not remove recipe prefixes from the recipe here: we'll do it later.
	* job.c (start_job_command): Remove recipe prefix characters early,
	before we print the output or chop it up.
	* file.c (print_file): If recipe_prefix is not standard, reset it
	in -p output.  Assign target variables in -p output as well.

	* commands.c (chop_commands): Max command lines is USHRT_MAX.
	Set any_recurse as a bitfield.
	* make.h (USHRT_MAX): Define if not set.

2010-10-27  Paul Smith  <psmith@gnu.org>

	* commands.h (struct commands): Rearrange to make better use of
	memory.  Add new recipe_prefix value.

2010-10-26  Paul Smith  <psmith@gnu.org>

	* doc/make.texi (Setting): Document the treatment of
	backslash-newline in variable values.
	* misc.c (collapse_continuations): Do not collapse multiple
	backslash-newlines into a single space.  Fixes Savannah bug #16670.

2010-08-29  Paul Smith  <psmith@gnu.org>

	* doc/make.texi (Implicit Variables): Document LDLIBS and LOADLIBES.
	Fixes Savannah bug #30807.
	(Instead of Execution): Mention that included makefiles are still
	rebuilt even with -n.  Fixes Savannah bug #30762.

	* configure.in: Bump to 3.82.90.

	* make.h: Add trace_flag variable.
	* main.c (switches): Add --trace option.
	(trace_flag): Declare variable.
	* job.c (start_job_command): Show recipe if trace_flag is set.
	(new_job): Show trace messages if trace_flag is set.
	* doc/make.texi (Options Summary): Document the new --trace option.
	* make.1: Add --trace documentation.
	* NEWS: Mention --trace.

	* job.c	(child_error): Show recipe filename/linenumber on error.
	Also show "(ignored)" when appropriate even for signals/coredumps.
	* NEWS: Mention file/linenumber change.

	* main.c (main): Print version info when DB_BASIC is set.

	* job.c (construct_command_argv_internal): If shellflags is not
	set, choose an appropriate default value.  Fixes Savannah bug #30748.

2010-08-27  Eli Zaretskii  <eliz@gnu.org>

	* variable.c (define_automatic_variables) [__MSDOS__ || WINDOWS32]:
	Remove trailing backslashes in $(@D), $(<D), etc., for consistency
	with forward slashes.  Fixes Savannah bug #30795.

2010-08-13  Paul Smith  <psmith@gnu.org>

	* NEWS: Accidentally forgot to back out the sorted wildcard
	enhancement in 3.82, so update NEWS.
	Also add NEWS about the error check for explicit and pattern
	targets in the same rule, added to 3.82.

	* main.c (main): Add "oneshell" to $(.FEATURES) (forgot to add
	this in 3.82!)

	* read.c (parse_file_seq): Fix various errors parsing archives
	with multiple objects in the parenthesis, as well as wildcards.
	Fixes Savannah bug #30612.

2010-08-10  Paul Smith  <psmith@gnu.org>

	* main.c (main): Expand MAKEFLAGS before adding it to the
	environment when re-exec'ing.  Fixes Savannah bug #30723.

2010-08-07  Eli Zaretskii  <eliz@gnu.org>

	* w32/subproc/build.bat: Make all 3 cl.exe compile command lines
	use the same /I switches.  Fixes Savannah bug #30662.

	* function.c (func_shell) [WINDOWS32]: Reset just_print_flag
	around the call to construct_command_argv, so that a temporary
	batch file _is_ created when needed for $(shell).
	Fixes Savannah bug #16362.

2010-08-07 Juan Manuel Guerrero  <juan.guerrero@gmx.de>

	* configh.dos.template (HAVE_STRNCASECMP): Define.

2010-07-28  Paul Smith  <psmith@gnu.org>

	Version 3.82 released.

	* configure.in: Change release version.
	* NEWS: Change the date.

	* read.c (parse_file_seq): Remove GLOB_NOSORT for
	backward-compatibility.  We'll add it back in next release.
	* NEWS: Note it.

2010-07-24  Eli Zaretskii  <eliz@gnu.org>

	* job.c (pid2str) [WINDOWS32]: Fix CPP conditionals for using %Id
	format.

2010-07-18  Paul Smith  <psmith@gnu.org>

	* configure.in: Switch bsd_signal to AC_CHECK_DECLS() to make sure
	we have a declaration.  Fixes Savannah bug #25713 (maybe?)
	* doc/make.texi (Complex Makefile): Cleanup variable assignments.
	(One Shell): New subsection for the .ONESHELL special target.

	Patches by Ozkan Sezer <sezeroz@gmail.com>:

	* misc.c (strncasecmp): Local implementation for systems without.
	* config.h.W32.template (HAVE_STRNICMP): Define on Windows.
	* configure.in: Check for strncasecmp/strncmpi/strnicmp.
	* job.c [WINDOWS32]: Don't define dup2 on Windows.
	(pid2str): Use "%Id" even with MSVC
	(exec_command): Cast to pid_t when calling pid2str().
	* w32/subproc/sub_proc.c [WINDOWS32]: Include config.h first.
	Use stddef.h on MSVC to get intptr_t.
	* w32/subproc/misc.c [WINDOWS32]: Include config.h first.
	* w32/compat/dirent.c [WINDOWS32]: Include config.h first.
	(readdir): Cast -1 to correct type for d_ino.
	* w32/pathstuff.c [WINDOWS32]: Ensure make.h is included first.
	* make.h [WINDOWS32]: Don't prototype alloca() on Windows.
	Add configuration for strncasecmp().
	* main.c (ADD_SIG) [WINDOWS32]: Avoid warnings in MSVC.
	* config.h.W32.template [WINDOWS32]: Don't warn on unsafe
	functions or variables.
	* NMakefile.template [WINDOWS32]: Remove /MACHINE:I386.
	* main.c (clean_jobserver): Cast due to MSVC brokenness.
	(decode_switches): Ditto.
	* vpath.c (construct_vpath_list): Ditto.
	* rule.c (freerule): Ditto.
	* ar.c (ar_glob): Ditto.

2010-07-16  Boris Kolpackov  <boris@codesynthesis.com>

	* misc.c (concat): Fix buffer overrun.

2010-07-12  Paul Smith  <psmith@gnu.org>

	Update copyrights to add 2010.

	* build_w32.bat: Support for MSVC Windows x86_64 builds.
	* job.c: Don't define execve() on MSVC/64bit.
	Patch by Viktor Szakats.  Fixes Savannah bug #27590.

2010-07-12  Eli Zaretskii  <eliz@gnu.org>

	* make.h (alloca) [!__GNUC__]: Don't define prototype.
	(int w32_kill): Use pid_t for process ID argument.
	Fixes Savannah bug #27809.

2010-07-12  Paul Smith  <psmith@gnu.org>

	Integrated new .ONESHELL feature.
	Patch by David Boyce <dsb@boyski.com>.  Modified by me.

	* NEWS: Add a note about the new feature.
	* job.c (is_bourne_compatible_shell): Determine whether we're
	using a standard POSIX shell or not.
	(start_job_command): Accept '-ec' as POSIX shell flags.
	(construct_command_argv_internal): If one_shell is set and we are
	using a POSIX shell, remove "interior" prefix characters such as
	"@", "+", "-".  Also treat "\n" as a special character when
	choosing the slow path, if ONESHELL is set.
	* job.h (is_bourne_compatible_argv): Define the new function.

	* make.h (one_shell): New global variable to remember setting.
	* main.c: Declare it.
	* read.c (record_files): Set it.
	* commands.c (chop_commands): If one_shell is set, don't chop
	commands into multiple lines; just keep one line.

2010-07-09  Eli Zaretskii  <eliz@gnu.org>

	* w32/subproc/sub_proc.c: Include stdint.h.
	(sub_process_t): Use intptr_t for file handles and pid_t for
	process ID.
	(process_pipes, process_init_fd, process_begin): Use intptr_t for
	file handles and pid_t for process ID.  Fixes Savannah bug #27809.
	Patch by Ozkan Sezer <sezeroz@gmail.com>

	* function.c (abspath): Support absolute file names in UNC format.
	Fixes Savannah bug #30312.

	* job.c (pid2str) [WINDOWS32]: Don't use %Id with GCC < 4.x.
	(exec_command) [WINDOWS32]: Use pid2str instead of non-portable
	%Id.

	* main.c (handle_runtime_exceptions): Use %p to print addresses,
	to DTRT on both 32-bit and 64-bit hosts.  Savannah bug #27809.

	* job.c (w32_kill, start_job_command, create_batch_file): Use
	pid_t for process IDs and intptr_t for the 1st arg of
	_open_osfhandle.
	* function.c (windows32_openpipe): Use pid_t for process IDs and
	intptr_t for the 1st arg of _open_osfhandle.
	(func_shell): Use pid_t for process IDs.
	* main.c (main) [WINDOWS32]: Pacify the compiler.
	* config.h.W32.template (pid_t): Add a definition for 64-bit
	Windows builds that don't use GCC.  Fixes Savannah bug #27809.
	Patch by Ozkan Sezer <sezeroz@gmail.com>

2010-07-07  Paul Smith  <psmith@gnu.org>

	* configure.in: Bump to a new prerelease version 3.81.91.

2010-07-06  Paul Smith  <psmith@gnu.org>

	* main.c (main): Set a default value of "-c" for .SHELLFLAGS.
	* NEWS: Mention the new behavior of .POSIX and the new .SHELLFLAGS
	variable.
	* job.c (construct_command_argv): Retrieve the .SHELLFLAGS value
	and pass it to construct_command_argv_internal().
	(construct_command_argv_internal): If .SHELLFLAGS is non-standard
	use the slow path.  Use that value instead of hard-coded "-c".

2010-07-05  Paul Smith  <psmith@gnu.org>

	* implicit.c (pattern_search): lastslash can be const.
	* dir.c (downcase): Remove unused variable.
	* hash.c (hash_init): Cast sizeof for error message.
	* arscan.c (ar_scan): Cast to char* for WINDOWS32.
	(ar_member_touch): Ditto.
	* ar.c (glob_pattern_p): Avoid symbol collision: open -> opened
	* signame.c (strsignal): Ditto: signal -> sig
	* job.c (create_batch_file): Ditto: error -> error_string
	(pid2str): Portably convert a pid_t into a string
	(reap_children): Use it.
	(start_waiting_job): Use it.
	Savannah bug #27809.  Patch by Ozkan Sezer <sezeroz@gmail.com>

2010-07-03  Paul Smith  <psmith@gnu.org>

	* read.c (parse_file_seq): All archive groups must end with ')' as
	the LAST character in a word.  If there is no word ending in ')'
	then it's not an archive group.  Fixes Savannah bug #28525.

2010-07-01  Paul Smith  <psmith@gnu.org>

	* main.c (main): Append optional features using separate calls.
	Not as efficient but not all compilers allow conditionals inside
	macro calls.  Fixes Savannah bug #29244.

2010-01-10  Paul Smith  <psmith@gnu.org>

	* make.h (patheq): Rename strieq() to patheq() for clarity.
	* dir.c (dir_contents_file_exists_p): Use it.

	* dir.c (file_impossible): Convert xmalloc/memset to xcalloc.
	* file.c (enter_file): Ditto.
	* job.c (new_job): Ditto.

2009-12-11  Eli Zaretskii  <eliz@gnu.org>

	* job.c (construct_command_argv_internal) <sh_cmds_dos>
	[WINDOWS32]: Add "echo." and a few more commands that are built
	into cmd.exe.  Fixes Savannah bug #28126.

	* file.c (lookup_file) [HAVE_DOS_PATHS]: Treat '\\' like we do
	with '/'.

2009-11-15  Paul Smith  <psmith@gnu.org>

	Patches for VMS provided by Hartmut Becker <Hartmut.Becker@hp.com>

	* vmsjobs.c (ctrlYPressed) [VMS]: Deal with CTRL-Y.
	(vmsHandleChildTerm) [VMS]: Ditto.
	(astYHandler) [VMS]: Ditto.
	(tryToSetupYAst) [VMS]: Ditto.
	(child_execute_job) [VMS]: Ditto.

	* vmsify.c (trnlog) [VMS]: Fix const errors.
	(vmsify) [VMS]: Ditto.

	* readme.vms [VMS]: Update with notes for 3.82.

	* job.h (comname) [VMS]: Remember the temporary command filename

	* dir.c (vmsify) [VMS]: Fix const errors.
	(vms_hash) [VMS]: Ditto.
	(vmsstat_dir) [VMS]: Ditto.
	(find_directory) [VMS]: Fix case-insensitive option for VMS
	(dir_contents_file_exists_p) [VMS]: Ditto.
	(file_impossible) [VMS]: Ditto.

	* config.h-vms.template (HAVE_FDOPEN) [VMS]: Have it.
	(HAVE_STRCASECMP) [VMS]: Ditto.

	* arscan.c (VMS_get_member_info) [VMS]: Fix timezone computation.
	(ar_scan) [VMS]: Fix const error.

2009-11-12  Boris Kolpackov  <boris@codesynthesis.com>

	* vpath.c (vpath_search, selective_vpath_search): Add index arguments
	which allows the caller to get the index of the matching directory.

	* make.h (vpath_search): Update prototype.

	* remake.c (library_search): Implement linker-compatible library
	search. Use the new VPATH_SEARCH index functionality to keep track
	of the directory index for each match. Select the match with the
	lowest directory index.

	* implicit.c (pattern_search): Pass NULL for the index arguments in
	the VPATH_SEARCH call.

	* doc/make.texi (Directory Search for Link Libraries): Describe the
	new search behavior.

	* NEWS: Add a note about the new behavior.

2009-10-25  Paul Smith  <psmith@gnu.org>

	* AUTHORS, et.al.: Update copyright years.

	* implicit.c (stemlen_compare): Fix qsort() compare bug that
	caused implicit rules with equal stem lengths to be sorted
	indeterminately.

2009-10-24  Paul Smith  <psmith@gnu.org>

	* main.c (usage): Add --eval to the usage string.
	(switches): Add the --eval switch.
	(main): If --eval is given, add them to the simply-expanded variable
	-*-eval-flags-*- (necessary to allow recursion to work properly).
	(define_makeflags): Add -*-eval-flags-*- to MAKEFLAGS.

	* NEWS: Describe the new --eval command line argument.
	* doc/make.texi (Options Summary): Document --eval.

	* dep.h: eval_buffer() returns void.
	* read.c (eval_buffer): Ditto.
	(eval): Ditto.

	* variable.h (define_variable_cname): New macro for constant
	variable names.
	* default.c (set_default_suffixes): Use it.
	* main.c (main): Ditto.
	(handle_non_switch_argument): Ditto.
	(define_makeflags): Ditto.
	* read.c (read_all_makefiles): Ditto.
	* variable.c (define_automatic_variables): Ditto.

	* commands.c (dep_hash_cmp): Avoid casts.
	(dep_hash_1): Ditto.
	(dep_hash_2): Ditto.

2009-10-22  Boris Kolpackov  <boris@codesynthesis.com>

	* read.c (read_all_makefiles): Mark the default makefile dependency
	dontcare.

2009-10-07  Boris Kolpackov  <boris@codesynthesis.com>

	* read.c (do_undefine): Free the expanded variable name.

	* commands.c (dep_hash_cmp, set_file_variables): Move the order-only
	to normal upgrade logic from  dep_hash_cmp to set_file_variables.

2009-10-06  Boris Kolpackov  <boris@codesynthesis.com>

	* dep.h (uniquize_deps): Remove.

	* read.c (uniquize_deps): Merge into set_file_variables in
	commands.c.
	(dep_hash_1, dep_hash_2, dep_hash_cmp): Move to commands.c.

	* commands.c (set_file_variables): Avoid modifying the dep
	chain to achieve uniqueness. Fixes savannah bug 25780.

	* implicit.c (pattern_search): Instead of re-setting all automatic
	variables for each rule we try, just update $*.

2009-10-06  Boris Kolpackov  <boris@codesynthesis.com>

	* variable.h (undefine_variable_in_set): New function declaration.
	(undefine_variable_global): New macro.

	* variable.c (undefine_variable_in_set): New function implementation.

	* read.c (vmodifiers): Add undefine_v modifier.
	(parse_var_assignment): Parse undefine.
	(do_undefine): Handle the undefine directive.
	(eval): Call do_undefine if undefine_v is set.

	* main.c (.FEATURES): Add a keyword to indicate the new feature.

	* doc/make.texi (Undefine Directive): Describe the new directive.

	* NEWS: Add a note about the new directive.

2009-10-05  Boris Kolpackov  <boris@codesynthesis.com>

	* implicit.c (pattern_search): Initialize file variables only
	if we need to parse a rule that requires the second expansion.

2009-10-03  Paul Smith  <psmith@gnu.org>

	* make.h: Include <alloca.h> even on systems where __GNUC__ is
	defined.  Not sure why it was done the other way.
	Requested by David Boyce <dsb@boyski.com>.

2009-09-30  Boris Kolpackov  <boris@codesynthesis.com>

	* dep.h (dep): Add the DONTCARE bitfield.

	* filedef.h (file):Add the NO_DIAG bitfield.

        * read.c (eval_makefile): Set the DONTCARE flag in struct dep,
	not struct file (a file can be a dependency of many targets,
	some don't care, some do).

	* remake.c (update_goal_chain): Propagate DONTCARE from struct
	dep to struct file before updating the goal and restore it
	afterwards.
	(update_file): Don't prune the dependency graph if this target
	has failed but the diagnostics hasn't been issued.
	(complain): Scan the file's dependency graph to find the file
	that caused the failure.
	(update_file_1): Use NO_DIAG instead of DONTCARE to decide
	whether to print diagnostics.

	Fixes Savannah bugs #15110, #25493, #12686, and #17740.

2009-09-28  Paul Smith  <psmith@gnu.org>

	* doc/make.texi (Pattern Intro): Move the match algorithm
	discussion into the "Pattern Match" node.
	(Pattern Match): Expand on the pattern rule matching algorithm.

2009-09-28  Andreas Buening  <andreas.buening@nexgo.de>

	* job.c (construct_command_argv_internal) [OS2]: Don't eat too
	much of the command line on a single pass.

2009-09-28  Boris Kolpackov  <boris@codesynthesis.com>

	* varible.c (create_pattern_var): Insert variables into the
	PATTERN_VARS list in the shortest patterns first order.

	* implicit.c (tryrule): Add STEMLEN and ORDER members. These are
	used to sort the rules.
	(stemlen_compare): Compare two tryrule elements.
	(pattern_search): Sort the rules so that they are in the shortest
	stem first order.

	* main.c (.FEATURES): Add a keyword to indicate the new behavior.

	* doc/make.texi (Pattern-specific Variable Values): Describe the
	new pattern-specific variables application order.
	(Introduction to Pattern Rules): Describe the new pattern rules
	search order.

	* NEWS: Add a note about the new behavior.

2009-09-27  Paul Smith  <psmith@gnu.org>

	* doc/make.texi (Double-Colon): Mention that pattern rules with
	double-colons have a different meaning.  Savannah bug #27497.

2009-09-27  Juan Manuel Guerrero  <juan.guerrero@gmx.de>

	* configh.dos.template: Remove unconditional definition of
	SYS_SIGLIST_DECLARED.
	Include <sys/version.h> because ports of GCC 4.3.0 and later no
	longer include it, so macros like __DJGPP_MINOR__ are no longer
	defined automatically.

	* Makefile.DOS.template (INCLUDES): Use $(prefix) and the
	corresponding variables to define LIBDIR, INCLUDEDIR and LOCALEDIR
	instead of using the hardcoded ones.
	(SUBDIRS): doc subdir added.
	(INFO_DEPS, DVIS): Values changed to 'make.info' and 'make.dvi'.
	(TEXI2HTML, TEXI2HTML_FLAGS): Removed.  Use makeinfo --html to
	create html formated docs.  texi2html may not be ported to DOS.
	(make.info, make.dvi, make.ps, make.html): Make targets depend on
	'make.texi'.
	(.texi.info, .texi, .texi.dvi): Now invoked recursively.  Change
	-I switch to look in ./ instead of ./doc.
	(html): Target depend on html-recursive instead of make_1.html.
	(make_1.html): Removed.
	(mostlyclean-aminfo): Use $(srcdir)/doc instead of ./ as prefix.
	(all-recursive): Allow for more than one subdir in the build
	process.
	(mostlyclean-recursive, clean-recursive, distclean-recursive)
	(maintainer-clean-recursive, check-recursive): Enter in doc/ too.
	(tags-recursive): Allow for more than one subdir in the build
	process.
	(info-recursive, dvi-recursive, ps-recursive, html-recursive): New
	targets.  Enter into doc/ to produce the targets.
	(all-am): $(INFO_DEPS) replaced by info.

2009-09-26  Paul Smith  <psmith@gnu.org>

	* read.c (record_files): Use free_ns() to free struct nameseq.
	(eval): Ditto.

	* rule.c (freerule): Use free_dep_chain().

	* read.c (record_files): Free FILENAMES chain for implicit rules.
	(eval): Static pattern targets go into the string cache.

	* function.c (string_glob): Free NAME in the nameseq chain.

2009-09-25  Boris Kolpackov  <boris@codesynthesis.com>

	* implicit.c (pattern_search): Terminate early if we haven't
	found any rules to try (performance improvement).

2009-09-25  Boris Kolpackov  <boris@codesynthesis.com>

	* implicit.c (pattern_search): Merge three parallel arrays,
	TRYRULES, MATCHES, and CHECKED_LASTSLASH, into one array
	of struct TRYRULE. In the old version the latter two arrays
	had insufficient length.

2009-09-24  Paul Smith  <psmith@gnu.org>

	* implicit.c (pattern_search): Add back support for order-only
	prerequisites for secondary expansion implicit rules, that were
	accidentally dropped.  If we find a "|", enable order-only mode
	and set IGNORE_MTIME on all deps that are seen afterward.
	(pattern_search): Fix memory leaks: for intermediate files where
	we've already set the file variable and pattern variable sets, be
	sure to either save or free them as appropriate.

2009-09-23  Paul Smith  <psmith@gnu.org>

	Rework the way secondary expansion is stored, for efficiency.
	This changes secondary expansion so that ONLY WHEN we know we have
	a possibility of needing secondary expansion, do we defer the
	secondary expansion.  This means more parsing the deps but we use
	a lot less memory (due to the strcache).  Also, this fixes
	Savannah bug #18622.

	* read.c (eval): Don't parse the dep string here anymore.
	(record_files): Take the dep argument as an unparsed string.  If
	secondary expansion is enabled AND the prereq string has a '$' in
	it, then set NEED_2ND_EXPANSION and keep the entire string.
	Otherwise, parse the dep string here to construct the dep list
	with the names in the strcache.

	* misc.c (copy_dep_chain): For NEED_2ND_EXPANSION, we need to
	duplicate the name string (others are in the strcache).

	* implicit.c: Remove struct idep and free_idep_chain(): unused.
	(struct patdeps): New structure to store prereq information.
	(pattern_search): Use the NEED_2ND_EXPANSION flag to determine
	which prerequisites need expansion, and expand only those.

	* file.c (split_prereqs): Break parse_prereqs() into two parts: this
	and enter_prereqs().  split_prereqs() takes a fully-expanded string
	and splits it into a DEP list, handling order-only prereqs.
	(enter_prereqs): This function enters a list of DEPs into the file
	database.  If there's a stem defined, expand any pattern chars.
	(expand_deps): Only try to expand DEPs which have NEED_2ND_EXPANSION
	set.  Use the above functions.
	(snap_deps): Only perform second expansion on prereqs that need it,
	as defined by the NEED_2ND_EXPANSION flag.
	(print_prereqs): New function to print the prereqs
	(print_file): Call print_prereqs() rather than print inline.

	* hash.h (STRING_COMPARE): Take advantage of strcache() by
	comparing pointers.
	(STRING_N_COMPARE): Ditto.
	(ISTRING_COMPARE): Ditto.

	* dep.h (PARSE_FILE_SEQ): New macro to reduce casts.
	(parse_file_seq): Return void*
	* read.c (parse_file_seq): Return void*.
	(eval): Invoke macroized version of parse_file_seq()
	* default.c (set_default_suffixes): Ditto.
	* file.c (split_prereqs): Ditto.
	* function.c (string_glob): Ditto.
	* main.c (main): Ditto.
	* rule.c (install_pattern_rule): Ditto.

	* filedef.h: Add split_prereqs(), enter_prereqs(), etc.

2009-09-16  Paul Smith  <psmith@gnu.org>

	* misc.c (alloc_dep, free_dep): Now that we have xcalloc(),
	convert to macros.
	* dep.h: Create alloc_dep() / free_dep() macros.

	* implicit.c (pattern_search): Take advantage of the new
	parse_file_seq() to add the directory prefix to each prereq.

	* dep.h: Remove multi_glob() and enhance parse_file_seq() to do it
	all.  Avoid reversing chains.  Support adding prefixes.
	* read.c (parse_file_seq): Rewrite to support globbing.  Allow for
	cached/non-cached results.
	(eval): Remove multi_glob() & invoke new parse_file_seq().
	* rule.c (install_pattern_rule): Ditto.
	* main.c (main): Ditto.
	* implicit.c (pattern_search): Ditto.
	* function.c (string_glob): Ditto.
	* file.c (parse_prereqs): Ditto.
	* default.c (set_default_suffixes): Ditto.

	* variable.c (parse_variable_definition): Don't run off the end of
	the string if it ends in whitespace (found with valgrind).

	* commands.c (set_file_variables): Keep space for all targets in
	$? if -B is given (found with valgrind).

2009-09-15  Paul Smith  <psmith@gnu.org>

	* misc.c (concat): Make concat() variadic so it takes >3 arguments.
	(xcalloc): Add new function.
	* make.h: New declarations.

	* ar.c (ar_glob_match): New calling method for concat().
	* main.c (main): Ditto.
	(decode_env_switches): Ditto.
	* read.c (eval_makefile): Ditto.
	(tilde_expand): Ditto.
	(parse_file_seq): Ditto.
	* variable.c (target_environment): Ditto.
	(sync_Path_environment): Ditto.

	* ar.c (ar_glob_match): Use xcalloc().
	* dir.c (file_impossible): Ditto.
	* file.c (enter_file): Ditto.
	* job.c (new_job): Ditto.
	* read.c (parse_file_seq): Ditto.
	* vmsfunctions.c (opendir): Ditto.

2009-09-14  Rafi Einstein  <rafi.einstein@gmail.com>  (tiny patch)

	* w32/subproc/sub_proc.c (process_begin): Check *ep non-NULL
	inside the loop that looks up environment for PATH.

2009-08-31  Eli Zaretskii  <eliz@gnu.org>

	* function.c (windows32_openpipe): Update envp after calling
	sync_Path_environment.

2009-08-02  Paul Smith  <psmith@gnu.org>

	* remake.c (notice_finished_file): Ensure file->cmds is not null
	before looping through them.  Fixes Savannah bug #21824.

	* doc/make.texi (Wildcard Examples): Clarify when objects is
	wildcard-expanded.  Fixes Savannah bug #24509.  Patch by Martin Dorey.
	(Include): Clarify the behavior of -include.
	Fixes Savannah bug #18963.

2009-08-01  Paul Smith  <psmith@gnu.org>

	* doc/make.texi (Catalogue of Rules): Clarify where -c, -F,
	etc. come on the command line.  Fixes Savannah bug #27093.

	* expand.c (expand_argument): If the argument is large enough use
	xmalloc() instead of alloca().  Fixes Savannah bug #27143.

	* variable.c (do_variable_definition): Avoid using alloca() to
	hold values, which can be large.  Fixes Savannah bug #23960.

	* job.c (new_job): Use memmove() instead of strcpy() since both
	pointers are in the same memory block.  Fixes Savannah bug #27148.
	Patch by Petr Machata.

2009-07-29  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

        * job.c (construct_command_argv_internal): Add "ulimit" and
        "unset" to the sh_cmds for Unixy shells.

2009-07-29  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

        * configure.in: Move side-effects outside AC_CACHE_VAL arguments
        that set make_cv_sys_gnu_glob, so they are also correctly set
        when the cache has been populated before.

2009-07-04  Eli Zaretskii  <eliz@gnu.org>

	* function.c (func_realpath) [!HAVE_REALPATH]: Require the file to
	exist, as realpath(3) does where it's supported.

2006-07-04  Eli Zaretskii  <eliz@gnu.org>

	* function.c (IS_ABSOLUTE, ROOT_LEN): New macros.
	(abspath): Support systems that define HAVE_DOS_PATHS (have
	drive letters in their file names).  Use IS_PATHSEP instead of a
	literal '/' comparison.  Fixes Savannah bug #26886.

2009-06-14  Paul Smith  <psmith@gnu.org>

	* remake.c (update_file_1): Remember the original file we marked
	as updating, so we can clear that flag again.  If we find a target
	via vpath, FILE might change.
	(check_dep): Ditto.  Fixes Savannah bug #13529.
	Patch by Reid Madsen <reid.madsen@tek.com>.

2009-06-13  Paul Smith  <psmith@gnu.org>

	* doc/make.texi (MAKEFILES Variable): Be explicit that files
	included by MAKEFILES cannot give default goals.
	* read.c (eval): If set_default is not set, pass the no-default-goal
	value when we read included makefiles.  Fixes Savannah bug #13401.

	* ar.c (ar_name): Ensure that targets with empty parens aren't
	considered archive member references: archive members must have a
	non-empty "member" string.  Fixes Savannah bug #18435.

	* function.c (string_glob): Rely on multi_glob() to determine
	whether files exist or not.  Remove call to file_exists_p() which
	is not always correct.  Fixes Savannah bug #21231.
	* read.c (multi_glob): Add a new argument EXISTS_ONLY; if true
	then only files that really exist will be returned.
	* dep.h: Add new argument to multi_glob().
	* rule.c (install_pattern_rule): Ditto.
	* read.c (eval): Ditto.
	* main.c (main): Ditto.
	* implicit.c (pattern_search): Ditto.
	* file.c (parse_prereqs): Ditto.
	* default.c (set_default_suffixes): Ditto.

2009-06-09  Paul Smith  <psmith@gnu.org>

	* commands.c (set_file_variables): If always_make_flag is set,
	always add the prereq to $?.  Fixes Savannah bug #17825.

	* remake.c (update_file_1): When rebuilding deps of FILE, also try
	to rebuild the deps of all the also_make targets for that file.
	Fixes Savannah bug #19108.

	* implicit.c (pattern_search): Undo test for is_target, added by
	BorisK on 21 Sep 2004.  This goes against step 5c in the "Implicit
	Rule Search Algorithm".  Fixes Savannah bug #17752.

	* main.c (clean_jobserver): Clear the jobserver_fds options and
	set job_slots to the default when we clean up.
	(define_makeflags): Return the new MAKEFLAGS value.
	(main): Reset MAKEFLAGS in the environment when we re-exec.
	Fixes Savannah bug #18124.

2009-06-08  Paul Smith  <psmith@gnu.org>

	* read.c (eval): Collapse continuations post-semicolon on target-
	specific variables.  Fixes Savannah bug #17521.

2009-06-07  Paul Smith  <psmith@gnu.org>

	* job.c (reap_children): For older systems without waitpid() (are
	there any of these left?) run wait(2) inside EINTRLOOP to handle
	EINTR errors.  Fixes Savannah bug #16401.

	* (various): Debug message cleanup.  Fixes Savannah bug #16469.

	* main.c: Fix bsd_signal() typedef.  Fixes Savannah bug #16473.

	* file.c (snap_deps): Set SNAPPED_DEPS at the start of snapping,
	not the end, to catch second expansion $(eval ...) defining new
	target/prereq relationships during snap_deps.
	Fixes Savannah bug #24622.

	* read.c (record_files): The second-expansion "f->updating" hack
	was not completely correct: if assumed that the target with
	commands always had prerequisites; if one didn't then the ordering
	was messed up.  Fixed for now to use f->updating to decide whether
	to preserve the last element in the deps list... but this whole
	area of constructing and reversing the deps list is too confusing
	and needs to be reworked.  Fixes Savannah bug #21198.

2009-06-06  Paul Smith  <psmith@gnu.org>

	* hash.c (hash_insert): Remove useless test for NULL.
	Fixes Savannah bug #21823.

	* make.h: Move SET_STACK_SIZE determination to make.h.
	* main.c (main): New global variable, STACK_LIMIT, holds the
	original stack limit when make was started.
	* job.c (start_job_command): Reset the stack limit, if we changed it.
	Fixes Savannah bug #22010.

	* remake.c (check_dep): Only set the target's state to not-started
	if it's not already running.  Found this while testing -j10 builds
	of glibc: various targets were being rebuilt multiple times.
	Fix from Knut St. Osmundsen; fixes a problem reported in Savannah
	bug #15919.

	* read.c (multi_glob): Don't pass GLOB_NOCHECK to glob(3); instead
	handle the GLOB_NOMATCH error.  This is to work around Sourceware.org
	Bugzilla bug 10246.

2009-06-04  Paul Smith  <psmith@gnu.org>

	* read.c (eval): Skip initial whitespace (ffeed, vtab, etc.)

	* maintMakefile: Modify access of config and gnulib Savannah
	modules to use GIT instead of CVS.

	* main.c (main): Initialize the LENGTH field in SHELL_VAR.
	Fixes Savannah bug #24655.

	* read.c (eval_buffer): Don't dereference reading_file if it's NULL;
	this can happen during some invocations of $(eval ...) for example.
	Fixes Savannah bug #24588.  Patch by Lars Jessen <ljessen@ljessen.dk>

2009-06-02  Paul Smith  <psmith@gnu.org>

	* configure.in: Check for fileno()
	* read.c (eval_makefile): If fileno() is available, set CLOSE_ON_EXEC
	for the makefile file so invocations of $(shell ...) don't inherit it.
	Fixes Savannah bug #24277.

2009-06-01  Paul Smith  <psmith@gnu.org>

	* main.c (main): The previous fix for .DEFAULT_GOAL had issues;
	expansion was handled incorrectly.  Rework the default goal
	handling to save the variable only.  Remove default_goal_file and
	default_goal_name.
	* read.c (eval): Check default_goal_var, not default_goal_name.
	* read.c (record_target_var): Don't check default_goal_file here.

2009-05-31  Paul Smith  <psmith@gnu.org>

	* main.c (main): Expand the .DEFAULT_GOAL variable before using
	it, and if the multi_glob() returns nothing (say it expanded to
	nothing but spaces) then don't crash.  Fixes Savannah bug #25697.

	* doc/make.texi (Quick Reference): Add $(if ..), $(or ..), and
	$(and ..) to the reference.  Fixes Savannah bug #25694.

	* make.1: Be clear that some recipes will be executed even with -n.
	* doc/make.texi: Ditto.  Fixes Savannah bug #25460.

	* doc/make.texi (Override Directive): Make more clear how
	overrides and appends interact.
	Elucidates part of Savannah bug #26207.

	* read.c (record_target_var): Don't reset the origin on
	target-specific variables; try_variable_definition() will handle
	this correctly.  Fixes Savannah bug #26207.

	* maintMakefile (do-po-update): Copy PO files into $(top_srcdir).
	Fixes Savannah bug #25712.

	* implicit.c (pattern_search): Keep a pointer to the beginning of
	the filename and save that instead of the constructed pointer.
	Fixes Savannah bug #26593.
	Patch by Mark Seaborn <mrs@mythic-beasts.com>

2009-05-30  Paul Smith  <psmith@gnu.org>

	* doc/make.texi (Multi-Line): Add a description of the new abilities
	of define/endef.  Rename "Sequences" to "Multi-Line" and fix some
	"command sequence" vs. "recipe" syntax.
	* read.c (do_define): Modify to allow assignment tokens (=, :=, etc.)
	after a define, to create variables with those flavors.

2009-05-25  Paul Smith  <psmith@gnu.org>

	Reworked the parser for variable assignments to allow multiple
	modifiers, and in any order.  Also allows variable and
	prerequisites to be modifier names ('export', 'private', etc.)

	* NEWS: Add notes about user-visible changes.

	* read.c (struct vmodifiers): Remember what modifiers were seen.
	(parse_var_assignment): New function to parse variable assignments.
	(eval): Call the new function.  Handle variable assignments earlier.

	* variable.c (parse_variable_definition): Only parse; don't create var.
	(assign_variable_definition): Call parse, then create the var.

2009-05-24  Paul Smith  <psmith@gnu.org>

	* doc/make.texi: Fix the ISBN for the GNU make manual.  Incorrect
	value noticed by Hans Stol <hans.stol@nc3a.nato.int>.

2009-03-14  Eli Zaretskii  <eliz@gnu.org>

	* w32/pathstuff.c (convert_Path_to_windows32): Fix last change.
	Fixes Savannah bug #25412.

	* w32/subproc/sub_proc.c <top level>: Update Copyright years.  Add
	prototype for xmalloc.
	(find_file): Accept 3 arguments PATH_VAR, FULL_FNAME, and FULL_LEN
	instead of an LPOFSTRUCT pointer.  Use xmalloc instead of malloc.
	Loop over an array of extensions, instead of duplicating the same
	code inline.  Use SearchPath followed by CreateFile, instead of
	the obsolete OpenFile.  Fixes Savannah bug #17277.
	(process_begin): Find $(PATH) in `envp', and pass a pointer to it
	to `find_file'.  Fixes Savannah bug #25662.

2009-03-07  Eli Zaretskii  <eliz@gnu.org>

	* function.c (func_shell): Don't close pipedes[1] if it is -1.
	Fixes Savannah bug #20495.

2009-02-28  Ralf Wildenhues  <address@hidden>

        * doc/make.texi (Instead of Execution): Document interaction of
        -t with phony targets.

2009-02-23  Ramon Garcia  <ramon.garcia.f@gmail.com>

	Introduce a new keyword "private" which applies to target-specific
	variables and prevents their values from being inherited.

	* variable.h (struct variable): Add private_var flag to each variable.
	Add a flag to specify which list entry switches to the parent target.
	* variable.c (define_variable_in_set): Initialize private_var flag.
	(lookup_variable): Skip private variables in parent contexts.
	(initialize_file_variables): Set next_is_parent appropriately.
	(print_variable): Show the private_var flag.
	* read.c (eval): Recognize the private keyword.
	(record_target_var): Set private_var.
	* doc/make.texi (Suppressing Inheritance): Add documentation.

2008-10-26  Paul Smith  <psmith@gnu.org>

	* configure.in: Check for strndup().
	* misc.c (xstrndup): Rename savestring to xstrndup.  Use strndup
	if it's available.
	* make.h: Rename savestring to xstrndup.
	* commands.c (chop_commands): Ditto.
	* function.c (func_foreach): Ditto.
	* read.c (eval, record_files): Ditto.
	* variable.c (define_variable_in_set): Ditto.

2008-09-30  Eli Zaretskii  <eliz@gnu.org>

	* build_w32.bat (GCCBuild): Use "-gdwarf-2 -g3" instead of
	"-gstabs+ -ggdb3".

	* w32/subproc/build.bat (GCCBuild): Likewise.

2008-09-30  David Russo  <d-russo@ti.com>  (tiny change)

	* job.c (construct_command_argv_internal): Avoid extra backslash
	in batch-mode Unixy shells.  Under DB_JOBS, display the contents
	of the batch file.

2008-05-31  Eli Zaretskii  <eliz@gnu.org>

	* README.W32.template: Remove obsolete text about non-support for
	-jN without Unixy shell.  Remove obsolete text about not supplying
	Visual Studio project files (we do supply them).  Modify text to
	prefer GCC builds to MSC builds.

2008-04-02  Ralf Wildenhues  <Ralf.Wildenhues@gmx.de>

	* doc/make.texi (Empty Targets): Fix typo.

2008-03-27  Paul Smith  <psmith@gnu.org>

	Fix Savannah bug #22379:
	* ar.c (ar_glob_match): Zero the allocated structure.
	* read.c (parse_file_seq): Ditto.

2008-03-08  Brian Dessent  <brian@dessent.net>

	* maintMakefile: Update Translation Project location.

2008-01-26  Eli Zaretskii  <eliz@gnu.org>

	* variable.c (target_environment): Don't use shell_var if its
	`value' field is NULL.

2007-12-22  Eli Zaretskii  <eliz@gnu.org>

	Suggested by Juan Manuel Guerrero <juan.guerrero@gmx.de>:

	* Makefile.DOS.template (info_TEXINFOS): Remove unused variable.
	(TEXINFOS): Value changed to `doc/make.texi'.
	(.SUFFIXES): Use .texi instead of .texinfo.
	(make.info, make.dvi): Depend on doc/make.texi.
	(.texi.info): New target, instead of ".texinfo.info".  Change -I
	switch to $(MAKEINFO) to look in doc/.  Use --no-split.
	(.texi): New target, instead of ".texinfo".  Change -I switch to
	$(MAKEINFO) to look in doc/.  Use --no-split.
	(.texi.dvi): New target, instead of ".texinfo.dvi".  Change -I
	switch to $(MAKEINFO) to look in doc/.
	(install-info-am, uninstall-info): Don't look for "*.i[0-9]" and
	"*.i[0-9][0-9]" (due to --no-split above).
	(noinst_TEXINFOS, TEXI2HTML, TEXI2HTML_FLAGS): New variables.
	(html, make_1.html): New targets.
	(.PHONY): Add "html".
	(.SUFFIXES): Add .html.

2007-12-22  Juan Manuel Guerrero  <juan.guerrero@gmx.de>  (tiny change)

	* configh.dos.template [__DJGPP__]: Replace HAVE_SYS_SIGLIST with
	HAVE_DECL_SYS_SIGLIST.

	* job.c (child_execute_job): Remove __MSDOS__ because MSDOS/DJGPP
	build does not use child_execute_job.

	* variable.c (define_automatic_variables) [__MSDOS__]: Always
	export the SHELL environment variable to the child.

2007-12-22  Eli Zaretskii  <eliz@gnu.org>

	* config.h.W32: Include sys/types.h.
	[!_PID_T_] (pid_t): Define only if not already defined by sys/types.h.

	* vpath.c (construct_vpath_list) [HAVE_DOS_PATHS]: Support VPATH
	values that use `:' in drive letters, when PATH_SEPARATOR_CHAR is
	also `:'.

2007-11-04  Paul Smith  <psmith@gnu.org>

	* doc/make.texi: Convert references to "commands", "command
	lines", and "command script" to "recipe".
	* NEWS: Ditto.
	* commands.c, file.c, job.c, remake.c, read.c, variable.c, main.c:
	Ditto.

2007-10-27  Bruno Haible  <bruno@clisp.org>

	* remake.c (f_mtime): Print time difference values between 100 and
	ULONG_MAX in fixed-point notation rather than in exponention notation.

2007-10-12  Eli Zaretskii  <eliz@gnu.org>

	* variable.c (do_variable_definition): Allow $(SHELL) to expand to
	a more complex value than a simple shell: if it's not a default
	shell now then expand it and see if is a default shell then.

2007-10-10  Eli Zaretskii  <eliz@gnu.org>

	* dir.c (find_directory) [WINDOWS32]: Remove trailing slashes from
	pathnames, with const strings.
	* build_w32.bat [WINDOWS32]: If no config.h.W32 exists, create one
	from the template (used for building from CVS, not a dist).

2007-10-10  Paul Smith  <psmith@gnu.org>

	* make.h: Add a prototype for w32_kill() (change suggested by
	Yongwei Wu <wuyongwei@gmail.com>).

2007-09-21  Eli Zaretskii  <eliz@gnu.org>

	* w32/pathstuff.c (convert_Path_to_windows32): Handle quoted
	directories in Path.

2007-09-12  Paul Smith  <psmith@gnu.org>

	* doc/make.texi: Applied wording cleanups from Savannah patch #6195.
	Provided by Diego Biurrun <diego@biurrun.de>
	(Complex Makefile): Remove .PHONY setting for tar: patch #6196.
	Provided by Diego Biurrun <diego@biurrun.de>

2007-09-11  Paul Smith  <psmith@gnu.org>

	* doc/make.texi (Special Variables): Moved this into the "How to
	Use Variables" chapter.  Added a table entry for .RECIPEPREFIX.
	(MAKEFILE_LIST) No longer a section; this was added into the
	"Special Variables" section.
	(Rule Introduction): Reference .RECIPEPREFIX.
	(Simple Makefile): Ditto.
	(Rule Syntax): Ditto.
	(Command Syntax): Ditto.
	(Error Messages): Ditto.

2007-09-10  Paul Smith  <psmith@gnu.org>

	* commands.c (print_commands): Don't print an extra line in the
	command scripts.  Prefix the command scripts with cmd_prefix, not \t.

	* read.c (construct_include_path): Add the full string to the cache; we
	were chopping the last char.

	* NEWS: Announce the .RECIPEPREFIX special variable.
	* variable.c (lookup_special_var): Rename from handle_special_var().
	(lookup_variable): Call the new name.
	(set_special_var): New function: handle setting of special variables.
	When setting .RECIPEPREFIX, reset the cmd_prefix global variable.
	(do_variable_definition): Call it.
	* make.h (RECIPEPREFIX_DEFAULT): Define the default command prefix char.
	(RECIPEPREFIX_NAME): Define the command prefix special variable name.
	* main.c (main): Create the .RECIPEPREFIX special variable.
	* read.c (eval): Remove the cmd_prefix characters from the command
	scripts here, so they're not stored in the commands array at all,
	rather than waiting and stripping them out during command construction.
	* job.c (construct_command_argv_internal): Don't skip cmd_prefix here.

2007-08-15  Paul Smith  <psmith@gnu.org>

	* doc/make.texi (GNU Free Documentation License): The fdl.texi
	file has had the section info removed, so add some to make.texi
	before we include it.

2007-08-15  Icarus Sparry  <savannah@icarus.freeuk.com>

	* remake.c (check_dep): Reset the target state for intermediate
	files.  They might have been considered before but not updated
	then (order-only for example) but they will be this time.
	Fixes Savannah bug #'s 3330 and 15919.

2007-07-21  Eli Zaretskii  <eliz@gnu.org>

	Fix Savannah bug #20549:
	* function.c (func_shell): Call construct_command_argv with zero
	value of FLAGS.
	* job.c (construct_command_argv_internal): New argument FLAGS; all
	callers changed.
	[WINDOWS32]: If FLAGS has the COMMANDS_RECURSE bit set, ignore
	just_print_flag.
	* job.h (construct_command_argv_internal): Update prototype.

2007-07-13  Paul Smith  <psmith@gnu.org>

	* file.c (expand_deps): Use variable_buffer as the start of the
	buffer, not the original pointer (in case it was reallocated).
	Fix suggested by Rafi Einstein <rafi.einstein@formalism-labs.com>.
	Fixes Savannah bug #20452.

2007-07-04  Paul Smith  <psmith@gnu.org>

	* (ALL FILES): Update to GPLv3.
	* (ALL FILES): Update copyright for 2007.

	* main.c (print_version): Move the host type info to the second line.

2007-06-29  Thiemo Seufer  <ths@mips.com>

	* maintMakefile: Update Translation Project location.

2007-06-13  Paul Smith  <psmith@gnu.org>

	* doc/make.texi (Reading Makefiles): "Expansion of deferred" ->
	"Expansion of a deferred"
	Fixes Savannah bug #20018.

	* expand.c (variable_expand_for_file): Preserve the value of
	reading_file rather than setting it to 0 at the end.
	Fixes Savannah bug #20033.

2007-05-11  Paul Smith  <psmith@gnu.org>

	* job.c (new_job): Add debug info to specify where make found the
	command script it is running to build a target.
	Fixes Savannah bug #18617.

	* default.c (default_suffixes,default_suffix_rules,default_variables):
	Add support for Objective C.  Fixes Savannah bug #16389.
	Based on a patch provided by Peter O'Gorman <peter@pogma.com>.

	* function.c (func_lastword): Initialize p.

	* doc/make.texi (Eval Function, Implicit Variables, Special Targets):
	Doc fixes noticed by Bob <twobanjobob@sbcglobal.net>.  Patch from
	Dave Korn <dave.korn@artimi.com>

2007-05-08  Paul Smith  <psmith@gnu.org>

	Fix Savannah bug #19656:

	* configure.in: Check for strcasecmp(), strcmpi(), and stricmp().

	* make.h: Change all case-insensitive string compares to use
	strcasecmp() (from POSIX).  If we don't have that but do have one
	of the others, define strcasecmp to be one of those instead.  If
	we don't have any, declare a prototype for our own version.

	* misc.c (strcasecmp): Use this if we can't find any native
	case-insensitive string comparison function.
	* vmsfunctions.c: Remove strcmpi(); we'll use misc.c:strcasecmp().
	* main.c (find_and_set_default_shell): Use strcasecmp() instead of
	strcmpi().
	* job.c (_is_unixy_shell, construct_command_argv_internal): Use
	strcasecmp() instead of stricmp().
	* hash.h (ISTRING_COMPARE, return_ISTRING_COMPARE): Use strcasecmp()
	instead of strcmpi().
	* acinclude.m4: Remove the strcasecmp() check from here.

2007-03-21  Paul Smith  <psmith@gnu.org>

	* configure.in: Don't turn on case-insensitive file system support
	if --disable-... is given.  Fixes Savannah bug #19348.

2007-03-19  Paul Smith  <psmith@gnu.org>

	* ALL: Use the strcache for all file name strings, or other
	strings which we will never free.  The goal is to save memory by
	avoiding duplicate copies of strings.  However, at the moment this
	doesn't save much memory in most situations: due to secondary
	expansion we actually save prerequisite lists twice (once before
	the secondary expansion, and then again after it's been parsed
	into individual file names in the dep list).  We will resolve this
	in a future change, by doing the parsing up-front for targets
	where secondary expansion is not set.

	Moving things into the strcache also allows us to use const
	pointers in many more places.

2007-01-03  Paul Smith  <psmith@gnu.org>

	* make.h (ENULLLOOP): Reset errno after each failed invocation of
	the function, not just the first.  Fixes Savannah bug #18680.

2006-11-18  Paul Smith  <psmith@gnu.org>

	* strcache.c (strcache_add_len): Don't allocate a new buffer
	unless the string is not already nil-terminated.  Technically this
	is a violation of the standard, since we may be passed an array
	that is not long enough to test one past.  However, in make this
	is never true since we only use nil-terminated strings or
	sub-strings thereof.

	* read.c (eval, do_define): Use cmd_prefix instead of '\t'.

	* main.c: New global cmd_prefix, defaults to '\t'.
	* job.c (construct_command_argv_internal): Use cmd_prefix instead
	of '\t'.

	* dir.c: Constified.
	(dir_contents_file_exists_p): Check for an error return	from
	readdir(), just in case.

	* commands.c: Constified.
	* default.c: Constified.
	* expand.c: Constified.
	* function.c: Partial constification.
	* variable.c: Partial constification.
	* vmsify.c: Constification.  Hard to test this but I hope I didn't
	screw it up!
	* vpath.c: Partial constification.
	* w32/pathstuff.c: Partial constification.

2006-11-16  Eli Zaretskii  <eliz@gnu.org>

	* main.c (main) [HAVE_DOS_PATHS]: Treat DOS style argv[0] with
	backslashes and drive letters as absolute.

2006-10-22  Paul Smith  <psmith@gnu.org>

	* main.c (struct command_switch): Use const and void*.

2006-10-21  Paul Smith  <psmith@gnu.org>

	* ar.c: Constified.
	* arscan.c: Constified.

2006-09-30  Paul Smith  <psmith@gnu.org>

	* doc/make.texi (MAKEFILE_LIST Variable): Modify reference to
	point to lastword since the example was updated.
	Fixes Savannah bug #16304.
	(Secondary Expansion): Correct example description.
	Fixes Savannah bug #16468.
	(Makefile Contents): Clarify that comments cannot appear within
	variable references or function calls.
	Fixes Savannah bug #16577.
	(Special Targets): Clarify how .NOTPARALLEL works in recursion.
	Fixes Savannah bug #17701.
	Reported by Ralf Wildenhues <Ralf.Wildenhues@gmx.de>:
	(Prerequisite Types): Added an example of using	order-only
	prerequisites.  Fixes Savannah bug #17880.
	(Rule Syntax): "lise" -> "list"
	(Multiple Rules): ... -> @dots{}
	(Splitting Lines): ditto.

	* remake.c (update_file_1): Prereqs that don't exist should be
	considered changed, for the purposes of $?.
	Fixes Savannah bug #16051.

	* make.1: Remove extraneous "+".
	Fixes Savannah bug #16652.

2006-09-06  Paul D. Smith  <psmith@gnu.org>

	* configure.in: Include sys/types.h when checking for sys/wait.h.

2006-08-18  Eli Zaretskii  <eliz@gnu.org>

	* configure.in (PATH_SEPARATOR_CHAR): Define to the value of
	$PATH_SEPARATOR.

	* make.h (PATH_SEPARATOR_CHAR): Define only if still undefined.
	Normally, it is defined in config.h.

	* config/dospaths.m4 <ac_cv_dos_paths>: Define to yes on Cygwin as
	well.

	* job.c (construct_command_argv_internal) [HAVE_DOS_PATHS]: Define
	sh_chars_sh for Windows platforms that emulate Unix.

2006-05-07  Paul D. Smith  <psmith@gnu.org>

	* README.OS2.template: Updates provided by Andreas Buening
	<andreas.buening@nexgo.de>.

2006-04-30  Paul D. Smith  <psmith@gnu.org>

	* make.h: Include <direct.h> if HAVE_DIRECT_H.
	* config.h.W32.template (HAVE_DIRECT_H): Set it if it's available.

2006-04-26  Paul D. Smith  <psmith@gnu.org>

	* README.cvs: Add a reminder to notify the GNU translation robot.

	* doc/make.texi: Change @direcategory (requested by Karl Berry).

2006-04-20  Paul D. Smith  <psmith@gnu.org>

	* maintMakefile (po-check): Use Perl instead of grep -E, for systems
	that don't have extended grep.
	(cvsclean): Use $(PERL) instead of perl.

2006-04-09  Paul D. Smith  <psmith@gnu.org>

	* maintMakefile: Add some extra warning options (GCC 4.1 only?)

	* expand.c, implicit.c, main.c, read.c: Rename variables so that
	inner-scope variables don't mask outer-scope variables.

	* ar.c, arscan.c, commands.c, default.c, dir.c, expand.c, file.c:
	* function.c, getloadavg.c, implicit.c, job.c, main.c, misc.c, read.c:
	* remake.c, remote-cstms.c, rule.c, strcache.c, variable.c:
	* vmsfunctions.c, vmsify.c, vpath.c: Remove all casts of returned
	values from memory allocation functions: they return void* and so
	don't need to be cast.  Also remove (char *) casts of arguments to
	xrealloc().

	* configure.in: Remove checks for memcpy/memmove/strchr.

	* make.h: Remove bcmp/bcopy/bzero/strchr/strrchr macros.

	* ar.c, arscan.c, commands.c, dir.c: Convert all bzero/bcopy/bcmp
	calls to memset/memcpy/memmove/memcmp calls.
	* expand.c, file.c, function.c, getloadavg.c, implicit.c: Ditto.
	* job.c, main.c, misc.c, read.c, remake.c, rule.c: Ditto.
	* variable.c, vpath.c: Ditto.

	* make.h (EXIT_FAILURE): Should be 1, not 0.

2006-04-06  Paul D. Smith  <psmith@gnu.org>

	* configure.in: Removed AM_C_PROTOTYPES.  Starting now on we
	require an ISO C 1989 standard compiler and runtime library.

	* Makefile.am: Remove the ansi2knr feature.

	* make.h: Remove the PARAMS() macro definition and all uses of it.

	* amiga.h, ar.c, arscan.c: Remove all uses of the PARAMS() macro.
	* commands.c, commands.h, config.h-vms.template: Ditto.
	* dep.h, dir.c, expand.c, filedef.h, function.c: Ditto.
	* implicit.c, job.c, job.h, main.c, read.c, remake.c: Ditto.
	* rule.c, rule.h, variable.h, vmsdir.h, vmsjobs.c, vpath.c: Ditto.

	* NEWS: Update.

2006-04-01  Paul D. Smith  <psmith@gnu.org>

	Version 3.81 released.

	* NEWS: Updated for 3.81.

	* README.cvs: Mention that vpath builds are not supported out of
	CVS.  Fixes Savannah bug #16236.
	Remove update of make.texi from the list of things to do; we use
	version.texi now.

2006-03-26  Paul D. Smith  <psmith@gnu.org>

	* doc/make.texi: Clean up licensing.  Use @copying and version.texi
	support from automake, as described in the Texinfo manual.

2006-03-25  Eli Zaretskii  <eliz@gnu.org>

	* implicit.c (pattern_search) [HAVE_DOS_PATHS]: Don't compare b
	with lastslash, since the latter points to filename, not to
	target.
	* job.c (construct_command_argv_internal) [HAVE_DOS_PATHS]:
	Declare and define sh_chars_sh[].

2006-03-23  Paul D. Smith  <psmith@gnu.org>

	* configure.in: Look for build.sh.in in $srcdir so it will be
	built for remote configurations as well.

	* Makefile.am: Make sure to clean up build.sh during distclean.
	Fixes Savannah bug #16166.

	* misc.c (log_access): Takes a const char *.
	* function.c (fold_newlines): Takes an unsigned int *.
	Both fixes for Savannah bug #16170.

2006-03-22  Boris Kolpackov  <boris@kolpackov.net>

	* implicit.c (pattern_search): Call set_file_variables only
	if we have prerequisites that need second expansion. Fixes
	Savannah bug #16140.

2006-03-19  Paul D. Smith  <psmith@gnu.org>

	* remake.c (update_file): Add alloca(0) to clean up alloca'd
	memory on hosts that don't support it directly.

	* README.cvs: Add information on steps for making a release (to
	make sure I don't forget any).

	* main.c (clean_jobserver): Move jobserver cleanup code into a new
	function.
	(die): Cleanup code was removed from here; call the new function.
	(main): If we are re-execing, clean up the jobserver first so we
	don't leak file descriptors.
	Reported by Craig Fithian <craig.fithian@citigroup.com>

2006-03-17  Paul D. Smith  <psmith@gnu.org>

	* maintMakefile (do-po-update): Rewrite this rule to clean up and
	allow multiple concurrent runs.
	Patch from Joseph Myers <joseph@codesourcery.com>

2006-03-17  Boris Kolpackov  <boris@kolpackov.net>

	* dep.h (struct dep): Add the stem field.
	* misc.c (alloc_dep, free_dep): New functions.
	(copy_dep_chain): Copy stem.
	(free_dep_chain): Use free_dep.
	* read.c (record_files): Store stem in the dependency line.
	* file.c (expand_deps): Use stem stored in the dependency line. Use
	free_dep_chain instead of free_ns_chain.
	* implicit.c (pattern_search): Use alloc_dep and free_dep.
	* read.c (read_all_makefiles, eval_makefile, eval): Ditto.
	* main.c (main, handle_non_switch_argument): Ditto.
	* remake.c (check_dep): Ditto.
	* rule.c (convert_suffix_rule, freerule): Ditto.

2006-03-14  Paul D. Smith  <psmith@gnu.org>

	* expand.c (variable_append): Instead of appending everything then
	expanding the result, we expand (or not, if it's simple) each part
	as we add it.
	(allocated_variable_append): Don't expand the final result.
	Fixes Savannah bug #15913.

2006-03-09  Paul Smith  <psmith@gnu.org>

	* remake.c (update_file_1): Revert the change of 3 Jan 2006 which
	listed non-existent files as changed.  Turns out there's a bug in
	the Linux kernel builds which means that this change causes
	everything to rebuild every time.  We will re-introduce this fix
	in the next release, to give them time to fix their build system.
	Fixes Savannah bug #16002.
	Introduces Savannah bug #16051.

	* implicit.c (pattern_search) [DOS_PATHS]: Look for DOS paths if
	we *don't* find UNIX "/".
	Reported by David Ergo <david.ergo@alterface.com>

2006-03-04  Eli Zaretskii  <eliz@gnu.org>

	* variable.c (do_variable_definition) [WINDOWS32]: Call the shell
	locator function find_and_set_default_shell if SHELL came from the
	command line.

2006-02-20  Paul D. Smith  <psmith@gnu.org>

	* variable.c (merge_variable_set_lists): It's legal for *setlist0
	to be null; don't core in that case.

2006-02-19  Paul D. Smith  <psmith@gnu.org>

	* commands.c (set_file_variables): Realloc, not malloc, the static
	string values to avoid memory leaks.

	* expand.c (recursively_expand_for_file): Only set reading_file to
	an initialized value.

	* implicit.c (pattern_search): We need to make a copy of the stem
	if we get it from an intermediate dep, since those get freed.

	* file.c (lookup_file) [VMS]: Don't lowercase special targets that
	begin with ".".
	(enter_file) [VMS]: Ditto.
	Patch provided by Hartmut Becker <Hartmut.Becker@hp.com>.

2006-02-24  Eli Zaretskii  <eliz@gnu.org>

	* job.c (construct_command_argv_internal): Fix last change.

	* w32/subproc/sub_proc.c (process_pipe_io): Make dwStdin,
        dwStdout, and dwStderr unsigned int: avoids compiler warnings in
        the calls to _beginthreadex.

	* expand.c (recursively_expand_for_file): Initialize `save' to
        prevent compiler warnings.

2006-02-18  Eli Zaretskii  <eliz@gnu.org>

        * job.c (construct_command_argv_internal): Don't create a temporary
	script/batch file if we are under -n.  Call _setmode to switch the
	script file stream to text mode.

2006-02-17  Paul D. Smith  <psmith@gnu.org>

	* variable.c (merge_variable_set_lists): Don't try to merge the
	global_setlist.  Not only is this useless, but it can lead to
	circularities in the linked list, if global_setlist->next in one
	list gets set to point to another list which also ends in
	global_setlist.
	Fixes Savannah bug #15757.

2006-02-15  Paul D. Smith  <psmith@gnu.org>

	Fix for Savannah bug #106.

	* expand.c (expanding_var): Keep track of which variable we're
	expanding.  If no variable is being expanded, it's the same as
	reading_file.
	* make.h (expanding_var): Declare it.
	* expand.c (recursively_expand_for_file): Set expanding_var to the
	current variable we're expanding, unless there's no file info in
	it (could happen if it comes from the command line or a default
	variable).  Restore it before we exit.
	* expand.c (variable_expand_string): Use the expanding_var file
	info instead of the reading_file info.
	* function.c (check_numeric): Ditto.
	(func_word): Ditto.
	(func_wordlist): Ditto.
	(func_error): Ditto.
	(expand_builtin_function): Ditto.
	(handle_function): Ditto.

2006-02-14  Paul D. Smith  <psmith@gnu.org>

	* read.c (eval): Even if the included filenames expands to the
	empty string we still need to free the allocated buffer.

	* implicit.c (pattern_search): If we allocated a variable set for
	an impossible file, free it.
	* variable.c (free_variable_set): New function.
	* variable.h: Declare it.

	* read.c (read_all_makefiles): Makefile names are kept in the
	strcache, so there's never any need to alloc/free them.
	(eval): Ditto.

	* main.c (main): Add "archives" to the .FEATURES variable if
	archive support is enabled.
	* doc/make.texi (Special Variables): Document it.

2006-02-13  Paul D. Smith  <psmith@gnu.org>

	* implicit.c (pattern_search): Add checking for DOS pathnames to
	the pattern rule target LASTSLASH manipulation.
	Fixes Savannah bug #11183.

2006-02-11  Paul D. Smith  <psmith@gnu.org>

	* (ALL FILES): Updated copyright and license notices.

2006-02-10  Paul D. Smith  <psmith@gnu.org>

	A new internal capability: the string cache is a read-only cache
	of strings, with a hash table interface for fast lookup.  Nothing
	in the cache will ever be freed, so there's no need for reference
	counting, etc.  This is the beginning of a full solution for
	Savannah bug #15182, but for now we only store makefile names here.

	* strcache.c: New file.  Implement a read-only string cache.
	* make.h: Add prototypes for new functions.
	* main.c (initialize_global_hash_tables): Initialize the string cache.
	(print_data_base): Print string cache stats.
	* read.c (eval_makefile): Use the string cache to store makefile
	names.  Rewrite the string allocation to be sure we free everything.

2006-02-10  Eli Zaretskii  <eliz@gnu.org>

	* dir.c (dir_contents_file_exists_p): Don't opendir if the
	directory time stamp didn't change, except on FAT filesystems.
	Suggested by J. David Bryan <jdbryan@acm.org>.

2006-02-09  Paul D. Smith  <psmith@gnu.org>

	* function.c (func_or): Implement a short-circuiting OR function.
	(func_and): Implement a short-circuiting AND function.
	(function_table_init): Update the table with the new functions.
	* doc/make.texi (Conditional Functions): Changed the "if" section
	to one on general conditional functions.  Added documentation for
	$(and ...) and $(or ...) functions.
	* NEWS: Note new $(and ...) and $(or ...) functions.

2006-02-08  Boris Kolpackov  <boris@kolpackov.net>

	* job.h (struct child): Add the dontcare bitfield.
	* job.c (new_job): Cache dontcare flag.
	* job.c (reap_children): Use cached dontcare flag instead of the
	one in struct file. Fixes Savannah bug #15641.

2006-02-06  Paul D. Smith  <psmith@gnu.org>

	* vpath.c (selective_vpath_search): If the file we find has a
	timestamp from -o or -W, use that instead of the real time.
	* remake.c (f_mtime): If the mtime is a special token from -o or
	-W, don't overwrite it with the real mtime.
	Fixes Savannah bug #15341.

	Updates from Markus Mauhart <qwe123@chello.at>:

	* w32/subproc/sub_proc.c (process_begin): Remove no-op tests.
	(process_signal, process_last_err, process_exit_code): Manage
	invalid handle values.
	(process_{outbuf,errbuf,outcnt,errcnt,pipes}): Unused and don't
	manage invalid handles; remove them.
	* job.c (start_job_command) [WINDOWS32]: Jump out on error.
	* config.h.W32.template [WINDOWS32]: Set flags for Windows builds.
	* README.cvs: Updates for building from CVS.

2006-02-05  Paul D. Smith  <psmith@gnu.org>

	* file.c (enter_file): Keep track of the last double_colon entry,
	to avoid walking the list every time we want to add a new one.
	Fixes Savannah bug #15533.
	* filedef.h (struct file): Add a new LAST pointer.

	* dir.c (directory_contents_hash_cmp): Don't use subtraction to do
	the comparison.  For 64-bits systems the result of the subtraction
	might not fit into an int.  Use comparison instead.
	Fixes Savannah bug #15534.

	* doc/make.texi: Update the chapter on writing commands to reflect
	the changes made in 3.81 for backslash/newline and SHELL handling.

2006-02-01  Paul D. Smith  <psmith@gnu.org>

	* dir.c (dir_contents_file_exists_p) [WINDOWS32]: Make sure
	variable st is not used when it's not initialized.
	Patch from Eli Zaretskii <eliz@gnu.org>.

2006-01-31  Paul D. Smith  <psmith@gnu.org>

	* README.W32.template: Applied patch #4785 from
	Markus Mauhart <qwe123@chello.at>.
	* README.cvs: Applied patch #4786 from
	Markus Mauhart <qwe123@chello.at>.
	* make_msvc_net2003.vcproj [WINDOWS32]: New version from
	J. Grant <jg@jguk.org>.

	* main.c: Update the copyright year in the version output.
	* prepare_w32.bat: Remove this file from the distribution.

2006-01-21  Eli Zaretskii  <eliz@gnu.org>

	* remake.c (update_goal_chain): Set g->changed instead of
	incrementing it, as it is only 8-bit wide, and could overflow if
	many commands got started in update_file.

	* w32/include/sub_proc.h: Add a prototype for process_used_slots.

	* w32/subproc/sub_proc.c: Change dimension of proc_array[] to
	MAXIMUM_WAIT_OBJECTS.
	(process_wait_for_any_private): Change dimension of handles[]
	array to MAXIMUM_WAIT_OBJECTS.
	(process_used_slots): New function.
	(process_register): Don't register more processes than the
	available number of slots.
	(process_easy): Don't start new processes if all slots are used	up.

	* job.c (load_too_high, start_waiting_jobs) [WINDOWS32]: If there
	are already more children than sub_proc.c can handle, behave as if
	the load were too high.
	(start_job_command): Fix a typo in error message when process_easy
	fails.

2006-01-14  Eli Zaretskii  <eliz@gnu.org>

	* main.c (main) [WINDOWS32]: Don't refuse to run with -jN, even if
	the shell is not sh.exe.

	* job.c (create_batch_file): Renamed from create_batch_filename;
	all callers changed.  Don't close the temporary file; return its
	file descriptor instead.  New arg FD allows to return the file
	descriptor.
	(construct_command_argv_internal): Use _fdopen instead of fopen to
	open the batch file.

2006-01-04  Paul D. Smith  <psmith@gnu.org>

	* readme.vms: Updates for case-insensitive VMS file systems from
	Hartmut Becker <Hartmut.Becker@hp.com>.
	* dir.c (vms_hash): Ditto.
	* vmsify.c (copyto): Ditto.
	* vmsfunctions.c (readdir): Ditto.

	* make.1: Add a section on the exit codes for make.

	* doc/make.texi: A number of minor updates to the documentation.

2006-01-03  Paul D. Smith  <psmith@gnu.org>

	* remake.c (update_file_1): Mark a prerequisite changed if it
	doesn't exist.

	* read.c (eval): Be sure to strip off trailing whitespace from the
	prerequisites list properly.  Also, initialize all fields in
	struct dep when creating a new one.

2005-12-28  Paul D. Smith  <psmith@gnu.org>

	* config.h.W32.template [WINDOWS32]: Add in some pragmas to
	disable warnings for MSC.
	Patch by Rob Tulloh <rtulloh@yahoo.com>.

2005-12-17  Eli Zaretskii  <eliz@gnu.org>

	* doc/make.texi (Execution): Add a footnote about changes in
	handling of backslash-newline sequences.  Mention the differences
	on MS-DOS and MS-Windows.

	* NEWS: More details about building the MinGW port and a pointer
	to README.W32.  Fix the section name that describes the new
	backward-incompatible processing of backslash-newline sequences.
	The special processing of SHELL set to "cmd" is only relevant to
	MS-Windows, not MS-DOS.

2005-12-17  Eli Zaretskii  <eliz@gnu.org>

	* main.c (handle_runtime_exceptions): Cast exrec->ExceptionAddress
	to DWORD, to avoid compiler warnings.
	* job.c (exec_command): Cast hWaitPID and hPID to DWORD, and
	use %ld in format, to avoid compiler warnings.

	* doc/make.texi (Special Targets): Fix a typo.
	(Appending): Fix cross-reference to Setting.
	(Special Variables, Secondary Expansion, File Name Functions)
	(Flavor Function, Pattern Match, Quick Reference): Ensure two
	periods after a sentence.
	(Execution): Add @: after "e.g.".
	(Environment): Fix punctuation.
	(Target-specific, Call Function, Quick Reference): Add @: after "etc."
	(Shell Function, Target-specific): Add @: after "vs."

2005-12-14  Boris Kolpackov  <boris@kolpackov.net>

	* read.c (record_target_var): Initialize variable's export field
	with v_default instead of leaving it "initialized" by whatever
	garbage happened to be on the heap.

2005-12-12  Paul D. Smith  <psmith@gnu.org>

	* make.1: Fix some display errors and document all existing options.
	Patch by Mike Frysinger <vapier@gentoo.org>.

2005-12-11  Paul D. Smith  <psmith@gnu.org>

	* implicit.c (pattern_search): If 2nd expansion is not set for
	this implicit rule, replace the pattern with the stem directly,
	and don't re-expand the variable list.  Along with the other
	.SECONDEXPANSION changes below, fixes bug #13781.

2005-12-09  Boris Kolpackov  <boris@kolpackov.net>

	* implicit.c (pattern_search): Mark other files that this rule
	builds as targets so that they are not treated as intermediates
	by the pattern rule search algorithm. Fixes bug #13022.

2005-12-07  Boris Kolpackov  <boris@kolpackov.net>

	* remake.c (notice_finished_file): Propagate the change of
	modification time to all the double-colon entries only if
	it is the last one to be updated. Fixes bug #14334.

2005-11-17  Boris Kolpackov  <boris@kolpackov.net>

	* function.c (func_flavor): Implement the flavor function which
	returns the flavor of a variable.
	* doc/make.texi (Functions for Transforming Text): Document it.
	* NEWS: Add it to the list of new functions.

2005-11-14  Boris Kolpackov  <boris@kolpackov.net>

	* read.c (construct_include_path): Set the .INCLUDE_DIRS special
	variable.
	* doc/make.texi (Special Variables): Document .INCLUDE_DIRS.
	* NEWS: Add .INCLUDE_DIRS to the list of new special variables.

2005-10-26  Paul Smith  <psmith@gnu.org>

	* read.c (record_files): Don't set deps flags if there are no deps.
	* maintMakefile: We only need to build the templates when we are
	creating a distribution, so don't do it for "all".

2005-10-24  Paul D. Smith  <psmith@gnu.org>

	Make secondary expansion optional: its enabled by declaring the
	special target .SECONDEXPANSION.

	* NEWS: Update information on second expansion capabilities.
	* doc/make.texi (Secondary Expansion): Document the
	.SECONDEXPANSION special target and its behavior.
	* dep.h (struct dep): Add a flag STATICPATTERN, set to true if the
	prerequisite list was found in a static pattern rule.
	(free_dep_chain): Declare a prototype.
	* file.c (parse_prereqs): New function: break out some complexity
	from expand_deps().
	(expand_deps): If we aren't doing second expansion, replace % with
	the stem for static pattern rules.  Call the new function.
	* filedef.h (parse_prereqs): Declare a prototype.
	* implicit.c (pattern_search): Initialize the new staticpattern
	field.
	* main.c (second_expansion): Declare a global variable to remember
	if the special target has been seen.  Initialize the new
	staticpattern field for prerequisites.
	* make.h: Extern for second_expansion.
	* misc.c (free_dep_chain): New function: frees a struct dep list.
	* read.c (read_all_makefiles): Initialize the staticpattern field.
	(eval_makefile): Ditto.
	(record_files): Check for the .SECONDEXPANSION target and set
	second_expansion global if it's found.
	Use the new free_dep_chain() instead of doing it by hand.
	Set the staticpattern field for prereqs of static pattern targets.

2005-10-16  Paul D. Smith  <psmith@gnu.org>

	* main.c (main): Set CURDIR to be a file variable instead of a
	default, so that values of CURDIR inherited from the environment
	won't override the make value.

2005-09-26  Paul D. Smith  <psmith@gnu.org>

	* job.c (construct_command_argv_internal): If the line is empty
	remember to free the temporary argv strings.
	Fixes bug # 14527.

2005-09-16  Paul D. Smith  <psmith@gnu.org>

	* job.c (start_job_command): The noerror flag is a boolean (single
	bit); set it appropriately.
	Reported by Mark Eichin <eichin@metacarta.com>

2005-08-29  Paul D. Smith  <psmith@gnu.org>

	* function.c (func_error): On Windows, output from $(info ...)
	seems to come in the wrong order.  Try to force it with fflush().

2005-08-10  Boris Kolpackov  <boris@kolpackov.net>

	* read.c (record_files): Move code that sets stem for static
	pattern rules out of the if (!two_colon) condition so it is
	also executed for two-colon rules. Fixes Savannah bug #13881.

2005-08-08  Paul D. Smith  <psmith@gnu.org>

	* make.h: Don't test that __STDC__ is non-0.  Some compilers
	(Windows for example) set it to 0 to denote "ISO C + extensions".
	Fixes bug # 13594.

2005-08-07  Paul D. Smith  <psmith@gnu.org>

	* w32/pathstuff.c (getcwd_fs): Fix warning about assignment in a
	conditional (slightly different version of a fix from Eli).

	Fix a bug reported by Michael Matz <matz@suse.de>: patch included.
	If make is running in parallel without -k and two jobs die in a
	row, but not too close to each other, then make will quit without
	waiting for the rest of the jobs to die.

	* main.c (die): Don't reset err before calling reap_children() the
	second time: we still want it to be in the error condition.
	* job.c (reap_children): Use a static variable, rather than err,
	to control whether or not the error message should be printed.

2005-08-06  Eli Zaretskii  <eliz@gnu.org>

	* w32/subproc/sub_proc.c: Include signal.h.
	(process_pipe_io, process_file_io): Pass a pointer to a local
	DWORD variable to GetExitCodeProcess.  If the exit code is
	CONTROL_C_EXIT, put SIGINT into pproc->signal.

	* job.c [WINDOWS32]: Include windows.h.
	(main_thread) [WINDOWS32]: New global variable.
	(reap_children) [WINDOWS32]: Get the handle for the main thread
	and store it in main_thread.

	* commands.c [WINDOWS32]: Include windows.h and w32err.h.
	(fatal_error_signal) [WINDOWS32]: Suspend the main thread before
	doing anything else.  When we are done, close the main thread
	handle and exit with status 130.

2005-07-30  Eli Zaretskii  <eliz@gnu.org>

	* w32/subproc/sub_proc.c (process_begin): Don't pass a NULL
	pointer to fprintf.

	* main.c (find_and_set_default_shell): If found a DOSish shell,
	set sh_found and the value of default_shell, and report the
	findings in debug mode.

	* job.c (construct_command_argv_internal): Check unixy_shell, not
	no_default_sh_exe, to decide whether to use Unixy or DOSish
	builtin commands.

	* README.W32: Update with info about the MinGW build.

	* build_w32.bat: Support MinGW.

	* w32/subproc/build.bat: Likewise.

	* w32/subproc/sub_proc.c (process_easy): Fix format strings for
	printing DWORD args.

	* function.c (windows32_openpipe): Fix format strings for printing
	DWORD args.

	* job.c (reap_children) [WINDOWS32]: Don't declare 'status' and
	'reap_mode'.
	(start_job_command): Fix format string for printing the result of
	process_easy.
	(start_job_command) [WINDOWS32]: Do not define.
	(exec_command): Fix format string for printing HANDLE args.

	* main.c (handle_runtime_exceptions): Fix sprintf format strings
	to avoid compiler warnings.
	(open_tmpfile): Declare fd only if HAVE_FDOPEN is defined.
	(Note: some of these fixes were submitted independently by J. Grant)

2005-07-30  J. Grant <jg@jguk.org>

	* prepare_w32.bat: Copy config.h.w32 to config.h if not exist.
	* make_msvc_net2003.vcproj, make_msvc_net2003.sln: MSVC Project files.
	* Makefile.am (EXTRA_DIST): Add MSVC Project files.

2005-07-15  Paul Smith  <psmith@gnu.org>

	* job.c (construct_command_argv_internal) [DOS,WINDOWS32,OS/2]: If
	we don't have a POSIX shell, then revert to the old
	backslash-newline behavior (where they are stripped).
	Fixes bug #13665.

2005-07-08  Paul D. Smith  <psmith@gnu.org>

	* config.h.W32.template: Reorder to match the standard config.h,
	for easier comparisons.
	From J. Grant <jg@jguk.org>

	* maintMakefile: Remove .dep_segment before overwriting it, in
	case it's not writable or noclobber is set.
	* expand.c (variable_expand_string): Cast result of pointer
	arithmetic to avoid a warning.
	* main.c (switches): Add full-fledged final initializer.

2005-07-06  Paul D. Smith  <psmith@gnu.org>

	* configure.in: IRIX has _sys_siglist.  Tru64 UNIX has __sys_siglist.
	* signame.c (strsignal): If we found _sys_siglist[] or
	__sys_siglist[] use those instead of sys_siglist[].
	From Albert Chin <china@thewrittenword.com>

2005-07-04  Paul D. Smith  <psmith@gnu.org>

	* config.h-vms.template [VMS]: Latest VMS has its own glob() and
	globfree(); set up to use the GNU versions.
	From Martin Zinser <zinser@zinser.no-ip.info>

2005-07-03  Paul D. Smith  <psmith@gnu.org>

	From J. Grant <jg@jguk.org>:

	* README.W32.template: Update the Windows and tested MSVC versions.
	* NMakefile.template (CFLAGS_any): Change warning level from W3 to W4.
	* w32/subproc/NMakefile (CFLAGS_any): Ditto.
	* build_w32.bat: Ditto.
	* w32/subproc/build.bat: Ditto.

2005-06-28  Paul D. Smith  <psmith@gnu.org>

	* signame.c: HAVE_DECL_* macros are set to 0, not undef, if the
	declaration was checked but not present.

2005-06-27  Paul D. Smith  <psmith@gnu.org>

	* dir.c (find_directory): Change type of fs_serno/fs_flags/fs_len
	to unsigned long.  Fixes Savannah bug #13550.

	* w32/subproc/sub_proc.c: Remove (HANDLE) casts on lvalues.
	(process_pipe_io): Initialize tStdin/tStdout/tStderr variables.
	Fixes Savannah bug #13551.

2005-06-26  Paul D. Smith  <psmith@gnu.org>

	* make.h: Fix bug in ANSI_STRING/strerror() handling; only define
	it if ANSI_STRING is not set.

2005-06-25  Paul D. Smith  <psmith@gnu.org>

	* read.c (eval): If no filenames are passed to any of the
	"include" variants, don't print an error.
	* doc/make.texi (Include): Document this.
	Fixes Savannah bug #1761.

	* job.c (construct_command_argv_internal): Sanitize handling of
	backslash/newline pairs according to POSIX: that is, keep the
	backslash-newline in the command script, but remove a following
	TAB character, if present.  In the fast path, make sure that the
	behavior matches what the shell would do both inside and outside
	of quotes.  In the slow path, quote the backslash and put a
	literal newline in the string.
	Fixes Savannah bug #1332.
	* doc/make.texi (Execution): Document the new behavior and give
	some examples.
	* NEWS: Make a note of the new behavior.

	* make.h [WINDOWS32]: #include <direct.h>.
	Fixes Savannah bug #13478.

	* remake.c (name_mtime): If the stat() of a file fails and the -L
	option was given and the file is a symlink, take the best mtime of
	the symlink we can get as the mtime of the file and don't fail.
	Fixes Savannah bug #13280.

	* read.c (find_char_unquote): Accept a new argument IGNOREVARS.
	If it's set, then don't	stop on STOPCHARs or BLANKs if they're
	inside a variable reference.  Make this function static as it's
	only used here.
	(eval): Call find_char_unquote() with IGNOREVARS set when we're
	parsing an unexpanded line looking for semicolons.
	Fixes Savannah bug #1454.
	* misc.c (remove_comments): Move this to read.c and make it static
	as it's only used there.  Call find_char_unquote() with new arg.
	* make.h: Remove prototypes for find_char_unquote() and
	remove_comments() since they're static now.

	* main.c (main): If we see MAKE_RESTARTS in the environment, unset
	its export flag and obtain its value.  When we need to re-exec,
	increment the value and add it into the environment.
	* doc/make.texi (Special Variables): Document MAKE_RESTARTS.
	* NEWS: Mention MAKE_RESTARTS.
	* main.c (always_make_set): New variable.  Change the -B option to
	set this one instead.
	(main): When checking makefiles, only set always_make_flag if
	always_make_set is set AND the restarts flag is 0.  When building
	normal targets, set it IFF always_make_set is set.
	(main): Avoid infinite recursion with -W, too: only set what-if
	files to NEW before we check makefiles if we've never restarted
	before.  If we have restarted, set what-if files to NEW _after_ we
	check makefiles.
	Fixes Savannah bug #7566:

2005-06-17  Paul D. Smith  <psmith@gnu.org>

	* default.c: Change VMS implicit rules to use $$$$ instead of $$
	in the prerequisites list.

2005-06-12  Paul D. Smith  <psmith@gnu.org>

	Fix Savannah bug # 1328.

	* configure.in: Check for atexit().
	* misc.c (close_stdout): Test stdout to see if writes to it have
	failed.  If so, be sure to exit with a non-0 error code.  Based on
	code found in gnulib.
	* make.h: Prototype.
	* main.c (main): Install close_stdout() with atexit().

2005-06-10  Paul D. Smith  <psmith@gnu.org>

	VMS build updates from Hartmut Becker <Hartmut.Becker@hp.com>:

	* vmsjobs.c [VMS]: Updates to compile on VMS: add some missing
	headers; make vmsWaitForChildren() static; extern vmsify().
	* job.c [VMS]: Move vmsWaitForChildren() prototype to be global.
	Don't create child_execute_job() here (it's in vmsjobs.c).
	* makefile.vms (job.obj) [VMS]: Add vmsjobs.c as a prerequisite.

2005-06-09  Paul D. Smith  <psmith@gnu.org>

	* variable.c (push_new_variable_scope): File variables point
	directly to the global_setlist variable.  So, inserting a new
	scope in front of that has no effect on those variables: they
	don't go through current_variable_set_list.  If we're pushing a
	scope and the current scope is global, push it "the other way" so
	that the new setlist is in the global_setlist variable, and
	next points to a new setlist with the global variable set.
	(pop_variable_scope): Properly undo a push with the new
	semantics.
	Fixes Savannah bug #11913.

2005-05-31  Boris Kolpackov  <boris@kolpackov.net>

	* job.c (reap_children): Don't die of the command failed but
	the dontcare flag is set. Fixes Savannah bug #13216.

	* implicit.c (pattern_search): When creating a target from
	an implicit rule match, lookup pattern target and set precious
	flag in a newly created target. Fixes Savannah bug #13218.

2005-05-13  Paul D. Smith  <psmith@gnu.org>

	Implement "if... else if... endif" syntax.

	* read.c (eval): Push all checks for conditional words ("ifeq",
	"else", etc.) down into the conditional_line() function.
	(conditional_line): Rework to allow "else if..." clause.  New
	return value -2 for lines which are not conditionals.  The
	ignoring flag can now also be 2, which means "already parsed a
	true branch".  If that value is seen no other branch of this
	conditional can be considered true.  In the else parsing if there
	is extra text after the else, invoke conditional_line()
	recursively to see if it's another conditional.  If not, it's an
	error.  If so, raise the conditional value to this level instead
	of creating a new conditional nesting level.  Special check for
	"else" and "endif", which aren't allowed on the "else" line.
	* doc/make.texi (Conditional Syntax): Document the new syntax.

2005-05-09  Paul D. Smith  <psmith@gnu.org>

	* Makefile.am (EXTRA_make_SOURCES): Add vmsjobs.c
	(MAYBE_W32): Rework how SUBDIRS are handled so that "make dist"
	recurses to the w32 directory, even on non-Windows systems.  Use
	the method suggested in the automake manual.
	* configure.in: Add w32/Makefile to AC_CONFIG_FILES.
	* maintMakefile (gnulib-url): They moved the texinfo.tex files.

2005-05-07  Paul D. Smith  <psmith@gnu.org>

	* main.c (die): If we're dying with a fatal error (not that a
	command has failed), write back any leftover tokens before we go.

	* job.c (set_child_handler_action_flags): If there are jobs
	waiting for the load to go down, set an alarm to go off in 1
	second.  This allows us to wake up from a potentially long-lasting
	read() and start a new job if the load has gone down.  Turn it off
	after the read.
	(job_noop): Dummy signal handler function.
	(new_job): Invoke it with the new semantics.

	* docs/make.texi: Document secondary expansion.  Various cleanups
	and random work.

2005-05-03  Paul D. Smith  <psmith@gnu.org>

	Rename .DEFAULT_TARGET to .DEFAULT_GOAL: in GNU make terminology
	the targets which are to ultimately be made are called "goals";
	see the GNU make manual.  Also, MAKECMDGOALS, etc.

	* filedef.h, read.c, main.c: Change .DEFAULT_TARGET to
	.DEFAULT_GOAL, and default_target_name to default_goal_name.
	* doc/make.texi (Special Variables): Document .DEFAULT_GOAL.

2005-05-02  Paul D. Smith  <psmith@gnu.org>

	* job.c, vmsjobs.c (vmsWaitForChildren, vms_redirect,
	vms_handle_apos, vmsHandleChildTerm, reEnableAst, astHandler,
	tryToSetupYAst, child_execute_job) [VMS]: Move VMS-specific
	functions to vmsjobs.c.  #include it into jobs.c.

	Grant Taylor <gtaylor@picante.com> reports that -j# can lose
	jobserver tokens.  I found that this happens when an exported
	recursive variable contains a $(shell ...) function reference: in
	this situation we could "forget" to write back a token.

	* job.c, job.h: Add variable jobserver_tokens: counts the tokens
	we have.  It's not reliable to depend on the number of children in
	our linked list so keep a separate count.
	(new_job): Check jobserver_tokens rather than children &&
	waiting_jobs.  Increment jobserver_tokens when we get one.
	(free_child): If jobserver_tokens is 0, internal error.  If it's
	>1, write a token back to the jobserver pipe (we don't write a
	token for the "free" job).  Decrement jobserver_tokens.

	* main.c: Add variable master_job_slots.
	(main): Set it to hold the number of jobs requested if we're the
	master process, when using the jobserver.
	(die): Sanity checks: first test jobserver_tokens to make sure
	this process isn't holding any tokens we didn't write back.
	Second, if master_job_slots is set count the tokens left in the
	jobserver pipe and ensure it's the same as master_job_slots (- 1).

2005-04-24  Paul D. Smith  <psmith@gnu.org>

	Grant Taylor <gtaylor@picante.com> reports that -j# in conjunction
	with -l# can lose jobserver tokens, because waiting jobs are not
	consulted properly when checking for the "free" token.

	* job.c (free_child): Count waiting_jobs as having tokens.
	* job.c (new_job): Ditto.  Plus, call start_waiting_jobs() here to
	handle jobs waiting for the load to drop.

2005-04-23  Paul D. Smith  <psmith@gnu.org>

	* main.c (main): Be careful to not core if a variable setting in
	the environment doesn't contain an '='.  This is illegal but can
	happen in broken setups.
	Reported by Joerg Schilling <schilling@fokus.fraunhofer.de>.

2005-04-12  Paul D. Smith  <psmith@gnu.org>

	The second expansion feature causes significant slowdown.  Timing
	a complex makefile (GCC 4.1) shows a slowdown from .25s to just
	read the makefile before the feature, to 11+s to do the same
	operations after the feature.  Additionally, memory usage
	increased drastically.  To fix this I added some intelligence that
	avoids the overhead of the second expansion unless it's required.

	* dep.h: Add a new boolean field, need_2nd_expansion.

	* read.c (eval): When creating the struct dep for the target,
	check if the name contains a "$"; if so set need_2nd_expansion to 1.
	(record_files): If there's a "%" in a static pattern rule, it gets
	converted to "$*" so set need_2nd_expansion to 1.

	* file.c (expand_deps): Rework to be more efficient.  Only perform
	initialize_file_variables(), set_file_variables(), and
	variable_expand_for_file() if the need_2nd_expansion is set.

	* implicit.c (pattern_search): Default need_2nd_expansion to 0.
	(pattern_search): Ditto.
	* main.c (handle_non_switch_argument): Ditto.
	(main): Ditto.
	* read.c (read_all_makefiles): Ditto.
	(eval_makefile): Ditto.

2005-04-07  Paul D. Smith  <psmith@gnu.org>

	* main.c (main) [WINDOWS32]: Export PATH to sub-shells, not Path.
	* variable.c (sync_Path_environment): Ditto.
	Patch by Alessandro Vesely.  Fixes Savannah bug #12209.

	* main.c (main): Define the .FEATURES variable.
	* NEWS: Announce .FEATURES.
	* doc/make.texi (Special Variables): Document .FEATURES.

	* remake.c (check_dep): If a file is .PHONY, update it even if
	it's marked intermediate.  Fixes Savannah bug #12331.

2005-03-15  Boris Kolpackov  <boris@kolpackov.net>

	* file.c (expand_deps): Factor out the second expansion and
	prerequisite line parsing logic from snap_deps().

	* file.c (snap_deps): Use expand_deps(). Expand and parse
	prerequisites of the .SUFFIXES special target first. Fixes
	Savannah bug #12320.

2005-03-13  Paul D. Smith  <psmith@gnu.org>

	* main.c (main) [MSDOS]: Export SHELL in MSDOS.  Requested by Eli
	Zaretskii.

2005-03-11  Paul D. Smith  <psmith@gnu.org>

	* signame.c (strsignal): HAVE_DECL_SYS_SIGLIST is 0 when not
	available, not undefined (from Earnie Boyd).

2005-03-10  Boris Kolpackov  <boris@kolpackov.net>

	* implicit.c (pattern_search): Mark an intermediate target as
	precious if it happened to be a prerequisite of some (other)
	target. Fixes Savannah bug #12267.

2005-03-09  Paul D. Smith  <psmith@gnu.org>

	* read.c (eval_makefile): Add alloca(0).
	(eval_buffer): Ditto.

2005-03-09  Boris Kolpackov  <boris@kolpackov.net>

	* main.c (main): Use o_file instead of o_default when defining
	the .DEFAULT_TARGET special variable.
	* read.c (eval): Use define_variable_global() instead of
	define_variable() when setting new value for the .DEFAULT_TARGET
	special variable.  Fixes Savannah bug #12266.

2005-03-04  Boris Kolpackov  <boris@kolpackov.net>

	* imlicit.c (pattern_search): Mark files for which an implicit
	rule has been found as targets. Fixes Savannah bug #12202.

2005-03-04  Paul D. Smith  <psmith@gnu.org>

	* AUTHORS: Update.
	* doc/make.texi (Automatic Variables): Document $|.

2005-03-03  Boris Kolpackov  <boris@kolpackov.net>

	* read.c (record_files): Instead of substituting % with
	actual stem value in dependency list replace it with $*.
	This fixes stem triple expansion bug.

	* implicit.c (pattern_search): Copy stem to a separate
	buffer and make it a properly terminated string. Assign
	this buffer instead of STEM (which is not terminated) to
	f->stem. Instead of substituting % with actual stem value
	in dependency list replace it with $*. This fixes stem
	triple expansion bug.

2005-03-01  Paul D. Smith  <psmith@gnu.org>

	* commands.c (fatal_error_signal) [WINDOWS32]: Don't call kill()
	on Windows, as it takes a handle not a pid.  Just exit.
	Fix from patch #3679, provided by Alessandro Vesely.

	* configure.in: Update check for sys_siglist[] from autoconf manual.
	* signame.c (strsignal): Update to use the new autoconf macro.

2005-03-01  Boris Kolpackov  <boris@kolpackov.net>

	* read.c (record_files): Add a check for the list of prerequisites
	of a static pattern rule being empty. Fixes Savannah bug #12180.

2005-02-28  Paul D. Smith  <psmith@gnu.org>

	* doc/make.texi (Text Functions): Update docs to allow the end
	ordinal for $(wordlist ...) to be 0.
	* function.c (func_wordlist): Fail if the start ordinal for
	$(wordlist ...) is <1.  Matches documentation.
	Resolves Savannah support request #103195.

	* remake.c (update_goal_chain): Fix logic for stopping in -q:
	previously we were stopping when !-q, exactly the opposite.  This
	has been wrong since version 1.34, in 1994!
	(update_file): If we got an error don't break out to run more
	double-colon rules: just return immediately.
	Fixes Savannah bug #7144.

2005-02-27  Paul D. Smith  <psmith@gnu.org>

	* misc.c (end_of_token): Make argument const.
	* make.h: Update prototype.

	* function.c (abspath, func_realpath, func_abspath): Use
	PATH_VAR() and GET_PATH_MAX instead of PATH_MAX.
	* dir.c (downcase): Use PATH_VAR() instead of PATH_MAX.
	* read.c (record_files): Ditto.
	* variable.c (do_variable_definition): Ditto.

	* function.c (func_error): Create a new function $(info ...) that
	simply prints the message to stdout with no extras.
	(function_table_init): Add new function to the table.
	* NEWS: Add $(info ...) reference.
	* doc/make.texi (Make Control Functions): Document it.

	New feature: if the system supports symbolic links, and the user
	provides the -L/--check-symlink-time flag, then use the latest
	mtime between the symlink(s) and the target file.

	* configure.in (MAKE_SYMLINKS): Check for lstat() and
	readlink().  If both are available, define MAKE_SYMLINKS.
	* main.c: New variable: check_symlink_flag.
	(usage): Add a line for -L/--check-symlink-times to the help string.
	(switches): Add -L/--check-symlink-times command line argument.
	(main): If MAKE_SYMLINKS is not defined but the user specified -L,
	print a warning and disable it again.
	* make.h: Declare check_symlink_flag.
	* remake.c (name_mtime): If MAKE_SYMLINKS and check_symlink_flag,
	if the file is a symlink then check each link in the chain and
	choose the NEWEST mtime we find as the mtime for the file.  The
	newest mtime might be the file itself!
	* NEWS: Add information about this new feature.
	* doc/make.texi (Options Summary): Add -L/--check-symlink-times docs.

	Avoid core dumps described in Savannah bug # 12124:

	* file.c: New variable snapped_deps remember whether we've run
	snap_deps().
	(snap_deps): Set it.
	* filedef.h: Extern it.
	* read.c (record_files): Check snapped_deps; if it's set then
	we're trying to eval a new target/prerequisite relationship from
	within a command script, which we don't support.  Fatal.

2005-02-28  Boris Kolpackov  <boris@kolpackov.net>

	Implementation of the .DEFAULT_TARGET special variable.

	* read.c (eval): If necessary, update default_target_name when
	reading rules.
	* read.c (record_files): Update default_target_file if
	default_target_name has changed.
	* main.c (default_target_name): Define.
	* main.c (main): Enter .DEFAULT_TARGET as make variable. If
	default_target_name is set use default_target_file as a root
	target to make.
	* filedef.h (default_target_name): Declare.
	* dep.h (free_dep_chain):
	* misc.c (free_dep_chain): Change to operate on struct nameseq
	and change name to free_ns_chain.
	* file.c (snap_deps): Update to use free_ns_chain.

2005-02-27  Boris Kolpackov  <boris@kolpackov.net>

	Implementation of the second expansion in explicit rules,
	static pattern rules and implicit rules.

	* read.c (eval): Refrain from chopping up rule's dependencies.
	Store them in a struct dep as a single dependency line. Remove
	the code that implements SySV-style automatic variables.

	* read.c (record_files): Adjust the code that handles static
	pattern rules to expand all percents instead of only the first
	one. Reverse the order in which dependencies are stored so that
	when the second expansion reverses them again they appear in
	the makefile order (with some exceptions, see comments in
	the code). Remove the code that implements SySV-style automatic
	variables.

	* file.c (snap_deps): Implement the second expansion and chopping
	of dependency lines for explicit rules.

	* implicit.c (struct idep): Define an auxiliary data type to hold
	implicit rule's dependencies after stem substitution and
	expansion.

	* implicit.c (free_idep_chain): Implement.

	* implicit.c (get_next_word): Implement helper function for
	parsing implicit rule's dependency lines into words taking
	into account variable expansion requests. Used in the stem
	splitting code.

	* implicit.c (pattern_search): Implement the second expansion
	for implicit rules. Also fixes bug #12091.

	* commands.h (set_file_variables): Declare.
	* commands.c (set_file_variables): Remove static specifier.

	* dep.h (free_dep_chain): Declare.
	* misc.c (free_dep_chain): Implement.

	* variable.h (variable_expand_for_file): Declare.
	* expand.c (variable_expand_for_file): Remove static specifier.

	* make.h (strip_whitespace): Declare.
	* function.c (strip_whitespace): Remove static specifier.

2005-02-26  Paul D. Smith  <psmith@gnu.org>

	* main.c (main): Check for ferror() when reading makefiles from stdin.
	Apparently some shells in Windows don't close pipes properly and
	require this check.

2005-02-24  Jonathan Grant  <jg@jguk.org>

	* configure.in: Add MinGW configuration options, and extra w32 code
	directory.
	* Makefile.am: Add MinGW configuration options, and extra w32 code
	directory.
	* main.c: Determine correct program string (after last \ without .exe).
	* subproc/sub_proc.c: `GetExitCodeProcess' from incompatible pointer
	type fix x2
	* w32/Makefile.am: Import to build win32 lib of sub_proc etc.
	* subproc/w32err.c: MSVC thread directive not applied to MinGW builds.
	* tests/run_make_tests.pl, tests/test_driver.pl: MSYS testing
	environment support.

2004-04-16  Dmitry V. Levin  <ldv@altlinux.org>

	* function.c (func_shell): When initializing error_prefix, check
	that reading file name is not null.  This fixes long-standing
	segfault in cases like "make 'a1=$(shell :)' 'a2:=$(a1)'".

2005-02-09  Paul D. Smith  <psmith@gnu.org>

	* maintMakefile: Update the CVS download URL to simplify them.
	Also, the ftp://ftp.gnu.org/GNUinfo site was removed so I'm
	downloading the .texi files from Savannah now.

	Fixed these issues reported by Markus Mauhart <qwe123@chello.at>:

	* main.c (handle_non_switch_argument): Only add variables to
	command_variables if they're not already there: duplicate settings
	waste space and can be confusing to read.

	* w32/include/sub_proc.h: Remove WINDOWS32.  It's not needed since
	this header is never included by non-WINDOWS32 code, and it
	requires <config.h> to define which isn't always included first.

	* dir.c (read_dirstream) [MINGW]: Use proper macro names when
	testing MINGW32 versions.

	* main.c (log_working_directory): flush stdout to be sure the WD
	change is printed before any stderr messages show up.

2005-02-01  Paul D. Smith  <psmith@gnu.org>

	* maintMakefile (po_repo): Update the GNU translation site URL.

2004-12-01  Paul D. Smith  <psmith@gnu.org>

	* main.c (main): Change char* env_shell to struct variable shell_var.
	* variable.c (target_environment): Use new shell_var.

2004-11-30  Paul D. Smith  <psmith@gnu.org>

	* configure.in: The old way we avoided creating build.sh from
	build.sh.in before build.sh.in exists doesn't work anymore; we
	have to use raw M4 (thanks to Andreas Schwab <schwab@suse.de> for
	the help!).  This also keeps automake from complaining.
	* Makefile.am (README): Add a dummy target so automake won't
	complain that this file doesn't exist when we checkout from CVS.
	* maintMakefile (.dep_segment): Rewrite this rule since newer
	versions of automake don't provide DEP_FILES.

2004-11-30  Boris Kolpackov  <boris@kolpackov.net>

	Implementation of `realpath' and `abspath' built-in functions.

	* configure.in: Check for realpath.
	* function.c (abspath): Return an absolute file name that does
	not contain any `.' or `..' components, nor repeated `/'.
	* function.c (func_abspath): For each name call abspath.
	* function.c (func_realpath): For each name call realpath
	from libc or delegate to abspath if realpath is not available.
	* doc/make.texi (Functions for File Names): Document new functions.
	* doc/make.texi (Quick Reference): Ditto.

2004-11-28  Paul D. Smith  <psmith@gnu.org>

	* main.c (main) [WINDOWS32]: Remove any trailing slashes from -C
	arguments.  Fixes bug #10252.

	Fix for bug #1276: Handle SHELL according to POSIX requirements.

	* main.c (main): Set SHELL to v_noexport by default.  Remember the
	original environment setting of SHELL in the env_shell variable.
	* main.h: Export new env_shell variable.
	* variable.c (target_environment): If we find a v_noexport
	variable for SHELL, add a SHELL variable with the env_shell value.
	* doc/make.texi (Quick Reference): Document the POSIX behavior.
	* doc/make.texi (Variables/Recursion): Ditto.

2004-11-28  Paul D. Smith  <psmith@gnu.org>

	* main.c (find_and_set_default_shell) [WINDOWS32]: check for
	equality of "cmd"/"cmd.exe", not inequality.  Fixes bug #11155.
	Patch by Alessandro Vesely.

2004-11-12  Paul D. Smith  <psmith@gnu.org>

	* job.c (child_execute_job) [VMS]: Don't treat "#" as a comment on
	the command line if it's inside a string.
	Patch by: Hartmut Becker <Hartmut.Becker@hp.com>

2004-10-21  Boris Kolpackov  <boris@kolpackov.net>

	* function.c (func_lastword): New function: return last word
	from the list of words.
	* doc/make.texi: Document $(lastword ). Fix broken links in
	Quick Reference section.

2004-10-06  Paul D. Smith  <psmith@gnu.org>

	Apply patch from Alessandro Vesely, provided with bug # 9748.
	Fix use of tmpnam() to work with Borland C.

	* job.c (construct_command_argv_internal) [WINDOWS32]: Remove
	construction of a temporary filename, and call new function
	create_batch_filename().
	(create_batch_filename) [WINDOWS32]: New function to create a
	temporary filename.

2004-10-05  Boris Kolpackov  <boris@kolpackov.net>

	* read.c (record_target_var): Expand simple pattern-specific
	variable.
	* variable.c (initialize_file_variables): Do not expand simple
	pattern-specific variable.

2004-09-28  Boris Kolpackov  <boris@kolpackov.net>

	* remake.c (update_file_1): When rebuilding makefiles inherit
	dontcare flag from a target that triggered update.

2004-09-27  Boris Kolpackov  <boris@kolpackov.net>

	* variable.c (initialize_file_variables): Mark pattern-specific
	variable as a per-target and copy export status.

2004-09-21  Boris Kolpackov  <boris@kolpackov.net>

	* file.c (snap_deps): Mark .PHONY prerequisites as targets.

	* implicit.c (pattern_search): When considering an implicit rule's
	prerequisite check that it is actually a target rather then
	just an entry in the file hashtable.

2004-09-21  Paul D. Smith  <psmith@gnu.org>

	* read.c (readstring): Fix some logic errors in backslash handling.
	(eval): Remove some unnecessary processing in buffer handling.
	(record_target_var): Assert that parse_variable_definition() succeeded.
	Reported by: Markus Mauhart <qwe123@chello.at>.

	* misc.c: Removed the sindex() function.  All instances of this
	function were trivially replaceable by the standard strstr()
	function, and that function will always have better (or certainly
	no worse) performance than the very simple-minded algorithm
	sindex() used.  This can matter with complex makefiles.
	* make.h: Remove the prototype for sindex().
	* function.c (subst_expand): Convert sindex() call to strstr().
	This means we no longer need to track the TLEN value so remove that.
	(func_findstring): Convert sindex() to strstr().
	* commands.c (chop_commands): Convert sindex() calls to strstr().
	Suggested by: Markus Mauhart <qwe123@chello.at>.

	* main.c (find_and_set_default_shell) [WINDOWS32]: Implement the
	idea behind Savannah Patch #3144 from david.baird@homemail.com.
	If SHELL is set to CMD.EXE then assume it's batch-mode and
	non-unixy.  I wrote the code differently from the patch, though,
	to make it safer.  This also resolves bug #9174.

2004-09-20  Paul D. Smith  <psmith@gnu.org>

	* expand.c (variable_expand_string): Modify to invoke
	patsubst_expand() instead of subst_expand(); the latter didn't
	handle suffix patterns correctly.
	* function.c (subst_expand): Remove the SUFFIX_ONLY parameter; it
	was used only from variable_expand_string() and is no longer used
	there.
	(func_subst): Ditto, on call to subst_expand().
	(patsubst_expand): Require the percent pointers to point to the
	character after the %, not to the % itself.
	* read.c (record_files): New call criteria for patsubst_expand().
	* variable.h: Remove SUFFIX_ONLY from subst_expand() prototype.
	This is to fix a bug reported by Markus Mauhart <qwe123@chello.at>.

2004-09-19  Paul D. Smith  <psmith@gnu.org>

	* function.c (subst_expand): Fix a check in by_word: look for a
	previous blank if we're beyond the beginning of the string, not
	the beginning of the word.
	Bugs reported by Markus Mauhart <qwe123@chello.at>.

2004-05-16  Paul D. Smith  <psmith@gnu.org>

	* remake.c (update_goal_chain): Change the argument specifying
	whether we're rebuilding makefiles to be a global variable,
	REBUILDING_MAKEFILES.
	(complain): Extract the code that complains about no rules to make
	a target into a separate function.
	(update_file_1): If we tried to rebuild a file during the makefile
	rebuild phase and it was dontcare, then no message was printed.
	If we then try to build the same file during the normal build,
	print a message this time.
	(remake_file): Don't complain about un-remake-able files when
	we're rebuilding makefiles.

2004-05-11  Paul D. Smith  <psmith@gnu.org>

	* job.c (construct_command_argv_internal): OS/2 patches from
	Andreas Buening <andreas.buening@nexgo.de>.

2004-05-10  Paul D. Smith  <psmith@gnu.org>

	* remake.c (update_file): Don't walk the double-colon chain unless
	this is a double-colon rule.  Fix suggested by Boris Kolpackov
	<boris@kolpackov.net>.

	* makefile.vms (CFLAGS): Remove glob/globfree (see readme.vms docs)
	* readme.vms: New section describing OpenVMS support and issues.
	* default.c (default_variables): Add support for IA64.
	* job.c (tryToSetupYAst) [VMS]: On VMS running make in batch mode
	without some privilege aborts make with the error
	%SYSTEM-F-NOPRIV. It happens when setting up a handler for
	pressing Ctrl+Y and the input device is no terminal. The change
	catches this error and just continues.

	Patches by Hartmut Becker <Hartmut.Becker@hp.com>

2004-04-25  Paul D. Smith  <psmith@gnu.org>

	* commands.c (set_file_variables): Set $< properly in the face of
	order-only prerequisites.
	Patch from Boris Kolpackov <boris@kolpackov.net>

2004-04-21  Bob Byrnes  <byrnes@curl.com>

	* main.c (main): Notice failures to remake makefiles.

2004-03-28  Paul D. Smith  <psmith@gnu.org>

	Patches for Acorn RISC OS by Peter Naulls <peter@chocky.org>

	* job.c: No default shell for RISC OS.
	(load_too_high): Hard-code the return to 1.
	(construct_command_argv_internal): No sh_chars or sh_cmds.
	* getloadavg.c: Don't set LOAD_AVE_TYPE on RISC OS.

2004-03-20  Paul D. Smith  <psmith@gnu.org>

	* variable.c (do_variable_definition): Don't append from the
	global set if a previous non-appending target-specific variable
	definition exists.  Reported by Oliver Schmidt <oschmidt@gmx.net>
	(with fix).

	* expand.c (reference_variable): Don't give up on variables with
	no value that have the target-specific append flag set: they might
	have a value after all.  Reported by Oliver Schmidt
	<oschmidt@gmx.net> (with fix) and also by Maksim A. Nikulin
	<nikulin@dx1cmd.inp.nsk.su>.

	* rule.c (count_implicit_rule_limits): Don't delete patterns which
	refer to absolute pathnames in directories that don't exist: some
	portion of the makefile could create those directories before we
	match the pattern.  Fixes bugs #775 and #108.

	Fixes from Jonathan R. Grant  <jg-make@jguk.org>:

	* main.c (main): Free makefile_mtimes if we have any.
	* README.W32.template: Update documentation for the current status
	of the MS-Windows port.
	* NMakefile.template (MAKE): Add "MAKE = nmake".  A conflicting
	environment variable is sometimes already defined which causes the
	build to fail.
	* main.c (debug_signal_handler): Only define this function if
	SIGUSR1 is available.

	Fixes for OS/2 from Andreas Beuning <andreas.buening@nexgo.de>:

	* configure.in [OS/2]: Relocate setting of HAVE_SA_RESTART for OS/2.
	* README.OS2.template: Documentation updates.
	* build.template: Add LIBINTL into LOADLIBES.  Add $CFLAGS to the
	link line for safety.
	* maintMakefile (build.sh.in): Remove an extraneous ")".
	* job.c (child_execute_job): Close saved FDs.
	* job.c (exec_command) [OS/2]: exec_command(): If the command
	can't be exec'ed and if the shell is not Unix-sh, then try again
	with argv = { "cmd", "/c", ... }. Normally, this code is never
	reached for the cmd shell unless the command really doesn't exist.
	(construct_command_argv_internal) [OS/2]: The code for cmd
	handling now uses new_argv = { "cmd", "/c", "original line", NULL}.
	The CMD builtin commands are case insensitive so use strcasecmp().

2004-03-19  Paul D. Smith  <psmith@gnu.org>

	* read.c (do_define): Re-order line counter increment so the count
	is accurate (we were losing one line per define).  Reported by
	Dave Yost <Dave@Yost.com>.

2004-03-06  Paul D. Smith  <psmith@gnu.org>

	* configure.in (HAVE_ANSI_COMPILER): Define if we have an ANSI/ISO
	compiler.
	* make.h: Convert uses of __STDC__ to HAVE_ANSI_COMPILER.
	* misc.c (message,error,fatal): Ditto.
	* configh.dos.template: Define HAVE_ANSI_COMPILER.
	* config.h.W32.template: Ditto.
	* config.h-vms.template: Ditto.
	* config.ami.template: Ditto.

2004-03-04  Paul D. Smith  <psmith@gnu.org>

	* README.template: Add a note about broken /bin/sh on SunOS
	4.1.3_U1 & 4.1.4.  Fix up Savannah links.

	* misc.c (message, error, fatal): Don't use "..." if we're using
	varargs.  ansi2knr should handle this but it doesn't work: it
	translates "..." to va_dcl etc. but _AFTER_ the preprocessor is
	done.  On many systems (SunOS for example) va_dcl is a #define.
	So, force the use of the non-"..." version on pre-ANSI compilers.

	* maintMakefile (sign-dist): Create some rules to help automate
	the new GNU ftp upload method.

2004-02-24  Paul D. Smith  <psmith@gnu.org>

	* config.h.W32.template: Add HAVE_STDARG_H
	* config.h-vms.template: Ditto.
	* config.ami.template: Ditto.

2004-02-23  Jonathan Grant  <jg-make@jguk.org>

	* README.W32.template: Add a notation about -j with BATCH_MODE_ONLY.
	* build_w32.bat: Remove extra "+".

2004-02-23  Paul D. Smith  <psmith@gnu.org>

	* make.h: Create an UNUSED macro to mark unused parameters.
	* (many): Clean up warnings by applying UNUSED, fixing
	signed/unsigned incompatibilities, etc.

	* acinclude.m4 (AC_STRUCT_ST_MTIM_NSEC): Add quoting to silence
	autoconf warnings.
	* filedef.h: Name the command_state enumeration.
	* file.c (set_command_state): Use the enumeration in the function
	argument.

	* configure.in: Explicitly set SET_MAKE to empty, to disable
	MAKE=make even when no make already exists.  Fix bug #3823.

2004-02-22  Paul D. Smith  <psmith@gnu.org>

	* maintMakefile: Perl script to clean up all non-CVS files.  Use
	it on all the subdirectories for the cvs-clean target.

	* main.c (decode_switches): Require non-empty strings for all our
	string command-line options.  Fixes Debian bug # 164165.

	* configure.in: Check for stdarg.h and varargs.h.
	* make.h (USE_VARIADIC): Set this if we can use variadic functions
	for printing messages.
	* misc.c: Check USE_VARIADIC instead of (obsolete) HAVE_STDVARARGS.
	(message): Ditto.
	(error): Ditto.
	(fatal): Ditto.

	A number of patches for OS/2 support from Andreas Buening
	<andreas.buening@nexgo.de>:

	* job.c (child_handler) [OS/2]: Allow this on OS/2 but we have to
	disable the SIGCHLD handler.
	(reap_children) [OS/2]: Remove special handling of job_rfd.
	(set_child_handler_action_flags) [OS/2]: Use this function in OS/2.
	(new_job) [OS/2]: Disable the SIGCHLD handler on OS/2.
	* main.c (main) [OS/2]: Special handling for paths in OS/2.
	* configure.in [OS/2]: Force SA_RESTART for OS/2.
	* Makefile.am (check-regression): Use $(EXEEXT) for Windows-type
	systems.

2004-02-21  Paul D. Smith  <psmith@gnu.org>

	* w32/subproc/sub_proc.c (process_easy) [W32]: Christoph Schulz
	<mail@kristov.de> reports that if process_begin() fails we don't
	handle the error condition correctly in all cases.
	* w32/subproc/w32err.c (map_windows32_error_to_string): Make sure
	to have a newline on the message.

	* job.c (construct_command_argv_internal): Add "test" to UNIX
	sh_cmds[].  Fixes Savannah bug # 7606.

2004-02-04  Paul D. Smith  <psmith@gnu.org>

	* job.c (vms_handle_apos) [VMS]: Fix various string handling
	situations in VMS DCL.  Fixes Savannah bug #5533.  Fix provided by
	Hartmut Becker <Hartmut.Becker@hp.com>.

2004-01-21  Paul D. Smith  <psmith@gnu.org>

	* job.c (load_too_high): Implement an algorithm to control the
	"thundering herd" problem when using -l to control job creation
	via the load average.  The system only recomputes the load once a
	second but we can start many jobs in a second.  To solve this we
	keep track of the number of jobs started in the last second and
	apply a weight to try to guess what a correct load would be.
	The algorithm was provided by Thomas Riedl <thomas.riedl@siemens.com>.
	Also fixes bug #4693.
	(reap_children): Decrease the job count for this second.
	(start_job_command): Increase the job count for this second.

	* read.c (conditional_line): Expand the text after ifn?def before
	checking to see if it's a single word.  Fixes bug #7257.

2004-01-09  Paul D. Smith  <psmith@gnu.org>

	* file.c (print_file): Recurse to print all targets in
	double-colon rules.  Fixes bug #4518, reported (with patch) by
	Andrew Chatham <chatham@google.com>.

2004-01-07  Paul D. Smith  <psmith@gnu.org>

	* acinclude.m4: Remove make_FUNC_SETVBUF_REVERSED.
	* configure.in: Change make_FUNC_SETVBUF_REVERSED to
	AC_FUNC_SETVBUF_REVERSED.

	* doc/make.texi (Target-specific): Fix Savannah bug #1772.
	(MAKE Variable): Fix Savannah bug #4898.

	* job.c (construct_command_argv_internal): Add "!" to the list of
	shell escape chars.  POSIX sh allows it to appear before a
	command, to negate the exit code.  Fixes bug #6404.

	* implicit.c (pattern_search): When matching an implicit rule,
	remember which dependencies have the ignore_mtime flag set.
	Original fix provided in Savannah patch #2349, by Benoit
	Poulot-Cazajous <Benoit.Poulot-Cazajous@jaluna.com>.

2003-11-22  Paul D. Smith  <psmith@gnu.org>

	* README.W32.template (Outputs): Clarification on -j with
	BATCH_MODE_ONLY_SEHLL suggested by Jonathan R. Grant
	<jg-make@jguk.org>.

2003-11-02  Paul D. Smith  <psmith@gnu.org>

	* function.c (func_if): Strip all the trailing whitespace from the
	condition, then don't expand it.  Fixed bug # 5798.

	* expand.c (recursively_expand_for_file): If we're expanding a
	variable with no file context, then use the variable's context.
	Fixes bug # 6195.

2003-10-21  Paul D. Smith  <psmith@gnu.org>

	* main.c (log_working_directory): Add newlines to printf()s.

	* README.cvs: Add a note to ignore warnings during autoreconf.

	* maintMakefile (po_repo): Set a new URL for PO file updates.
	(get-config/config.guess get-config/config.sub): Get these files
	from the Savannah config project instead of ftp.gnu.org.

2003-10-05  Paul Eggert  <eggert@twinsun.com>

	* main.c (main): Avoid potential subscript error if environ has
	short strings.

2003-08-22  Paul D. Smith  <psmith@gnu.org>

	* misc.c (xmalloc, xrealloc): Add one to 0 sizes, to cater to
	systems which don't yet implement the C89 standard :-/.

2003-07-18  Paul D. Smith  <psmith@gnu.org>

	* dir.c (directory_contents_hash_1, directory_contents_hash_1)
	[WINDOWS32]: Initialize hash.

2003-06-19  Earnie Boyd  <earnie@uses.sf.net>

	* dir.c (read_dirstream): Provide a workaround for broken versions of
	the MinGW dirent structure.

2003-05-30  Earnie Boyd  <earnie@users.sf.net>

	* w32/include/dirent.h: Add __MINGW32__ filter.

2003-05-30  Earnie Boyd  <earnie@users.sf.net>

	* make.h: Add global declaration of *make_host.
	* main.c (print_usage): Remove local declaration of *make_host.
	(print_version): Display "This program built for ..." after Copyright
	notice.

2003-05-30  Earnie Boyd  <earnie@users.sf.net>

	* doc/make.texi: Change "ifinfo" to "ifnottex" as suggested by the
	execution of "makeinfo --html make.texi".

2003-04-30  Paul D. Smith  <psmith@gnu.org>

	* build.template: Make some changes to maybe allow this script to
	work on DOS/Windows/OS2 systems.  Suggested by Andreas Buening.

	* README.OS2.template: New file for OS/2 support.  Original
	contributed by Andreas Buening.
	* configure.in: Invoke new pds_AC_DOS_PATHS macro to test for
	DOS-style paths.

2003-04-19  Paul D. Smith  <psmith@gnu.org>

	Fix bug #1405: allow a target to match multiple pattern-specific
	variables.

	* rule.c (create_pattern_var, lookup_pattern_var): Move these to
	variable.c, where they've always belonged.
	* rule.h: Move the prototypes and struct pattern_var as well.
	* variable.c (initialize_file_variables): Invoke
	lookup_pattern_var() in a loop, until no more matches are found.
	If a match is found, create a new variable set for the target's
	pattern variables.  Then merge the contents of each matching
	pattern variable set into the target's pattern variable set.
	(lookup_pattern_var): Change this function to be usable
	in a loop.  It takes a starting position: if NULL, start at the
	beginning; if non-NULL, start with the pattern variable after that
	position, and return the next matching pattern.
	(create_pattern_var): Create a unique instance of
	pattern-specific variables for every definition in the makefile.
	Don't combine the same pattern together.  This allows us to
	process the variable handling properly even when the same pattern
	is used multiple times.
	(parse_variable_definition): New function: break out the parsing
	of a variable definition line from try_variable_definition.
	(try_variable_definition): Call parse_variable_definition to
	parse.
	(print_variable_data_base): Print out pattern-specific variables.
	* variable.h (struct variable): Remember when a variable is
	conditional.  Also remember its flavor.
	(struct pattern_var): Instead of keeping a variable set, we just
	keep a single variable for each pattern.
	* read.c (record_target_var): Each pattern variable contains only a
	single variable, not a set, so create it properly.
	* doc/make.texi (Pattern-specific): Document the new behavior.

2003-04-17  Paul D. Smith  <psmith@gnu.org>

	* dir.c (file_exists_p) [VMS]: Patch provided with Bug #3018 by
	Jean-Pierre Portier <portierjp2@free.fr>.  I don't understand the
	file/directory naming rules for VMS so I can't tell whether this
	is correct or not.

2003-04-09  Paul D. Smith  <psmith@gnu.org>

	* configure.in (HAVE_DOS_PATHS): Define this on systems that need
	DOS-style pathnames: backslash separators and drive specifiers.

2003-03-28  Paul D. Smith  <psmith@gnu.org>

	* file.c (snap_deps): If .SECONDARY with no targets is given, set
	the intermediate flag on all targets.  Fixes bug #2515.

2003-03-24  Paul D. Smith  <psmith@gnu.org>

	* configure.in, Makefile.am, glob/Makefile.am, doc/Makefile.am:
	Upgrade to autoconf 2.57 and automake 1.7.3.

	* job.c: More OS/2 changes from Andreas Buening.

	* file.c (print_file): Fix variable initialization.
	Fixes bug #2892.

	* remake.c (notice_finished_file):

	* make.h (ENULLLOOP): Set errno = 0 before invoking the command;
	some calls (like readdir()) return NULL in valid situations
	without resetting errno.  Fixes bug #2846.

2003-02-25  Paul D. Smith  <psmith@gnu.org>

	Port to OS/2 (__EMX__) by Andreas Buening <andreas.buening@nexgo.de>.

	* job.c (_is_unixy_shell) [OS/2]: New function.
	Set default shell to /bin/sh.
	(reap_children): Close the job_rfd pipe here since we don't use a
	SIGCHLD handler.
	(set_child_handler_action_flags): define this to empty on OS/2.
	(start_job_command): Close the jobserver pipe and use
	child_execute_job() instead of fork/exec.
	(child_execute_job): Rewrite to handle stdin/stdout FDs and spawn
	rather than exec'ing, then reconfigure stdin/stdout.
	(exec_command): Rewrite to use spawn instead of exec.  Return the
	PID of the child.

	* main.c (main) [OS/2]: Call initialize_main().  Handle argv[0] as
	in DOS.  Handle the TEMP environment variable as in DOS.  Don't
	use a SIGCHLD handler on OS/2.  Choose a shell as in DOS.  Don't
	use -j in DOS mode.  Use child_execute_job() instead of
	exec_command().

	* function.c (func_shell) [OS/2]: Can't use fork/exec on OS/2: use
	spawn() instead.

	* job.h [OS/2]: Move CLOSE_ON_EXEC here from job.c.  Add
	prototypes that return values.

	* remake.c (f_mtime) [OS/2]: Handle FAT timestamp offsets for OS/2.

	* read.c (readline) [OS/2]: Don't handle CRLF specially on OS/2.
	* default.c (default_suffixes) [OS/2]: Set proper default suffixes
	for OS/2.
	* vpath.c (construct_vpath_list) [OS/2]: Handle OS/2 paths like
	DOS paths.

2003-02-24  Paul D. Smith  <psmith@gnu.org>

	* default.c [VMS]: New default rules for .cxx -> .obj compiles.
	* job.c (child_execute_job) [VMS]: New code for handling spawn().
	(child_execute_job) [VMS]: Handle error status properly.
	Patches provided by Hartmut Becker <Hartmut.Becker@compaq.com>.

	* function.c (func_shell): Use EINTRLOOP() while reading from the
	subshell pipe (Fixes bug #2502).
	* job.c (free_child): Use EINTRLOOP() while writing tokens to the
	jobserver pipe.
	* main.c (main): Ditto.

2003-01-30  Paul D. Smith  <psmith@gnu.org>

	* read.c (eval): eval() was not fully reentrant, because the
	collapsed buffer was static.  Change it to be an automatic
	variable so that eval() can be invoked recursively.
	Fixes bug # 2238.
	(eval): Apply patch # 1022: fix memory reference error on long
	target-specific variable lines.
	Patch provided by Steve Brown <Steve.Brown@macquarie.com>.

	* function.c (check_numeric): Combine the is_numeric() function
	into this function, since it's only called from one place.
	Constify this function.  Have it print the incorrect string in the
	error message.  Fixes bug #2407.
	(strip_whitespace): Constify.
	(func_if): Constify.
	* expand.c (expand_argument): Constify.

2003-01-29  Paul D. Smith  <psmith@gnu.org>

	Fix bug # 2169, also reported by other people on various systems.

	* make.h: Some systems, such as Solaris and PTX, do not fully
	implement POSIX-compliant SA_RESTART functionality; important
	system calls like stat() and readdir() can still fail with EINTR
	even if SA_RESTART has been set on the signal handler.  So,
	introduce macros EINTRLOOP() and ENULLLOOP() which can loop on
	EINTR for system calls which return -1 or 0 (NULL), respectively,
	on error.
	Also, remove the old atomic_stat()/atomic_readdir() and
	HAVE_BROKEN_RESTART handling.

	* configure.in: Remove setting of HAVE_BROKEN_RESTART.

	* arscan.c (ar_member_touch): Use EINTRLOOP() to wrap fstat().
	* remake.c (touch_file): Ditto.

	* commands.c (delete_target): Use EINTRLOOP() to wrap stat().
	* read.c (construct_include_path): Ditto.
	* remake.c (name_mtime): Ditto.
	* vpath.c (selective_vpath_search): Ditto.
	* dir.c (find_directory): Ditto.
	(local_stat): Ditto.
	(find_directory): Use ENULLLOOP() to wrap opendir().
	(dir_contents_file_exists_p): Use ENULLLOOP() to wrap readdir().

	* misc.c: Remove HAVE_BROKEN_RESTART, atomic_stat(), and
	atomic_readdir() handling.

2003-01-22  Paul D. Smith  <psmith@gnu.org>

	* function.c (func_call): Fix Bug #1744.  If we're inside a
	recursive invocation of $(call ...), mask any of the outer
	invocation's arguments that aren't used by this one, so that this
	invocation doesn't "inherit" them accidentally.

2002-12-05  Paul D. Smith  <psmith@gnu.org>

	* function.c (subst_expand): Valery Khamenia reported a
	pathological performance hit when doing substitutions on very
	large values with lots of words: turns out we were invoking
	strlen() a ridiculous number of times.  Instead of having each
	call to sindex() call strlen() again, keep track of how much of
	the text we've seen and pass the length to sindex().

2002-11-19  Paul D. Smith  <psmith@gnu.org>

	* README.cvs, configure.in: Upgrade to require autoconf 2.56.


2002-11-16  Paul D. Smith  <psmith@gnu.org>

	* NMakefile.template (OBJS): Add hash.c object file.
	* SMakefile.template (srcs): Ditto.
	* Makefile.ami (objs): Ditto.
	* build_w32.bat: Ditto.

	* Makefile.DOS.template: Remove extra dependencies.

2002-10-25  Paul D. Smith  <psmith@gnu.org>

	* expand.c (install_variable_buffer): New function.  Install a new
	variable_buffer context and return the previous one.
	(restore_variable_buffer): New function.  Free the current
	variable_buffer context and put a previously saved one back.
	* variable.h: Prototypes for {install,restore}_variable_buffer.
	* function.c (func_eval): Push a new variable_buffer context
	before we eval, then restore the old one when we're done.
	Fixes Bug #1517.

	* read.c (install_conditionals): New function.  Install a new
	conditional context and return the previous one.
	(restore_conditionals): New function.  Free the current
	conditional context and put a previously saved one back.
	(eval): Use the {install,restore}_conditionals for "include"
	handling.
	(eval_buffer): Use {install,restore}_conditionals to preserve the
	present conditional state before we evaluate the buffer.
	Fixes Bug #1516.

	* doc/make.texi (Quick Reference): Add references to $(eval ...)
	and $(value ...).
	(Recursion): Add a variable index entry for CURDIR.

	* README.cvs: Update to appropriate versions.
	* Makefile.am (nodist_loadavg_SOURCES): automake gurus point out I
	don't need to copy loadavg.c: automake is smart enough to create
	it for me.  Still have a bug in automake related to ansi2knr tho.

2002-10-14  Paul D. Smith  <psmith@gnu.org>

	* remake.c (notice_finished_file): Only touch targets if they have
	at least one command (as per POSIX).  Resolve Bug #1418.

	* *.c: Convert to using ANSI C-style function definitions.
	* Makefile.am: Enable the ansi2knr feature of automake.
	* configure.in: ditto.

2002-10-13  Paul D. Smith  <psmith@gnu.org>

	* commands.c (set_file_variables): Bug #1379: Don't use alloca()
	for automatic variable values like $^, etc.  In the case of very
	large lists of prerequisites this causes problems.  Instead reuse
	a static buffer (resizeable) for each variable.

	* read.c (eval): Fix Bug #1391: allow "export" keyword in
	target-specific variable definitions.  Check for it and set an
	"exported" flag.
	(record_target_var): Set the export field to v_export if the
	"exported" flag is set.
	* doc/make.texi (Target-specific): Document the ability to use
	"export".

	* doc/make.texi: Change the name of the section on automatic
	variables from "Automatic" to "Automatic Variables".  Added text
	clarifying the scope of automatic variables.

2002-10-04  Paul D. Smith  <psmith@gnu.org>

	* read.c (eval): Allow SysV $$@ variables to use {} braces as well
	as () braces.
	(record_files): Ditto.

	* expand.c (variable_expand_string): In $(A:x=y) expansion limit
	the search for the '=' to only within the enclosing parens.

2002-10-03  Paul D. Smith  <psmith@gnu.org>

	Version 3.80 released.

	* dir.c: Change hash functions to use K&R function definition style.
	* function.c: Ditto.
	* read.c: Ditto.
	* variable.c: Ditto.

	Update to automake 1.7.

	* Makefile.am (AUTOMAKE_OPTIONS): Update to require 1.7.
	(pdf): Remove this target as automake now provides one.

	* configure.in: Change AM_CONFIG_HEADER to AC_CONFIG_HEADERS.

2002-09-30  Martin P.J. Zinser  <zinser@decus.de>

	* makefile.com: Updates for GNU make 3.80.
	* makefile.vms: Ditto.

2002-09-23  Paul D. Smith  <psmith@gnu.org>

	* read.c (enum make_word_type): Remove w_comment.
	(get_next_mword): Don't treat comment characters as special; where
	this function is used we will never see a comment (it's stripped
	before we get here) and treating comments specially means that
	targets like "foo\#bar" aren't handled properly.

2002-09-18  Paul D. Smith  <psmith@gnu.org>

	* doc/make.texi (Bugs): Update with some info on Savannah, etc.

	* read.c (eval): Expansion of arguments to export/unexport was
	ignoring all arguments after the first one.  Change the algorithm
	to expand the whole line once, then parse the results.

2002-09-17  Paul D. Smith  <psmith@gnu.org>

	Fix Bug #940 (plus another bug I found while looking at this):

	* read.c (record_target_var): enter_file() will add a new entry if
	it's a double-colon target: we don't want to do that in this
	situation.  Invoke lookup_file() and only enter_file() if it does
	not already exist.  If the file we get back is a double-colon then
	add this variable to the "root" double-colon target.

	* variable.c (initialize_file_variables): If this file is a
	double-colon target but is not the "root" target, then initialize
	the root and make the root's variable list the parent of our
	variable list.

2002-09-13  Paul D. Smith  <psmith@gnu.org>

	* doc/make.texi (MAKE Variable): Add some indexing for "+".

	* hash.c (round_up_2): Get rid of a warning.

2002-09-12  Paul D. Smith  <psmith@gnu.org>

	* Makefile.am (loadavg_SOURCES, loadavg.c): Tiptoe around automake
	so it doesn't complain about getloadavg.c.

	* commands.c (set_file_variables): Make sure we always alloca() at
	least 1 character for the value of $? (for '\0').

2002-09-11  Paul D. Smith  <psmith@gnu.org>

	* hash.h (STRING_COMPARE, ISTRING_COMPARE, STRING_N_COMPARE): Fix
	macro to use RESULT instead of the incorrect _RESULT_.

	* make.h (HAVE_BROKEN_RESTART): Add prototypes for atomic_stat()
	and atomic_readdir().  We need to #include dirent.h to get this to
	work.
	* misc.c (atomic_readdir): Fix typos.

2002-09-10  Paul D. Smith  <psmith@gnu.org>

	* read.c (eval): Expand variable lists given to export and
	unexport, so that "export $(LIST_OF_VARIABLES)" (etc.) works.
	(conditional_line): Ditto for "ifdef".  Fixes bug #103.

	* doc/make.texi (Variables/Recursion): Document this.
	(Conditional Syntax): And here.

2002-09-09  Paul D. Smith  <psmith@gnu.org>

	* configure.in: Check for memmove().

2002-09-07  Paul D. Smith  <psmith@gnu.org>

	* configure.in (HAVE_BROKEN_RESTART): Define this on PTX systems;
	Michael Sterrett <msterret@coat.com> reports that while it has
	SA_RESTART, it does not work properly.

	* misc.c (atomic_stat): If HAVE_BROKEN_RESTART, create a function
	that invokes stat() and loops to do it again if it returns EINTR.
	(atomic_readdir): Ditto, with readdir().

	* make.h (stat, readdir): If HAVE_BROKEN_RESTART, alias stat()
	and readdir() to atomic_stat() and atomic_readdir().

2002-09-04  Paul D. Smith  <psmith@gnu.org>

	* implicit.c (pattern_search): Daniel <barkalow@reputation.com>
	reports that GNU make sometimes doesn't recognize that targets can
	be made, when directories can be created as prerequisites.  He
	reports that changing the order of predicates in the DEP->changed
	flag test so that lookup_file() is always performed, solves this
	problem.

2002-08-08  Paul D. Smith  <psmith@gnu.org>

	* configure.in: Require a newer version of gettext.

	* misc.c (perror_with_name): Translate the format string (for
	right-to-left language support).
	(pfatal_with_name): Ditto.

	* main.c: Create a static array of strings to store the usage
	text.  This is done to facilitate translations.
	(struct command_switch): Remove argdesc and description fields.
	(switches): Remove values for obsolete fields.
	(print_usage): Print each element of the usage array.

	* hash.c: Change function definitions to be K&R style.

2002-08-02  Paul D. Smith  <psmith@gnu.org>

	* NEWS: Remove the mention of .TARGETS; we aren't going to publish
	this one because it's too hard to get right.  We'll look at it for
	a future release.
	* main.c (main): Don't create the .TARGETS variable.
	* variable.c (handle_special_var): Don't handle .TARGETS.

2002-08-01  Paul D. Smith  <psmith@gnu.org>

	* main.c (switches): Add a new option, -B (--always-make).  If
	specified, make will rebuild all targets that it encounters even
	if they don't appear to be out of date.
	(always_make_flag): New flag.
	* make.h: Extern always_make_flag.
	* remake.c (update_file_1): Check always_make_flag; if it's set we
	will always rebuild any target we can, even if none of its
	prerequisites are newer.
	* NEWS: Mention it.

	* doc/make.texi (Shell Function): Make it clear that make
	variables marked as "export" are not passed to instances of the
	shell function.

	Add new introspection variable .VARIABLES and .TARGETS.

	* variable.c (handle_special_var): New function.  If the variable
	reference passed in is "special" (.VARIABLES or .TARGETS),
	calculate the new value if necessary.  .VARIABLES is handled here:
	walk through the hash of defined variables and construct a value
	which is a list of the names.  .TARGETS is handled by
	build_target_list().
	(lookup_variable): Invoke handle_special_var().
	* file.c (build_target_list): Walk through the hask of known files
	and construct a list of the names of all the ones marked as
	targets.
	* main.c (main): Initialize them to empty (and as simple variables).
	* doc/make.texi (Special Variables): Document them.
	* NEWS: Mention them.

	* variable.h (struct variable): Add a new flag "exportable" which
	is true if the variable name is valid for export.
	* variable.c (define_variable_in_set): Set "exportable" when a new
	variable is defined.
	(target_environment): Use the "exportable" flag	instead of
	re-checking the name here... an efficiency improvement.

2002-07-31  Paul D. Smith  <psmith@gnu.org>

	* config.h-vms.template: Updates to build on VMS.  Thanks to
	Brian_Benning@aksteel.com for helping verify the build.
	* makefile.com: Build the new hash.c file.
	* hash.h: Use strcpmi(), not stricmp(), in the
	HAVE_CASE_INSENSITIVE_FS case.

2002-07-30  Paul D. Smith  <psmith@gnu.org>

	* hash.h (ISTRING_COMPARE, return_ISTRING_COMPARE): Add missing
	backslashes to the HAVE_CASE_INSENSITIVE_FS case.
	Reported by <Brian_Benning@aksteel.com>.

2002-07-10  Paul D. Smith  <psmith@gnu.org>

	* variable.c (pop_variable_scope): Remove variable made unused by
	new hash infrastructure.
	* read.c (dep_hash_cmp): Rewrite this to handle ignore_mtime
	comparisons as well as name comparisons.
	* variable.h: Add a prototype for new hash_init_function_table().
	* file.c (lookup_file): Remove variables made unused by new hash
	infrastructure.
	* dir.c (directory_contents_hash_2): Missing return of hash value.
	(dir_contents_file_exists_p): Remove variables made unused by new
	hash infrastructure.


	Installed Greg McGary's integration of the hash functions from the
	GNU id-utils package:

2002-07-10  Greg McGary  <greg@mcgary.org>

	* scripts/functions/filter-out: Add literals to to the
	pattern space in order to add complexity, and trigger
	use of an internal hash table.  Fix documentation strings.
	* scripts/targets/INTERMEDIATE: Reverse order of files
	passed to expected `rm' command.

2002-07-10  Greg McGary  <greg@mcgary.org>

	* Makefile.am (SRCS): Add hash.c (noinst_HEADERS): Add hash.h
	* hash.c: New file, taken from id-utils.
	* hash.h: New file, taken from id-utils.

	* make.h (HASH, HASHI): Remove macros.
	(find_char_unquote): Change arglist in decl.
	(hash_init_directories): New function decl.
	* variable.h (hash.h): New #include.
	(MAKELEVEL_NAME, MAKELEVEL_LENGTH): New constants.
	* filedef.h (hash.h): New #include.
	(struct file) [next]: Remove member.
	(file_hash_enter): Remove function decl.
	(init_hash_files): New function decl.

	* ar.c (ar_name): Delay call to strlen until needed.
	* main.c (initialize_global_hash_tables): New function.
	(main): Call it.  Use MAKELEVEL_NAME & MAKELEVEL_LENGTH.
	* misc.c (remove_comments): Pass char constants to find_char_unquote.
	* remake.c (notice_finished_file): Update last_mtime on `prev' chain.

	* dir.c (hash.h): New #include.
	(struct directory_contents) [next, files]: Remove members.
	[ctime]: Add member for VMS.  [dirfiles]: Add hash-table member.
	(directory_contents_hash_1, directory_contents_hash_2,
	directory_contents_hash_cmp): New functions.
	(directories_contents): Change type to `struct hash_table'.
	(struct directory) [next]: Remove member.
	(directory_hash_1, directory_hash_2, directory_hash_cmp): New funcs.
	(directory): Change type to `struct hash_table'.
	(struct dirfile) [next]: Remove member.
	[length]: Add member.  [impossible]: widen type to fill alignment gap.
	(dirfile_hash_1, dirfile_hash_2, dirfile_hash_cmp): New functions.
	(find_directory): Use new hash table package.
	(dir_contents_file_exists_p): Likewise.
	(file_impossible): Likewise.
	(file_impossible_p): Likewise.
	(print_dir_data_base): Likewise.
	(open_dirstream): Likewise.
	(read_dirstream): Likewise.
	(hash_init_directories): New function.

	* file.c (hash.h): New #include.
	(file_hash_1, file_hash_2, file_hash_cmp): New functions.
	(files): Change type to `struct hash_table'.
	(lookup_file): Use new hash table package.
	(enter_file): Likewise.
	(remove_intermediates): Likewise.
	(snap_deps): Likewise.
	(print_file_data_base): Likewise.

	* function.c
	(function_table_entry_hash_1, function_table_entry_hash_2,
	function_table_entry_hash_cmp): New functions.
	(lookup_function): Remove `table' argument.
	Use new hash table package.
	(struct a_word) [chain, length]: New members.
	(a_word_hash_1, a_word_hash_2, a_word_hash_cmp): New functions.
	(struct a_pattern): New struct.
	(func_filter_filterout): Pass through patterns noting boundaries
	and '%', if present.  Note a_word length.  Use a hash table if
	arglists are large enough to justify cost.
	(function_table_init): Renamed from function_table.
	(function_table): Declare as `struct hash_table'.
	(FUNCTION_TABLE_ENTRIES): New constant.
	(hash_init_function_table): New function.

	* read.c (hash.h): New #include.
	(read_makefile): Pass char constants to find_char_unquote.
	(dep_hash_1, dep_hash_2, dep_hash_cmp): New functions.
	(uniquize_deps): Use hash table to efficiently identify duplicates.
	(find_char_unquote): Accept two char-constant stop chars, rather
	than a string constant, avoiding zillions of calls to strchr.
	Tighten inner search loops to test only for desired delimiters.

	* variable.c (variable_hash_1, variable_hash_2,
	variable_hash_cmp): New functions.
	(variable_table): Declare as `struct hash_table'.
	(global_variable_set): Remove initialization.
	(init_hash_global_variable_set): New function.
	(define_variable_in_set): Use new hash table package.
	(lookup_variable): Likewise.
	(lookup_variable_in_set): Likewise.
	(initialize_file_variables): Likewise.
	(pop_variable_scope): Likewise.
	(create_new_variable_set): Likewise.
	(merge_variable_sets): Likewise.
	(define_automatic_variables): Likewise.
	(target_environment): Likewise.
	(print_variable_set): Likewise.

2002-07-10  Paul D. Smith  <psmith@gnu.org>

	Implement the SysV make syntax $$@, $$(@D), and $$(@F) in the
	prerequisite list.  A real SysV make will expand the entire
	prerequisites list _twice_: we don't do that as it's a big
	backward-compatibility problem.  We only replace those specific
	variables.

	* read.c (record_files): Replace any $@, $(@D), and $(@F) variable
	references left in the list of prerequisites.  Check for .POSIX as
	we record targets, so we can disable non-POSIX behavior while
	reading makefiles as well as running them.
	(eval): Check the prerequisite list to see if we have anything
	that looks like a SysV prerequisite variable reference.

2002-07-09  Paul D. Smith  <psmith@gnu.org>

	* doc/make.texi (Prerequisite Types): Add a new section describing
	order-only prerequisites.

	* read.c (uniquize_deps): If we have the same file as both a
	normal and order-only prereq, get rid of the order-only prereq,
	since the normal one supersedes it.

2002-07-08  Paul D. Smith  <psmith@gnu.org>

	* AUTHORS: Added Greg McGary to the AUTHORS file.
	* NEWS: Blurbed order-only prerequisites.
	* file.c (print_file): Show order-only deps properly when printing
	the database.

	* maintMakefile: Add "update" targets for wget'ing the latest
	versions of various external files.  Taken from Makefile.maint in
	autoconf, etc.

	* dosbuild.bat: Somehow we got _double_ ^M's.  Remove them.
	Reported by Eli Zaretskii <eliz@is.elta.co.il>.

2002-07-07  Paul D. Smith  <psmith@gnu.org>

	* po/*.po: Remove.  We'll use wget to retrieve them at release
	time.

	* variable.c (do_variable_definition) [W32]: On W32 using cmd
	rather than a shell you get an exception.  Make sure we look up
	the variable.  Patch provided by Eli Zaretskii <eliz@is.elta.co.il>.

	* remake.c (notice_finished_file): Fix handling of -t flag.
	Patch provided by Henning Makholm <henning@makholm.net>.

	* implicit.c (pattern_search): Some systems apparently run short
	of stack space, and using alloca() in this function caused an
	overrun.  I modified it to use xmalloc() on the two variables
	which seemed like they might get large.  Fixes Bug #476.

	* main.c (print_version): Update copyright notice to conform with
	GNU standards.
	(print_usage): Update help output.

	* function.c (func_eval): Create a new make function, $(eval
	...).  Expand the arguments, put them into a buffer, then invoke
	eval_buffer() on the resulting string.
	(func_quote): Create a new function, $(quote VARNAME).  Inserts
	the value of the variable VARNAME without expanding it any
	further.

	* read.c (struct ebuffer): Change the linebuffer structure to an
	"eval buffer", which can be either a file or a buffer.
	(eval_makefile): Move the code in the old read_makefile() which
	located a makefile into here: create a struct ebuffer with that
	information.  Have it invoke the new function eval() with that
	ebuffer.
	(eval_buffer): Create a new function that creates a struct ebuffer
	that holds a string buffer instead of a file.  Have it invoke
	eval() with that ebuffer.
	(eval): New function that contains the guts of the old
	read_makefile() function: this function parses makefiles.  Obtains
	data to parse from the provided ebuffer.  Some modifications to
	make the flow of the function cleaner and clearer.  Still could
	use some work here...
	(do_define): Takes a struct ebuffer instead of a FILE*.  Read the
	contents of the define/endef variable from the ebuffer.
	(readstring): Read the next line from a string-style ebuffer.
	(readline): Read the next line from an ebuffer.  If it's a string
	ebuffer, invoke readstring().  If it's a FILE* ebuffer, read it
	from the file.

	* dep.h (eval_buffer): Prototype eval_buffer();

	* variable.c (do_variable_definition): Make sure that all
	non-target-specific variables are registered in the global set.
	If we're invoked from an $(eval ...) we might be inside a $(call
	...) or other function which has pushed a variable scope; we still
	want to define our variables from evaluated makefile code in the
	global scope.

2002-07-03  Greg McGary  <greg@mcgary.org>

	* dep.h (struct dep) [ignore_mtime]: New member.
	[changed]: convert to a bitfield.
	* implicit.c (pattern_search): Zero ignore_mtime.
	* main.c (main, handle_non_switch_argument): Likewise.
	* rule.c (convert_suffix_rule): Likewise.
	* read.c (read_all_makefiles, read_makefile, multi_glob): Likewise.
	(read_makefile): Parse '|' in prerequisite list.
	(uniquize_deps): Consider ignore_mtime when comparing deps.
	* remake.c (update_file_1, check_dep): Don't force remake for
	dependencies that have d->ignore_mtime.
	* commands.c (FILE_LIST_SEPARATOR): New constant.
	(set_file_variables): Don't include a
	prerequisite in $+, $^ or $? if d->ignore_mtime.
	Define $|.

2002-06-18  Paul D. Smith  <psmith@gnu.org>

	* make.texinfo: Updates for next revision.  New date/rev/etc.
	Recreate all Info menus.  Change license on the manual to the GNU
	Free Documentation License.  A number of typos.
	(Variables Simplify): Don't use "-" before it's defined.
	(Automatic Prerequisites): Rewrite the target example to work
	properly if the compile fails.  Remove incorrect comments about
	how "set -e" behaves.
	(Text Functions): Move the "word", "wordlist", "words", and
	"firstword" functions here, from "File Name Functions".
	* make-stds.texi: Update from latest GNU version.
	* fdl.texi: (created) Import the latest GNU version.

2002-06-06  Paul D. Smith  <psmith@gnu.org>

	* variable.c (do_variable_definition): New function: extract the
	part of try_variable_definition() that actually sets the value
	into a separate function.
	(try_variable_definition): Call do_variable_definition() after
	parsing the variable definition string.
	(define_variable_in_set): Make the name argument const.

	* variable.h (enum variable_flavor): Make public.
	(do_variable_definition): Create prototype.

	* read.c (read_all_makefiles): Create a new built-in variable,
	MAKEFILE_LIST.
	(read_makefile): Add each makefile read in to this variable value.

2002-05-18  Eli Zaretskii  <eliz@is.elta.co.il>

	* Makefile.DOS.template: Tweak according to changes in the
	distribution.  Add back the dependencies of *.o files.

	* configh.dos.template: Synchronize with config.h.in.

2002-05-09  Paul D. Smith  <psmith@gnu.org>

	* file.c (file_timestamp_now): Use K&R function declaration.

	* getloadavg.c (getloadavg): Merge setlocale() fix from sh-utils
	getloadavg.c.  Autoconf thinks QNX is SVR4-like, but it isn't, so
	#undef it.  Remove predefined setup of NLIST_STRUCT.  Decide
	whether to include nlist.h based on HAVE_NLIST_H.  Change obsolete
	NLIST_NAME_UNION to new HAVE_STRUCT_NLIST_N_UN_N_NAME.
	* configure.in (NLIST_STRUCT): Define this if we have nlist.h and
	nlist.n_name is a pointer rather than an array.

	* acinclude.m4 (make_FUNC_SETVBUF_REVERSED): Grab the latest
	version of AC_FUNC_SETVBUF_REVERSED from autoconf CVS.
	* configure.in: Use it instead of the old version.

	* main.c (main): Prefer setvbuf() to setlinebuf().

2002-05-08  Paul D. Smith  <psmith@gnu.org>

	* Makefile.am (make_LDADD): Add GETLOADAVG_LIBS.
	(loadavg_LDADD): Ditto.

2002-04-29  Paul D. Smith  <psmith@gnu.org>

	* expand.c (recursively_expand_for_file): Rename
	recursively_expand() to recursively_expand_for_file() and provide
	an extra argument, struct file.  If the argument is provided, set
	the variable scope to that of the file before expanding.
	* variable.h (recursively_expand): Make this a macro that invokes
	recursively_expand_for_file() with a NULL file pointer.
	* variable.c (target_environment): Call the renamed function and
	provide the current file context.
	Fixes Debian bug #144306.

2002-04-28  Paul D. Smith  <psmith@gnu.org>

	Allow $(call ...) user-defined variables to be self-referencing
	without throwing an error.  Allows implementation of transitive
	closures, among other possibly useful things.
	Requested by: Philip Guenther <guenther@sendmail.com>

	* variable.h (struct variable): Add a new field: exp_count, and
	new macros to hold its size and maximum value.
	(warn_undefined): Make this a macro.
	* variable.c (define_variable_in_set): Initialize it.
	* expand.c (recursively_expand): If we detect recursive expansion
	of a variable, check the exp_count field.  If it's greater than 0
	allow the recursion and decrement the count.
	(warn_undefined): Remove this (now a macro in variable.h).
	* function.c (func_call): Before we expand the user-defined
	function, modify its exp_count field to contain the maximum
	number of recursive calls we'll allow.  After the call, reset it
	to 0.

2002-04-21  Paul D. Smith  <psmith@gnu.org>

	Modified to use latest autoconf (2.53), automake (1.6.1), and
	gettext (0.11.1).  We're using gettext's new "external" support,
	to avoid including libintl source with GNU make.

	* README.cvs: New file.  Explain how to build GNU make from CVS.

	* configure.in: Modify checking for the system glob library.
	Use AC_EGREP_CPP instead of AC_TRY_CPP.  Remove the setting of
	GLOBDIR (we will always put "glob" in SUBDIRS, so automake
	etc. will manage it correctly).  Set an automake conditional
	USE_LOCAL_GLOB to decide whether to compile the glob library.

	* getloadavg.c (main): Include make.h in the "TEST" program to
	avoid warnings.

	* Makefile.am: Remove special rules for loadavg.  Replace them
	with Automake capabilities for building extra programs.

	* signame.c: This file does nothing if the system provide
	strsignal().  If not, it implements strsignal().  If the system
	doesn't define sys_siglist, then we make our own; otherwise we use
	the system version.
	* signame.h: Removed.

	* main.c (main): No need to invoke signame_init().  Update copyright.

	* ABOUT-NLS: Removed.
	* gettext.c: Removed.
	* gettext.h: Get a simplified copy from the gettext package.
	* po/*: Created.
	* i18n/*.po: Moved to po/.
	* i18n/: Removed.

	* config/*: Created.  Contains package configuration helper files.
	* config.guess, config.sub: Moved to config directory.

	* configure.in (AC_CONFIG_FILES): Add po/Makefile.in, config/Makefile.
	Rework to use new-style autoconf features.  Use the "external"
	mode for gettext.  Make the build.sh config file conditional on
	whether build.sh.in exists, to avoid autoconf errors.
	* acinclude.m4: Removed almost all macros as being obsolete.
	Rewrote remaining macros to use AC_DEFINE.
	* acconfig.h: Removed.

	* Makefile.am (EXTRA_DIST): Add config/config.rpath.  Use a
	conditional to handle customs support.  Remove special handling
	for i18n features.

2002-04-20  Paul D. Smith  <psmith@gnu.org>

	* function.c (func_call): Don't mark the argument variables $1,
	etc. as recursive.  They've already been fully expanded so
	there's no need to do it again, and doing so strips escaped $'s.
	Reported by Sebastian Glita <glseba@yahoo.com>.

	* remake.c (notice_finished_file): Walk through double-colon
	entries via the prev field, not the next field!
	Reported by Greg McGary <greg@mcgary.org>.

	* main.c (main): If the user specifies -q and asks for a specific
	target which is a makefile, we got an assert.  In that case it
	turns out we should continue normally instead.

	* i18n/de.po, i18n/fr.po: Installed an updated translation.

	* i18n/he.po: Installed a new translation.

2002-01-07  Paul D. Smith  <psmith@gnu.org>

	* i18n/es.po, i18n/ru.po: Installed an updated translation.

2001-12-04  Paul D. Smith  <psmith@gnu.org>

	* i18n/ja.po: Installed an updated translation.

2001-09-06  Paul Eggert  <eggert@twinsun.com>

	* configure.in (AC_CHECK_HEADERS): Add sys/resource.h.
	(AC_CHECK_FUNCS): Add getrlimit, setrlimit.

	* main.c: Include <sys/resource.h> if it, getrlimit, and setrlimit
	are available.
	(main): Get rid of any avoidable limit on stack size.

2001-09-04  Paul D. Smith  <psmith@gnu.org>

	* i18n/da.po: Installed an updated translation.

2001-08-03  Paul D. Smith  <psmith@gnu.org>

	* i18n/fr.po: Installed an updated translation.
	Resolves Debian	bug #106720.

2001-06-13  Paul D. Smith  <psmith@gnu.org>

	* i18n/da.po, configure.in (ALL_LINGUAS): Installed a new
	translation.

2001-06-11  Paul D. Smith  <psmith@gnu.org>

	* i18n/ko.po: Installed a new translation.

2001-05-06  Paul D. Smith  <psmith@gnu.org>

	Modify the EINTR handling.

	* job.c (new_job): Reorganize the jobserver algorithm.  Reorder
	the way in which we manage the file descriptor/signal handler race
	trap to be more efficient.

2001-05-06  Paul Eggert  <eggert@twinsun.com>

	Restart almost all system calls that are interrupted, instead
	of worrying about EINTR.  The lone exception is the read() for
	job tokens.

	* configure.in (HAVE_SA_RESTART): New macro.
	(MAKE_JOBSERVER): Define to 1 only if HAVE_SA_RESTART.
	* main.c (main): Use SA_RESTART instead of the old,
	nonstandard SA_INTERRUPT.

	* configure.in (AC_CHECK_FUNCS): Add bsd_signal.
	* main.c (bsd_signal): New function or macro,
	if the implementation doesn't supply it.
	(The bsd_signal function will be in POSIX 1003.1-200x.)
	(HANDLESIG): Remove.
	(main, FATAL_SIG): Use bsd_signal instead of signal or HANDLESIG.

	* make.h (EINTR_SET): Remove.
	(SA_RESTART): New macro.

	* arscan.c (ar_member_touch): Don't worry about EINTR.
	* function.c (func_shell): Likewise.
	* job.c (reap_children, free_child, new_job): Likewise.
	* main.c (main): Likewise.
	* remake.c (touch_file, name_mtime): Likewise.

	* arscan.c (ar_member_touch): Fix bug uncovered by EINTR removal;
	if fstat failed with errno!=EINTR, the error was ignored.

	* job.c (set_child_handler_action_flags): New function.
	(new_job): Use it to temporarily clear the SIGCHLD action flags
	while reading the token.

2001-05-02  Paul D. Smith  <psmith@gnu.org>

	* job.c (start_job_command): Don't add define/endef per-line flags
	to the top-level flags setting.

2001-04-03  Paul D. Smith  <psmith@gnu.org>

	* arscan.c (VMS_get_member_info,ar_scan) [VMS]: VMS sets the low
	bit on error, so check for odd return values, not non-0 return
	values.
	(VMS_get_member_info): Calculate the timezone differences correctly.
	Reported by John Fowler <jfowler@nyx.net>.


2001-03-14  Paul D. Smith  <psmith@gnu.org>

	* variable.c (lookup_variable) [VMS]: Null-terminate the variable
	value before invoking define_variable().
	Reported by John Fowler <jfowler@nyx.net>.

2001-02-07  Paul D. Smith  <psmith@gnu.org>

	* read.c (record_target_var): If we reset the variable due to a
	command-line variable setting overriding it, turn off the "append"
	flag.

2001-01-17  Paul D. Smith  <psmith@gnu.org>

	* variable.c (lookup_variable) [VMS]: When getting values from the
	environment, allocate enough space for the _value_ plus escapes,
	not enough space for the name plus escapes :-/.
	Reported by John Fowler <jfowler@nyx.net>.

	* remake.c (f_mtime): Removed the "***" prefix from the mod time
	warnings that make generates, so it doesn't look like an error.
	Reported by Karl Berry <karl@gnu.org>.


	Fix for PR/2020:  Rework appended target-specific variables.  I'm
	fairly confident this algorithm is finally correct.

	* expand.c (allocated_variable_append): Rewrite.  Instead of
	expanding each appended variable then adding all the expanded
	strings together, we append all the unexpanded values going up
	through the variable set contexts, then expand the final result.
	This behaves just like non-target-specific appended variable
	values, while the old way didn't in various corner cases.
	(variable_append): New function: recursively append the unexpanded
	value of a variable, walking from the outermost variable scope to
	the innermost.
	* variable.c (lookup_variable): Remove the code that looked up the
	variable set list if the found variable was "append".  We don't
	need this anymore.
	(lookup_variable_in_set): Make this non-static so we can use it
	elsewhere.
	(try_variable_definition): Use lookup_variable_in_set() rather
	than faking out current_variable_set_list by hand (cleanup).
	* variable.h: Add a prototype for the now non-static
	lookup_variable_in_set().

2000-11-17  Paul D. Smith  <psmith@gnu.org>

	* remake.c (f_mtime) [WINDOWS32]: On various advice, I changed the
	WINDOWS32 port to assume timestamps can be up to 3 seconds away
	before throwing a fit.

2000-11-17  Paul D. Smith  <psmith@gnu.org>

	* read.c (readline): CRLF calculations had a hole, if you hit the
	buffer grow scenario just right.  Reworked the algorithm to avoid
	the need for len or lastlen at all.  Problem description with
	sample code chages provided by Chris Faylor <cgf@redhat.com>.

2000-10-24  Paul D. Smith  <psmith@gnu.org>

	* gettext.c (SWAP): Declare this with the prototype, otherwise
	some systems don't work (non-32-bit?  Reported for Cray T3E).
	Reported by Thorstein Thorsteinsson <thor@signe.teokem.lu.se>.

2000-10-05  Paul D. Smith  <psmith@gnu.org>

	* acinclude.m4 (AM_LC_MESSAGES): Remove undefined macro
	AM_LC_MESSAGES; it doesn't seem to do anything anyway??

	* i18n/gl.po, configure.in (ALL_LINGUAS): New Galician translation.

2000-09-22  Paul D. Smith  <psmith@gnu.org>

	* gettext.c: Don't #define _GETTEXT_H here; we only include some
	parts of the real gettext.h here, and we expect to really include
	the real gettext.h later.  If we keep this #define, it's ignored.

2000-09-21  Paul D. Smith  <psmith@gnu.org>

	* main.c (log_working_directory): Rework the text to use complete
	sentences, to make life simpler for the translators.

2000-08-29  Paul D. Smith  <psmith@gnu.org>

	* file.c (remove_intermediates): Print a debug message before we
	remove intermediate files, so the user (if she uses -d) knows
	what's going on.

2000-08-21  Paul D. Smith  <psmith@gnu.org>

	* variable.c (try_variable_definition): Change how we handle
	target-specific append variable defns: instead of just setting the
	value, expand it as an append _but_ only within the current
	target's context.  Otherwise we lose all but the last value if the
	variable is appended more than once within the current target
	context.  Fixes PR/1831.

2000-08-16  Paul D. Smith  <psmith@gnu.org>

	* function.c (func_shell): Nul-terminate the buffer before
	printing an exec error message (just in case it's not!).
	Fixes PR/1860, reported by Joey Hess <joey@valinux.com>.

2000-07-25  Paul D. Smith  <psmith@gnu.org>

	* job.c (construct_command_argv_internal): Add "~" to the list of
	sh_chars[] which disallow optimizing out the shell call.

2000-07-23  Paul Eggert  <eggert@twinsun.com>

	* NEWS, make.texinfo: Document .LOW_RESOLUTION_TIME, which
	supersedes --disable-nsec-timestamps.
	* make.texinfo: Consistently use "time stamp" instead of "timestamp".
	* README: Remove --disable-nsec-timestamps.

	* filedef.h (struct file.low_resolution_time): New member.
	* file.c (snap_deps): Add support for .LOW_RESOLUTION_TIME.
	* remake.c (update_file_1):
	Avoid spurious rebuilds due to low resolution time stamps,
	generalizing the earlier code that applied only to archive members.
	(f_mtime): Archive members always have low resolution time stamps.

	* configure.in: Remove --disable-nsec-timestamps, as this has
	been superseded by .LOW_RESOLUTION_TIME.

2000-07-23  Paul Eggert  <eggert@twinsun.com>

	* configure.in (enable_nsec_timestamps): Renamed from
	make_cv_nsec_timestamps, since enable/disable options
	shouldn't be cached.

2000-07-23  Bruno Haible  <haible@clisp.cons.org>
       and  Paul Eggert  <eggert@twinsun.com>

	* file.c (file_timestamp_now):
	Use preprocessor-time check for FILE_TIMESTAMP_HI_RES
	so that clock_gettime is not linked unless needed.

	* filedef.h (FILE_TIMESTAMP_HI_RES):
	Remove definition; "configure" now does this.

	* configure.in (jm_AC_TYPE_UINTMAX_T): Move up,
	to before high resolution file timestamp check,
	since that check now uses uintmax_t.
	(FILE_TIMESTAMP_HI_RES): Define to nonzero if the code should use
	high resolution file timestamps.
	(HAVE_CLOCK_GETTIME): Do not define if !FILE_TIMESTAMP_HI_RES,
	so that we don't link in clock_gettime unnecessarily.

2000-07-17  Paul D. Smith  <psmith@gnu.org>

	* i18n/ja.po: New version of the translation file.

2000-07-07  Paul D. Smith  <psmith@gnu.org>

	* remake.c (f_mtime): If NO_FLOAT is defined, don't bother with
	the offset calculation.
	(name_mtime): Replace EINTR test with EINTR_SET macro.

2000-07-07  Paul Eggert  <eggert@twinsun.com>

	Fix for PR/1811:

	* remake.c (update_file_1):
	Avoid spurious rebuilds of archive members due to their
	timestamp resolution being only one second.
	(f_mtime): Avoid spurious warnings of timestamps in the future due to
	the clock's resolution being lower than file timestamps'.
	When warning about future timestamps, report only the discrepancy,
	not the absolute value of the timestamp and the current time.

	* file.c (file_timestamp_now): New arg RESOLUTION.
	* filedef.h (file_timestamp_now): Likewise.
	(FILE_TIMESTAMP_NS): Now returns int.  All uses changed.

2000-07-05  Paul D. Smith  <psmith@gnu.org>

	* variable.c (lookup_variable) [VMS]: Remove vestigial references
	to listp.  Fixes PR/1793.

2000-06-26  Paul Eggert  <eggert@twinsun.com>

	* Makefile.am (MAINTAINERCLEANFILES): New macro, with stamp-pot in it.

	* dir.c (vms_hash): Ensure ctype macro args are nonnegative.

	* remake.c (f_mtime): Remove unused var memtime.

2000-06-25  Martin Buchholz  <martin@xemacs.org>

	* make.texinfo, NEWS, TODO.private: Minor spelling corrections.
	Ran spell-check	on make.texinfo.

2000-06-23  Paul D. Smith  <psmith@gnu.org>

	* main.c (main): Replace EXIT_SUCCESS, EXIT_FAILURE, and
	EXIT_TROUBLE with MAKE_SUCCESS, MAKE_FAILURE, and MAKE_TROUBLE.
	* make.h: Define these macros.

	* Version 3.79.1 released.

	* configure.in: Add a new option, --disable-nsec-timestamps, to
	avoid using sub-second timestamps on systems that support it.  It
	can lead to problems, e.g. if your makefile relies on "cp -p".
	* README.template: Document the issue with "cp -p".

	* config.guess, config.sub: Updated.



See ChangeLog.2, available in the Git repository at:

	http://git.savannah.gnu.org/cgit/make.git/tree/

for earlier changes.


Copyright (C) 2000-2013 Free Software Foundation, Inc.
This file is part of GNU Make.

GNU Make is free software; you can redistribute it and/or modify it under the
terms of the GNU General Public License as published by the Free Software
Foundation; either version 3 of the License, or (at your option) any later
version.

GNU Make is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE.  See the GNU General Public License for more details.

You should have received a copy of the GNU General Public License along with
this program.  If not, see <http://www.gnu.org/licenses/>.
