mirror of
https://git.savannah.gnu.org/git/make.git
synced 2024-12-28 15:57:48 +00:00
5b4d419476
Rework the parser for variables to allow multiple modifiers and also allow for variables and targets with modifier names, like "export" and "private".
78 lines
1.5 KiB
Perl
78 lines
1.5 KiB
Perl
# -*-perl-*-
|
|
|
|
$description = "Test 'private' variables.";
|
|
|
|
$details = "";
|
|
|
|
# 1: Simple verification that private variables are not inherited
|
|
&run_make_test('
|
|
a:
|
|
F = g
|
|
a: F = a
|
|
b: private F = b
|
|
|
|
a b c: ; @echo $@: F=$(F)
|
|
a: b
|
|
b: c
|
|
',
|
|
'', "c: F=a\nb: F=b\na: F=a\n");
|
|
|
|
# 2: Again, but this time we start with "b" so "a"'s variable is not in scope
|
|
&run_make_test(undef, 'b', "c: F=g\nb: F=b\n");
|
|
|
|
# 3: Verification with pattern-specific variables
|
|
&run_make_test('
|
|
t.a:
|
|
|
|
F1 = g
|
|
F2 = g
|
|
%.a: private F1 = a
|
|
%.a: F2 = a
|
|
|
|
t.a t.b: ; @echo $@: F1=$(F1) / F2=$(F2)
|
|
t.a: t.b
|
|
',
|
|
'', "t.b: F1=g / F2=a\nt.a: F1=a / F2=a\n");
|
|
|
|
# 4: Test private global variables
|
|
&run_make_test('
|
|
a:
|
|
private F = g
|
|
G := $(F)
|
|
a:
|
|
b: F = b
|
|
|
|
a b: ; @echo $@: F=$(F) / G=$(G)
|
|
a: b
|
|
',
|
|
'', "b: F=b / G=g\na: F= / G=g\n");
|
|
|
|
# 5: Multiple conditions on the same variable. Test export.
|
|
delete $ENV{'_X'};
|
|
&run_make_test('
|
|
_X = x
|
|
a: export override private _X = a
|
|
a: ; @echo _X=$(_X) / _X=$$_X
|
|
',
|
|
'', "_X=a / _X=a");
|
|
|
|
# 6: Test override.
|
|
&run_make_test(undef, '_X=c', "_X=a / _X=a\n");
|
|
|
|
# 7: Ensure keywords still work as targets
|
|
&run_make_test('
|
|
a: export override private foo bar
|
|
foo bar export override private: ; @echo $@
|
|
',
|
|
'', "export\noverride\nprivate\nfoo\nbar\n");
|
|
|
|
# 8: Ensure keywords still work as variables
|
|
&run_make_test('
|
|
private = g
|
|
a: private = a
|
|
a: b
|
|
a b: ; @echo $@=$(private)
|
|
',
|
|
'', "b=a\na=a\n");
|
|
|
|
1;
|