deptgt.mk revision 1.24 1 1.24 rillig # $NetBSD: deptgt.mk,v 1.24 2025/06/28 22:39:28 rillig Exp $
2 1.1 rillig #
3 1.2 rillig # Tests for special targets like .BEGIN or .SUFFIXES in dependency
4 1.2 rillig # declarations.
5 1.1 rillig
6 1.1 rillig # TODO: Implementation
7 1.1 rillig
8 1.3 rillig # Just in case anyone tries to compile several special targets in a single
9 1.3 rillig # dependency line: That doesn't work, and make immediately rejects it.
10 1.24 rillig # expect+1: warning: Extra target ".PHONY" ignored
11 1.3 rillig .SUFFIXES .PHONY: .c.o
12 1.3 rillig
13 1.5 rillig # The following lines demonstrate how 'targets' is set and reset during
14 1.4 rillig # parsing of dependencies. To see it in action, set breakpoints in:
15 1.4 rillig #
16 1.11 rillig # ParseDependency at the beginning
17 1.6 rillig # FinishDependencyGroup at "targets = NULL"
18 1.4 rillig # Parse_File at "Lst_Free(targets)"
19 1.8 rillig # Parse_File at "targets = Lst_New()"
20 1.7 rillig # ParseLine_ShellCommand at "targets == NULL"
21 1.4 rillig #
22 1.5 rillig # Keywords:
23 1.5 rillig # parse.c:targets
24 1.5 rillig
25 1.5 rillig target1 target2: sources # targets := [target1, target2]
26 1.5 rillig : command1 # targets == [target1, target2]
27 1.5 rillig : command2 # targets == [target1, target2]
28 1.5 rillig VAR=value # targets := NULL
29 1.14 rillig # expect+1: Unassociated shell command ": command3 # parse error, since targets == NULL"
30 1.5 rillig : command3 # parse error, since targets == NULL
31 1.4 rillig
32 1.9 rillig # In a dependency declaration, the list of targets can be empty.
33 1.15 rillig # It doesn't matter whether the empty string is generated by an
34 1.9 rillig # expression or whether it is just omitted.
35 1.9 rillig .MAKEFLAGS: -dp
36 1.9 rillig ${:U}: empty-source
37 1.9 rillig : command for empty targets list
38 1.9 rillig : empty-source
39 1.9 rillig : command for empty targets list
40 1.9 rillig .MAKEFLAGS: -d0
41 1.9 rillig
42 1.22 rillig # An expression based on an undefined variable is allowed on both sides of
43 1.22 rillig # the dependency declaration.
44 1.22 rillig .MAKEFLAGS: -dv
45 1.22 rillig deptgt-${UNDEF}: depsrc-${UNDEF}
46 1.22 rillig .MAKEFLAGS: -d0
47 1.22 rillig
48 1.20 rillig # In a dependency declaration, the whole line is expanded before interpreting
49 1.20 rillig # the line.
50 1.23 rillig # expect+1: Unknown modifier ":Z"
51 1.20 rillig ${:U:Z}:
52 1.20 rillig # After expanding the line as a whole, each target is parsed but not
53 1.20 rillig # evaluated, separately, in ParseDependencyTargetWord.
54 1.23 rillig # expect+1: Unknown modifier ":Z"
55 1.20 rillig $${:U:Z}:
56 1.10 rillig
57 1.24 rillig # expect+1: warning: Extra target "ordinary" ignored
58 1.12 rillig .END ordinary:
59 1.12 rillig
60 1.24 rillig # expect+1: warning: Extra target "ordinary" ignored
61 1.12 rillig .PATH ordinary:
62 1.12 rillig
63 1.16 rillig # expect+1: warning: Special and mundane targets don't mix. Mundane ones ignored
64 1.12 rillig ordinary .PATH:
65