Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/usr.bin/make/unit-tests make(1): add tests for the .BEGIN node



details:   https://anonhg.NetBSD.org/src/rev/32194f1f41d0
branches:  trunk
changeset: 957071:32194f1f41d0
user:      rillig <rillig%NetBSD.org@localhost>
date:      Sun Nov 15 20:47:01 2020 +0000

description:
make(1): add tests for the .BEGIN node

diffstat:

 usr.bin/make/unit-tests/deptgt-begin.exp |   3 ++
 usr.bin/make/unit-tests/deptgt-begin.mk  |  37 +++++++++++++++++++++++++++++++-
 2 files changed, 39 insertions(+), 1 deletions(-)

diffs (62 lines):

diff -r 33157b0dde4e -r 32194f1f41d0 usr.bin/make/unit-tests/deptgt-begin.exp
--- a/usr.bin/make/unit-tests/deptgt-begin.exp  Sun Nov 15 20:20:58 2020 +0000
+++ b/usr.bin/make/unit-tests/deptgt-begin.exp  Sun Nov 15 20:47:01 2020 +0000
@@ -1,4 +1,7 @@
+make: "deptgt-begin.mk" line 17: warning: duplicate script for target ".BEGIN" ignored
+make: "deptgt-begin.mk" line 8: warning: using previous script for ".BEGIN" defined here
 : parse time
+: Making before-begin before .BEGIN.
 : .BEGIN
 : all
 exit status 0
diff -r 33157b0dde4e -r 32194f1f41d0 usr.bin/make/unit-tests/deptgt-begin.mk
--- a/usr.bin/make/unit-tests/deptgt-begin.mk   Sun Nov 15 20:20:58 2020 +0000
+++ b/usr.bin/make/unit-tests/deptgt-begin.mk   Sun Nov 15 20:47:01 2020 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: deptgt-begin.mk,v 1.3 2020/08/29 17:34:21 rillig Exp $
+# $NetBSD: deptgt-begin.mk,v 1.4 2020/11/15 20:47:01 rillig Exp $
 #
 # Tests for the special target .BEGIN in dependency declarations,
 # which is a container for commands that are run before any other
@@ -7,6 +7,41 @@
 .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.
+.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.
+# This way, its commands are appended to the commands of the .BEGIN target
+# just before the .BEGIN target is made.
+#
+# XXX: For some reason, the commands from the .USE target are not run.
+# XXX: .USE nodes should not be candidates for the .MAIN node.
+.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.
+#
+# XXX: For some reason, the commands from the .USEBEFORE target are not run.
+# XXX: .USEBEFORE nodes should not be candidates for the .MAIN node.
+.BEGIN: use-before
+use-before: .USEBEFORE .NOTMAIN
+       : Making $@ from a .USEBEFORE dependency.
+
 all:
        : $@
 



Home | Main Index | Thread Index | Old Index