* 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,
{
/* Backslash-newline is handled differently depending on what
kind of string we're in: inside single-quoted strings you
- keep them; in double-quoted strings they disappear. */
- if (instring == '"')
+ keep them; in double-quoted strings they disappear.
+ For DOS/Windows/OS2, if we don't have a POSIX shell,
+ we keep the pre-POSIX behavior of removing the
+ backslash-newline. */
+ if (instring == '"'
+#if defined (__MSDOS__) || defined (__EMX__) || defined (WINDOWS32)
+ || !unixy_shell
+#endif
+ )
++p;
else
{
}
else if (*p == '\\' && p[1] == '\n')
{
- /* POSIX says we keep the backslash-newline, but throw out the
- next char if it's a TAB. */
- *(ap++) = '\\';
- *(ap++) = *(p++);
- *(ap++) = *p;
+ /* POSIX says we keep the backslash-newline, but throw out
+ the next char if it's a TAB. If we don't have a POSIX
+ shell on DOS/Windows/OS2, mimic the pre-POSIX behavior
+ and remove the backslash/newline. */
+#if defined (__MSDOS__) || defined (__EMX__) || defined (WINDOWS32)
+# define PRESERVE_BSNL unixy_shell
+#else
+# define PRESERVE_BSNL 1
+#endif
+ if (PRESERVE_BSNL)
+ {
+ *(ap++) = '\\';
+ *(ap++) = '\\';
+ *(ap++) = '\n';
+ }
+ ++p;
if (p[1] == '\t')
++p;
# According to POSIX, any value of SHELL set in the makefile should _NOT_ be
# exported to the subshell! I wanted to set SHELL to be $^X (perl) in the
# makefile, but make runs $(SHELL) -c 'commandline' and that doesn't work at
-# all when $(SHELL) is perl :-/. So, we just add an extra initial / and hope
-# for the best on non-UNIX platforms :-/.
+# all when $(SHELL) is perl :-/. So, we just add an extra initial /./ which
+# works well on UNIX and seems to work OK on at least some non-UNIX systems.
$extraENV{SHELL} = $mshell;
-run_make_test("SHELL := /$mshell\n".'
+run_make_test("SHELL := /./$mshell\n".'
all:;@echo "$(SHELL) $$SHELL"
-', '', "/$mshell $mshell");
+', '', "/./$mshell $mshell");
# As a GNU make extension, if make's SHELL variable is explicitly exported,
# then we really _DO_ export it.
$extraENV{SHELL} = $mshell;
-run_make_test("export SHELL := /$mshell\n".'
+run_make_test("export SHELL := /./$mshell\n".'
all:;@echo "$(SHELL) $$SHELL"
-', '', "/$mshell /$mshell");
+', '', "/./$mshell /./$mshell");
# Test out setting of SHELL, both exported and not, as a target-specific
$extraENV{SHELL} = $mshell;
-run_make_test("all: SHELL := /$mshell\n".'
+run_make_test("all: SHELL := /./$mshell\n".'
all:;@echo "$(SHELL) $$SHELL"
-', '', "/$mshell $mshell");
+', '', "/./$mshell $mshell");
$extraENV{SHELL} = $mshell;
-run_make_test("all: export SHELL := /$mshell\n".'
+run_make_test("all: export SHELL := /./$mshell\n".'
all:;@echo "$(SHELL) $$SHELL"
-', '', "/$mshell $mshell");
+', '', "/./$mshell $mshell");
1;