make/tests/scripts/variables/private
Paul Smith 5b4d419476 Add 'private' variable modifier, feature submitted by Ramon Garcia.
Rework the parser for variables to allow multiple modifiers and also
allow for variables and targets with modifier names, like "export" and
"private".
2009-05-26 01:31:40 +00:00

79 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;