I tried compiling 3.81 on cygwin with HAVE_DOS_PATHS,
and found the same crash described in this thread:
http://www.mail-archive.com/[email protected]/msg00861.html
I found the problem and fixed the crash.
Here is the patch:
*** make-3.81/job.c Sun Mar 19 22:03:04 2006
--- ../make-3.81/job.c Wed Aug 16 19:42:14 2006
*************** construct_command_argv_internal (char *l
*** 2297,2302 ****
--- 2297,2316 ----
0 };
char* sh_chars;
char** sh_cmds;
+ #elif defined(HAVE_DOS_PATHS)
+ /* This is required if the MSYS/Cygwin ports (which do not define
+ WINDOWS32) are compiled with HAVE_DOS_PATHS defined, which uses
+ sh_chars_sh[] directly (see below). The value is identical to
+ the one above for WINDOWS32 platforms. */
+ static char sh_chars_sh[] = "#;\"*?[]&|<>(){}$`^";
+ static char *sh_cmds_sh[] = { "cd", "eval", "exec", "exit", "login",
+ "logout", "set", "umask", "wait", "while", "for",
+ "case", "if", ":", ".", "break", "continue",
+ "export", "read", "readonly", "shift", "times",
+ "trap", "switch", "test", "echo", 0};
+ char *sh_chars;
+ char **sh_cmds;
+
#elif defined(__riscos__)
static char sh_chars[] = "";
static char *sh_cmds[] = { 0 };
*************** construct_command_argv_internal (char *l
*** 2326,2331 ****
--- 2340,2351 ----
sh_chars = sh_chars_sh;
}
#endif /* WINDOWS32 */
+ #if defined(HAVE_DOS_PATHS) && !defined(WINDOWS32)
+ int slow_flag = 0;
+
+ sh_cmds = sh_cmds_sh;
+ sh_chars = sh_chars_sh;
+ #endif /* WINDOWS32 */
if (restp != NULL)
*restp = NULL;
The crash was caused because sh_cmds and sh_chars were only initialized
if WINDOWS32 was set. If you add the initialization make seems to work
fine. I ran make check and all tests passed.
Can this patch be moved into the main tree?
Thanks.
-Bill
_______________________________________________
Make-w32 mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/make-w32