aboutsummaryrefslogtreecommitdiff
path: root/contrib/bmake/unit-tests/dir.mk
blob: 95628539348916489d93d8aec1d996cc5c85e5b6 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
# $NetBSD: dir.mk,v 1.11 2023/12/19 19:33:40 rillig Exp $
#
# Tests for dir.c.

# hide /usr/share/mk from the debug log
.SYSPATH:
.SYSPATH: /

# Dependency lines may use braces for expansion.
# See DirExpandCurly for the implementation.
all: {one,two,three}

# XXX: The above dependency line is parsed as a single node named
# "{one,two,three}".  There are no individual targets "one", "two", "three"
# yet.  The node exists but is not a target since it never appeared
# on the left-hand side of a dependency operator.  However, it is listed
# in .ALLTARGETS (which lists all nodes, not only targets).
.if target(one)
.  error
.endif
.if target({one,two,three})
.  error
.endif
.if ${.ALLTARGETS:M{one,two,three}} != "{one,two,three}"
.  error
.endif

one:
	: 1
two:
	: 2
three:
	: 3

# The braces may start in the middle of a word.
all: f{our,ive}

four:
	: 4
five:
	: 5
six:
	: 6

# Nested braces work as expected since 2020-07-31 19:06 UTC.
# They had been broken at least since 2003-01-01, probably even longer.
all: {{thi,fou}r,fif}teen

thirteen:
	: 13
fourteen:
	: 14
fifteen:
	: 15

# There may be multiple brace groups side by side.
all: {pre-,}{patch,configure}

pre-patch patch pre-configure configure:
	: $@

# Empty pieces are allowed in the braces.
all: {fetch,extract}{,-post}

fetch fetch-post extract extract-post:
	: $@

# The expansions may have duplicates.
# When the source of the dependency line is expanded later, each of the
# expanded words resolves to the same node.
all: dup-{1,1,1,1,1,1,1}

dup-1:
	: $@

# Other than in Bash, the braces are also expanded if there is no comma.
all: {{{{{{{{{{single-word}}}}}}}}}}

single-word:
	: $@

# Demonstrate debug logging for filename expansion, especially curly braces.
.MAKEFLAGS: -dd
# The below line does not call SearchPath_Expand yet.
# It is expanded only when necessary, that is, when the 'debug' target is
# indeed made.
debug: {{thi,fou}r,fif}twen
# Therefore, keep the debug logging active.

.PHONY: one two three four five six
.PHONY: thirteen fourteen fifteen
.PHONY: single-word
.PHONY: pre-patch patch pre-configure configure
.PHONY: fetch fetch-post extract extract-post
.PHONY: dup-1 single-word
.PHONY: all