diff --git a/ChangeLog b/ChangeLog index b1dcefd7..e6e73348 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2004-11-28 Paul D. Smith + * main.c (main) [WINDOWS32]: Remove any trailing slashes from -C + arguments. Fixes bug #10252. + Fix for bug #1276: Handle SHELL according to POSIX requirements. * main.c (main): Set SHELL to v_noexport by default. Remember the diff --git a/main.c b/main.c index f0229eef..700e4ba1 100644 --- a/main.c +++ b/main.c @@ -1273,16 +1273,27 @@ main (int argc, char **argv, char **envp) for (i = 0; directories->list[i] != 0; ++i) { char *dir = directories->list[i]; + char *expanded = 0; if (dir[0] == '~') { - char *expanded = tilde_expand (dir); + expanded = tilde_expand (dir); if (expanded != 0) dir = expanded; } +#ifdef WINDOWS32 + /* WINDOWS32 chdir() doesn't work if the directory has a trailing '/' + But allow -C/ just in case someone wants that. */ + { + char *p = dir + strlen (dir) - 1; + while (p > dir && (p[0] == '/' || p[0] == '\\')) + --p; + p[1] = '\0'; + } +#endif if (chdir (dir) < 0) pfatal_with_name (dir); - if (dir != directories->list[i]) - free (dir); + if (expanded) + free (expanded); } #ifdef WINDOWS32 diff --git a/tests/ChangeLog b/tests/ChangeLog index a6423b07..cef8a331 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,5 +1,8 @@ 2004-11-28 Paul D. Smith + * scripts/options/dash-C [WINDOWS32]: Add a test for bug #10252; + this doesn't really test anything useful in UNIX but... + * scripts/variables/SHELL: New file: test proper handling of SHELL according to POSIX rules. Fixes bug #1276. diff --git a/tests/scripts/options/dash-C b/tests/scripts/options/dash-C index f31238f1..5864ffd2 100644 --- a/tests/scripts/options/dash-C +++ b/tests/scripts/options/dash-C @@ -1,28 +1,24 @@ -$description = "The following test creates a makefile to test the -C dir \n" - ."option in make. This option tells make to change to \n" - ."directory dir before reading the makefile."; +# -*-perl-*- -$details = "This test is similar to the clean test except that this test\n" - ."creates the file to delete in the work directory instead of\n" - ."the current directory. Make is called from another directory\n" - ."using the -C workdir option so that it can both find the \n" - ."makefile and the file to delete in the work directory. "; +$description = "Test the -C option to GNU make."; -$example = $workdir . $pathsep . "EXAMPLE_FILE"; +$details = "\ +This test is similar to the clean test except that this test creates the file +to delete in the work directory instead of the current directory. Make is +called from another directory using the -C workdir option so that it can both +find the makefile and the file to delete in the work directory."; + +$example = $workdir . $pathsep . "EXAMPLE"; open(MAKEFILE,"> $makefile"); - -# The Contents of the MAKEFILE ... - -print MAKEFILE "all: \n"; -print MAKEFILE "\t\@echo This makefile did not clean the dir ... good\n"; -print MAKEFILE "clean: \n"; -print MAKEFILE "\t$delete_command EXAMPLE_FILE\n"; - -# END of Contents of MAKEFILE - +print MAKEFILE <