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