mirror of
https://github.com/mirror/make.git
synced 2025-02-05 17:20:15 +08:00
* src/read.c (eval): [SV 40942] Allow targets named "load"
Previously "load:" worked but "load :" failed. Allow the latter as well. This doesn't fix all issues; "load foo :" is still treated as a load operation for "foo" and ":". Avoids SV 50413 as well. * tests/scripts/features/load: Write tests.
This commit is contained in:
parent
24a84f99bb
commit
3f28ec2f58
@ -621,6 +621,7 @@ eval (struct ebuffer *ebuf, int set_default)
|
||||
size_t wlen;
|
||||
char *p;
|
||||
char *p2;
|
||||
unsigned int is_rule;
|
||||
struct vmodifiers vmod;
|
||||
|
||||
/* At the top of this loop, we are starting a brand new line. */
|
||||
@ -760,6 +761,8 @@ eval (struct ebuffer *ebuf, int set_default)
|
||||
wlen = p2 - p;
|
||||
NEXT_TOKEN (p2);
|
||||
|
||||
is_rule = *p2 == ':' || ((*p2 == '&' || *p2 == '|') && p2[1] == ':');
|
||||
|
||||
/* If we're in an ignored define, skip this line (but maybe get out). */
|
||||
if (in_ignored_define)
|
||||
{
|
||||
@ -910,8 +913,8 @@ eval (struct ebuffer *ebuf, int set_default)
|
||||
continue;
|
||||
}
|
||||
|
||||
/* Handle the load operations. */
|
||||
if (word1eq ("load") || word1eq ("-load"))
|
||||
/* Handle the load operations. Allow targets named "load". */
|
||||
if ((word1eq ("load") || word1eq ("-load")) && !is_rule)
|
||||
{
|
||||
/* A 'load' line specifies a dynamic object to load. */
|
||||
struct nameseq *files;
|
||||
|
@ -144,7 +144,25 @@ all: ; @echo pre=$(PRE) post=$(POST) $(TESTLOAD)
|
||||
testload.so: testload.c ; @echo "rebuilding $@"; !.$sobuild,
|
||||
'', "pre= post=testload.so implicit\n");
|
||||
|
||||
unlink(qw(testload.c testload.so)) unless $keep;
|
||||
# Check using load as a target or variable name
|
||||
run_make_test(q!
|
||||
load: ; @echo $@
|
||||
-load&: ; @echo $@
|
||||
!,
|
||||
"", "load\n");
|
||||
|
||||
run_make_test(q!
|
||||
load : ; @echo $@
|
||||
-load &: ; echo $@
|
||||
!,
|
||||
"", "load\n");
|
||||
|
||||
run_make_test(q!
|
||||
load = @echo $@
|
||||
all: ; $(load)
|
||||
load |: ; echo $@
|
||||
!,
|
||||
"", "all\n");
|
||||
|
||||
# This tells the test driver that the perl test script executed properly.
|
||||
1;
|
||||
|
Loading…
Reference in New Issue
Block a user