Release GNU make 3.82

- Update tests for Solaris bizarre-ness
- Update files for release
This commit is contained in:
Paul Smith 2010-07-28 05:39:50 +00:00
parent 59691939f9
commit 95f1a32d27
7 changed files with 104 additions and 64 deletions

View File

@ -1,3 +1,14 @@
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> 2010-07-24 Eli Zaretskii <eliz@gnu.org>
* job.c (pid2str) [WINDOWS32]: Fix CPP conditionals for using %Id * job.c (pid2str) [WINDOWS32]: Fix CPP conditionals for using %Id
@ -1643,7 +1654,7 @@
2005-12-12 Paul D. Smith <psmith@gnu.org> 2005-12-12 Paul D. Smith <psmith@gnu.org>
* make.1: Fix some display errors and document all existing options. * make.1: Fix some display errors and document all existing options.
Patch provided by Mike Frysinger <vapier@gentoo.org>. Patch by Mike Frysinger <vapier@gentoo.org>.
2005-12-11 Paul D. Smith <psmith@gnu.org> 2005-12-11 Paul D. Smith <psmith@gnu.org>

96
NEWS
View File

@ -1,6 +1,6 @@
GNU make NEWS -*-indented-text-*- GNU make NEWS -*-indented-text-*-
History of user-visible changes. History of user-visible changes.
19 July 2010 28 July 2010
See the end of this file for copyrights and conditions. See the end of this file for copyrights and conditions.
@ -9,11 +9,23 @@ manual, which is contained in this distribution as the file doc/make.texi.
See the README file and the GNU make manual for instructions for See the README file and the GNU make manual for instructions for
reporting bugs. reporting bugs.
Version 3.81.91 Version 3.82
A complete list of bugs fixed in this version is available here:
http://sv.gnu.org/bugs/index.php?group=make&report_id=111&fix_release_id=104&set=custom
* Compiling GNU make now requires a conforming ISO C 1989 compiler and * Compiling GNU make now requires a conforming ISO C 1989 compiler and
standard runtime library. standard runtime library.
* WARNING: Future backward-incompatibility!
Wildcards are not documented as returning sorted values, but up to and
including this release the results have been sorted and some makefiles are
apparently depending on that. In the next release of GNU make, for
performance reasons, we may remove that sorting. If your makefiles
require sorted results from wildcard expansions, use the $(sort ...)
function to request it explicitly.
* WARNING: Backward-incompatibility! * WARNING: Backward-incompatibility!
The POSIX standard for make was changed in the 2008 version in a The POSIX standard for make was changed in the 2008 version in a
fundamentally incompatible way: make is required to invoke the shell as if fundamentally incompatible way: make is required to invoke the shell as if
@ -21,7 +33,8 @@ Version 3.81.91
have been written to conform to the original text of the standard, the have been written to conform to the original text of the standard, the
default behavior of GNU make remains to invoke the shell with simply '-c'. default behavior of GNU make remains to invoke the shell with simply '-c'.
However, any makefile specifying the .POSIX special target will follow the However, any makefile specifying the .POSIX special target will follow the
new POSIX standard and pass '-e' to the shell. See also .SHELLFLAGS below. new POSIX standard and pass '-e' to the shell. See also .SHELLFLAGS
below.
* WARNING: Backward-incompatibility! * WARNING: Backward-incompatibility!
The '$?' variable now contains all prerequisites that caused the target to The '$?' variable now contains all prerequisites that caused the target to
@ -31,12 +44,12 @@ Version 3.81.91
* WARNING: Backward-incompatibility! * WARNING: Backward-incompatibility!
As a result of parser enhancements, three backward-compatibility issues As a result of parser enhancements, three backward-compatibility issues
exist: first, a prerequisite containing an "=" cannot be escaped with a exist: first, a prerequisite containing an "=" cannot be escaped with a
backslash any longer. You must create a variable containing an "=" and use backslash any longer. You must create a variable containing an "=" and
that variable in the prerequisite. Second, variable names can no longer use that variable in the prerequisite. Second, variable names can no
contain whitespace, unless you put the whitespace in a variable and use the longer contain whitespace, unless you put the whitespace in a variable and
variable. Third, in previous versions of make it was sometimes not flagged use the variable. Third, in previous versions of make it was sometimes
as an error for explicit and pattern targets to appear in the same rule. not flagged as an error for explicit and pattern targets to appear in the
Now this is always reported as an error. same rule. Now this is always reported as an error.
* WARNING: Backward-incompatibility! * WARNING: Backward-incompatibility!
The pattern-specific variables and pattern rules are now applied in the The pattern-specific variables and pattern rules are now applied in the
@ -48,57 +61,58 @@ Version 3.81.91
* WARNING: Backward-incompatibility! * WARNING: Backward-incompatibility!
The library search behavior has changed to be compatible with the standard The library search behavior has changed to be compatible with the standard
linker behavior. Prior to this version for prerequisites specified using the linker behavior. Prior to this version for prerequisites specified using
-lfoo syntax make first searched for libfoo.so in the current directory, the -lfoo syntax make first searched for libfoo.so in the current
vpath directories, and system directories. If that didn't yield a match, directory, vpath directories, and system directories. If that didn't yield
make then searched for libfoo.a in these directories. Starting with this a match, make then searched for libfoo.a in these directories. Starting
version make searches first for libfoo.so and then for libfoo.a in each of with this version make searches first for libfoo.so and then for libfoo.a
these directories in order. in each of these directories in order.
* New command line option: --eval=STRING causes STRING to be evaluated as * New command line option: --eval=STRING causes STRING to be evaluated as
makefile syntax (akin to using the $(eval ...) function). The evaluation is makefile syntax (akin to using the $(eval ...) function). The evaluation
performed after all default rules and variables are defined, but before any is performed after all default rules and variables are defined, but before
makefiles are read. any makefiles are read.
* New special variable: .RECIPEPREFIX allows you to reset the recipe * New special variable: .RECIPEPREFIX allows you to reset the recipe
introduction character from the default (TAB) to something else. The first introduction character from the default (TAB) to something else. The
character of this variable value is the new recipe introduction character. first character of this variable value is the new recipe introduction
If the variable is set to the empty string, TAB is used again. It can be character. If the variable is set to the empty string, TAB is used again.
set and reset at will; recipes will use the value active when they were It can be set and reset at will; recipes will use the value active when
first parsed. To detect this feature check the value of $(.RECIPEPREFIX). they were first parsed. To detect this feature check the value of
$(.RECIPEPREFIX).
* New special variable: .SHELLFLAGS allows you to change the options passed to * New special variable: .SHELLFLAGS allows you to change the options passed
the shell when it invokes recipes. By default the value will be "-c" (or to the shell when it invokes recipes. By default the value will be "-c"
"-ec" if .POSIX is set). (or "-ec" if .POSIX is set).
* New special target: .ONESHELL instructs make to invoke a single instance of * New special target: .ONESHELL instructs make to invoke a single instance
the shell and provide it with the entire recipe, regardless of how many of the shell and provide it with the entire recipe, regardless of how many
lines it contains. As a special feature to allow more straightforward lines it contains. As a special feature to allow more straightforward
conversion of makefiles to use .ONESHELL, any recipe line control characters conversion of makefiles to use .ONESHELL, any recipe line control
('@', '+', or '-') will be removed from the second and subsequent recipe characters ('@', '+', or '-') will be removed from the second and
lines. This happens _only_ if the SHELL value is deemed to be a standard subsequent recipe lines. This happens _only_ if the SHELL value is deemed
POSIX-style shell. If not, then no interior line control characters are to be a standard POSIX-style shell. If not, then no interior line control
removed (as they may be part of the scripting language used with the characters are removed (as they may be part of the scripting language used
alternate SHELL). with the alternate SHELL).
* New variable modifier 'private': prefixing a variable assignment with the * New variable modifier 'private': prefixing a variable assignment with the
modifier 'private' suppresses inheritance of that variable by modifier 'private' suppresses inheritance of that variable by
prerequisites. This is most useful for target- and pattern-specific prerequisites. This is most useful for target- and pattern-specific
variables. variables.
* New make directive: 'undefine' allows you to undefine a variable so * New make directive: 'undefine' allows you to undefine a variable so that
that it appears as if it was never set. Both $(flavor) and $(origin) it appears as if it was never set. Both $(flavor) and $(origin) functions
functions will return 'undefined' for such a variable. To detect this will return 'undefined' for such a variable. To detect this feature search
feature search for 'undefine' in the .FEATURES special variable. for 'undefine' in the .FEATURES special variable.
* The parser for variable assignments has been enhanced to allow multiple * The parser for variable assignments has been enhanced to allow multiple
modifiers ('export', 'override', 'private') on the same line as variables, modifiers ('export', 'override', 'private') on the same line as variables,
including define/endef variables, and in any order. Also, it is possible including define/endef variables, and in any order. Also, it is possible
to create variables and targets named as these modifiers. to create variables and targets named as these modifiers.
* The 'define' make directive now allows a variable assignment operator after * The 'define' make directive now allows a variable assignment operator
the variable name, to allow for simple, conditional, or appending multi-line after the variable name, to allow for simple, conditional, or appending
variable assignment. multi-line variable assignment.
Version 3.81 Version 3.81

