Ensure appending private variables in pattern-specific target variables.
[make.git] / tests / scripts / variables / private
blob012274ee1cdea9644904f5990ce0424cd438d5e4
1 #                                                                    -*-perl-*-
3 $description = "Test 'private' variables.";
5 $details = "";
7 # 1: Simple verification that private variables are not inherited
8 &run_make_test('
9 a:
10 F = g
11 a: F = a
12 b: private F = b
14 a b c: ; @echo $@: F=$(F)
15 a: b
16 b: c
18               '', "c: F=a\nb: F=b\na: F=a\n");
20 # 2: Again, but this time we start with "b" so "a"'s variable is not in scope
21 &run_make_test(undef, 'b', "c: F=g\nb: F=b\n");
23 # 3: Verification with pattern-specific variables
24 &run_make_test('
25 t.a:
27 F1 = g
28 F2 = g
29 %.a: private F1 = a
30 %.a: F2 = a
32 t.a t.b: ; @echo $@: F1=$(F1) / F2=$(F2)
33 t.a: t.b
35                '', "t.b: F1=g / F2=a\nt.a: F1=a / F2=a\n");
37 # 4: Test private global variables
38 &run_make_test('
40 private F = g
41 G := $(F)
43 b: F = b
45 a b: ; @echo $@: F=$(F) / G=$(G)
46 a: b
48                '', "b: F=b / G=g\na: F= / G=g\n");
50 # 5: Multiple conditions on the same variable.  Test export.
51 delete $ENV{'_X'};
52 &run_make_test('
53 _X = x
54 a: export override private _X = a
55 a: ; @echo _X=$(_X) / _X=$$_X
57                '', "_X=a / _X=a");
59 # 6: Test override.
60 &run_make_test(undef, '_X=c', "_X=a / _X=a\n");
62 # 7: Ensure keywords still work as targets
63 &run_make_test('
64 a: export override private foo bar
65 foo bar export override private: ; @echo $@
67                '', "export\noverride\nprivate\nfoo\nbar\n");
69 # 8: Ensure keywords still work as variables
70 &run_make_test('
71 private = g
72 a: private = a
73 a: b
74 a b: ; @echo $@=$(private)
76                '', "b=a\na=a\n");
78 # 9: make sure private suppresses inheritence
79 run_make_test(q!
80 DEFS = FOO
81 all: bar1
82 bar1: private DEFS += 1
83 bar3: private DEFS += 3
84 bar1: bar2
85 bar2: bar3
86 bar1 bar2 bar3: ; @echo '$@: $(DEFS)'
88               '', "bar3: FOO 3\nbar2: FOO\nbar1: FOO 1\n");
90 # 10: Test append with pattern-specific variables and private
92 run_make_test(q!
93 IA = global
94 PA = global
95 PS = global
96 S = global
97 PS = global
98 SV = global
99 b%: IA += b%
100 b%: private PA += b%
101 b%: private PS = b%
102 bar: all
103 bar: IA += bar
104 bar: private PA += bar
105 bar: private PS = bar
106 a%: IA += a%
107 a%: private PA += a%
108 a%: private PS = a%
109 all: IA += all
110 all: private PA += all
111 all: private PS = all
113 bar all: ; @echo '$@: IA=$(IA)'; echo '$@: PA=$(PA)'; echo '$@: PS=$(PS)'
115               '', "all: IA=global b% bar a% all
116 all: PA=global a% all
117 all: PS=all
118 bar: IA=global b% bar
119 bar: PA=global b% bar
120 bar: PS=bar\n");