deptgt-end-jobs.mk revision 1.1 1 1.1 rillig # $NetBSD: deptgt-end-jobs.mk,v 1.1 2020/09/23 03:06:38 rillig Exp $
2 1.1 rillig #
3 1.1 rillig # Tests for the special target .END in dependency declarations,
4 1.1 rillig # which is run after making the desired targets.
5 1.1 rillig #
6 1.1 rillig # This test is very similar to deptgt-end.mk, except for the -j option.
7 1.1 rillig # This option enables parallel mode, in which the code from job.c partially
8 1.1 rillig # replaces the code from compat.c.
9 1.1 rillig #
10 1.1 rillig # Before 2020-08-22, this test crashed with a null pointer dereference.
11 1.1 rillig # Before 2020-09-23, this test crashed with an assertion failure.
12 1.1 rillig .MAKEFLAGS: -j 8
13 1.1 rillig
14 1.1 rillig VAR= Should not be expanded.
15 1.1 rillig
16 1.1 rillig .BEGIN:
17 1.1 rillig : $@ '$${VAR}'
18 1.1 rillig ...
19 1.1 rillig : $@ '$${VAR}' deferred
20 1.1 rillig # Oops: The deferred command must not be expanded twice.
21 1.1 rillig # The Var_Subst in Compat_RunCommand looks suspicious.
22 1.1 rillig # The Var_Subst in JobSaveCommand looks suspicious.
23 1.1 rillig
24 1.1 rillig .END:
25 1.1 rillig : $@ '$${VAR}'
26 1.1 rillig ...
27 1.1 rillig : $@ '$${VAR}' deferred
28 1.1 rillig
29 1.1 rillig all:
30 1.1 rillig : $@ '$${VAR}'
31 1.1 rillig ...
32 1.1 rillig : $@ '$${VAR}' deferred
33 1.1 rillig # Oops: The deferred command must not be expanded twice.
34 1.1 rillig # The Var_Subst in Compat_RunCommand looks suspicious.
35 1.1 rillig # The Var_Subst in JobSaveCommand looks suspicious.
36 1.1 rillig
37 1.1 rillig # The deferred commands are run in the order '.END .BEGIN all'.
38 1.1 rillig # This may be unexpected at first since the natural order would be
39 1.1 rillig # '.BEGIN all .END', but it is implemented correctly.
40 1.1 rillig #
41 1.1 rillig # At the point where the commands of a node with deferred commands are run,
42 1.1 rillig # the deferred commands are appended to the commands of the .END node.
43 1.1 rillig # This happens in Compat_RunCommand, and to prevent an endless loop, the
44 1.1 rillig # deferred commands of the .END node itself are not appended to itself.
45 1.1 rillig # Instead, the deferred commands of the .END node are run as if they were
46 1.1 rillig # immediate commands.
47