xref: /freebsd/contrib/bmake/unit-tests/dir.mk (revision 36d6566e5985030fd2f1100bd9c1387bbe0bd290)
1# $NetBSD: dir.mk,v 1.7 2020/10/31 21:30:03 rillig Exp $
2#
3# Tests for dir.c.
4
5.MAKEFLAGS: -m /		# hide /usr/share/mk from the debug log
6
7# Dependency lines may use braces for expansion.
8# See DirExpandCurly for the implementation.
9all: {one,two,three}
10
11# XXX: The above dependency line is parsed as a single node named
12# "{one,two,three}".  There are no individual targets "one", "two", "three"
13# yet.  The node exists but is not a target since it never appeared
14# on the left-hand side of a dependency operator.  However, it is listed
15# in .ALLTARGETS (which lists all nodes, not only targets).
16.if target(one)
17.  error
18.endif
19.if target({one,two,three})
20.  error
21.endif
22.if ${.ALLTARGETS:M{one,two,three}} != "{one,two,three}"
23.  error
24.endif
25
26one:
27	: 1
28two:
29	: 2
30three:
31	: 3
32
33# The braces may start in the middle of a word.
34all: f{our,ive}
35
36four:
37	: 4
38five:
39	: 5
40six:
41	: 6
42
43# Nested braces work as expected since 2020-07-31 19:06 UTC.
44# They had been broken at least since 2003-01-01, probably even longer.
45all: {{thi,fou}r,fif}teen
46
47thirteen:
48	: 13
49fourteen:
50	: 14
51fifteen:
52	: 15
53
54# There may be multiple brace groups side by side.
55all: {pre-,}{patch,configure}
56
57pre-patch patch pre-configure configure:
58	: $@
59
60# Empty pieces are allowed in the braces.
61all: {fetch,extract}{,-post}
62
63fetch fetch-post extract extract-post:
64	: $@
65
66# The expansions may have duplicates.
67# These are merged together because of the dependency line.
68all: dup-{1,1,1,1,1,1,1}
69
70dup-1:
71	: $@
72
73# Other than in Bash, the braces are also expanded if there is no comma.
74all: {{{{{{{{{{single-word}}}}}}}}}}
75
76single-word:
77	: $@
78
79# Demonstrate debug logging for filename expansion, especially curly braces.
80.MAKEFLAGS: -dd
81# The below line does not call Dir_Expand yet.
82# It is expanded only when necessary, that is, when the 'debug' target is
83# indeed made.
84debug: {{thi,fou}r,fif}twen
85# Therefore, keep the debug logging active.
86
87.PHONY: one two three four five six
88.PHONY: thirteen fourteen fifteen
89.PHONY: single-word
90.PHONY: pre-patch patch pre-configure configure
91.PHONY: fetch fetch-post extract extract-post
92.PHONY: dup-1 single-word
93.PHONY: all
94