1*69606e3fSchristos# -*-perl-*- 2*69606e3fSchristos 3*69606e3fSchristos$description = "Test pattern rules."; 4*69606e3fSchristos 5*69606e3fSchristos$details = ""; 6*69606e3fSchristos 7*69606e3fSchristosuse Cwd; 8*69606e3fSchristos 9*69606e3fSchristos$dir = cwd; 10*69606e3fSchristos$dir =~ s,.*/([^/]+)$,../$1,; 11*69606e3fSchristos 12*69606e3fSchristos 13*69606e3fSchristos# TEST #1: Make sure that multiple patterns where the same target 14*69606e3fSchristos# can be built are searched even if the first one fails 15*69606e3fSchristos# to match properly. 16*69606e3fSchristos# 17*69606e3fSchristos 18*69606e3fSchristosrun_make_test(' 19*69606e3fSchristos.PHONY: all 20*69606e3fSchristos 21*69606e3fSchristosall: case.1 case.2 case.3 22*69606e3fSchristosa: void 23*69606e3fSchristos 24*69606e3fSchristos# 1 - existing file 25*69606e3fSchristos%.1: void 26*69606e3fSchristos @exit 1 27*69606e3fSchristos%.1: #MAKEFILE# 28*69606e3fSchristos @exit 0 29*69606e3fSchristos 30*69606e3fSchristos# 2 - phony 31*69606e3fSchristos%.2: void 32*69606e3fSchristos @exit 1 33*69606e3fSchristos%.2: 2.phony 34*69606e3fSchristos @exit 0 35*69606e3fSchristos.PHONY: 2.phony 36*69606e3fSchristos 37*69606e3fSchristos# 3 - implicit-phony 38*69606e3fSchristos%.3: void 39*69606e3fSchristos @exit 1 40*69606e3fSchristos%.3: 3.implicit-phony 41*69606e3fSchristos @exit 0 42*69606e3fSchristos 43*69606e3fSchristos3.implicit-phony: 44*69606e3fSchristos', 45*69606e3fSchristos'', 46*69606e3fSchristos''); 47*69606e3fSchristos 48*69606e3fSchristos# TEST #2: make sure files that are built via implicit rules are marked 49*69606e3fSchristos# as targets (Savannah bug #12202). 50*69606e3fSchristos# 51*69606e3fSchristosrun_make_test(' 52*69606e3fSchristosTARGETS := foo foo.out 53*69606e3fSchristos 54*69606e3fSchristos.PHONY: all foo.in 55*69606e3fSchristos 56*69606e3fSchristosall: $(TARGETS) 57*69606e3fSchristos 58*69606e3fSchristos%: %.in 59*69606e3fSchristos @echo $@ 60*69606e3fSchristos 61*69606e3fSchristos%.out: % 62*69606e3fSchristos @echo $@ 63*69606e3fSchristos 64*69606e3fSchristosfoo.in: ; @: 65*69606e3fSchristos 66*69606e3fSchristos', 67*69606e3fSchristos'', 68*69606e3fSchristos'foo 69*69606e3fSchristosfoo.out'); 70*69606e3fSchristos 71*69606e3fSchristos 72*69606e3fSchristos# TEST #3: make sure intermidite files that also happened to be 73*69606e3fSchristos# prerequisites are not removed (Savannah bug #12267). 74*69606e3fSchristos# 75*69606e3fSchristosrun_make_test(' 76*69606e3fSchristos$(dir)/foo.o: 77*69606e3fSchristos 78*69606e3fSchristos$(dir)/foo.y: 79*69606e3fSchristos @echo $@ 80*69606e3fSchristos 81*69606e3fSchristos%.c: %.y 82*69606e3fSchristos touch $@ 83*69606e3fSchristos 84*69606e3fSchristos%.o: %.c 85*69606e3fSchristos @echo $@ 86*69606e3fSchristos 87*69606e3fSchristos.PHONY: install 88*69606e3fSchristosinstall: $(dir)/foo.c 89*69606e3fSchristos 90*69606e3fSchristos', 91*69606e3fSchristos"dir=$dir", 92*69606e3fSchristos"$dir/foo.y 93*69606e3fSchristostouch $dir/foo.c 94*69606e3fSchristos$dir/foo.o"); 95*69606e3fSchristos 96*69606e3fSchristosunlink("$dir/foo.c"); 97*69606e3fSchristos 98*69606e3fSchristos 99*69606e3fSchristos# TEST #4: make sure precious flag is set properly for targets 100*69606e3fSchristos# that are built via implicit rules (Savannah bug #13218). 101*69606e3fSchristos# 102*69606e3fSchristosrun_make_test(' 103*69606e3fSchristos.DELETE_ON_ERROR: 104*69606e3fSchristos 105*69606e3fSchristos.PRECIOUS: %.bar 106*69606e3fSchristos 107*69606e3fSchristos%.bar:; @touch $@ && exit 1 108*69606e3fSchristos 109*69606e3fSchristos$(dir)/foo.bar: 110*69606e3fSchristos 111*69606e3fSchristos', 112*69606e3fSchristos"dir=$dir", 113*69606e3fSchristos"#MAKE#: *** [$dir/foo.bar] Error 1", 114*69606e3fSchristos512); 115*69606e3fSchristos 116*69606e3fSchristosunlink("$dir/foo.bar"); 117*69606e3fSchristos 118*69606e3fSchristos 119*69606e3fSchristos# TEST #5: make sure targets of a macthed implicit pattern rule never 120*69606e3fSchristos# never considered intermediate (Savannah bug #13022). 121*69606e3fSchristos# 122*69606e3fSchristosrun_make_test(' 123*69606e3fSchristos.PHONY: all 124*69606e3fSchristosall: foo.c foo.o 125*69606e3fSchristos 126*69606e3fSchristos%.h %.c: %.in 127*69606e3fSchristos touch $*.h 128*69606e3fSchristos touch $*.c 129*69606e3fSchristos 130*69606e3fSchristos%.o: %.c %.h 131*69606e3fSchristos echo $+ >$@ 132*69606e3fSchristos 133*69606e3fSchristos%.o: %.c 134*69606e3fSchristos @echo wrong rule 135*69606e3fSchristos 136*69606e3fSchristosfoo.in: 137*69606e3fSchristos touch $@ 138*69606e3fSchristos 139*69606e3fSchristos', 140*69606e3fSchristos'', 141*69606e3fSchristos'touch foo.in 142*69606e3fSchristostouch foo.h 143*69606e3fSchristostouch foo.c 144*69606e3fSchristosecho foo.c foo.h >foo.o'); 145*69606e3fSchristos 146*69606e3fSchristosunlink('foo.in', 'foo.h', 'foo.c', 'foo.o'); 147*69606e3fSchristos 148*69606e3fSchristos# This tells the test driver that the perl test script executed properly. 149*69606e3fSchristos1; 150