| # -*-perl-*- |
| |
| $description = "Test pattern rules."; |
| |
| $details = ""; |
| |
| use Cwd; |
| |
| $dir = cwd; |
| $dir =~ s,.*/([^/]+)$,../$1,; |
| |
| |
| # TEST #1: Make sure that multiple patterns where the same target |
| # can be built are searched even if the first one fails |
| # to match properly. |
| # |
| |
| run_make_test(' |
| .PHONY: all |
| |
| all: case.1 case.2 case.3 |
| a: void |
| |
| # 1 - existing file |
| %.1: void |
| @exit 1 |
| %.1: #MAKEFILE# |
| @exit 0 |
| |
| # 2 - phony |
| %.2: void |
| @exit 1 |
| %.2: 2.phony |
| @exit 0 |
| .PHONY: 2.phony |
| |
| # 3 - implicit-phony |
| %.3: void |
| @exit 1 |
| %.3: 3.implicit-phony |
| @exit 0 |
| |
| 3.implicit-phony: |
| ', |
| '', |
| ''); |
| |
| # TEST #2: make sure files that are built via implicit rules are marked |
| # as targets (Savannah bug #12202). |
| # |
| run_make_test(' |
| TARGETS := foo foo.out |
| |
| .PHONY: all foo.in |
| |
| all: $(TARGETS) |
| |
| %: %.in |
| @echo $@ |
| |
| %.out: % |
| @echo $@ |
| |
| foo.in: ; @: |
| |
| ', |
| '', |
| 'foo |
| foo.out'); |
| |
| |
| # TEST #3: make sure intermidite files that also happened to be |
| # prerequisites are not removed (Savannah bug #12267). |
| # |
| run_make_test(' |
| $(dir)/foo.o: |
| |
| $(dir)/foo.y: |
| @echo $@ |
| |
| %.c: %.y |
| touch $@ |
| |
| %.o: %.c |
| @echo $@ |
| |
| .PHONY: install |
| install: $(dir)/foo.c |
| |
| ', |
| "dir=$dir", |
| "$dir/foo.y |
| touch $dir/foo.c |
| $dir/foo.o"); |
| |
| unlink("$dir/foo.c"); |
| |
| |
| # TEST #4: make sure precious flag is set properly for targets |
| # that are built via implicit rules (Savannah bug #13218). |
| # |
| run_make_test(' |
| .DELETE_ON_ERROR: |
| |
| .PRECIOUS: %.bar |
| |
| %.bar:; @touch $@ && exit 1 |
| |
| $(dir)/foo.bar: |
| |
| ', |
| "dir=$dir", |
| "#MAKE#: *** [$dir/foo.bar] Error 1", |
| 512); |
| |
| unlink("$dir/foo.bar"); |
| |
| |
| # TEST #5: make sure targets of a macthed implicit pattern rule never |
| # never considered intermediate (Savannah bug #13022). |
| # |
| run_make_test(' |
| .PHONY: all |
| all: foo.c foo.o |
| |
| %.h %.c: %.in |
| touch $*.h |
| touch $*.c |
| |
| %.o: %.c %.h |
| echo $+ >$@ |
| |
| %.o: %.c |
| @echo wrong rule |
| |
| foo.in: |
| touch $@ |
| |
| ', |
| '', |
| 'touch foo.in |
| touch foo.h |
| touch foo.c |
| echo foo.c foo.h >foo.o'); |
| |
| unlink('foo.in', 'foo.h', 'foo.c', 'foo.o'); |
| |
| # This tells the test driver that the perl test script executed properly. |
| 1; |