Fix PR/1831. See the ChangeLog.

This commit is contained in:
Paul Smith 2000-08-21 06:18:35 +00:00
parent 1a82956eae
commit 8ddf04c627
3 changed files with 69 additions and 51 deletions

View File

@ -1,3 +1,12 @@
2000-08-21 Paul D. Smith <paul@paulandlesley.org>
* variable.c (try_variable_definition): Change how we handle
target-specific append variable defns: instead of just setting the
value, expand it as an append _but_ only within the current
target's context. Otherwise we lose all but the last value if the
variable is appended more than once within the current target
context. Fixes PR/1831.
2000-07-25 Paul D. Smith <psmith@gnu.org> 2000-07-25 Paul D. Smith <psmith@gnu.org>
* job.c (construct_command_argv_internal): Add "~" to the list of * job.c (construct_command_argv_internal): Add "~" to the list of

View File

@ -126,6 +126,7 @@ $answer = "foo bar\n";
# TEST #9 # TEST #9
# For PR/1380: Using += assignment in target-specific variables sometimes fails # For PR/1380: Using += assignment in target-specific variables sometimes fails
# Also PR/1831
$makefile3 = &get_tmpfile; $makefile3 = &get_tmpfile;
@ -138,18 +139,19 @@ all: one; @echo $(FOO)
FOO = bar FOO = bar
one: FOO += biz one: FOO += biz
one: FOO += boz
one: ; @echo $(FOO) one: ; @echo $(FOO)
EOF EOF
close(MAKEFILE); close(MAKEFILE);
&run_make_with_options("$makefile3", "", &get_logfile); &run_make_with_options("$makefile3", "", &get_logfile);
$answer = "bar baz biz\nbar baz\n"; $answer = "bar baz biz boz\nbar baz\n";
&compare_output($answer, &get_logfile(1)); &compare_output($answer, &get_logfile(1));
# Test #10 # Test #10
&run_make_with_options("$makefile3", "one", &get_logfile); &run_make_with_options("$makefile3", "one", &get_logfile);
$answer = "bar biz\n"; $answer = "bar biz boz\n";
&compare_output($answer, &get_logfile(1)); &compare_output($answer, &get_logfile(1));
# Test #11 # Test #11

View File

@ -900,19 +900,23 @@ try_variable_definition (flocp, line, origin, target_var)
value = p; value = p;
break; break;
case f_append: case f_append:
/* If we have += but we're in a target variable context, defer the {
append until the context expansion. */ struct variable_set_list *saved_next = current_variable_set_list->next;
/* If we have += but we're in a target variable context, we want to
append only with other variables in the context of this target. */
if (target_var) if (target_var)
{ {
append = 1; append = 1;
flavor = f_recursive; current_variable_set_list->next = 0;
value = p;
break;
} }
/* An appending variable definition "var += value". /* An appending variable definition "var += value".
Extract the old value and append the new one. */ Extract the old value and append the new one. */
v = lookup_variable (expanded_name, strlen (expanded_name)); v = lookup_variable (expanded_name, strlen (expanded_name));
current_variable_set_list->next = saved_next;
if (v == 0) if (v == 0)
{ {
/* There was no old value. /* There was no old value.
@ -928,7 +932,7 @@ try_variable_definition (flocp, line, origin, target_var)
if (v->recursive) if (v->recursive)
/* The previous definition of the variable was recursive. /* The previous definition of the variable was recursive.
The new value comes from the unexpanded old and new values. */ The new value is the unexpanded old and new values. */
flavor = f_recursive; flavor = f_recursive;
else else
/* The previous definition of the variable was simple. /* The previous definition of the variable was simple.
@ -946,6 +950,7 @@ try_variable_definition (flocp, line, origin, target_var)
bcopy (p, &value[oldlen + 1], newlen + 1); bcopy (p, &value[oldlen + 1], newlen + 1);
} }
} }
}
#ifdef __MSDOS__ #ifdef __MSDOS__
/* Many Unix Makefiles include a line saying "SHELL=/bin/sh", but /* Many Unix Makefiles include a line saying "SHELL=/bin/sh", but
@ -1032,7 +1037,8 @@ try_variable_definition (flocp, line, origin, target_var)
#endif /* __MSDOS__ */ #endif /* __MSDOS__ */
#ifdef WINDOWS32 #ifdef WINDOWS32
if ((origin == o_file || origin == o_override) if ((origin == o_file || origin == o_override)
&& strcmp (expanded_name, "SHELL") == 0) { && strcmp (expanded_name, "SHELL") == 0)
{
extern char* default_shell; extern char* default_shell;
/* /*
@ -1046,7 +1052,8 @@ try_variable_definition (flocp, line, origin, target_var)
flocp); flocp);
no_default_sh_exe = 0; no_default_sh_exe = 0;
} }
} else }
else
#endif #endif
v = define_variable_loc (expanded_name, strlen (expanded_name), value, v = define_variable_loc (expanded_name, strlen (expanded_name), value,