xref: /freebsd/contrib/bmake/unit-tests/suff-rebuild.mk (revision 06b9b3e0ad0dc3f0166b3e8f26ced68c271cf527)
1# $NetBSD: suff-rebuild.mk,v 1.6 2020/11/21 12:01:16 rillig Exp $
2#
3# Demonstrates what happens to transformation rules (called inference rules
4# by POSIX) when all suffixes are deleted.
5
6all: suff-rebuild-example
7
8.MAKEFLAGS: -dpst
9
10.SUFFIXES:
11
12.SUFFIXES: .a .b .c
13
14suff-rebuild-example.a:
15	: Making ${.TARGET} out of nothing.
16
17.a.b:
18	: Making ${.TARGET} from ${.IMPSRC}.
19.b.c:
20	: Making ${.TARGET} from ${.IMPSRC}.
21.c:
22	: Making ${.TARGET} from ${.IMPSRC}.
23
24# XXX: At a quick glance, the code in SuffUpdateTarget looks as if it were
25# possible to delete the suffixes in the middle of the makefile, add back
26# the suffixes from before, and have the transformation rules preserved.
27#
28# As of 2020-09-25, uncommenting the following line results in the error
29# message "don't know how to make suff-rebuild-example" though.
30#
31# If this is a bug, the actual cause is probably that when a suffix
32# transformation rule is defined, it is not added to the global list of
33# targets, see Suff_EndTransform.  Later, UpdateTargets iterates over exactly
34# this global list of targets though.
35#
36# If UpdateTargets were to iterate over 'transforms' as well, it still
37# wouldn't work because the condition 'ptr == target->name' skips these
38# transformation rules.
39
40#.SUFFIXES:
41
42# Add the suffixes back.  It should not matter that the order of the suffixes
43# is different from before.
44.SUFFIXES: .c .b .a
45