summaryrefslogtreecommitdiff
path: root/tests/scripts/variables/EXTRA_PREREQS
blob: 57ad597e0b01d92ffec47c1c933dd42d2f96076d (plain)
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
#                                                                    -*-perl-*-

$description = "Test the .EXTRA_PREREQS special variable.";
$details = "";

# Simple global .EXTRA_PREREQS and automatic variable settings
run_make_test('
.EXTRA_PREREQS = tick tack
.PHONY: all
all: ; @echo ${.EXTRA_PREREQS}/$@/$</$^/$?/$+/$|/$*/
tick tack: ; @echo $@
',
              '', "tick\ntack\ntick tack/all///////\n");

# Global .EXTRA_PREREQS and pattern rules
run_make_test('
.EXTRA_PREREQS = tick tack
a%: ; @echo ${.EXTRA_PREREQS}/$@/$</$^/$?/$+/$|/$*/
tick tack: ; @echo $@
',
              'all', "tick\ntack\ntick tack/all//////ll/\n");

# Simple target-specific .EXTRA_PREREQS and automatic variable settings
run_make_test('
.PHONY: all
all: ; @echo ${.EXTRA_PREREQS}/$@/$</$^/$?/$+/$|/$*/
all: .EXTRA_PREREQS = tick tack
tick tack: ; @echo $@
',
              '', "tick\ntack\ntick tack/all///////\n");

# Simple pattern-specific .EXTRA_PREREQS and automatic variable settings
# This is not currently supported :-/
if (0) {
    run_make_test('
.PHONY: all
all: ; @echo ${.EXTRA_PREREQS}/$@/$</$^/$?/$+/$|/$*/
a%: .EXTRA_PREREQS = tick tack
tick tack: ; @echo $@
',
                  '', "tick\ntack\ntick tack/all///////\n");
}

touch('hi');

# Basic test target specific .EXTRA_PREREQS:
run_make_test('
DEPENDENCY_ONLY_PREREQUISITES = ho hey
OTHER_PREREQUISITES := foo bar baz
target: .EXTRA_PREREQS := hi ${DEPENDENCY_ONLY_PREREQUISITES}
target: ${OTHER_PREREQUISITES} ; @echo ${.EXTRA_PREREQS} $^
.PHONY: target ${DEPENDENCY_ONLY_PREREQUISITES} ${OTHER_PREREQUISITES}
${DEPENDENCY_ONLY_PREREQUISITES} ${OTHER_PREREQUISITES}: ; @echo $@
',
              '', "foo\nbar\nbaz\nho\nhey\nhi ho hey foo bar baz\n");

# Test target specific .EXTRA_PREREQS and pattern rules:
run_make_test('
all: target.dst
DEPENDENCY_ONLY_PREREQUISITES = ho hey
target.dst: .EXTRA_PREREQS := hi ${DEPENDENCY_ONLY_PREREQUISITES}
%.dst: %.src ; @echo ${.EXTRA_PREREQS} $^
.PHONY: ${DEPENDENCY_ONLY_PREREQUISITES} target.src
${DEPENDENCY_ONLY_PREREQUISITES} target.src: ; @echo $@
',
              '', "target.src\nho\nhey\nhi ho hey target.src\n");

# Test that global .EXTRA_PREREQS are built first:
run_make_test('
.EXTRA_PREREQS = hi ho hey
OTHER_PREREQUISITES := foo bar baz
target: ${OTHER_PREREQUISITES} ; @echo ${.EXTRA_PREREQS} $^
.PHONY: target ${.EXTRA_PREREQS} ${OTHER_PREREQUISITES}
${.EXTRA_PREREQS} ${OTHER_PREREQUISITES}: ; @echo $@
',
              '', "hi\nho\nhey\nfoo\nbar\nbaz\nhi ho hey foo bar baz\n");

# Test that target specific .EXTRA_PREREQS override global .EXTRA_PREREQS:
run_make_test('
.EXTRA_PREREQS = tick tack
DEPENDENCY_ONLY_PREREQUISITES = ho hey
OTHER_PREREQUISITES := foo bar baz
target: .EXTRA_PREREQS := hi ${DEPENDENCY_ONLY_PREREQUISITES}
target: ${OTHER_PREREQUISITES} ; @echo ${.EXTRA_PREREQS} $^
.PHONY: target ${DEPENDENCY_ONLY_PREREQUISITES} ${OTHER_PREREQUISITES} ${.EXTRA_PREREQS}
${DEPENDENCY_ONLY_PREREQUISITES} ${OTHER_PREREQUISITES} ${.EXTRA_PREREQS}: ; @echo $@
',
              '', "tick\ntack\nfoo\nbar\nbaz\nho\nhey\nhi ho hey foo bar baz\n");

# Cleanup:
unlink('hi');

# Test error reporting of global .EXTRA_PREREQS:
run_make_test('
.EXTRA_PREREQS = tick tack
.PHONY: all
all: ; @echo ${.EXTRA_PREREQS} $^
',
              '', "#MAKE#: *** No rule to make target 'tick', needed by 'all'.  Stop.", 512);

# Test error reporting of global .EXTRA_PREREQS and keep-going:
run_make_test('
.EXTRA_PREREQS = tick tack
.PHONY: all
all: ; @echo ${.EXTRA_PREREQS} $^
',
              '-k', "#MAKE#: *** No rule to make target 'tick', needed by 'all'.\n#MAKE#: *** No rule to make target 'tack', needed by 'all'.\n#MAKE#: Target 'all' not remade because of errors.", 512);

# Test error reporting of target specific .EXTRA_PREREQS and keep-going:
run_make_test('
all: .EXTRA_PREREQS = tick tack
.PHONY: all
all: ; @echo ${.EXTRA_PREREQS} $^
',
              '-k',
              "#MAKE#: *** No rule to make target 'tick', needed by 'all'.
#MAKE#: *** No rule to make target 'tack', needed by 'all'.
#MAKE#: Target 'all' not remade because of errors.\n", 512);

# Test wildcard

touch('tick', 'tack');

run_make_test('
.EXTRA_PREREQS = *ck
.PHONY: all tick tack
all: ; @echo ${.EXTRA_PREREQS} $^
tick tack: ; @echo $@
',
              '', "tack\ntick\ntack tick\n");

run_make_test('
.PHONY: all tick tack
all: ; @echo ${.EXTRA_PREREQS} $^
all: .EXTRA_PREREQS = *ck
tick tack: ; @echo $@
',
              '', "tack\ntick\ntack tick\n");

run_make_test('
.PHONY: tick tack
a%: ; @echo ${.EXTRA_PREREQS} $^
.EXTRA_PREREQS = *ck
tick tack: ; @echo $@
',
              'all', "tack\ntick\ntack tick\n");

unlink('tick', 'tack');

# This tells the test driver that the perl test script executed properly.
1;