View File

@ -17,7 +17,7 @@
# You should have received a copy of the GNU General Public License along with # You should have received a copy of the GNU General Public License along with
# this program. If not, see <http://www.gnu.org/licenses/>. # this program. If not, see <http://www.gnu.org/licenses/>.
AC_INIT([GNU make],[3.81.91],[bug-make@gnu.org]) AC_INIT([GNU make],[3.82],[bug-make@gnu.org])
AC_PREREQ(2.59) AC_PREREQ(2.59)
AC_REVISION([[$Id$]]) AC_REVISION([[$Id$]])

View File

@ -1,3 +1,11 @@
2010-07-28 Paul Smith <psmith@gnu.org>
* scripts/targets/POSIX: Compatibility issues with Solaris (and
Tru64?); "false" returns different exit codes, and set -x shows
output with extra whitespace. Run the commands by hand first to
find out what the real shell would do, then compare what make does.
* scripts/variables/SHELL: Ditto.
2010-07-12 Paul Smith <psmith@gnu.org> 2010-07-12 Paul Smith <psmith@gnu.org>
* test_driver.pl: Add a new $perl_name containing the path to Perl. * test_driver.pl: Add a new $perl_name containing the path to Perl.

View File

@ -6,23 +6,28 @@ $details = "";
# Ensure turning on .POSIX enables the -e flag for the shell # Ensure turning on .POSIX enables the -e flag for the shell
# We can't just use "false" because on different systems it provides a # We can't assume the exit value of "false" because on different systems it's
# different exit code. # different.
run_make_test(q! my $script = 'false; true';
my $flags = '-ec';
my $out = `/bin/sh $flags '$script' 2>&1`;
my $err = $? >> 8;
run_make_test(qq!
.POSIX: .POSIX:
all: ; @r() { return 1; }; r; true all: ; \@$script
!, !,
'', "#MAKE#: *** [all] Error 1\n", 512); '', "#MAKE#: *** [all] Error $err\n", 512);
# User settings must override .POSIX # User settings must override .POSIX
$flags = '-xc';
run_make_test(q! $out = `/bin/sh $flags '$script' 2>&1`;
.SHELLFLAGS = -xc run_make_test(qq!
.SHELLFLAGS = $flags
.POSIX: .POSIX:
all: ; @r() { return 1; }; r; true all: ; \@$script
!, !,
'', "+ r\n+ return 1\n+ true\n"); '', $out);
# This tells the test driver that the perl test script executed properly. # This tells the test driver that the perl test script executed properly.
1; 1;

