From afc4906acaeb7191e4ec085d7be4ca5b036b821d Mon Sep 17 00:00:00 2001
From: Paul Smith <psmith@gnu.org>
Date: Wed, 8 Mar 2006 20:15:08 +0000
Subject: [PATCH] Some test updates for Windows. Handle SHELL set on the
 command line properly for windows.

---
 ChangeLog                            |  6 +++++
 NEWS                                 | 17 +++++++++----
 tests/ChangeLog                      |  8 +++++++
 tests/run_make_tests.pl              |  2 +-
 tests/scripts/features/default_names | 36 +++++-----------------------
 tests/scripts/features/targetvars    |  2 +-
 tests/scripts/options/dash-W         |  2 +-
 variable.c                           |  3 ++-
 8 files changed, 37 insertions(+), 39 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index b2cde4fe..b32ece5f 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+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
diff --git a/NEWS b/NEWS
index 3778954b..ffaa0f36 100644
--- a/NEWS
+++ b/NEWS
@@ -1,6 +1,6 @@
 GNU make NEWS                                               -*-indented-text-*-
   History of user-visible changes.
-  19 February 2006
+  8 March 2006
 
 See the end of this file for copyrights and conditions.
 
@@ -9,7 +9,7 @@ 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.81rc1
+Version 3.81rc2
 
 * GNU make is ported to OS/2.
 
@@ -18,7 +18,6 @@ Version 3.81rc1
   details.
 
 * WARNING: Backward-incompatibility!
-
   GNU make now implements a generic "second expansion" feature on the
   prerequisites of both explicit and implicit (pattern) rules.  In order
   to enable this feature, the special target '.SECONDEXPANSION' must be
@@ -41,8 +40,16 @@ Version 3.81rc1
   backslash-newline sequences in command strings has changed.  If your
   makefiles use backslash-newline sequences inside of single-quoted
   strings in command scripts you will be impacted by this change.  See
-  the GNU make manual section "Command Execution" (node "Execution") for
-  details.
+  the GNU make manual subsection "Splitting Command Lines" (node
+  "Splitting Lines"), in section "Command Syntax", chapter "Writing the
+  Commands in Rules", for details.
+
+* WARNING: Backward-incompatibility!
+  Some previous versions of GNU make had a bug where "#" in a function
+  invocation such as $(shell ...) was treated as a make comment.  A
+  workaround was to escape these with backslashes.  This bug has been
+  fixed: if your makefile uses "\#" in a function invocation the
+  backslash is now preserved, so you'll need to remove it.
 
 * New command-line option: -L (--check-symlink-times).  On systems that
   support symbolic links, if this option is given then GNU make will
diff --git a/tests/ChangeLog b/tests/ChangeLog
index 57dec0d0..3db7cc33 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,3 +1,11 @@
+2006-03-05  Paul D. Smith  <psmith@gnu.org>
+
+	* run_make_tests.pl (set_more_defaults): Add CYGWIN_NT as a port
+	type W32.  Fixed Savannah bug #15937.
+
+	* scripts/features/default_names: Don't call error() when the test
+	fails.  Fixes Savannah bug #15941.
+
 2006-02-17  Paul D. Smith  <psmith@gnu.org>
 
 	* scripts/features/targetvars: Test a complex construction which
diff --git a/tests/run_make_tests.pl b/tests/run_make_tests.pl
index ae7536f2..689ce2e6 100755
--- a/tests/run_make_tests.pl
+++ b/tests/run_make_tests.pl
@@ -238,7 +238,7 @@ sub set_more_defaults
    #
    # This is probably not specific enough.
    #
