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