From ae003efd6114af0c9a8750034182b883183500a7 Mon Sep 17 00:00:00 2001 From: Paul Smith Date: Mon, 23 Sep 2002 22:16:40 +0000 Subject: [PATCH] Fix a bug handling target/prerequisite names containing comment characters. --- ChangeLog | 8 ++++++++ read.c | 8 +------- tests/ChangeLog | 5 +++++ tests/scripts/features/double_colon | 4 ++-- tests/scripts/features/escape | 12 +++++++++++- 5 files changed, 27 insertions(+), 10 deletions(-) diff --git a/ChangeLog b/ChangeLog index 46d049e..5feb3e9 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2002-09-23 Paul D. Smith + + * read.c (enum make_word_type): Remove w_comment. + (get_next_mword): Don't treat comment characters as special; where + this function is used we will never see a comment (it's stripped + before we get here) and treating comments specially means that + targets like "foo\#bar" aren't handled properly. + 2002-09-18 Paul D. Smith * doc/make.texi (Bugs): Update with some info on Savannah, etc. diff --git a/read.c b/read.c index c135acc..0ac59e1 100644 --- a/read.c +++ b/read.c @@ -62,7 +62,7 @@ struct ebuffer enum make_word_type { w_bogus, w_eol, w_static, w_variable, w_colon, w_dcolon, w_semicolon, - w_comment, w_varassign + w_varassign }; @@ -2620,7 +2620,6 @@ readline (ebuf) w_colon A colon w_dcolon A double-colon w_semicolon A semicolon - w_comment A comment character w_varassign A variable assignment operator (=, :=, +=, or ?=) Note that this function is only used when reading certain parts of the @@ -2650,10 +2649,6 @@ get_next_mword (buffer, delim, startp, length) wtype = w_eol; break; - case '#': - wtype = w_comment; - break; - case ';': wtype = w_semicolon; break; @@ -2717,7 +2712,6 @@ get_next_mword (buffer, delim, startp, length) case ' ': case '\t': case '=': - case '#': goto done_word; case ':': diff --git a/tests/ChangeLog b/tests/ChangeLog index 9b5c792..6f42eae 100644 --- a/tests/ChangeLog +++ b/tests/ChangeLog @@ -1,3 +1,8 @@ +2002-09-23 Paul D. Smith + + * scripts/features/escape: Test handling of escaped comment + characters in targets and prerequisites. + 2002-09-18 Paul D. Smith * scripts/features/export: Test export/unexport of multiple diff --git a/tests/scripts/features/double_colon b/tests/scripts/features/double_colon index 3e140c7..082b815 100644 --- a/tests/scripts/features/double_colon +++ b/tests/scripts/features/double_colon @@ -73,7 +73,7 @@ if ($parallel_jobs) { # TEST 4: Each double-colon rule is supposed to be run individually -&touch('f2.h'); +&utouch(-5, 'f2.h'); &touch('foo'); &run_make_with_options($makefile, "foo", &get_logfile, 0); @@ -90,7 +90,7 @@ if ($parallel_jobs) { # TEST 6: Each double-colon rule is supposed to be run individually -&touch('f1.h'); +&utouch(-5, 'f1.h'); unlink('f2.h'); &touch('foo'); diff --git a/tests/scripts/features/escape b/tests/scripts/features/escape index b1eed16..88b372a 100644 --- a/tests/scripts/features/escape +++ b/tests/scripts/features/escape @@ -3,7 +3,8 @@ $description = "Test various types of escaping in makefiles."; $details = "\ Make sure that escaping of `:' works in target names. -Also make sure escaping of whitespace works in target names"; +Make sure escaping of whitespace works in target names. +Make sure that escaping of '#' works."; open(MAKEFILE,"> $makefile"); @@ -11,6 +12,9 @@ print MAKEFILE <<'EOF'; $(path)foo : ; @echo cp $^ $@ foo\ bar: ; @echo 'touch "$@"' + +sharp: foo\#bar.ext +foo\#bar.ext: ; @echo foo\#bar.ext = '$@' EOF close(MAKEFILE); @@ -46,5 +50,11 @@ $answer = "$makefile:1: *** target pattern contains no `%'. Stop.\n"; $answer = "touch \"foo bar\"\n"; &compare_output($answer,&get_logfile(1)); +# TEST 6: Test escaped comments + +&run_make_with_options($makefile, "sharp", &get_logfile, 0); +$answer = "foo#bar.ext = foo#bar.ext\n"; +&compare_output($answer,&get_logfile(1)); + # This tells the test driver that the perl test script executed properly. 1; -- 2.7.4