aboutsummaryrefslogtreecommitdiff
path: root/contrib/bmake/unit-tests/cond-func-make-main.mk
blob: 97b91f8699918ea39f53e44a89073f9e7098b2f7 (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
# $NetBSD: cond-func-make-main.mk,v 1.2 2021/04/04 10:13:09 rillig Exp $
#
# Test how accurately the make() function in .if conditions reflects
# what is actually made.
#
# There are several ways to specify what is being made:
#
# 1. The default main target is the first target in the given makefiles that
#    is not one of the special targets.  For example, .PHONY is special when
#    it appears on the left-hand side of the ':'.  It is not special on the
#    right-hand side though.
#
# 2. Command line arguments that are neither options (-ds or -k) nor variable
#    assignments (VAR=value) are interpreted as targets to be made.  These
#    override the default main target from above.
#
# 3. All sources of the first '.MAIN: sources' line.  Any further .MAIN line
#    is treated as if .MAIN were a regular name.
#
# This test only covers items 1 and 3.  For item 2, see cond-func-make.mk.

first-main-target:
	: Making ${.TARGET}.

# Even though the main-target would actually be made at this point, it is
# ignored by the make() function.
.if make(first-main-target)
.  error
.endif

# Declaring a target via the .MAIN dependency adds it to the targets to be
# created (opts.create), but only that list was empty at the beginning of
# the line.  This implies that several main targets can be set at the name
# time, but they have to be in the same dependency group.
#
# See ParseDependencyTargetSpecial, branch SP_MAIN.
.MAIN: dot-main-target-1a dot-main-target-1b

.if !make(dot-main-target-1a)
.  error
.endif
.if !make(dot-main-target-1b)
.  error
.endif

dot-main-target-{1,2}{a,b}:
	: Making ${.TARGET}.

# At this point, the list of targets to be made (opts.create) is not empty
# anymore.  ParseDependencyTargetSpecial therefore treats the .MAIN as if
# it were an ordinary target.  Since .MAIN is not listed as a dependency
# anywhere, it is not made.
.if target(.MAIN)
.  error
.endif
.MAIN: dot-main-target-2a dot-main-target-2b
.if !target(.MAIN)
.  error
.endif
.if make(dot-main-target-2a)
.  error
.endif