1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
# -*-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 inheritence
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;
|