1 1.1 christos # -*-perl-*- 2 1.1 christos $description = "Test second expansion in ordinary rules."; 3 1.1 christos 4 1.1 christos $details = ""; 5 1.1 christos 6 1.1 christos use Cwd; 7 1.1 christos 8 1.1 christos $dir = cwd; 9 1.1 christos $dir =~ s,.*/([^/]+)$,../$1,; 10 1.1 christos 11 1.1 christos 12 1.1 christos # Test #1: automatic variables. 13 1.1 christos # 14 1.1 christos run_make_test(' 15 1.1 christos .SECONDEXPANSION: 16 1.1 christos .DEFAULT: ; @echo $@ 17 1.1 christos 18 1.1 christos foo.a: bar baz 19 1.1 christos 20 1.1 christos foo.a: biz | buz 21 1.1 christos 22 1.1 christos foo.%: 1.$$@ \ 23 1.1 christos 2.$$< \ 24 1.1 christos $$(addprefix 3.,$$^) \ 25 1.1 christos $$(addprefix 4.,$$+) \ 26 1.1 christos 5.$$| \ 27 1.1 christos 6.$$* 28 1.1 christos @: 29 1.1 christos 30 1.1 christos 1.foo.a \ 31 1.1 christos 2.bar \ 32 1.1 christos 3.bar \ 33 1.1 christos 3.baz \ 34 1.1 christos 3.biz \ 35 1.1 christos 4.bar \ 36 1.1 christos 4.baz \ 37 1.1 christos 4.biz \ 38 1.1 christos 5.buz \ 39 1.1 christos 6.a: 40 1.1 christos @echo $@ 41 1.1 christos 42 1.1 christos ', 43 1.1 christos '', 44 1.1 christos '1.foo.a 45 1.1 christos 2.bar 46 1.1 christos 3.bar 47 1.1 christos 3.baz 48 1.1 christos 3.biz 49 1.1 christos 4.bar 50 1.1 christos 4.baz 51 1.1 christos 4.biz 52 1.1 christos 5.buz 53 1.1 christos 6.a 54 1.1 christos bar 55 1.1 christos baz 56 1.1 christos biz 57 1.1 christos buz 58 1.1 christos '); 59 1.1 christos 60 1.1 christos 61 1.1 christos # Test #2: target/pattern -specific variables. 62 1.1 christos # 63 1.1 christos run_make_test(' 64 1.1 christos .SECONDEXPANSION: 65 1.1 christos foo.x: 66 1.1 christos 67 1.1 christos foo.%: $$(%_a) $$(%_b) bar 68 1.1 christos @: 69 1.1 christos 70 1.1 christos foo.x: x_a := bar 71 1.1 christos 72 1.1 christos %.x: x_b := baz 73 1.1 christos 74 1.1 christos bar baz: ; @echo $@ 75 1.1 christos 76 1.1 christos ', 77 1.1 christos '', 78 1.1 christos 'bar 79 1.1 christos baz 80 1.1 christos '); 81 1.1 christos 82 1.1 christos 83 1.1 christos # Test #3: order of prerequisites. 84 1.1 christos # 85 1.1 christos run_make_test(' 86 1.1 christos .SECONDEXPANSION: 87 1.1 christos .DEFAULT: ; @echo $@ 88 1.1 christos 89 1.1 christos all: foo bar baz 90 1.1 christos 91 1.1 christos 92 1.1 christos # Subtest #1 93 1.1 christos # 94 1.1 christos %oo: %oo.1; @: 95 1.1 christos 96 1.1 christos foo: foo.2 97 1.1 christos 98 1.1 christos foo: foo.3 99 1.1 christos 100 1.1 christos foo.1: ; @echo $@ 101 1.1 christos 102 1.1 christos 103 1.1 christos # Subtest #2 104 1.1 christos # 105 1.1 christos bar: bar.2 106 1.1 christos 107 1.1 christos %ar: %ar.1; @: 108 1.1 christos 109 1.1 christos bar: bar.3 110 1.1 christos 111 1.1 christos bar.1: ; @echo $@ 112 1.1 christos 113 1.1 christos 114 1.1 christos # Subtest #3 115 1.1 christos # 116 1.1 christos baz: baz.1 117 1.1 christos 118 1.1 christos baz: baz.2 119 1.1 christos 120 1.1 christos %az: ; @: 121 1.1 christos 122 1.1 christos ', 123 1.1 christos '', 124 1.1 christos 'foo.1 125 1.1 christos foo.2 126 1.1 christos foo.3 127 1.1 christos bar.1 128 1.1 christos bar.2 129 1.1 christos bar.3 130 1.1 christos baz.1 131 1.1 christos baz.2 132 1.1 christos '); 133 1.1 christos 134 1.1 christos 135 1.1 christos # Test #4: stem splitting logic. 136 1.1 christos # 137 1.1 christos run_make_test(' 138 1.1 christos .SECONDEXPANSION: 139 1.1 christos $(dir)/tmp/bar.o: 140 1.1 christos 141 1.1 christos $(dir)/tmp/foo/bar.c: ; @echo $@ 142 1.1 christos $(dir)/tmp/bar/bar.c: ; @echo $@ 143 1.1 christos foo.h: ; @echo $@ 144 1.1 christos 145 1.1 christos %.o: $$(addsuffix /%.c,foo bar) foo.h 146 1.1 christos @echo $@: {$<} $^ 147 1.1 christos 148 1.1 christos ', 149 1.1 christos "dir=$dir", 150 1.1 christos "$dir/tmp/foo/bar.c 151 1.1 christos $dir/tmp/bar/bar.c 152 1.1 christos foo.h 153 1.1 christos $dir/tmp/bar.o: {$dir/tmp/foo/bar.c} $dir/tmp/foo/bar.c $dir/tmp/bar/bar.c foo.h 154 1.1 christos "); 155 1.1 christos 156 1.1 christos 157 1.1 christos # Test #5: stem splitting logic and order-only prerequisites. 158 1.1 christos # 159 1.1 christos run_make_test(' 160 1.1 christos .SECONDEXPANSION: 161 1.1 christos $(dir)/tmp/foo.o: $(dir)/tmp/foo.c 162 1.1 christos $(dir)/tmp/foo.c: ; @echo $@ 163 1.1 christos bar.h: ; @echo $@ 164 1.1 christos 165 1.1 christos %.o: %.c|bar.h 166 1.1 christos @echo $@: {$<} {$|} $^ 167 1.1 christos 168 1.1 christos ', 169 1.1 christos "dir=$dir", 170 1.1 christos "$dir/tmp/foo.c 171 1.1 christos bar.h 172 1.1 christos $dir/tmp/foo.o: {$dir/tmp/foo.c} {bar.h} $dir/tmp/foo.c 173 1.1 christos "); 174 1.1 christos 175 1.1 christos 176 1.1 christos # Test #6: lack of implicit prerequisites. 177 1.1 christos # 178 1.1 christos run_make_test(' 179 1.1 christos .SECONDEXPANSION: 180 1.1 christos foo.o: foo.c 181 1.1 christos foo.c: ; @echo $@ 182 1.1 christos 183 1.1 christos %.o: 184 1.1 christos @echo $@: {$<} $^ 185 1.1 christos 186 1.1 christos ', 187 1.1 christos '', 188 1.1 christos 'foo.c 189 1.1 christos foo.o: {foo.c} foo.c 190 1.1 christos '); 191 1.1 christos 192 1.1 christos # Test #7: Test stem from the middle of the name. 193 1.1 christos # 194 1.1 christos run_make_test(' 195 1.1 christos .SECONDEXPANSION: 196 1.1 christos foobarbaz: 197 1.1 christos 198 1.1 christos foo%baz: % $$*.1 199 1.1 christos @echo $* 200 1.1 christos 201 1.1 christos bar bar.1: 202 1.1 christos @echo $@ 203 1.1 christos 204 1.1 christos ', 205 1.1 christos '', 206 1.1 christos 'bar 207 1.1 christos bar.1 208 1.1 christos bar 209 1.1 christos '); 210 1.1 christos 211 1.1 christos # Test #8: Make sure stem triple-expansion does not happen. 212 1.1 christos # 213 1.1 christos run_make_test(' 214 1.1 christos .SECONDEXPANSION: 215 1.1 christos foo$$bar: 216 1.1 christos 217 1.1 christos f%r: % $$*.1 218 1.1 christos @echo \'$*\' 219 1.1 christos 220 1.1 christos oo$$ba oo$$ba.1: 221 1.1 christos @echo \'$@\' 222 1.1 christos 223 1.1 christos ', 224 1.1 christos '', 225 1.1 christos 'oo$ba 226 1.1 christos oo$ba.1 227 1.1 christos oo$ba 228 1.1 christos '); 229 1.1 christos 230 1.1 christos 231 1.1 christos # This tells the test driver that the perl test script executed properly. 232 1.1 christos 1; 233