Module Name: src Committed By: rillig Date: Sun Dec 17 09:17:16 UTC 2023
Modified Files: src/usr.bin/make/unit-tests: directive-include-guard.exp directive-include-guard.mk Log Message: tests/make: add tests for spacing in multiple-inclusion guards To generate a diff of this commit: cvs rdiff -u -r1.12 -r1.13 \ src/usr.bin/make/unit-tests/directive-include-guard.exp cvs rdiff -u -r1.14 -r1.15 \ src/usr.bin/make/unit-tests/directive-include-guard.mk Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/make/unit-tests/directive-include-guard.exp diff -u src/usr.bin/make/unit-tests/directive-include-guard.exp:1.12 src/usr.bin/make/unit-tests/directive-include-guard.exp:1.13 --- src/usr.bin/make/unit-tests/directive-include-guard.exp:1.12 Thu Oct 19 18:24:33 2023 +++ src/usr.bin/make/unit-tests/directive-include-guard.exp Sun Dec 17 09:17:16 2023 @@ -14,10 +14,16 @@ Parse_PushInput: file variable-if-reuse. Skipping 'variable-if-reuse.tmp' because 'VARIABLE_IF' is defined Parse_PushInput: file variable-if-triple-negation.tmp, line 1 Parse_PushInput: file variable-if-triple-negation.tmp, line 1 +Parse_PushInput: file variable-if-spaced.tmp, line 1 +Parse_PushInput: file variable-if-spaced.tmp, line 1 +Parse_PushInput: file variable-if-parenthesized.tmp, line 1 +Parse_PushInput: file variable-if-parenthesized.tmp, line 1 Parse_PushInput: file variable-ifdef-negated.tmp, line 1 Parse_PushInput: file variable-ifdef-negated.tmp, line 1 Parse_PushInput: file variable-name-mismatch.tmp, line 1 Parse_PushInput: file variable-name-mismatch.tmp, line 1 +Parse_PushInput: file variable-ifndef-parenthesized.tmp, line 1 +Parse_PushInput: file variable-ifndef-parenthesized.tmp, line 1 Parse_PushInput: file variable-name-exclamation.tmp, line 1 Parse_PushInput: file variable-name-exclamation.tmp, line 1 Parse_PushInput: file variable-name-exclamation-middle.tmp, line 1 @@ -89,4 +95,8 @@ Parse_PushInput: file target-already-def Skipping 'target-already-defined.tmp' because 'target-already-defined' is defined Parse_PushInput: file target-name-exclamation.tmp, line 1 Parse_PushInput: file target-name-exclamation.tmp, line 1 +Parse_PushInput: file target-name-parenthesized.tmp, line 1 +Parse_PushInput: file target-name-parenthesized.tmp, line 1 +Parse_PushInput: file target-call-parenthesized.tmp, line 1 +Parse_PushInput: file target-call-parenthesized.tmp, line 1 exit status 0 Index: src/usr.bin/make/unit-tests/directive-include-guard.mk diff -u src/usr.bin/make/unit-tests/directive-include-guard.mk:1.14 src/usr.bin/make/unit-tests/directive-include-guard.mk:1.15 --- src/usr.bin/make/unit-tests/directive-include-guard.mk:1.14 Sun Dec 17 08:53:55 2023 +++ src/usr.bin/make/unit-tests/directive-include-guard.mk Sun Dec 17 09:17:16 2023 @@ -1,4 +1,4 @@ -# $NetBSD: directive-include-guard.mk,v 1.14 2023/12/17 08:53:55 rillig Exp $ +# $NetBSD: directive-include-guard.mk,v 1.15 2023/12/17 09:17:16 rillig Exp $ # # Tests for multiple-inclusion guards in makefiles. # @@ -111,6 +111,26 @@ LINES.variable-if-triple-negation= \ # expect: Parse_PushInput: file variable-if-triple-negation.tmp, line 1 # expect: Parse_PushInput: file variable-if-triple-negation.tmp, line 1 +# If the guard variable is enclosed in spaces, it does not have an effect, as +# that form is not common in practice. +CASES+= variable-if-spaced +LINES.variable-if-spaced= \ + '.if !defined( VARIABLE_IF_SPACED )' \ + 'VARIABLE_IF_SPACED=' \ + '.endif' +# expect: Parse_PushInput: file variable-if-spaced.tmp, line 1 +# expect: Parse_PushInput: file variable-if-spaced.tmp, line 1 + +# If the guard variable condition is enclosed in parentheses, it does not have +# an effect, as that form is not common in practice. +CASES+= variable-if-parenthesized +LINES.variable-if-parenthesized= \ + '.if (!defined(VARIABLE_IF_PARENTHESIZED))' \ + 'VARIABLE_IF_PARENTHESIZED=' \ + '.endif' +# expect: Parse_PushInput: file variable-if-parenthesized.tmp, line 1 +# expect: Parse_PushInput: file variable-if-parenthesized.tmp, line 1 + # A conditional other than '.if' or '.ifndef' does not guard the file, even if # it is otherwise equivalent to the above accepted forms. CASES+= variable-ifdef-negated @@ -130,6 +150,16 @@ LINES.variable-name-mismatch= \ # expect: Parse_PushInput: file variable-name-mismatch.tmp, line 1 # expect: Parse_PushInput: file variable-name-mismatch.tmp, line 1 +# If the guard variable condition is enclosed in parentheses, it does not have +# an effect, as that form is not common in practice. +CASES+= variable-ifndef-parenthesized +LINES.variable-ifndef-parenthesized= \ + '.ifndef (VARIABLE_IFNDEF_PARENTHESIZED)' \ + 'VARIABLE_IFNDEF_PARENTHESIZED=' \ + '.endif' +# expect: Parse_PushInput: file variable-ifndef-parenthesized.tmp, line 1 +# expect: Parse_PushInput: file variable-ifndef-parenthesized.tmp, line 1 + # The variable name '!VARNAME' cannot be used in an '.ifndef' directive, as # the '!' would be a negation. It is syntactically valid in a '.if !defined' # condition, but this case is so uncommon that the guard mechanism doesn't @@ -473,7 +503,7 @@ LINES.target-indirect-PARSEFILE2= \ # Using plain .PARSEFILE without .PARSEDIR leads to name clashes. The include # guard is the same as in the test case 'target-indirect-PARSEFILE', as the # guard name only contains the basename but not the directory name. So even -# without defining the guard variable, the file is considered guarded. +# without defining the guard target, the file is considered guarded. CASES+= subdir/target-indirect-PARSEFILE LINES.subdir/target-indirect-PARSEFILE= \ '.if !target(__$${.PARSEFILE}__)' \ @@ -551,6 +581,26 @@ LINES.target-name-exclamation= \ # expect: Parse_PushInput: file target-name-exclamation.tmp, line 1 # expect: Parse_PushInput: file target-name-exclamation.tmp, line 1 +# If the guard target name is enclosed in spaces, it does not have an effect, +# as that form is not common in practice. +CASES+= target-name-parenthesized +LINES.target-name-parenthesized= \ + '.if !target( target-name-parenthesized )' \ + 'target-name-parenthesized: .NOTMAIN' \ + '.endif' +# expect: Parse_PushInput: file target-name-parenthesized.tmp, line 1 +# expect: Parse_PushInput: file target-name-parenthesized.tmp, line 1 + +# If the guard target condition is enclosed in parentheses, it does not have +# an effect, as that form is not common in practice. +CASES+= target-call-parenthesized +LINES.target-call-parenthesized= \ + '.if (!target(target-call-parenthesized))' \ + 'target-call-parenthesized: .NOTMAIN' \ + '.endif' +# expect: Parse_PushInput: file target-call-parenthesized.tmp, line 1 +# expect: Parse_PushInput: file target-call-parenthesized.tmp, line 1 + # Now run all test cases by including each of the files twice and looking at # the debug output. The files that properly guard against multiple inclusion