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