aboutsummaryrefslogtreecommitdiff
path: root/contrib/bmake/unit-tests/deptgt-begin.mk
blob: 8b9842641a2dc835dc92b7bb968223781ba63817 (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
# $NetBSD: deptgt-begin.mk,v 1.7 2023/06/01 20:56:35 rillig Exp $
#
# Tests for the special target .BEGIN in dependency declarations,
# which is a container for commands that are run before any other
# commands from the shell lines.

# expect+2: warning: using previous script for ".BEGIN" defined here
.BEGIN:
	: $@

# To register a custom action to be run at the beginning, the simplest way is
# to directly place some commands on the '.BEGIN' target.  This doesn't scale
# though, since the ':' dependency operator prevents that any other place may
# add its commands after this.
#
# There are several ways to resolve this situation, which are detailed below.
# expect+2: warning: duplicate script for target ".BEGIN" ignored
.BEGIN:
	: Making another $@.

# One way to run commands at the beginning is to define a custom target and
# make the .BEGIN depend on that target.  This way, the commands from the
# custom target are run even before the .BEGIN target.
.BEGIN: before-begin
before-begin: .PHONY .NOTMAIN
	: Making $@ before .BEGIN.

# Another way is to define a custom target and make that a .USE dependency.
# For the .BEGIN target, .USE dependencies do not work though, since in
# Compat_MakeAll, the .USE and .USEBEFORE nodes are expanded right after the
# .BEGIN target has been made, which is too late.
.BEGIN: use
use: .USE .NOTMAIN
	: Making $@ from a .USE dependency.

# Same as with .USE, but run the commands before the main commands from the
# .BEGIN target.
#
# For the .BEGIN target, .USEBEFORE dependencies do not work though, since in
# Compat_MakeAll, the .USE and .USEBEFORE nodes are expanded right after the
# .BEGIN target has been made, which is too late.
.BEGIN: use-before
use-before: .USEBEFORE .NOTMAIN
	: Making $@ from a .USEBEFORE dependency.

all:
	: $@

_!=	echo : parse time 1>&2