- Fix memory errors found by valgrind
- Remove multi_glob() and empower parse_file_seq() to do its job:
the goal here is to remove the confusing reverse/re-reverse we do on
the file lists: needed for future fixes.
- Add a prefix arg to parse_file_seq()
- Make concat() variadic so it can take arbitrary #'s of strings
- Fix Savannah bug #17752
- Test suite:
* When tests fail keep a "run" file containing the command invoked.
* Support for the Valgrind "memcheck" and "massif" tools.
(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.
(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.
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.
Allows the user to reset the prefix character for introducing recipe lines
from the default (tab) to any other single character, and back again.
Also, reworked the manual to consistently use the word "recipe" to describe
the set of commands we use to update a target, instead of the various
phrases used in the past: "commands", "command lines", "command scripts",
etc.
One of our translations disappeared from the translations site so remove it.
The fdl.texi file was changed to not contain any @node entries, so add some
around it in make.texi.
Add a new feature to the test suite suggested by Icarus Sparry:
set a timer before invoking a test, so that if it loops infinitely we
will wake up and have a chance to kill the process and continue.
Fix an uninitialized variable.
Add builtin rules for Objective C.
Add a new debug line that shows where the commands that are about to be run
were defined.
comparison functions to always use POSIX strcasecmp(). For non-POSIX
systems that use other functions (strcmpi or stricmp) use a macro to alias
strcasecmp to those. If we can't find any of them (VMS, plus whatever
UNIX doesn't have them) then define our own version in misc.c.
string into the strcache. As a side-effect, many more structure members and
function arguments can/should be declared const.
As mentioned in the changelog, unfortunately measurement shows that this
change does not yet reduce memory. The problem is with secondary expansion:
because of this we store all the prerequisites in the string cache twice.
First we store the prerequisite string after initial expansion but before
secondary expansion, then we store each individual file after secondary
expansion and expand_deps(). I plan to change expand_deps() to be callable
in either context (eval or snap_deps) then have non-second-expansion
targets call expand_deps() during eval, so that we only need to store that
dependency list once.
A few changes from char* to void* where appropriate, and removing of
unnecessary casts.
Much more work on const-ifying the codebase. This round involves some code
changes to make it correct. NOTE!! There will almost certainly be problems
on the non-POSIX ports that will need to be addressed after the const changes
are finished: they will need to be const-ified properly and there may need to
be some changes to allocate memory, etc. as well.
The next (last?) big push for this, still to come, is const-ifying the
filenames in struct file, struct dep, etc. This will allow us to store file
names in the string cache and finally resolve Savannah bug #15182 (make uses
too much memory), among other advantages.
16304, 16468, 16577, 17701, 17880, 16051, 16652, 16698
Plus some from the mailing list.
Imported a patch from Eli to allow Cygwin builds to support DOS-style
pathnames.
- Add more warnings.
- Rename variables that mask out-scope vars with the same name.
- Remove all casts of return values from xmalloc, xrealloc, and alloca.
- Remove casts of the first argument to xrealloc.
- Convert all bcopy/bzero/bcmp invocations to use memcp/memmove/memset/memcmp.
Update NEWS docs.
Enhance the manual to use automake version.texi, and use the canonical
FSF copyright features and statement.
Some $(realpath ...) tests won't work on Windows; leave them out
The jobserver filedescriptor test might fail if some FDs are reserved,
so for now comment out that check.
Revert a fix for $? including non-existent files as it shows a bug
in the Linux kernel build. Give them a release to fix this.
Add some changes from Eli Z. for Windows changes.
- Fix handling of special targets like .SUFFIX for VMS insensitive targets.
- Don't make temporary batch files for -n. Make sure batch files are created
in text mode.
I decided this feature was too impacting to make the permanent default
behavior. This set of changes makes the default behavior of make the
old behavior (no second expansion). If you want second expansion, you
must define the .SECONDEXPANSION: special target before the first target
that needs it.
This set of changes ONLY fixes explicit and static pattern rules to work
like this. Implicit rules still have second expansion enabled all the
time: I'll work on that next.
Note that there is still a backward-incompatibility: now to get the old
SysV behavior using $$@ etc. in the prerequisites list you need to set
.SECONDEXPANSION: as well.
follow POSIX backslash/newline conventions.
Use a different method for testing the SHELL variable, which hopefully
will work better on non-UNIX systems.
check for this and exit with an error.
The closeout.c version from gnulib pulls in too much other stuff, and
gnulib requires an ANSI C 89 compliant compiler, while GNU make (so far)
still wants to work on K&R.
cleanups.
If we find a make error (invalid makefile syntax or something like that)
write back any tokens we have before we exit.
If we have waiting jobs (using -j + -l) set an alarm before we sleep on
the read() system call, so we can wake up to check the load and start
waiting jobs, if there are long-running jobs we would otherwise be
waiting for. Suggested by Grant Taylor.
Taylor. There are two forms of this: first, it was possible to lose
tokens when using -j and -l at the same time, because waiting jobs were
not checked when determining whether any jobs were outstanding. Second,
if you had an exported recursive variable that contained a $(shell ...)
function there is a possibility to lose tokens, since a token was taken
but the child list was not updated until after the shell function was
complete.
To resolve this I introduced a new variable that counted the number of
tokens we have obtained, rather than checking whether there were any
children on the list. I also added some sanity checks to make sure we
weren't writing back too many or not enough tokens. And, the master
make will drain the token pipe before exiting and compare the count of
tokens at the end to what was written there at the beginning.
Also:
* Ensure a bug in the environment (missing "=") doesn't cause make to core.
* Rename the .DEFAULT_TARGET variable to .DEFAULT_GOAL, to match the
terminology in the documentation and other variables like MAKECMDGOALS.
* Add documentation of the .DEFAULT_GOAL special variable.
Still need to document the secondary expansion stuff...
I did this by adding intelligence into the algorithm such that the
second expansion was only actually performed when the prerequisite list
contained at least one "$", so we knew it is actually needed.
Without this we were using up a LOT more memory, since every single
target (even ones never used by make) had their file variables
initialized. This also used a lot more CPU, since we needed to create
and populate a new variable hash table for every target.
There is one issue remaining with this feature: it leaks memory. In
pattern_search() we now initialize the file variables for every pattern
target, which allocates a hash table, etc. However, sometimes we
recursively invoke pattern_search() (for intermediate files) with an
automatic variable (alloca() I believe) as the file. When that function
returns, obviously, the file variable hash memory is lost.
* New function: $(info ...)
* Disallow $(eval ...) to create prereq relationships inside command scripts
(caused core dumps)
* Try to allow more tests to succeed in Windows/DOS by sanitizing CRLF and \
* Various bug fixes and code cleanups (see the ChangeLog entry)
Fix references to MINGW #define constants.
Remove WINDOWS32 ifdef from sub_proc.h.
Only add variables to the command line for recursion once.
New features in run_make_test: #PWD# and #MAKEPATH# replacements.
Test the multi-variable fix in the recursion regression test.
POSIX requires that the value of SHELL in the makefile NOT be exported
to sub-commands. Instead, the value in the environment when make was
invoked should be passed to the environment of sub-commands. Note that
make still uses SHELL to _run_ sub-commands; it just doesn't change the
value of the SHELL variable in the environment of sub-commands.
As an extension to POSIX, if the makefile explicitly exports SHELL then
GNU make _will_ use it in the environment of sub-commands.
reported by Markus Mauhart <qwe123@chello.at>. One was a simple typo; to
fix the other we call patsubst_expand() for all instances of variable
substitution, even when there is no '%'. We used to call subst_expand()
with a special flag set in the latter case, but it didn't work properly
in all situations. Easier to just use patsubst_expand() since that's
what it is.
- Apply a fix for the "thundering herd" problem when using "-j -l".
This also fixes bug #4693.
- Fix bug #7257: allow functions as ifdef arguments
- Fix bug #4518: make sure we print all double-colon rules with -p.
- Upgrade to autconf 2.58/automake 1.8/gettext 0.13.1
- Various doc cleanups, etc.
This commits a number of changes from Earnie Boyd that allows GNU make
to build for MINGW32 systems. Only missing from this commit are the
changes to configure.in etc.; I'm waiting for Earnie to sign papers for
those new files.
Also not here is any README.mingw32 etc. which would explain how to use
this port.
Implement a fix for bug # 2169: too many OSs, even major OSs like Solaris,
don't properly implement SA_RESTART: important system calls like stat() can
still fail when SA_RESTART is set. So, forget the BROKEN_RESTART config
check and get rid of atomic_stat() and atomic_readdir(), and implement
permanent wrappers for EINTR checking on various system calls (stat(),
fstat(), opendir(), and readdir() so far).
enable the automake ansi2knr capability.
Right now this doesn't quite build using a K&R compiler because of a
problem with the loadavg test program, but the rest of the code works. I'm
asking the automake list about this problem.
Implemented enhancement #1391: allow "export" in target-specific
variable definitions.
Change the Info name of the "Automatic" node to "Automatic Variables".
Add text clarifying the scope of automatic variables to that section.
GNU make. Also he provides some other performance fixups after doing
some profiling of make on large makefiles.
Modify the test suite to allow the use of Valgrind to find memory problems.
Incorporate "order-only" prerequisites patch. Wrote a test for it.
The test shows what might be a bug in the code; I need to look at it
more closely (anyway it doesn't behave as I expected). Also I haven't
done the docs yet.
New version of the manual, put into the doc subdir.
Enhancements: $(eval ...) and $(value ...) functions, various bug
fixes, etc. See the ChangeLog.
More to come.
properly.
Fix configure: allow cross-compilation; fix getloadavg (still needs _lots_
of work!)
Let $(call ...) functions to be self-referencing. Lets us do transitive
closures, for example.
Fix an assert() in an obscure use of -q
Handling of double-colon timestamp updates was broken in a bizarre way.
Store arguments to $(call ...) functions in simple variables, not recursive
variables.
* Define COFLAGS to avoid unknown variable warning.
* Fix some usec problems on UnixWare.
* Don't remove .INTERMEDIATE targets specified on the command line.
* Fix += target-specific variables: if your direct parent doesn't have a
setting for the variable but his parent does, you'll get recursive
expansion errors.