mirror of
https://git.savannah.gnu.org/git/make.git
synced 2024-11-25 04:35:44 +00:00
Fix bugs 5798 and 6195.
This commit is contained in:
parent
76f034acaa
commit
ee3d37a591
6 changed files with 72 additions and 14 deletions
|
@ -1,3 +1,12 @@
|
|||
2003-11-02 Paul D. Smith <psmith@gnu.org>
|
||||
|
||||
* function.c (func_if): Strip all the trailing whitespace from the
|
||||
condition, then don't expand it. Fixed bug # 5798.
|
||||
|
||||
* expand.c (recursively_expand_for_file): If we're expanding a
|
||||
variable with no file context, then use the variable's context.
|
||||
Fixes bug # 6195.
|
||||
|
||||
2003-10-21 Paul D. Smith <psmith@gnu.org>
|
||||
|
||||
* main.c (log_working_directory): Add newlines to printf()s.
|
||||
|
|
10
expand.c
10
expand.c
|
@ -97,6 +97,7 @@ recursively_expand_for_file (struct variable *v, struct file *file)
|
|||
{
|
||||
char *value;
|
||||
struct variable_set_list *save = 0;
|
||||
int set_reading = 0;
|
||||
|
||||
if (v->expanding)
|
||||
{
|
||||
|
@ -114,6 +115,13 @@ recursively_expand_for_file (struct variable *v, struct file *file)
|
|||
current_variable_set_list = file->variables;
|
||||
}
|
||||
|
||||
/* If we have no other file-reading context, use the variable's context. */
|
||||
if (!reading_file)
|
||||
{
|
||||
set_reading = 1;
|
||||
reading_file = &v->fileinfo;
|
||||
}
|
||||
|
||||
v->expanding = 1;
|
||||
if (v->append)
|
||||
value = allocated_variable_append (v);
|
||||
|
@ -121,6 +129,8 @@ recursively_expand_for_file (struct variable *v, struct file *file)
|
|||
value = allocated_variable_expand (v->value);
|
||||
v->expanding = 0;
|
||||
|
||||
if (set_reading)
|
||||
reading_file = 0;
|
||||
if (file)
|
||||
current_variable_set_list = save;
|
||||
|
||||
|
|
11
function.c
11
function.c
|
@ -678,6 +678,11 @@ func_words (char *o, char **argv, const char *funcname)
|
|||
return o;
|
||||
}
|
||||
|
||||
/* Set begpp to point to the first non-whitespace character of the string,
|
||||
* and endpp to point to the last non-whitespace character of the string.
|
||||
* If the string is empty or contains nothing but whitespace, endpp will be
|
||||
* begpp-1.
|
||||
*/
|
||||
static char *
|
||||
strip_whitespace (const char **begpp, const char **endpp)
|
||||
{
|
||||
|
@ -1134,7 +1139,7 @@ static char *
|
|||
func_if (char *o, char **argv, const char *funcname)
|
||||
{
|
||||
const char *begp = argv[0];
|
||||
const char *endp = begp + strlen (argv[0]);
|
||||
const char *endp = begp + strlen (argv[0]) - 1;
|
||||
int result = 0;
|
||||
|
||||
/* Find the result of the condition: if we have a value, and it's not
|
||||
|
@ -1143,9 +1148,9 @@ func_if (char *o, char **argv, const char *funcname)
|
|||
|
||||
strip_whitespace (&begp, &endp);
|
||||
|
||||
if (begp < endp)
|
||||
if (begp <= endp)
|
||||
{
|
||||
char *expansion = expand_argument (begp, NULL);
|
||||
char *expansion = expand_argument (begp, endp+1);
|
||||
|
||||
result = strlen (expansion);
|
||||
free (expansion);
|
||||
|
|
|
@ -1,3 +1,10 @@
|
|||
2003-11-02 Paul D. Smith <psmith@gnu.org>
|
||||
|
||||
* scripts/functions/if: Test if on conditionals with trailing
|
||||
whitespace--bug #5798.
|
||||
|
||||
* scripts/functions/eval: Test eval in a non-file context--bug #6195.
|
||||
|
||||
2003-04-19 Paul D. Smith <psmith@gnu.org>
|
||||
|
||||
* scripts/features/patspecific_vars: Test multiple patterns
|
||||
|
|
|
@ -109,4 +109,29 @@ close(MAKEFILE);
|
|||
$answer = "[ 9 8 7 6 5 4 3 2 1 0 ]\n";
|
||||
&compare_output($answer,&get_logfile(1));
|
||||
|
||||
|
||||
# TEST eval with no filename context.
|
||||
# The trick here is that because EVAR is taken from the environment, it must
|
||||
# be evaluated before every command is invoked. Make sure that works, when
|
||||
# we have no file context for reading_file (bug # 6195)
|
||||
|
||||
$makefile4 = &get_tmpfile;
|
||||
|
||||
open(MAKEFILE,"> $makefile4");
|
||||
|
||||
print MAKEFILE <<'EOF';
|
||||
EVAR = $(eval FOBAR = 1)
|
||||
all: ; @echo "OK"
|
||||
|
||||
EOF
|
||||
|
||||
close(MAKEFILE);
|
||||
|
||||
$ENV{EVAR} = '1';
|
||||
&run_make_with_options($makefile4, "", &get_logfile);
|
||||
$answer = "OK\n";
|
||||
&compare_output($answer,&get_logfile(1));
|
||||
|
||||
delete $ENV{EVAR};
|
||||
|
||||
1;
|
||||
|
|
|
@ -8,24 +8,26 @@ open(MAKEFILE, "> $makefile");
|
|||
|
||||
print MAKEFILE <<EOMAKE;
|
||||
NEQ = \$(subst \$1,,\$2)
|
||||
e =
|
||||
|
||||
all:
|
||||
\t\@echo \$(if ,true,false)
|
||||
\t\@echo \$(if ,true,)
|
||||
\t\@echo \$(if ,true)
|
||||
\t\@echo \$(if z,true,false)
|
||||
\t\@echo \$(if z,true,\$(shell echo hi))
|
||||
\t\@echo \$(if ,\$(shell echo hi),false)
|
||||
\t\@echo \$(if \$(call NEQ,a,b),true,false)
|
||||
\t\@echo \$(if \$(call NEQ,a,a),true,false)
|
||||
\t\@echo \$(if z,true,fal,se) hi
|
||||
\t\@echo \$(if ,true,fal,se)there
|
||||
\t\@echo 1 \$(if ,true,false)
|
||||
\t\@echo 2 \$(if ,true,)
|
||||
\t\@echo 3 \$(if ,true)
|
||||
\t\@echo 4 \$(if z,true,false)
|
||||
\t\@echo 5 \$(if z,true,\$(shell echo hi))
|
||||
\t\@echo 6 \$(if ,\$(shell echo hi),false)
|
||||
\t\@echo 7 \$(if \$(call NEQ,a,b),true,false)
|
||||
\t\@echo 8 \$(if \$(call NEQ,a,a),true,false)
|
||||
\t\@echo 9 \$(if z,true,fal,se) hi
|
||||
\t\@echo 10 \$(if ,true,fal,se)there
|
||||
\t\@echo 11 \$(if \$(e) ,true,false)
|
||||
EOMAKE
|
||||
|
||||
close(MAKEFILE);
|
||||
|
||||
&run_make_with_options($makefile, "", &get_logfile);
|
||||
$answer = "false\n\n\ntrue\ntrue\nfalse\ntrue\nfalse\ntrue hi\nfal,sethere\n";
|
||||
$answer = "1 false\n2\n3\n4 true\n5 true\n6 false\n7 true\n8 false\n9 true hi\n10 fal,sethere\n11 false\n";
|
||||
&compare_output($answer, &get_logfile(1));
|
||||
|
||||
1;
|
||||
|
|
Loading…
Reference in a new issue