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

# Exported private global variables
run_make_test('
private export F = global
$(info $(shell #HELPER# env F))
a: b
b: export F=b
a b: ; @#HELPER# raw $@ env F
',
               '', "F=global\nbF=b\naF=<unset>");


# 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");

# 9: make sure private suppresses inheritance
run_make_test(q!
DEFS = FOO
all: bar1
bar1: private DEFS += 1
bar3: private DEFS += 3
bar1: bar2
bar2: bar3
bar1 bar2 bar3: ; @echo '$@: $(DEFS)'
!,
              '', "bar3: FOO 3\nbar2: FOO\nbar1: FOO 1\n");

# 10: Test append with pattern-specific variables and private

run_make_test(q!
IA = global
PA = global
PS = global
S = global
PS = global
SV = global
b%: IA += b%
b%: private PA += b%
b%: private PS = b%
bar: all
bar: IA += bar
bar: private PA += bar
bar: private PS = bar
a%: IA += a%
a%: private PA += a%
a%: private PS = a%
all: IA += all
all: private PA += all
all: private PS = all

bar all: ; @echo '$@: IA=$(IA)'; echo '$@: PA=$(PA)'; echo '$@: PS=$(PS)'
!,
              '', "all: IA=global b% bar a% all
all: PA=global a% all
all: PS=all
bar: IA=global b% bar
bar: PA=global b% bar
bar: PS=bar\n");

# SV 61463: Private parent variables should not be exported

run_make_test(q!
a: private export FOO := a
a: b
b: ; @#HELPER# env FOO
!,
              '', 'FOO=<unset>');

run_make_test(q!
a: private export FOO := a
a: b
b: FOO := b
b: ; @#HELPER# env FOO
!,
              '', 'FOO=<unset>');

run_make_test(q!
export FOO := g
a: private export FOO := a
a: b
b:
b: ; @#HELPER# env FOO
!,
              '', 'FOO=g');

run_make_test(q!
export FOO := g
a: private export FOO := a
a: b
b: FOO := b
b: ; @#HELPER# env FOO
!,
              '', 'FOO=b');

run_make_test(q!
private export FOO := g
a: private export FOO := a
a: b
b: FOO := b
b: ; @#HELPER# env FOO
!,
              '', 'FOO=<unset>');

# Directive lines cannot begin with TAB

run_make_test(q!
#TAB#private FOO = bar
all:;@echo hi
!,
              '', "#MAKEFILE#:2: warning: directive lines cannot start with TAB\nhi");

run_make_test(q!
#TAB#private#TAB#export FOO = bar
all:;@echo hi
!,
              '', "#MAKEFILE#:2: warning: directive lines cannot start with TAB\nhi");

run_make_test(q!
    private#TAB#export FOO = bar
all:;@echo hi
!,
              '', "hi");

1;