-   if ($osname =~ /Windows/i || $osname =~ /MINGW32/i) {
+   if ($osname =~ /Windows/i || $osname =~ /MINGW32/i || $osname =~ /CYGWIN_NT/i) {
      $port_type = 'W32';
    }
    # Bleah, the osname is so variable on DOS.  This kind of bites.
diff --git a/tests/scripts/features/default_names b/tests/scripts/features/default_names
index 501f1fc9..e53127e1 100644
--- a/tests/scripts/features/default_names
+++ b/tests/scripts/features/default_names
@@ -7,59 +7,35 @@ default makefiles in the correct order (GNUmakefile,makefile,Makefile)";
 $makefile = "GNUmakefile";
 
 open(MAKEFILE,"> $makefile");
-
 print MAKEFILE "FIRST: ; \@echo It chose GNUmakefile\n";
-
 close(MAKEFILE);
 
 # DOS/WIN32 platforms preserve case, but Makefile is the same file as makefile.
 # Just test what we can here (avoid Makefile versus makefile test).
-#
-if ($port_type eq 'UNIX')
-{
+
+if ($port_type eq 'UNIX') {
   # Create another makefile called "makefile"
   open(MAKEFILE,"> makefile");
-
   print MAKEFILE "SECOND: ; \@echo It chose makefile\n";
-
   close(MAKEFILE);
 }
 
-
 # Create another makefile called "Makefile"
 open(MAKEFILE,"> Makefile");
-
 print MAKEFILE "THIRD: ; \@echo It chose Makefile\n";
-
 close(MAKEFILE);
 
 
 &run_make_with_options("","",&get_logfile);
-
-# Create the answer to what should be produced by this Makefile
-$answer = "It chose GNUmakefile\n";
-
-# COMPARE RESULTS
-
-&compare_output($answer,&get_logfile(1)) || &error("abort");
+&compare_output("It chose GNUmakefile\n",&get_logfile(1));
 unlink $makefile;
 
-# DOS/WIN32 platforms preserve case, but Makefile is the same file as makefile.
-# Just test what we can here (avoid Makefile versus makefile test).
-#
-if ($port_type eq 'UNIX')
-{
-  $answer = "It chose makefile\n";
-
+if ($port_type eq 'UNIX') {
   &run_make_with_options("","",&get_logfile);
-
-  &compare_output($answer,&get_logfile(1)) || &error("abort");
+  &compare_output("It chose makefile\n",&get_logfile(1));
   unlink "makefile";
 }
 
-$answer = "It chose Makefile\n";
-
 &run_make_with_options("","",&get_logfile);
-
-&compare_output($answer,&get_logfile(1)) || &error("abort");
+&compare_output("It chose Makefile\n",&get_logfile(1));
 unlink "Makefile";
diff --git a/tests/scripts/features/targetvars b/tests/scripts/features/targetvars
index c22ce135..18dd0239 100644
--- a/tests/scripts/features/targetvars
+++ b/tests/scripts/features/targetvars
@@ -272,7 +272,7 @@ $answer = "no build information\n";
 # Test a merge of set_lists for files, where one list is much longer
 # than the other.  See Savannah bug #15757.
 
-mkdir('t1');
+mkdir('t1', 0777);
 touch('t1/rules.mk');
 
 run_make_test('
diff --git a/tests/scripts/options/dash-W b/tests/scripts/options/dash-W
index 50745f72..d3fde87c 100644
--- a/tests/scripts/options/dash-W
+++ b/tests/scripts/options/dash-W
@@ -60,7 +60,7 @@ rmfiles('foo.x', 'bar.x');
 # Test -W on vpath-found files: it should take effect.
 # Savannah bug # 15341
 
-mkdir('x-dir');
+mkdir('x-dir', 0777);
 utouch(-20, 'x-dir/x');
 touch('y');
 
diff --git a/variable.c b/variable.c
index 54bbc02a..f23f7d12 100644
--- a/variable.c
+++ b/variable.c
@@ -1168,7 +1168,8 @@ do_variable_definition (const struct floc *flocp, const char *varname,
   else
 #endif /* __MSDOS__ */
 #ifdef WINDOWS32
-  if ((origin == o_file || origin == o_override) && streq (varname, "SHELL"))
+  if ((origin == o_file || origin == o_override || origin == o_command)
+      && streq (varname, "SHELL"))
     {
       extern char *default_shell;