summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog7
-rw-r--r--read.c11
-rw-r--r--tests/ChangeLog5
-rw-r--r--tests/scripts/features/targetvars18
4 files changed, 40 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index db0a7c1..cd917b6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2000-06-21 Paul D. Smith <psmith@gnu.org>
+
+ * read.c (read_makefile): If we find a semicolon in the target
+ definition, remember where it was. If the line turns out to be a
+ target-specific variable, add back the semicolon and everything
+ after it. Fixes PR/1709.
+
2000-06-19 Paul D. Smith <psmith@gnu.org>
* config.h-vms.template: #define uintmax_t for this system.
diff --git a/read.c b/read.c
index 7ef1081..465c5db 100644
--- a/read.c
+++ b/read.c
@@ -751,7 +751,7 @@ read_makefile (filename, flags)
enum make_word_type wtype;
enum variable_origin v_origin;
- char *cmdleft, *lb_next;
+ char *cmdleft, *semip, *lb_next;
unsigned int len, plen = 0;
char *colonp;
@@ -772,6 +772,7 @@ read_makefile (filename, flags)
else if (cmdleft != 0)
/* Found one. Cut the line short there before expanding it. */
*(cmdleft++) = '\0';
+ semip = cmdleft;
collapse_continuations (lb.buffer);
@@ -932,6 +933,14 @@ read_makefile (filename, flags)
if (wtype == w_varassign)
{
+ /* If there was a semicolon found, add it back, plus anything
+ after it. */
+ if (semip)
+ {
+ *(--semip) = ';';
+ variable_buffer_output (p2 + strlen (p2),
+ semip, strlen (semip)+1);
+ }
record_target_var (filenames, p, two_colon, v_origin, &fileinfo);
filenames = 0;
continue;
diff --git a/tests/ChangeLog b/tests/ChangeLog
index 9c8e7fb..458b0e0 100644
--- a/tests/ChangeLog
+++ b/tests/ChangeLog
@@ -1,3 +1,8 @@
+2000-06-21 Paul D. Smith <psmith@gnu.org>
+
+ * scripts/features/targetvars: Added a test for PR/1709: allowing
+ semicolons in target-specific variable values.
+
2000-06-19 Paul D. Smith <psmith@gnu.org>
* scripts/functions/addsuffix: Test for an empty final argument.
diff --git a/tests/scripts/features/targetvars b/tests/scripts/features/targetvars
index e4dc0b2..52548f2 100644
--- a/tests/scripts/features/targetvars
+++ b/tests/scripts/features/targetvars
@@ -146,9 +146,27 @@ close(MAKEFILE);
$answer = "bar baz biz\nbar baz\n";
&compare_output($answer, &get_logfile(1));
+# Test #10
+
&run_make_with_options("$makefile3", "one", &get_logfile);
$answer = "bar biz\n";
&compare_output($answer, &get_logfile(1));
+# Test #11
+# PR/1709: Test semicolons in target-specific variable values
+
+$makefile4 = &get_tmpfile;
+
+open(MAKEFILE, "> $makefile4");
+print MAKEFILE <<'EOF';
+foo : FOO = ; ok
+foo : ; @echo '$(FOO)'
+EOF
+close(MAKEFILE);
+
+&run_make_with_options("$makefile4", "", &get_logfile);
+$answer = "; ok\n";
+&compare_output($answer, &get_logfile(1));
+
1;