diff options
author | Paul Smith <psmith@gnu.org> | 2004-11-29 01:35:13 +0000 |
---|---|---|
committer | Paul Smith <psmith@gnu.org> | 2004-11-29 01:35:13 +0000 |
commit | be6a8bc869ece930f3bd5f725efd9fab7a2c2940 (patch) | |
tree | 969b7026f6b5c7b0153946d5f6b4f8cd412095d8 | |
parent | 539f513773b2e651d987a7bdbdffd8b5164d58cf (diff) | |
download | gunmake-be6a8bc869ece930f3bd5f725efd9fab7a2c2940.tar.gz |
Fix bug #10252: Remove any trailing slashes from -C arguments (WINDOWS32).
Add a regression test for "@" before a define/enddef vs. one inside.
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | main.c | 17 | ||||
-rw-r--r-- | tests/ChangeLog | 3 | ||||
-rw-r--r-- | tests/scripts/options/dash-C | 60 | ||||
-rw-r--r-- | tests/scripts/variables/flavors | 25 |
5 files changed, 87 insertions, 21 deletions
@@ -1,5 +1,8 @@ 2004-11-28 Paul D. Smith <psmith@gnu.org> + * 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 @@ -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 a6423b0..cef8a33 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,5 +1,8 @@ 2004-11-28 Paul D. Smith <psmith@gnu.org> + * 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 f31238f..5864ffd 100644 --- a/tests/scripts/options/dash-C +++ b/tests/scripts/options/dash-C @@ -1,32 +1,56 @@ -$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"); +print MAKEFILE <<EOF; +all: ; \@echo This makefile did not clean the dir ... good +clean: ; $delete_command EXAMPLE\$(ext) +EOF +close(MAKEFILE); -# The Contents of the MAKEFILE ... +# TEST #1 +# ------- +&touch($example); -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"; +&run_make_with_options("${testname}.mk", + "-C $workdir clean", + &get_logfile); -# END of Contents of MAKEFILE +chdir $workdir; +$wpath = &get_this_pwd; +chdir $pwd; -close(MAKEFILE); +if (-f $example) { + $test_passed = 0; +} + +# Create the answer to what should be produced by this Makefile +$answer = "$make_name: Entering directory `$wpath'\n" + . "$delete_command EXAMPLE\n" + . "$make_name: Leaving directory `$wpath'\n"; + +&compare_output($answer,&get_logfile(1)); + + +# TEST #2 +# ------- +# Do it again with trailing "/"; this should work the same + +$example .= "slash"; &touch($example); &run_make_with_options("${testname}.mk", - "-C $workdir clean", + "-C $workdir/ clean ext=slash", &get_logfile); chdir $workdir; @@ -39,7 +63,7 @@ if (-f $example) { # Create the answer to what should be produced by this Makefile $answer = "$make_name: Entering directory `$wpath'\n" - . "$delete_command EXAMPLE_FILE\n" + . "$delete_command EXAMPLEslash\n" . "$make_name: Leaving directory `$wpath'\n"; &compare_output($answer,&get_logfile(1)); diff --git a/tests/scripts/variables/flavors b/tests/scripts/variables/flavors index 88e9ad5..3ceac5e 100644 --- a/tests/scripts/variables/flavors +++ b/tests/scripts/variables/flavors @@ -155,4 +155,29 @@ world'); run_make_test(undef, 'V1=@ V2=@', 'hello world'); +# TEST #10 +# ------- +# Test the basics; a "@" internally to the variable applies to only one line. +# A "@" before the variable applies to the entire variable. + +run_make_test(' +define FOO +@echo hello +echo world +endef +define BAR +echo hello +echo world +endef + +all: foo bar +foo: ; $(FOO) +bar: ; @$(BAR) +', '', 'hello +echo world +world +hello +world +'); + 1; |