#                                                                    -*-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;
