#T returncode: 2

# the %.object rule is "terminal". This means that additional implicit rules cannot be chained to it.

all: test.prog
	test "$$(cat $<)" = "Program: Object: Source: test.source"
	@echo TEST-FAIL

%.prog: %.object
	printf "Program: %s" "$$(cat $<)" > $@

%.object:: %.source
	printf "Object: %s" "$$(cat $<)" > $@

%.source:
	printf "Source: %s" $@ > $@