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 edge cases wh...
details: https://anonhg.NetBSD.org/src/rev/8e251a760dcf
branches: trunk
changeset: 946074:8e251a760dcf
user: rillig <rillig%NetBSD.org@localhost>
date: Sun Nov 15 11:57:00 2020 +0000
description:
make(1): add tests for edge cases when parsing directives
diffstat:
usr.bin/make/unit-tests/deptgt.exp | 8 ++++++++
usr.bin/make/unit-tests/deptgt.mk | 12 +++++++++++-
usr.bin/make/unit-tests/directive-info.exp | 4 ++++
usr.bin/make/unit-tests/directive-info.mk | 12 +++++++++++-
usr.bin/make/unit-tests/directive.exp | 5 +++++
usr.bin/make/unit-tests/directive.mk | 19 ++++++++++++++++++-
6 files changed, 57 insertions(+), 3 deletions(-)
diffs (128 lines):
diff -r b113d917cdde -r 8e251a760dcf usr.bin/make/unit-tests/deptgt.exp
--- a/usr.bin/make/unit-tests/deptgt.exp Sun Nov 15 10:11:26 2020 +0000
+++ b/usr.bin/make/unit-tests/deptgt.exp Sun Nov 15 11:57:00 2020 +0000
@@ -1,5 +1,13 @@
make: "deptgt.mk" line 10: warning: Extra target ignored
make: "deptgt.mk" line 28: Unassociated shell command ": command3 # parse error, since targets == NULL"
+ParseReadLine (34): '${:U}: empty-source'
+ParseDoDependency(: empty-source)
+ParseReadLine (35): ' : command for empty targets list'
+ParseReadLine (36): ': empty-source'
+ParseDoDependency(: empty-source)
+ParseReadLine (37): ' : command for empty targets list'
+ParseReadLine (38): '.MAKEFLAGS: -d0'
+ParseDoDependency(.MAKEFLAGS: -d0)
make: Fatal errors encountered -- cannot continue
make: stopped in unit-tests
exit status 1
diff -r b113d917cdde -r 8e251a760dcf usr.bin/make/unit-tests/deptgt.mk
--- a/usr.bin/make/unit-tests/deptgt.mk Sun Nov 15 10:11:26 2020 +0000
+++ b/usr.bin/make/unit-tests/deptgt.mk Sun Nov 15 11:57:00 2020 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: deptgt.mk,v 1.8 2020/10/18 13:02:10 rillig Exp $
+# $NetBSD: deptgt.mk,v 1.9 2020/11/15 11:57:00 rillig Exp $
#
# Tests for special targets like .BEGIN or .SUFFIXES in dependency
# declarations.
@@ -27,5 +27,15 @@
VAR=value # targets := NULL
: command3 # parse error, since targets == NULL
+# In a dependency declaration, the list of targets can be empty.
+# It doesn't matter whether the empty string is generated by a variable
+# expression or whether it is just omitted.
+.MAKEFLAGS: -dp
+${:U}: empty-source
+ : command for empty targets list
+: empty-source
+ : command for empty targets list
+.MAKEFLAGS: -d0
+
all:
@:;
diff -r b113d917cdde -r 8e251a760dcf usr.bin/make/unit-tests/directive-info.exp
--- a/usr.bin/make/unit-tests/directive-info.exp Sun Nov 15 10:11:26 2020 +0000
+++ b/usr.bin/make/unit-tests/directive-info.exp Sun Nov 15 11:57:00 2020 +0000
@@ -5,6 +5,10 @@
make: "directive-info.mk" line 11: indented message
make: "directive-info.mk" line 12: Unknown directive "information"
make: "directive-info.mk" line 13: message
+make: "directive-info.mk" line 18: Unknown directive "info"
+make: "directive-info.mk" line 19: Unknown directive "info"
+make: "directive-info.mk" line 22: Unknown directive "info-message"
+make: "directive-info.mk" line 23: no-target: no-source
make: Fatal errors encountered -- cannot continue
make: stopped in unit-tests
exit status 1
diff -r b113d917cdde -r 8e251a760dcf usr.bin/make/unit-tests/directive-info.mk
--- a/usr.bin/make/unit-tests/directive-info.mk Sun Nov 15 10:11:26 2020 +0000
+++ b/usr.bin/make/unit-tests/directive-info.mk Sun Nov 15 11:57:00 2020 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: directive-info.mk,v 1.3 2020/11/03 17:17:31 rillig Exp $
+# $NetBSD: directive-info.mk,v 1.4 2020/11/15 11:57:00 rillig Exp $
#
# Tests for the .info directive.
@@ -13,5 +13,15 @@
.information message # oops: misspelled
.info.man: # not a message, but possibly a suffix rule
+# Even if lines would have trailing whitespace, this would be trimmed by
+# ParseGetLine.
+.info
+.info # comment
+
+.info: message # This is a dependency declaration.
+.info-message # This is an unknown directive.
+.info no-target: no-source # This is a .info directive, not a dependency.
+# See directive.mk for more tests of this kind.
+
all:
@:;
diff -r b113d917cdde -r 8e251a760dcf usr.bin/make/unit-tests/directive.exp
--- a/usr.bin/make/unit-tests/directive.exp Sun Nov 15 10:11:26 2020 +0000
+++ b/usr.bin/make/unit-tests/directive.exp Sun Nov 15 11:57:00 2020 +0000
@@ -2,6 +2,11 @@
make: "directive.mk" line 10: Unknown directive "indented"
make: "directive.mk" line 11: Unknown directive "indented"
make: "directive.mk" line 15: Unknown directive "info"
+Global:.info =
+Global:.info = value
+make: "directive.mk" line 26: := value
+Global:.MAKEFLAGS = -r -k -d v -d
+Global:.MAKEFLAGS = -r -k -d v -d 0
make: Fatal errors encountered -- cannot continue
make: stopped in unit-tests
exit status 1
diff -r b113d917cdde -r 8e251a760dcf usr.bin/make/unit-tests/directive.mk
--- a/usr.bin/make/unit-tests/directive.mk Sun Nov 15 10:11:26 2020 +0000
+++ b/usr.bin/make/unit-tests/directive.mk Sun Nov 15 11:57:00 2020 +0000
@@ -1,4 +1,4 @@
-# $NetBSD: directive.mk,v 1.3 2020/11/03 17:17:31 rillig Exp $
+# $NetBSD: directive.mk,v 1.4 2020/11/15 11:57:00 rillig Exp $
#
# Tests for the preprocessing directives, such as .if or .info.
@@ -14,5 +14,22 @@
# expressions.
.${:Uinfo} directives cannot be indirect
+# There is no directive called '.target', therefore this is parsed as a
+# dependency declaration with 2 targets and 1 source.
+.target target: source
+
+# This looks ambiguous. It could be either an .info message or a variable
+# assignment. It is a variable assignment.
+.MAKEFLAGS: -dv
+.info:= value
+.info?= value # This is a variable assignment as well.
+.info := value # The space after the '.info' makes this
+ # a directive.
+.MAKEFLAGS: -d0
+
+# This is a dependency since directives must be given directly.
+# Not even the space after the '.info' can change anything about this.
+.${:Uinfo} : source
+
all:
@:;
Home |
Main Index |
Thread Index |
Old Index