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