# -*-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;