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