mirror of
https://git.savannah.gnu.org/git/make.git
synced 2024-12-29 08:09:02 +00:00
ebb733c0f9
* New handling of += in target-specific variables.
154 lines
3.7 KiB
Perl
154 lines
3.7 KiB
Perl
# -*-perl-*-
|
|
$description = "Test target-specific variable settings.";
|
|
|
|
$details = "\
|
|
Create a makefile containing various flavors of target-specific variable
|
|
values, override and non-override, and using various variable expansion
|
|
rules, semicolon interference, etc.";
|
|
|
|
open(MAKEFILE,"> $makefile");
|
|
|
|
print MAKEFILE <<'EOF';
|
|
SHELL = /bin/sh
|
|
export FOO = foo
|
|
export BAR = bar
|
|
one: override FOO = one
|
|
one two: ; @echo $(FOO) $(BAR)
|
|
two: BAR = two
|
|
three: ; BAR=1000
|
|
@echo $(FOO) $(BAR)
|
|
# Some things that shouldn't be target vars
|
|
funk : override
|
|
funk : override adelic
|
|
adelic override : ; echo $@
|
|
# Test per-target recursive variables
|
|
four:FOO=x
|
|
four:VAR$(FOO)=ok
|
|
four: ; @echo '$(FOO) $(VAR$(FOO)) $(VAR) $(VARx)'
|
|
five:FOO=x
|
|
five six : VAR$(FOO)=good
|
|
five six: ;@echo '$(FOO) $(VAR$(FOO)) $(VAR) $(VARx) $(VARfoo)'
|
|
# Test per-target variable inheritance
|
|
seven: eight
|
|
seven eight: ; @echo $@: $(FOO) $(BAR)
|
|
seven: BAR = seven
|
|
seven: FOO = seven
|
|
eight: BAR = eight
|
|
# Test the export keyword with per-target variables
|
|
nine: ; @echo $(FOO) $(BAR) $$FOO $$BAR
|
|
nine: FOO = wallace
|
|
# Test = escaping
|
|
EQ = =
|
|
ten: one\=two
|
|
ten: one \= two
|
|
ten one$(EQ)two $(EQ):;@echo $@
|
|
.PHONY: one two three four five six seven eight nine ten $(EQ) one$(EQ)two
|
|
# Test target-specific vars with pattern/suffix rules
|
|
QVAR = qvar
|
|
RVAR = =
|
|
%.q : ; @echo $(QVAR) $(RVAR)
|
|
foo.q : RVAR += rvar
|
|
# Target-specific vars with multiple LHS pattern rules
|
|
%.r %.s %.t: ; @echo $(QVAR) $(RVAR) $(SVAR) $(TVAR)
|
|
foo.r : RVAR += rvar
|
|
foo.t : TVAR := $(QVAR)
|
|
EOF
|
|
|
|
close(MAKEFILE);
|
|
|
|
# TEST #1
|
|
|
|
&run_make_with_options($makefile, "one two three", &get_logfile);
|
|
$answer = "one bar\nfoo two\nBAR=1000\nfoo bar\n";
|
|
&compare_output($answer,&get_logfile(1));
|
|
|
|
# TEST #2
|
|
|
|
&run_make_with_options($makefile, "one two FOO=1 BAR=2", &get_logfile);
|
|
$answer = "one 2\n1 2\n";
|
|
&compare_output($answer,&get_logfile(1));
|
|
|
|
# TEST #3
|
|
|
|
&run_make_with_options($makefile, "four", &get_logfile);
|
|
$answer = "x ok ok\n";
|
|
&compare_output($answer,&get_logfile(1));
|
|
|
|
# TEST #4
|
|
|
|
&run_make_with_options($makefile, "seven", &get_logfile);
|
|
$answer = "eight: seven eight\nseven: seven seven\n";
|
|
&compare_output($answer,&get_logfile(1));
|
|
|
|
# TEST #5
|
|
|
|
&run_make_with_options($makefile, "nine", &get_logfile);
|
|
$answer = "wallace bar wallace bar\n";
|
|
&compare_output($answer,&get_logfile(1));
|
|
|
|
# TEST #6
|
|
|
|
&run_make_with_options($makefile, "ten", &get_logfile);
|
|
$answer = "one=two\none bar\n=\nfoo two\nten\n";
|
|
&compare_output($answer,&get_logfile(1));
|
|
|
|
# TEST #6
|
|
|
|
&run_make_with_options($makefile, "foo.q bar.q", &get_logfile);
|
|
$answer = "qvar = rvar\nqvar =\n";
|
|
&compare_output($answer,&get_logfile(1));
|
|
|
|
# TEST #7
|
|
|
|
&run_make_with_options($makefile, "foo.t bar.s", &get_logfile);
|
|
$answer = "qvar = qvar\nqvar =\n";
|
|
&compare_output($answer,&get_logfile(1));
|
|
|
|
|
|
# TEST #8
|
|
# For PR/1378: Target-specific vars don't inherit correctly
|
|
|
|
$makefile2 = &get_tmpfile;
|
|
|
|
open(MAKEFILE,"> $makefile2");
|
|
print MAKEFILE <<'EOF';
|
|
foo: FOO = foo
|
|
bar: BAR = bar
|
|
foo: bar
|
|
bar: baz
|
|
baz: ; @echo $(FOO) $(BAR)
|
|
EOF
|
|
close(MAKEFILE);
|
|
|
|
&run_make_with_options("$makefile2", "", &get_logfile);
|
|
$answer = "foo bar\n";
|
|
&compare_output($answer, &get_logfile(1));
|
|
|
|
# TEST #9
|
|
# For PR/1380: Using += assignment in target-specific variables sometimes fails
|
|
|
|
$makefile3 = &get_tmpfile;
|
|
|
|
open(MAKEFILE,"> $makefile3");
|
|
print MAKEFILE <<'EOF';
|
|
.PHONY: all one
|
|
all: FOO += baz
|
|
all: one; @echo $(FOO)
|
|
|
|
FOO = bar
|
|
|
|
one: FOO += biz
|
|
one: ; @echo $(FOO)
|
|
EOF
|
|
close(MAKEFILE);
|
|
|
|
&run_make_with_options("$makefile3", "", &get_logfile);
|
|
$answer = "bar baz biz\nbar baz\n";
|
|
&compare_output($answer, &get_logfile(1));
|
|
|
|
&run_make_with_options("$makefile3", "one", &get_logfile);
|
|
$answer = "bar biz\n";
|
|
&compare_output($answer, &get_logfile(1));
|
|
|
|
|
|
1;
|