1# -*-perl-*- 2 3$description = "Test pattern rules."; 4 5$details = ""; 6 7use 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 18run_make_test(' 19.PHONY: all 20 21all: case.1 case.2 case.3 22a: 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 433.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# 51run_make_test(' 52TARGETS := foo foo.out 53 54.PHONY: all foo.in 55 56all: $(TARGETS) 57 58%: %.in 59 @echo $@ 60 61%.out: % 62 @echo $@ 63 64foo.in: ; @: 65 66', 67'', 68'foo 69foo.out'); 70 71 72# TEST #3: make sure intermidite files that also happened to be 73# prerequisites are not removed (Savannah bug #12267). 74# 75run_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 88install: $(dir)/foo.c 89 90', 91"dir=$dir", 92"$dir/foo.y 93touch $dir/foo.c 94$dir/foo.o"); 95 96unlink("$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# 102run_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", 114512); 115 116unlink("$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# 122run_make_test(' 123.PHONY: all 124all: 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 136foo.in: 137 touch $@ 138 139', 140'', 141'touch foo.in 142touch foo.h 143touch foo.c 144echo foo.c foo.h >foo.o'); 145 146unlink('foo.in', 'foo.h', 'foo.c', 'foo.o'); 147 148# This tells the test driver that the perl test script executed properly. 1491; 150