From 650ef89daf53ca19367463121ec032a397e51eae Mon Sep 17 00:00:00 2001 From: psmith Date: Wed, 28 Jul 2010 05:39:50 +0000 Subject: [PATCH] Release GNU make 3.82 - Update tests for Solaris bizarre-ness - Update files for release --- ChangeLog | 13 +++++- NEWS | 100 ++++++++++++++++++++++++------------------ configure.in | 4 +- tests/ChangeLog | 8 ++++ tests/scripts/targets/POSIX | 27 +++++++----- tests/scripts/variables/SHELL | 22 +++++----- tests/test_driver.pl | 4 +- 7 files changed, 109 insertions(+), 69 deletions(-) diff --git a/ChangeLog b/ChangeLog index 96c162e..d135d1c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,14 @@ +2010-07-28 Paul Smith + + 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 * job.c (pid2str) [WINDOWS32]: Fix CPP conditionals for using %Id @@ -1643,7 +1654,7 @@ 2005-12-12 Paul D. Smith * make.1: Fix some display errors and document all existing options. - Patch provided by Mike Frysinger . + Patch by Mike Frysinger . 2005-12-11 Paul D. Smith diff --git a/NEWS b/NEWS index ee14e9e..523c9a7 100644 --- a/NEWS +++ b/NEWS @@ -1,6 +1,6 @@ GNU make NEWS -*-indented-text-*- History of user-visible changes. - 19 July 2010 + 28 July 2010 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 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 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! 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 @@ -21,7 +33,8 @@ Version 3.81.91 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'. 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! The '$?' variable now contains all prerequisites that caused the target to @@ -31,12 +44,12 @@ Version 3.81.91 * WARNING: Backward-incompatibility! As a result of parser enhancements, three backward-compatibility issues exist: first, a prerequisite containing an "=" cannot be escaped with a - backslash any longer. You must create a variable containing an "=" and use - that variable in the prerequisite. Second, variable names can no longer - contain whitespace, unless you put the whitespace in a variable and use the - variable. Third, in previous versions of make it was sometimes not flagged - as an error for explicit and pattern targets to appear in the same rule. - Now this is always reported as an error. + backslash any longer. You must create a variable containing an "=" and + use that variable in the prerequisite. Second, variable names can no + longer contain whitespace, unless you put the whitespace in a variable and + use the variable. Third, in previous versions of make it was sometimes + not flagged as an error for explicit and pattern targets to appear in the + same rule. Now this is always reported as an error. * WARNING: Backward-incompatibility! The pattern-specific variables and pattern rules are now applied in the @@ -48,57 +61,58 @@ Version 3.81.91 * WARNING: Backward-incompatibility! The library search behavior has changed to be compatible with the standard - linker behavior. Prior to this version for prerequisites specified using the - -lfoo syntax make first searched for libfoo.so in the current directory, - vpath directories, and system directories. If that didn't yield a match, - make then searched for libfoo.a in these directories. Starting with this - version make searches first for libfoo.so and then for libfoo.a in each of - these directories in order. + linker behavior. Prior to this version for prerequisites specified using + the -lfoo syntax make first searched for libfoo.so in the current + directory, vpath directories, and system directories. If that didn't yield + a match, make then searched for libfoo.a in these directories. Starting + with this version make searches first for libfoo.so and then for libfoo.a + in each of these directories in order. * New command line option: --eval=STRING causes STRING to be evaluated as - makefile syntax (akin to using the $(eval ...) function). The evaluation is - performed after all default rules and variables are defined, but before any - makefiles are read. + makefile syntax (akin to using the $(eval ...) function). The evaluation + is performed after all default rules and variables are defined, but before + any makefiles are read. * New special variable: .RECIPEPREFIX allows you to reset the recipe - introduction character from the default (TAB) to something else. The first - character of this variable value is the new recipe introduction character. - If the variable is set to the empty string, TAB is used again. It can be - set and reset at will; recipes will use the value active when 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 - the shell when it invokes recipes. By default the value will be "-c" (or - "-ec" if .POSIX is set). - -* New special target: .ONESHELL instructs make to invoke a single instance of - the shell and provide it with the entire recipe, regardless of how many + introduction character from the default (TAB) to something else. The + first character of this variable value is the new recipe introduction + character. If the variable is set to the empty string, TAB is used again. + It can be set and reset at will; recipes will use the value active when + 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 the shell when it invokes recipes. By default the value will be "-c" + (or "-ec" if .POSIX is set). + +* New special target: .ONESHELL instructs make to invoke a single instance + 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 - conversion of makefiles to use .ONESHELL, any recipe line control characters - ('@', '+', or '-') will be removed from the second and subsequent recipe - lines. This happens _only_ if the SHELL value is deemed to be a standard - POSIX-style shell. If not, then no interior line control characters are - removed (as they may be part of the scripting language used with the - alternate SHELL). + conversion of makefiles to use .ONESHELL, any recipe line control + characters ('@', '+', or '-') will be removed from the second and + subsequent recipe lines. This happens _only_ if the SHELL value is deemed + to be a standard POSIX-style shell. If not, then no interior line control + characters are removed (as they may be part of the scripting language used + with the alternate SHELL). * New variable modifier 'private': prefixing a variable assignment with the modifier 'private' suppresses inheritance of that variable by prerequisites. This is most useful for target- and pattern-specific variables. -* New make directive: 'undefine' allows you to undefine a variable so - that it appears as if it was never set. Both $(flavor) and $(origin) - functions will return 'undefined' for such a variable. To detect this - feature search for 'undefine' in the .FEATURES special variable. +* New make directive: 'undefine' allows you to undefine a variable so that + it appears as if it was never set. Both $(flavor) and $(origin) functions + will return 'undefined' for such a variable. To detect this feature search + for 'undefine' in the .FEATURES special variable. * The parser for variable assignments has been enhanced to allow multiple modifiers ('export', 'override', 'private') on the same line as variables, including define/endef variables, and in any order. Also, it is possible to create variables and targets named as these modifiers. -* The 'define' make directive now allows a variable assignment operator after - the variable name, to allow for simple, conditional, or appending multi-line - variable assignment. +* The 'define' make directive now allows a variable assignment operator + after the variable name, to allow for simple, conditional, or appending + multi-line variable assignment. Version 3.81 diff --git a/configure.in b/configure.in index 7216180..0b03617 100644 --- a/configure.in +++ b/configure.in @@ -17,10 +17,10 @@ # You should have received a copy of the GNU General Public License along with # this program. If not, see . -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_REVISION([[$Id: configure.in,v 1.155 2010/07/19 07:10:53 psmith Exp $]]) +AC_REVISION([[$Id: configure.in,v 1.156 2010/07/28 05:39:50 psmith Exp $]]) # Autoconf setup AC_CONFIG_AUX_DIR(config) diff --git a/tests/ChangeLog b/tests/ChangeLog index 66682ac..d036568 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,11 @@ +2010-07-28 Paul Smith + + * 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 * test_driver.pl: Add a new $perl_name containing the path to Perl. diff --git a/tests/scripts/targets/POSIX b/tests/scripts/targets/POSIX index 1b57448..9c30e18 100644 --- a/tests/scripts/targets/POSIX +++ b/tests/scripts/targets/POSIX @@ -6,23 +6,28 @@ $details = ""; # Ensure turning on .POSIX enables the -e flag for the shell -# We can't just use "false" because on different systems it provides a -# different exit code. - -run_make_test(q! +# We can't assume the exit value of "false" because on different systems it's +# different. + +my $script = 'false; true'; +my $flags = '-ec'; +my $out = `/bin/sh $flags '$script' 2>&1`; +my $err = $? >> 8; +run_make_test(qq! .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 - -run_make_test(q! -.SHELLFLAGS = -xc +$flags = '-xc'; +$out = `/bin/sh $flags '$script' 2>&1`; +run_make_test(qq! +.SHELLFLAGS = $flags .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. 1; diff --git a/tests/scripts/variables/SHELL b/tests/scripts/variables/SHELL index 0028d9f..7b7e7fe 100644 --- a/tests/scripts/variables/SHELL +++ b/tests/scripts/variables/SHELL @@ -58,27 +58,29 @@ one two:;@echo "$@: $(SHELL) $$SHELL" # 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 (!!) -my $script = 'true'; -my $out = `/bin/sh -xc '$script' 2>&1`; +my $script = 'true; true'; +my $flags = '-xc'; +my $out = `/bin/sh $flags '$script' 2>&1`; run_make_test(qq! -.SHELLFLAGS = -xc +.SHELLFLAGS = $flags all: ; \@$script !, '', $out); # We can't just use "false" because on different systems it provides a -# different exit code. - -my $script = 'r() { return 1; }; true; r; true'; -my $out = `/bin/sh -xec '$script' 2>&1`; +# different exit code--once again Solaris: false exits with 255 not 1 +$script = 'true; false; true'; +$flags = '-xec'; +$out = `/bin/sh $flags '$script' 2>&1`; +my $err = $? >> 8; run_make_test(qq! -.SHELLFLAGS = -xec +.SHELLFLAGS = $flags all: ; \@$script !, - '', "$out#MAKE#: *** [all] Error 1\n", 512); + '', "$out#MAKE#: *** [all] Error $err\n", 512); 1; diff --git a/tests/test_driver.pl b/tests/test_driver.pl index 7a7a785..dec869d 100644 --- a/tests/test_driver.pl +++ b/tests/test_driver.pl @@ -30,7 +30,7 @@ # this routine controls the whole mess; each test suite sets up a few # variables and then calls &toplevel, which does all the real work. -# $Id: test_driver.pl,v 1.29 2010/07/13 01:20:43 psmith Exp $ +# $Id: test_driver.pl,v 1.30 2010/07/28 05:39:50 psmith Exp $ # The number of test categories we've run @@ -802,7 +802,7 @@ sub _run_command eval { local $SIG{ALRM} = sub { die "timeout\n"; }; alarm $test_timeout; - $code = system @_; + $code = system(@_); alarm 0; }; if ($@) { -- 2.11.4.GIT