View File

@ -58,27 +58,29 @@ one two:;@echo "$@: $(SHELL) $$SHELL"
# Test .SHELLFLAGS # Test .SHELLFLAGS
# We can't assume the value here: on Solaris for example, every line printed # We don't know the output here: on Solaris for example, every line printed
# by the shell in -x mode has a trailing space (!!) # by the shell in -x mode has a trailing space (!!)
my $script = 'true'; my $script = 'true; true';
my $out = `/bin/sh -xc '$script' 2>&1`; my $flags = '-xc';
my $out = `/bin/sh $flags '$script' 2>&1`;
run_make_test(qq! run_make_test(qq!
.SHELLFLAGS = -xc .SHELLFLAGS = $flags
all: ; \@$script all: ; \@$script
!, !,
'', $out); '', $out);
# We can't just use "false" because on different systems it provides a # We can't just use "false" because on different systems it provides a
# different exit code. # different exit code--once again Solaris: false exits with 255 not 1
$script = 'true; false; true';
my $script = 'r() { return 1; }; true; r; true'; $flags = '-xec';
my $out = `/bin/sh -xec '$script' 2>&1`; $out = `/bin/sh $flags '$script' 2>&1`;
my $err = $? >> 8;
run_make_test(qq! run_make_test(qq!
.SHELLFLAGS = -xec .SHELLFLAGS = $flags
all: ; \@$script all: ; \@$script
!, !,
'', "$out#MAKE#: *** [all] Error 1\n", 512); '', "$out#MAKE#: *** [all] Error $err\n", 512);
1; 1;

View File

@ -802,7 +802,7 @@ sub _run_command
eval { eval {
local $SIG{ALRM} = sub { die "timeout\n"; }; local $SIG{ALRM} = sub { die "timeout\n"; };
alarm $test_timeout; alarm $test_timeout;
$code = system @_; $code = system(@_);
alarm 0; alarm 0;
}; };
if ($@) { if ($@) {