History log of /netbsd-current/usr.bin/make/unit-tests/var-op-expand.mk
Revision (<<< Hide revision tags) (Show revision tags >>>) Date Author Comments
# 1.20 20-Apr-2024 rillig

make: provide more context information for parse/evaluate errors


# 1.19 19-Nov-2023 rillig

tests/make: replace 'variable expression' with 'expression'

Each expression is based on a variable, there's no need for the
verbosity. The wording in make's diagnostics will be changed in a
follow-up commit.


# 1.18 01-Jun-2023 rillig

tests/make: force line-based diagnostics to be listed in the tests

This way, contradictions between the intended output and the actual
output are closer together and have a better chance of being spotted.


Revision tags: netbsd-10-0-RELEASE netbsd-10-0-RC6 netbsd-10-0-RC5 netbsd-10-0-RC4 netbsd-10-0-RC3 netbsd-10-0-RC2 netbsd-10-0-RC1 netbsd-10-base
# 1.17 08-Sep-2022 rillig

tests/make: extend tests for the ':=' assignment operator


# 1.16 28-Dec-2021 rillig

tests/make: use tabs instead of spaces for indentation


# 1.15 30-Nov-2021 rillig

tests/make: test and document .MAKE.SAVE_DOLLARS and ':='


# 1.14 20-Nov-2021 rillig

tests/make: finish a previously unfinished sentence in a comment


# 1.13 13-Nov-2021 rillig

tests/make: extend test for undefined variable in doubly indirect ':='

Just to prevent a half-baked fix to the current behavior that would
concatenate the modifiers of the two expressions, leading to
${LATER:value=sysv:tl} in this case. That expression would be
interpreted as having only a single modifier that would replace the
suffix 'value' with 'sysv:tl'. This is because the SysV modifier
':from=to' spans until the end of the expression.


# 1.12 13-Nov-2021 rillig

tests/make: test double indirection in ':=' with undefined variable

Reported by Simon J Gerraty via private mail.

This edge case has been handled in essentially the same way since at
least 2000-05-30, probably several years earlier as well. The test file
is:

---- snip ----
.undef LATER
.undef later
INDIRECT:= ${LATER:S,value,replaced,}
indirect:= ${INDIRECT:C,S,s,}
# expect+1: Unknown modifier "s,value,replaced,"
.if ${indirect} != ""
. error
.else
. warning XXX Neither branch should be taken.
.endif
LATER= uppercase-value
later= lowercase-value
# expect+1: Unknown modifier "s,value,replaced,"
.if ${indirect} != "uppercase-replaced"
. warning XXX Neither branch should be taken.
.else
. error
.endif

all:
@:;
---- snap ----

The output from 'make -r -f later.mk' is:

make-2000.05.30.02.32.21
| make: Unknown modifier 's'
|
| "later.mk", line 9: Need an operator
| make: Unknown modifier 's'
|
| "later.mk", line 15: Need an operator
| Fatal errors encountered -- cannot continue
| exit status 1
make-2000.12.30.16.38.22

The pathnames in the error message gets absolute:

make-2001.01.23.02.48.05
| make: Unknown modifier 's'
|
| ".../later.mk", line 9: Need an operator
| make: Unknown modifier 's'
|
| ".../later.mk", line 15: Need an operator
| Fatal errors encountered -- cannot continue
| exit status 1
make-2001.01.23.02.48.05

All error messages get 'make:' as a common prefix:

make-2001.02.23.21.11.38
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 9: Need an operator
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 15: Need an operator
| make: Fatal errors encountered -- cannot continue
| exit status 1
make-2001.05.29.17.37.52

The 'stopped in' gets added:

make-2001.06.12.23.36.18
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 9: Need an operator
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 15: Need an operator
| make: Fatal errors encountered -- cannot continue
|
| make: stopped in ...
| exit status 1
make-2002.02.21.22.21.34

The empty lines between the error messages get removed.

make-2002.03.21.11.42.21
| make: Unknown modifier 's'
| make: ".../later.mk" line 9: Need an operator
| make: Unknown modifier 's'
| make: ".../later.mk" line 15: Need an operator
| make: Fatal errors encountered -- cannot continue
|
| make: stopped in ...
| exit status 1
make-2009.10.15.02.27.44

The error message for unknown directives gets more helpful:

make-2009.11.19.06.48.37
| make: Unknown modifier 's'
| make: ".../later.mk" line 9: Unknown directive
| make: Unknown modifier 's'
| make: ".../later.mk" line 15: Unknown directive
| make: Fatal errors encountered -- cannot continue
|
| make: stopped in ...
| exit status 1
make-2010.02.22.19.20.33

The directives '.error', '.warning' and '.info' get added:

make-2010.04.29.23.12.21
| make: Unknown modifier 's'
| make: ".../later.mk" line 9: warning: XXX Neither branch should be taken.
| make: Unknown modifier 's'
| make: ".../later.mk" line 15: warning: XXX Neither branch should be taken.
| exit status 0
make-2020.12.20.19.37.23

The error message about an unknown variable modifier gets line number
information:

make-2020.12.20.19.47.34
| make: ".../later.mk" line 6: Unknown modifier 's'
| make: ".../later.mk" line 9: warning: XXX Neither branch should be taken.
| make: ".../later.mk" line 14: Unknown modifier 's'
| make: ".../later.mk" line 15: warning: XXX Neither branch should be taken.
| make: Fatal errors encountered -- cannot continue
| make: stopped in ...
| exit status 1
make-2021.02.23.15.07.58

The error message about an unknown variable modifier gets more context
than only a single letter:

make-2021.02.23.15.19.41
| make: ".../later.mk" line 6: Unknown modifier "s,value,replaced,"
| make: ".../later.mk" line 9: warning: XXX Neither branch should be taken.
| make: ".../later.mk" line 14: Unknown modifier "s,value,replaced,"
| make: ".../later.mk" line 15: warning: XXX Neither branch should be taken.
| make: Fatal errors encountered -- cannot continue
| make: stopped in ...
| exit status 1


Revision tags: cjep_sun2x-base1 cjep_sun2x-base cjep_staticlib_x-base1 cjep_staticlib_x-base
# 1.11 01-Jan-2021 sjg

var-op-expand needs MAKE.SAVE_DOLLARS=yes


# 1.10 28-Dec-2020 rillig

make(1): extend test for modifier parts in ':=' assignments


# 1.9 27-Dec-2020 rillig

make(1): add test for modifier parts in ':=' assignments


# 1.8 27-Dec-2020 rillig

make(1): fix edge case in := with undefined in variable name

Previously, the assignment "VAR${UNDEF} := value" actually assigned to 2
variables. See var-op-expand.mk for details.


# 1.7 27-Dec-2020 rillig

make(1): move test result of var-op-expand.mk from exp to mk

This makes it easier to run this test in older versions of make. Empty
output means success.


# 1.6 27-Dec-2020 rillig

make(1): add more tests for ':=' assignments


# 1.5 27-Dec-2020 rillig

make(1): add tests for variable assignments using the ':=' operator


# 1.4 08-Nov-2020 rillig

make(1): fix bug description of using := with undefined variable

In 1993, the variable names could not refer to other variables yet.
This has been made possible on 2000-05-11, when the "cool magic" was
added that allows assigning to VAR.${param}.


# 1.3 08-Nov-2020 rillig

make(1): add test for edge case in resolving undefined variables


# 1.2 16-Aug-2020 rillig

make(1): describe the purpose of each newly added unit test dummy


# 1.1 16-Aug-2020 rillig

make(1): add dummies for fine-grained tests, one per single feature

The test names have been derived from the current manual page.

All these tests are dummies right now, and the code from the existing
tests will be moved into the new tests step by step.

This is done to prevent modmisc, escape, varmod-edge and varmisc from
growing without any bounds, and to reduce the side-effects of one test
to the others.


# 1.19 19-Nov-2023 rillig

tests/make: replace 'variable expression' with 'expression'

Each expression is based on a variable, there's no need for the
verbosity. The wording in make's diagnostics will be changed in a
follow-up commit.


# 1.18 01-Jun-2023 rillig

tests/make: force line-based diagnostics to be listed in the tests

This way, contradictions between the intended output and the actual
output are closer together and have a better chance of being spotted.


Revision tags: netbsd-10-0-RC1 netbsd-10-base
# 1.17 08-Sep-2022 rillig

tests/make: extend tests for the ':=' assignment operator


# 1.16 28-Dec-2021 rillig

tests/make: use tabs instead of spaces for indentation


# 1.15 30-Nov-2021 rillig

tests/make: test and document .MAKE.SAVE_DOLLARS and ':='


# 1.14 20-Nov-2021 rillig

tests/make: finish a previously unfinished sentence in a comment


# 1.13 13-Nov-2021 rillig

tests/make: extend test for undefined variable in doubly indirect ':='

Just to prevent a half-baked fix to the current behavior that would
concatenate the modifiers of the two expressions, leading to
${LATER:value=sysv:tl} in this case. That expression would be
interpreted as having only a single modifier that would replace the
suffix 'value' with 'sysv:tl'. This is because the SysV modifier
':from=to' spans until the end of the expression.


# 1.12 13-Nov-2021 rillig

tests/make: test double indirection in ':=' with undefined variable

Reported by Simon J Gerraty via private mail.

This edge case has been handled in essentially the same way since at
least 2000-05-30, probably several years earlier as well. The test file
is:

---- snip ----
.undef LATER
.undef later
INDIRECT:= ${LATER:S,value,replaced,}
indirect:= ${INDIRECT:C,S,s,}
# expect+1: Unknown modifier "s,value,replaced,"
.if ${indirect} != ""
. error
.else
. warning XXX Neither branch should be taken.
.endif
LATER= uppercase-value
later= lowercase-value
# expect+1: Unknown modifier "s,value,replaced,"
.if ${indirect} != "uppercase-replaced"
. warning XXX Neither branch should be taken.
.else
. error
.endif

all:
@:;
---- snap ----

The output from 'make -r -f later.mk' is:

make-2000.05.30.02.32.21
| make: Unknown modifier 's'
|
| "later.mk", line 9: Need an operator
| make: Unknown modifier 's'
|
| "later.mk", line 15: Need an operator
| Fatal errors encountered -- cannot continue
| exit status 1
make-2000.12.30.16.38.22

The pathnames in the error message gets absolute:

make-2001.01.23.02.48.05
| make: Unknown modifier 's'
|
| ".../later.mk", line 9: Need an operator
| make: Unknown modifier 's'
|
| ".../later.mk", line 15: Need an operator
| Fatal errors encountered -- cannot continue
| exit status 1
make-2001.01.23.02.48.05

All error messages get 'make:' as a common prefix:

make-2001.02.23.21.11.38
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 9: Need an operator
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 15: Need an operator
| make: Fatal errors encountered -- cannot continue
| exit status 1
make-2001.05.29.17.37.52

The 'stopped in' gets added:

make-2001.06.12.23.36.18
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 9: Need an operator
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 15: Need an operator
| make: Fatal errors encountered -- cannot continue
|
| make: stopped in ...
| exit status 1
make-2002.02.21.22.21.34

The empty lines between the error messages get removed.

make-2002.03.21.11.42.21
| make: Unknown modifier 's'
| make: ".../later.mk" line 9: Need an operator
| make: Unknown modifier 's'
| make: ".../later.mk" line 15: Need an operator
| make: Fatal errors encountered -- cannot continue
|
| make: stopped in ...
| exit status 1
make-2009.10.15.02.27.44

The error message for unknown directives gets more helpful:

make-2009.11.19.06.48.37
| make: Unknown modifier 's'
| make: ".../later.mk" line 9: Unknown directive
| make: Unknown modifier 's'
| make: ".../later.mk" line 15: Unknown directive
| make: Fatal errors encountered -- cannot continue
|
| make: stopped in ...
| exit status 1
make-2010.02.22.19.20.33

The directives '.error', '.warning' and '.info' get added:

make-2010.04.29.23.12.21
| make: Unknown modifier 's'
| make: ".../later.mk" line 9: warning: XXX Neither branch should be taken.
| make: Unknown modifier 's'
| make: ".../later.mk" line 15: warning: XXX Neither branch should be taken.
| exit status 0
make-2020.12.20.19.37.23

The error message about an unknown variable modifier gets line number
information:

make-2020.12.20.19.47.34
| make: ".../later.mk" line 6: Unknown modifier 's'
| make: ".../later.mk" line 9: warning: XXX Neither branch should be taken.
| make: ".../later.mk" line 14: Unknown modifier 's'
| make: ".../later.mk" line 15: warning: XXX Neither branch should be taken.
| make: Fatal errors encountered -- cannot continue
| make: stopped in ...
| exit status 1
make-2021.02.23.15.07.58

The error message about an unknown variable modifier gets more context
than only a single letter:

make-2021.02.23.15.19.41
| make: ".../later.mk" line 6: Unknown modifier "s,value,replaced,"
| make: ".../later.mk" line 9: warning: XXX Neither branch should be taken.
| make: ".../later.mk" line 14: Unknown modifier "s,value,replaced,"
| make: ".../later.mk" line 15: warning: XXX Neither branch should be taken.
| make: Fatal errors encountered -- cannot continue
| make: stopped in ...
| exit status 1


Revision tags: cjep_sun2x-base1 cjep_sun2x-base cjep_staticlib_x-base1 cjep_staticlib_x-base
# 1.11 01-Jan-2021 sjg

var-op-expand needs MAKE.SAVE_DOLLARS=yes


# 1.10 28-Dec-2020 rillig

make(1): extend test for modifier parts in ':=' assignments


# 1.9 27-Dec-2020 rillig

make(1): add test for modifier parts in ':=' assignments


# 1.8 27-Dec-2020 rillig

make(1): fix edge case in := with undefined in variable name

Previously, the assignment "VAR${UNDEF} := value" actually assigned to 2
variables. See var-op-expand.mk for details.


# 1.7 27-Dec-2020 rillig

make(1): move test result of var-op-expand.mk from exp to mk

This makes it easier to run this test in older versions of make. Empty
output means success.


# 1.6 27-Dec-2020 rillig

make(1): add more tests for ':=' assignments


# 1.5 27-Dec-2020 rillig

make(1): add tests for variable assignments using the ':=' operator


# 1.4 08-Nov-2020 rillig

make(1): fix bug description of using := with undefined variable

In 1993, the variable names could not refer to other variables yet.
This has been made possible on 2000-05-11, when the "cool magic" was
added that allows assigning to VAR.${param}.


# 1.3 08-Nov-2020 rillig

make(1): add test for edge case in resolving undefined variables


# 1.2 16-Aug-2020 rillig

make(1): describe the purpose of each newly added unit test dummy


# 1.1 16-Aug-2020 rillig

make(1): add dummies for fine-grained tests, one per single feature

The test names have been derived from the current manual page.

All these tests are dummies right now, and the code from the existing
tests will be moved into the new tests step by step.

This is done to prevent modmisc, escape, varmod-edge and varmisc from
growing without any bounds, and to reduce the side-effects of one test
to the others.


# 1.18 01-Jun-2023 rillig

tests/make: force line-based diagnostics to be listed in the tests

This way, contradictions between the intended output and the actual
output are closer together and have a better chance of being spotted.


Revision tags: netbsd-10-base
# 1.17 08-Sep-2022 rillig

tests/make: extend tests for the ':=' assignment operator


# 1.16 28-Dec-2021 rillig

tests/make: use tabs instead of spaces for indentation


# 1.15 30-Nov-2021 rillig

tests/make: test and document .MAKE.SAVE_DOLLARS and ':='


# 1.14 20-Nov-2021 rillig

tests/make: finish a previously unfinished sentence in a comment


# 1.13 13-Nov-2021 rillig

tests/make: extend test for undefined variable in doubly indirect ':='

Just to prevent a half-baked fix to the current behavior that would
concatenate the modifiers of the two expressions, leading to
${LATER:value=sysv:tl} in this case. That expression would be
interpreted as having only a single modifier that would replace the
suffix 'value' with 'sysv:tl'. This is because the SysV modifier
':from=to' spans until the end of the expression.


# 1.12 13-Nov-2021 rillig

tests/make: test double indirection in ':=' with undefined variable

Reported by Simon J Gerraty via private mail.

This edge case has been handled in essentially the same way since at
least 2000-05-30, probably several years earlier as well. The test file
is:

---- snip ----
.undef LATER
.undef later
INDIRECT:= ${LATER:S,value,replaced,}
indirect:= ${INDIRECT:C,S,s,}
# expect+1: Unknown modifier "s,value,replaced,"
.if ${indirect} != ""
. error
.else
. warning XXX Neither branch should be taken.
.endif
LATER= uppercase-value
later= lowercase-value
# expect+1: Unknown modifier "s,value,replaced,"
.if ${indirect} != "uppercase-replaced"
. warning XXX Neither branch should be taken.
.else
. error
.endif

all:
@:;
---- snap ----

The output from 'make -r -f later.mk' is:

make-2000.05.30.02.32.21
| make: Unknown modifier 's'
|
| "later.mk", line 9: Need an operator
| make: Unknown modifier 's'
|
| "later.mk", line 15: Need an operator
| Fatal errors encountered -- cannot continue
| exit status 1
make-2000.12.30.16.38.22

The pathnames in the error message gets absolute:

make-2001.01.23.02.48.05
| make: Unknown modifier 's'
|
| ".../later.mk", line 9: Need an operator
| make: Unknown modifier 's'
|
| ".../later.mk", line 15: Need an operator
| Fatal errors encountered -- cannot continue
| exit status 1
make-2001.01.23.02.48.05

All error messages get 'make:' as a common prefix:

make-2001.02.23.21.11.38
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 9: Need an operator
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 15: Need an operator
| make: Fatal errors encountered -- cannot continue
| exit status 1
make-2001.05.29.17.37.52

The 'stopped in' gets added:

make-2001.06.12.23.36.18
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 9: Need an operator
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 15: Need an operator
| make: Fatal errors encountered -- cannot continue
|
| make: stopped in ...
| exit status 1
make-2002.02.21.22.21.34

The empty lines between the error messages get removed.

make-2002.03.21.11.42.21
| make: Unknown modifier 's'
| make: ".../later.mk" line 9: Need an operator
| make: Unknown modifier 's'
| make: ".../later.mk" line 15: Need an operator
| make: Fatal errors encountered -- cannot continue
|
| make: stopped in ...
| exit status 1
make-2009.10.15.02.27.44

The error message for unknown directives gets more helpful:

make-2009.11.19.06.48.37
| make: Unknown modifier 's'
| make: ".../later.mk" line 9: Unknown directive
| make: Unknown modifier 's'
| make: ".../later.mk" line 15: Unknown directive
| make: Fatal errors encountered -- cannot continue
|
| make: stopped in ...
| exit status 1
make-2010.02.22.19.20.33

The directives '.error', '.warning' and '.info' get added:

make-2010.04.29.23.12.21
| make: Unknown modifier 's'
| make: ".../later.mk" line 9: warning: XXX Neither branch should be taken.
| make: Unknown modifier 's'
| make: ".../later.mk" line 15: warning: XXX Neither branch should be taken.
| exit status 0
make-2020.12.20.19.37.23

The error message about an unknown variable modifier gets line number
information:

make-2020.12.20.19.47.34
| make: ".../later.mk" line 6: Unknown modifier 's'
| make: ".../later.mk" line 9: warning: XXX Neither branch should be taken.
| make: ".../later.mk" line 14: Unknown modifier 's'
| make: ".../later.mk" line 15: warning: XXX Neither branch should be taken.
| make: Fatal errors encountered -- cannot continue
| make: stopped in ...
| exit status 1
make-2021.02.23.15.07.58

The error message about an unknown variable modifier gets more context
than only a single letter:

make-2021.02.23.15.19.41
| make: ".../later.mk" line 6: Unknown modifier "s,value,replaced,"
| make: ".../later.mk" line 9: warning: XXX Neither branch should be taken.
| make: ".../later.mk" line 14: Unknown modifier "s,value,replaced,"
| make: ".../later.mk" line 15: warning: XXX Neither branch should be taken.
| make: Fatal errors encountered -- cannot continue
| make: stopped in ...
| exit status 1


Revision tags: cjep_sun2x-base1 cjep_sun2x-base cjep_staticlib_x-base1 cjep_staticlib_x-base
# 1.11 01-Jan-2021 sjg

var-op-expand needs MAKE.SAVE_DOLLARS=yes


# 1.10 28-Dec-2020 rillig

make(1): extend test for modifier parts in ':=' assignments


# 1.9 27-Dec-2020 rillig

make(1): add test for modifier parts in ':=' assignments


# 1.8 27-Dec-2020 rillig

make(1): fix edge case in := with undefined in variable name

Previously, the assignment "VAR${UNDEF} := value" actually assigned to 2
variables. See var-op-expand.mk for details.


# 1.7 27-Dec-2020 rillig

make(1): move test result of var-op-expand.mk from exp to mk

This makes it easier to run this test in older versions of make. Empty
output means success.


# 1.6 27-Dec-2020 rillig

make(1): add more tests for ':=' assignments


# 1.5 27-Dec-2020 rillig

make(1): add tests for variable assignments using the ':=' operator


# 1.4 08-Nov-2020 rillig

make(1): fix bug description of using := with undefined variable

In 1993, the variable names could not refer to other variables yet.
This has been made possible on 2000-05-11, when the "cool magic" was
added that allows assigning to VAR.${param}.


# 1.3 08-Nov-2020 rillig

make(1): add test for edge case in resolving undefined variables


# 1.2 16-Aug-2020 rillig

make(1): describe the purpose of each newly added unit test dummy


# 1.1 16-Aug-2020 rillig

make(1): add dummies for fine-grained tests, one per single feature

The test names have been derived from the current manual page.

All these tests are dummies right now, and the code from the existing
tests will be moved into the new tests step by step.

This is done to prevent modmisc, escape, varmod-edge and varmisc from
growing without any bounds, and to reduce the side-effects of one test
to the others.


# 1.17 08-Sep-2022 rillig

tests/make: extend tests for the ':=' assignment operator


# 1.16 28-Dec-2021 rillig

tests/make: use tabs instead of spaces for indentation


# 1.15 30-Nov-2021 rillig

tests/make: test and document .MAKE.SAVE_DOLLARS and ':='


# 1.14 20-Nov-2021 rillig

tests/make: finish a previously unfinished sentence in a comment


# 1.13 13-Nov-2021 rillig

tests/make: extend test for undefined variable in doubly indirect ':='

Just to prevent a half-baked fix to the current behavior that would
concatenate the modifiers of the two expressions, leading to
${LATER:value=sysv:tl} in this case. That expression would be
interpreted as having only a single modifier that would replace the
suffix 'value' with 'sysv:tl'. This is because the SysV modifier
':from=to' spans until the end of the expression.


# 1.12 13-Nov-2021 rillig

tests/make: test double indirection in ':=' with undefined variable

Reported by Simon J Gerraty via private mail.

This edge case has been handled in essentially the same way since at
least 2000-05-30, probably several years earlier as well. The test file
is:

---- snip ----
.undef LATER
.undef later
INDIRECT:= ${LATER:S,value,replaced,}
indirect:= ${INDIRECT:C,S,s,}
# expect+1: Unknown modifier "s,value,replaced,"
.if ${indirect} != ""
. error
.else
. warning XXX Neither branch should be taken.
.endif
LATER= uppercase-value
later= lowercase-value
# expect+1: Unknown modifier "s,value,replaced,"
.if ${indirect} != "uppercase-replaced"
. warning XXX Neither branch should be taken.
.else
. error
.endif

all:
@:;
---- snap ----

The output from 'make -r -f later.mk' is:

make-2000.05.30.02.32.21
| make: Unknown modifier 's'
|
| "later.mk", line 9: Need an operator
| make: Unknown modifier 's'
|
| "later.mk", line 15: Need an operator
| Fatal errors encountered -- cannot continue
| exit status 1
make-2000.12.30.16.38.22

The pathnames in the error message gets absolute:

make-2001.01.23.02.48.05
| make: Unknown modifier 's'
|
| ".../later.mk", line 9: Need an operator
| make: Unknown modifier 's'
|
| ".../later.mk", line 15: Need an operator
| Fatal errors encountered -- cannot continue
| exit status 1
make-2001.01.23.02.48.05

All error messages get 'make:' as a common prefix:

make-2001.02.23.21.11.38
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 9: Need an operator
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 15: Need an operator
| make: Fatal errors encountered -- cannot continue
| exit status 1
make-2001.05.29.17.37.52

The 'stopped in' gets added:

make-2001.06.12.23.36.18
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 9: Need an operator
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 15: Need an operator
| make: Fatal errors encountered -- cannot continue
|
| make: stopped in ...
| exit status 1
make-2002.02.21.22.21.34

The empty lines between the error messages get removed.

make-2002.03.21.11.42.21
| make: Unknown modifier 's'
| make: ".../later.mk" line 9: Need an operator
| make: Unknown modifier 's'
| make: ".../later.mk" line 15: Need an operator
| make: Fatal errors encountered -- cannot continue
|
| make: stopped in ...
| exit status 1
make-2009.10.15.02.27.44

The error message for unknown directives gets more helpful:

make-2009.11.19.06.48.37
| make: Unknown modifier 's'
| make: ".../later.mk" line 9: Unknown directive
| make: Unknown modifier 's'
| make: ".../later.mk" line 15: Unknown directive
| make: Fatal errors encountered -- cannot continue
|
| make: stopped in ...
| exit status 1
make-2010.02.22.19.20.33

The directives '.error', '.warning' and '.info' get added:

make-2010.04.29.23.12.21
| make: Unknown modifier 's'
| make: ".../later.mk" line 9: warning: XXX Neither branch should be taken.
| make: Unknown modifier 's'
| make: ".../later.mk" line 15: warning: XXX Neither branch should be taken.
| exit status 0
make-2020.12.20.19.37.23

The error message about an unknown variable modifier gets line number
information:

make-2020.12.20.19.47.34
| make: ".../later.mk" line 6: Unknown modifier 's'
| make: ".../later.mk" line 9: warning: XXX Neither branch should be taken.
| make: ".../later.mk" line 14: Unknown modifier 's'
| make: ".../later.mk" line 15: warning: XXX Neither branch should be taken.
| make: Fatal errors encountered -- cannot continue
| make: stopped in ...
| exit status 1
make-2021.02.23.15.07.58

The error message about an unknown variable modifier gets more context
than only a single letter:

make-2021.02.23.15.19.41
| make: ".../later.mk" line 6: Unknown modifier "s,value,replaced,"
| make: ".../later.mk" line 9: warning: XXX Neither branch should be taken.
| make: ".../later.mk" line 14: Unknown modifier "s,value,replaced,"
| make: ".../later.mk" line 15: warning: XXX Neither branch should be taken.
| make: Fatal errors encountered -- cannot continue
| make: stopped in ...
| exit status 1


Revision tags: cjep_sun2x-base1 cjep_sun2x-base cjep_staticlib_x-base1 cjep_staticlib_x-base
# 1.11 01-Jan-2021 sjg

var-op-expand needs MAKE.SAVE_DOLLARS=yes


# 1.10 28-Dec-2020 rillig

make(1): extend test for modifier parts in ':=' assignments


# 1.9 27-Dec-2020 rillig

make(1): add test for modifier parts in ':=' assignments


# 1.8 27-Dec-2020 rillig

make(1): fix edge case in := with undefined in variable name

Previously, the assignment "VAR${UNDEF} := value" actually assigned to 2
variables. See var-op-expand.mk for details.


# 1.7 27-Dec-2020 rillig

make(1): move test result of var-op-expand.mk from exp to mk

This makes it easier to run this test in older versions of make. Empty
output means success.


# 1.6 27-Dec-2020 rillig

make(1): add more tests for ':=' assignments


# 1.5 27-Dec-2020 rillig

make(1): add tests for variable assignments using the ':=' operator


# 1.4 08-Nov-2020 rillig

make(1): fix bug description of using := with undefined variable

In 1993, the variable names could not refer to other variables yet.
This has been made possible on 2000-05-11, when the "cool magic" was
added that allows assigning to VAR.${param}.


# 1.3 08-Nov-2020 rillig

make(1): add test for edge case in resolving undefined variables


# 1.2 16-Aug-2020 rillig

make(1): describe the purpose of each newly added unit test dummy


# 1.1 16-Aug-2020 rillig

make(1): add dummies for fine-grained tests, one per single feature

The test names have been derived from the current manual page.

All these tests are dummies right now, and the code from the existing
tests will be moved into the new tests step by step.

This is done to prevent modmisc, escape, varmod-edge and varmisc from
growing without any bounds, and to reduce the side-effects of one test
to the others.


# 1.16 28-Dec-2021 rillig

tests/make: use tabs instead of spaces for indentation


# 1.15 30-Nov-2021 rillig

tests/make: test and document .MAKE.SAVE_DOLLARS and ':='


# 1.14 20-Nov-2021 rillig

tests/make: finish a previously unfinished sentence in a comment


# 1.13 13-Nov-2021 rillig

tests/make: extend test for undefined variable in doubly indirect ':='

Just to prevent a half-baked fix to the current behavior that would
concatenate the modifiers of the two expressions, leading to
${LATER:value=sysv:tl} in this case. That expression would be
interpreted as having only a single modifier that would replace the
suffix 'value' with 'sysv:tl'. This is because the SysV modifier
':from=to' spans until the end of the expression.


# 1.12 13-Nov-2021 rillig

tests/make: test double indirection in ':=' with undefined variable

Reported by Simon J Gerraty via private mail.

This edge case has been handled in essentially the same way since at
least 2000-05-30, probably several years earlier as well. The test file
is:

---- snip ----
.undef LATER
.undef later
INDIRECT:= ${LATER:S,value,replaced,}
indirect:= ${INDIRECT:C,S,s,}
# expect+1: Unknown modifier "s,value,replaced,"
.if ${indirect} != ""
. error
.else
. warning XXX Neither branch should be taken.
.endif
LATER= uppercase-value
later= lowercase-value
# expect+1: Unknown modifier "s,value,replaced,"
.if ${indirect} != "uppercase-replaced"
. warning XXX Neither branch should be taken.
.else
. error
.endif

all:
@:;
---- snap ----

The output from 'make -r -f later.mk' is:

make-2000.05.30.02.32.21
| make: Unknown modifier 's'
|
| "later.mk", line 9: Need an operator
| make: Unknown modifier 's'
|
| "later.mk", line 15: Need an operator
| Fatal errors encountered -- cannot continue
| exit status 1
make-2000.12.30.16.38.22

The pathnames in the error message gets absolute:

make-2001.01.23.02.48.05
| make: Unknown modifier 's'
|
| ".../later.mk", line 9: Need an operator
| make: Unknown modifier 's'
|
| ".../later.mk", line 15: Need an operator
| Fatal errors encountered -- cannot continue
| exit status 1
make-2001.01.23.02.48.05

All error messages get 'make:' as a common prefix:

make-2001.02.23.21.11.38
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 9: Need an operator
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 15: Need an operator
| make: Fatal errors encountered -- cannot continue
| exit status 1
make-2001.05.29.17.37.52

The 'stopped in' gets added:

make-2001.06.12.23.36.18
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 9: Need an operator
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 15: Need an operator
| make: Fatal errors encountered -- cannot continue
|
| make: stopped in ...
| exit status 1
make-2002.02.21.22.21.34

The empty lines between the error messages get removed.

make-2002.03.21.11.42.21
| make: Unknown modifier 's'
| make: ".../later.mk" line 9: Need an operator
| make: Unknown modifier 's'
| make: ".../later.mk" line 15: Need an operator
| make: Fatal errors encountered -- cannot continue
|
| make: stopped in ...
| exit status 1
make-2009.10.15.02.27.44

The error message for unknown directives gets more helpful:

make-2009.11.19.06.48.37
| make: Unknown modifier 's'
| make: ".../later.mk" line 9: Unknown directive
| make: Unknown modifier 's'
| make: ".../later.mk" line 15: Unknown directive
| make: Fatal errors encountered -- cannot continue
|
| make: stopped in ...
| exit status 1
make-2010.02.22.19.20.33

The directives '.error', '.warning' and '.info' get added:

make-2010.04.29.23.12.21
| make: Unknown modifier 's'
| make: ".../later.mk" line 9: warning: XXX Neither branch should be taken.
| make: Unknown modifier 's'
| make: ".../later.mk" line 15: warning: XXX Neither branch should be taken.
| exit status 0
make-2020.12.20.19.37.23

The error message about an unknown variable modifier gets line number
information:

make-2020.12.20.19.47.34
| make: ".../later.mk" line 6: Unknown modifier 's'
| make: ".../later.mk" line 9: warning: XXX Neither branch should be taken.
| make: ".../later.mk" line 14: Unknown modifier 's'
| make: ".../later.mk" line 15: warning: XXX Neither branch should be taken.
| make: Fatal errors encountered -- cannot continue
| make: stopped in ...
| exit status 1
make-2021.02.23.15.07.58

The error message about an unknown variable modifier gets more context
than only a single letter:

make-2021.02.23.15.19.41
| make: ".../later.mk" line 6: Unknown modifier "s,value,replaced,"
| make: ".../later.mk" line 9: warning: XXX Neither branch should be taken.
| make: ".../later.mk" line 14: Unknown modifier "s,value,replaced,"
| make: ".../later.mk" line 15: warning: XXX Neither branch should be taken.
| make: Fatal errors encountered -- cannot continue
| make: stopped in ...
| exit status 1


Revision tags: cjep_sun2x-base1 cjep_sun2x-base cjep_staticlib_x-base1 cjep_staticlib_x-base
# 1.11 01-Jan-2021 sjg

var-op-expand needs MAKE.SAVE_DOLLARS=yes


# 1.10 28-Dec-2020 rillig

make(1): extend test for modifier parts in ':=' assignments


# 1.9 27-Dec-2020 rillig

make(1): add test for modifier parts in ':=' assignments


# 1.8 27-Dec-2020 rillig

make(1): fix edge case in := with undefined in variable name

Previously, the assignment "VAR${UNDEF} := value" actually assigned to 2
variables. See var-op-expand.mk for details.


# 1.7 27-Dec-2020 rillig

make(1): move test result of var-op-expand.mk from exp to mk

This makes it easier to run this test in older versions of make. Empty
output means success.


# 1.6 27-Dec-2020 rillig

make(1): add more tests for ':=' assignments


# 1.5 27-Dec-2020 rillig

make(1): add tests for variable assignments using the ':=' operator


# 1.4 08-Nov-2020 rillig

make(1): fix bug description of using := with undefined variable

In 1993, the variable names could not refer to other variables yet.
This has been made possible on 2000-05-11, when the "cool magic" was
added that allows assigning to VAR.${param}.


# 1.3 08-Nov-2020 rillig

make(1): add test for edge case in resolving undefined variables


# 1.2 16-Aug-2020 rillig

make(1): describe the purpose of each newly added unit test dummy


# 1.1 16-Aug-2020 rillig

make(1): add dummies for fine-grained tests, one per single feature

The test names have been derived from the current manual page.

All these tests are dummies right now, and the code from the existing
tests will be moved into the new tests step by step.

This is done to prevent modmisc, escape, varmod-edge and varmisc from
growing without any bounds, and to reduce the side-effects of one test
to the others.


# 1.15 30-Nov-2021 rillig

tests/make: test and document .MAKE.SAVE_DOLLARS and ':='


# 1.14 20-Nov-2021 rillig

tests/make: finish a previously unfinished sentence in a comment


# 1.13 13-Nov-2021 rillig

tests/make: extend test for undefined variable in doubly indirect ':='

Just to prevent a half-baked fix to the current behavior that would
concatenate the modifiers of the two expressions, leading to
${LATER:value=sysv:tl} in this case. That expression would be
interpreted as having only a single modifier that would replace the
suffix 'value' with 'sysv:tl'. This is because the SysV modifier
':from=to' spans until the end of the expression.


# 1.12 13-Nov-2021 rillig

tests/make: test double indirection in ':=' with undefined variable

Reported by Simon J Gerraty via private mail.

This edge case has been handled in essentially the same way since at
least 2000-05-30, probably several years earlier as well. The test file
is:

---- snip ----
.undef LATER
.undef later
INDIRECT:= ${LATER:S,value,replaced,}
indirect:= ${INDIRECT:C,S,s,}
# expect+1: Unknown modifier "s,value,replaced,"
.if ${indirect} != ""
. error
.else
. warning XXX Neither branch should be taken.
.endif
LATER= uppercase-value
later= lowercase-value
# expect+1: Unknown modifier "s,value,replaced,"
.if ${indirect} != "uppercase-replaced"
. warning XXX Neither branch should be taken.
.else
. error
.endif

all:
@:;
---- snap ----

The output from 'make -r -f later.mk' is:

make-2000.05.30.02.32.21
| make: Unknown modifier 's'
|
| "later.mk", line 9: Need an operator
| make: Unknown modifier 's'
|
| "later.mk", line 15: Need an operator
| Fatal errors encountered -- cannot continue
| exit status 1
make-2000.12.30.16.38.22

The pathnames in the error message gets absolute:

make-2001.01.23.02.48.05
| make: Unknown modifier 's'
|
| ".../later.mk", line 9: Need an operator
| make: Unknown modifier 's'
|
| ".../later.mk", line 15: Need an operator
| Fatal errors encountered -- cannot continue
| exit status 1
make-2001.01.23.02.48.05

All error messages get 'make:' as a common prefix:

make-2001.02.23.21.11.38
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 9: Need an operator
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 15: Need an operator
| make: Fatal errors encountered -- cannot continue
| exit status 1
make-2001.05.29.17.37.52

The 'stopped in' gets added:

make-2001.06.12.23.36.18
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 9: Need an operator
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 15: Need an operator
| make: Fatal errors encountered -- cannot continue
|
| make: stopped in ...
| exit status 1
make-2002.02.21.22.21.34

The empty lines between the error messages get removed.

make-2002.03.21.11.42.21
| make: Unknown modifier 's'
| make: ".../later.mk" line 9: Need an operator
| make: Unknown modifier 's'
| make: ".../later.mk" line 15: Need an operator
| make: Fatal errors encountered -- cannot continue
|
| make: stopped in ...
| exit status 1
make-2009.10.15.02.27.44

The error message for unknown directives gets more helpful:

make-2009.11.19.06.48.37
| make: Unknown modifier 's'
| make: ".../later.mk" line 9: Unknown directive
| make: Unknown modifier 's'
| make: ".../later.mk" line 15: Unknown directive
| make: Fatal errors encountered -- cannot continue
|
| make: stopped in ...
| exit status 1
make-2010.02.22.19.20.33

The directives '.error', '.warning' and '.info' get added:

make-2010.04.29.23.12.21
| make: Unknown modifier 's'
| make: ".../later.mk" line 9: warning: XXX Neither branch should be taken.
| make: Unknown modifier 's'
| make: ".../later.mk" line 15: warning: XXX Neither branch should be taken.
| exit status 0
make-2020.12.20.19.37.23

The error message about an unknown variable modifier gets line number
information:

make-2020.12.20.19.47.34
| make: ".../later.mk" line 6: Unknown modifier 's'
| make: ".../later.mk" line 9: warning: XXX Neither branch should be taken.
| make: ".../later.mk" line 14: Unknown modifier 's'
| make: ".../later.mk" line 15: warning: XXX Neither branch should be taken.
| make: Fatal errors encountered -- cannot continue
| make: stopped in ...
| exit status 1
make-2021.02.23.15.07.58

The error message about an unknown variable modifier gets more context
than only a single letter:

make-2021.02.23.15.19.41
| make: ".../later.mk" line 6: Unknown modifier "s,value,replaced,"
| make: ".../later.mk" line 9: warning: XXX Neither branch should be taken.
| make: ".../later.mk" line 14: Unknown modifier "s,value,replaced,"
| make: ".../later.mk" line 15: warning: XXX Neither branch should be taken.
| make: Fatal errors encountered -- cannot continue
| make: stopped in ...
| exit status 1


Revision tags: cjep_sun2x-base1 cjep_sun2x-base cjep_staticlib_x-base1 cjep_staticlib_x-base
# 1.11 01-Jan-2021 sjg

var-op-expand needs MAKE.SAVE_DOLLARS=yes


# 1.10 28-Dec-2020 rillig

make(1): extend test for modifier parts in ':=' assignments


# 1.9 27-Dec-2020 rillig

make(1): add test for modifier parts in ':=' assignments


# 1.8 27-Dec-2020 rillig

make(1): fix edge case in := with undefined in variable name

Previously, the assignment "VAR${UNDEF} := value" actually assigned to 2
variables. See var-op-expand.mk for details.


# 1.7 27-Dec-2020 rillig

make(1): move test result of var-op-expand.mk from exp to mk

This makes it easier to run this test in older versions of make. Empty
output means success.


# 1.6 27-Dec-2020 rillig

make(1): add more tests for ':=' assignments


# 1.5 27-Dec-2020 rillig

make(1): add tests for variable assignments using the ':=' operator


# 1.4 08-Nov-2020 rillig

make(1): fix bug description of using := with undefined variable

In 1993, the variable names could not refer to other variables yet.
This has been made possible on 2000-05-11, when the "cool magic" was
added that allows assigning to VAR.${param}.


# 1.3 08-Nov-2020 rillig

make(1): add test for edge case in resolving undefined variables


# 1.2 16-Aug-2020 rillig

make(1): describe the purpose of each newly added unit test dummy


# 1.1 16-Aug-2020 rillig

make(1): add dummies for fine-grained tests, one per single feature

The test names have been derived from the current manual page.

All these tests are dummies right now, and the code from the existing
tests will be moved into the new tests step by step.

This is done to prevent modmisc, escape, varmod-edge and varmisc from
growing without any bounds, and to reduce the side-effects of one test
to the others.


# 1.14 20-Nov-2021 rillig

tests/make: finish a previously unfinished sentence in a comment


# 1.13 13-Nov-2021 rillig

tests/make: extend test for undefined variable in doubly indirect ':='

Just to prevent a half-baked fix to the current behavior that would
concatenate the modifiers of the two expressions, leading to
${LATER:value=sysv:tl} in this case. That expression would be
interpreted as having only a single modifier that would replace the
suffix 'value' with 'sysv:tl'. This is because the SysV modifier
':from=to' spans until the end of the expression.


# 1.12 13-Nov-2021 rillig

tests/make: test double indirection in ':=' with undefined variable

Reported by Simon J Gerraty via private mail.

This edge case has been handled in essentially the same way since at
least 2000-05-30, probably several years earlier as well. The test file
is:

---- snip ----
.undef LATER
.undef later
INDIRECT:= ${LATER:S,value,replaced,}
indirect:= ${INDIRECT:C,S,s,}
# expect+1: Unknown modifier "s,value,replaced,"
.if ${indirect} != ""
. error
.else
. warning XXX Neither branch should be taken.
.endif
LATER= uppercase-value
later= lowercase-value
# expect+1: Unknown modifier "s,value,replaced,"
.if ${indirect} != "uppercase-replaced"
. warning XXX Neither branch should be taken.
.else
. error
.endif

all:
@:;
---- snap ----

The output from 'make -r -f later.mk' is:

make-2000.05.30.02.32.21
| make: Unknown modifier 's'
|
| "later.mk", line 9: Need an operator
| make: Unknown modifier 's'
|
| "later.mk", line 15: Need an operator
| Fatal errors encountered -- cannot continue
| exit status 1
make-2000.12.30.16.38.22

The pathnames in the error message gets absolute:

make-2001.01.23.02.48.05
| make: Unknown modifier 's'
|
| ".../later.mk", line 9: Need an operator
| make: Unknown modifier 's'
|
| ".../later.mk", line 15: Need an operator
| Fatal errors encountered -- cannot continue
| exit status 1
make-2001.01.23.02.48.05

All error messages get 'make:' as a common prefix:

make-2001.02.23.21.11.38
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 9: Need an operator
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 15: Need an operator
| make: Fatal errors encountered -- cannot continue
| exit status 1
make-2001.05.29.17.37.52

The 'stopped in' gets added:

make-2001.06.12.23.36.18
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 9: Need an operator
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 15: Need an operator
| make: Fatal errors encountered -- cannot continue
|
| make: stopped in ...
| exit status 1
make-2002.02.21.22.21.34

The empty lines between the error messages get removed.

make-2002.03.21.11.42.21
| make: Unknown modifier 's'
| make: ".../later.mk" line 9: Need an operator
| make: Unknown modifier 's'
| make: ".../later.mk" line 15: Need an operator
| make: Fatal errors encountered -- cannot continue
|
| make: stopped in ...
| exit status 1
make-2009.10.15.02.27.44

The error message for unknown directives gets more helpful:

make-2009.11.19.06.48.37
| make: Unknown modifier 's'
| make: ".../later.mk" line 9: Unknown directive
| make: Unknown modifier 's'
| make: ".../later.mk" line 15: Unknown directive
| make: Fatal errors encountered -- cannot continue
|
| make: stopped in ...
| exit status 1
make-2010.02.22.19.20.33

The directives '.error', '.warning' and '.info' get added:

make-2010.04.29.23.12.21
| make: Unknown modifier 's'
| make: ".../later.mk" line 9: warning: XXX Neither branch should be taken.
| make: Unknown modifier 's'
| make: ".../later.mk" line 15: warning: XXX Neither branch should be taken.
| exit status 0
make-2020.12.20.19.37.23

The error message about an unknown variable modifier gets line number
information:

make-2020.12.20.19.47.34
| make: ".../later.mk" line 6: Unknown modifier 's'
| make: ".../later.mk" line 9: warning: XXX Neither branch should be taken.
| make: ".../later.mk" line 14: Unknown modifier 's'
| make: ".../later.mk" line 15: warning: XXX Neither branch should be taken.
| make: Fatal errors encountered -- cannot continue
| make: stopped in ...
| exit status 1
make-2021.02.23.15.07.58

The error message about an unknown variable modifier gets more context
than only a single letter:

make-2021.02.23.15.19.41
| make: ".../later.mk" line 6: Unknown modifier "s,value,replaced,"
| make: ".../later.mk" line 9: warning: XXX Neither branch should be taken.
| make: ".../later.mk" line 14: Unknown modifier "s,value,replaced,"
| make: ".../later.mk" line 15: warning: XXX Neither branch should be taken.
| make: Fatal errors encountered -- cannot continue
| make: stopped in ...
| exit status 1


Revision tags: cjep_sun2x-base1 cjep_sun2x-base cjep_staticlib_x-base1 cjep_staticlib_x-base
# 1.11 01-Jan-2021 sjg

var-op-expand needs MAKE.SAVE_DOLLARS=yes


# 1.10 28-Dec-2020 rillig

make(1): extend test for modifier parts in ':=' assignments


# 1.9 27-Dec-2020 rillig

make(1): add test for modifier parts in ':=' assignments


# 1.8 27-Dec-2020 rillig

make(1): fix edge case in := with undefined in variable name

Previously, the assignment "VAR${UNDEF} := value" actually assigned to 2
variables. See var-op-expand.mk for details.


# 1.7 27-Dec-2020 rillig

make(1): move test result of var-op-expand.mk from exp to mk

This makes it easier to run this test in older versions of make. Empty
output means success.


# 1.6 27-Dec-2020 rillig

make(1): add more tests for ':=' assignments


# 1.5 27-Dec-2020 rillig

make(1): add tests for variable assignments using the ':=' operator


# 1.4 08-Nov-2020 rillig

make(1): fix bug description of using := with undefined variable

In 1993, the variable names could not refer to other variables yet.
This has been made possible on 2000-05-11, when the "cool magic" was
added that allows assigning to VAR.${param}.


# 1.3 08-Nov-2020 rillig

make(1): add test for edge case in resolving undefined variables


# 1.2 16-Aug-2020 rillig

make(1): describe the purpose of each newly added unit test dummy


# 1.1 16-Aug-2020 rillig

make(1): add dummies for fine-grained tests, one per single feature

The test names have been derived from the current manual page.

All these tests are dummies right now, and the code from the existing
tests will be moved into the new tests step by step.

This is done to prevent modmisc, escape, varmod-edge and varmisc from
growing without any bounds, and to reduce the side-effects of one test
to the others.


# 1.13 13-Nov-2021 rillig

tests/make: extend test for undefined variable in doubly indirect ':='

Just to prevent a half-baked fix to the current behavior that would
concatenate the modifiers of the two expressions, leading to
${LATER:value=sysv:tl} in this case. That expression would be
interpreted as having only a single modifier that would replace the
suffix 'value' with 'sysv:tl'. This is because the SysV modifier
':from=to' spans until the end of the expression.


# 1.12 13-Nov-2021 rillig

tests/make: test double indirection in ':=' with undefined variable

Reported by Simon J Gerraty via private mail.

This edge case has been handled in essentially the same way since at
least 2000-05-30, probably several years earlier as well. The test file
is:

---- snip ----
.undef LATER
.undef later
INDIRECT:= ${LATER:S,value,replaced,}
indirect:= ${INDIRECT:C,S,s,}
# expect+1: Unknown modifier "s,value,replaced,"
.if ${indirect} != ""
. error
.else
. warning XXX Neither branch should be taken.
.endif
LATER= uppercase-value
later= lowercase-value
# expect+1: Unknown modifier "s,value,replaced,"
.if ${indirect} != "uppercase-replaced"
. warning XXX Neither branch should be taken.
.else
. error
.endif

all:
@:;
---- snap ----

The output from 'make -r -f later.mk' is:

make-2000.05.30.02.32.21
| make: Unknown modifier 's'
|
| "later.mk", line 9: Need an operator
| make: Unknown modifier 's'
|
| "later.mk", line 15: Need an operator
| Fatal errors encountered -- cannot continue
| exit status 1
make-2000.12.30.16.38.22

The pathnames in the error message gets absolute:

make-2001.01.23.02.48.05
| make: Unknown modifier 's'
|
| ".../later.mk", line 9: Need an operator
| make: Unknown modifier 's'
|
| ".../later.mk", line 15: Need an operator
| Fatal errors encountered -- cannot continue
| exit status 1
make-2001.01.23.02.48.05

All error messages get 'make:' as a common prefix:

make-2001.02.23.21.11.38
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 9: Need an operator
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 15: Need an operator
| make: Fatal errors encountered -- cannot continue
| exit status 1
make-2001.05.29.17.37.52

The 'stopped in' gets added:

make-2001.06.12.23.36.18
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 9: Need an operator
| make: Unknown modifier 's'
|
| make: ".../later.mk" line 15: Need an operator
| make: Fatal errors encountered -- cannot continue
|
| make: stopped in ...
| exit status 1
make-2002.02.21.22.21.34

The empty lines between the error messages get removed.

make-2002.03.21.11.42.21
| make: Unknown modifier 's'
| make: ".../later.mk" line 9: Need an operator
| make: Unknown modifier 's'
| make: ".../later.mk" line 15: Need an operator
| make: Fatal errors encountered -- cannot continue
|
| make: stopped in ...
| exit status 1
make-2009.10.15.02.27.44

The error message for unknown directives gets more helpful:

make-2009.11.19.06.48.37
| make: Unknown modifier 's'
| make: ".../later.mk" line 9: Unknown directive
| make: Unknown modifier 's'
| make: ".../later.mk" line 15: Unknown directive
| make: Fatal errors encountered -- cannot continue
|
| make: stopped in ...
| exit status 1
make-2010.02.22.19.20.33

The directives '.error', '.warning' and '.info' get added:

make-2010.04.29.23.12.21
| make: Unknown modifier 's'
| make: ".../later.mk" line 9: warning: XXX Neither branch should be taken.
| make: Unknown modifier 's'
| make: ".../later.mk" line 15: warning: XXX Neither branch should be taken.
| exit status 0
make-2020.12.20.19.37.23

The error message about an unknown variable modifier gets line number
information:

make-2020.12.20.19.47.34
| make: ".../later.mk" line 6: Unknown modifier 's'
| make: ".../later.mk" line 9: warning: XXX Neither branch should be taken.
| make: ".../later.mk" line 14: Unknown modifier 's'
| make: ".../later.mk" line 15: warning: XXX Neither branch should be taken.
| make: Fatal errors encountered -- cannot continue
| make: stopped in ...
| exit status 1
make-2021.02.23.15.07.58

The error message about an unknown variable modifier gets more context
than only a single letter:

make-2021.02.23.15.19.41
| make: ".../later.mk" line 6: Unknown modifier "s,value,replaced,"
| make: ".../later.mk" line 9: warning: XXX Neither branch should be taken.
| make: ".../later.mk" line 14: Unknown modifier "s,value,replaced,"
| make: ".../later.mk" line 15: warning: XXX Neither branch should be taken.
| make: Fatal errors encountered -- cannot continue
| make: stopped in ...
| exit status 1


Revision tags: cjep_sun2x-base1 cjep_sun2x-base cjep_staticlib_x-base1 cjep_staticlib_x-base
# 1.11 01-Jan-2021 sjg

var-op-expand needs MAKE.SAVE_DOLLARS=yes


# 1.10 28-Dec-2020 rillig

make(1): extend test for modifier parts in ':=' assignments


# 1.9 27-Dec-2020 rillig

make(1): add test for modifier parts in ':=' assignments


# 1.8 27-Dec-2020 rillig

make(1): fix edge case in := with undefined in variable name

Previously, the assignment "VAR${UNDEF} := value" actually assigned to 2
variables. See var-op-expand.mk for details.


# 1.7 27-Dec-2020 rillig

make(1): move test result of var-op-expand.mk from exp to mk

This makes it easier to run this test in older versions of make. Empty
output means success.


# 1.6 27-Dec-2020 rillig

make(1): add more tests for ':=' assignments


# 1.5 27-Dec-2020 rillig

make(1): add tests for variable assignments using the ':=' operator


# 1.4 08-Nov-2020 rillig

make(1): fix bug description of using := with undefined variable

In 1993, the variable names could not refer to other variables yet.
This has been made possible on 2000-05-11, when the "cool magic" was
added that allows assigning to VAR.${param}.


# 1.3 08-Nov-2020 rillig

make(1): add test for edge case in resolving undefined variables


# 1.2 16-Aug-2020 rillig

make(1): describe the purpose of each newly added unit test dummy


# 1.1 16-Aug-2020 rillig

make(1): add dummies for fine-grained tests, one per single feature

The test names have been derived from the current manual page.

All these tests are dummies right now, and the code from the existing
tests will be moved into the new tests step by step.

This is done to prevent modmisc, escape, varmod-edge and varmisc from
growing without any bounds, and to reduce the side-effects of one test
to the others.


# 1.11 01-Jan-2021 sjg

var-op-expand needs MAKE.SAVE_DOLLARS=yes


# 1.10 28-Dec-2020 rillig

make(1): extend test for modifier parts in ':=' assignments


# 1.9 27-Dec-2020 rillig

make(1): add test for modifier parts in ':=' assignments


# 1.8 27-Dec-2020 rillig

make(1): fix edge case in := with undefined in variable name

Previously, the assignment "VAR${UNDEF} := value" actually assigned to 2
variables. See var-op-expand.mk for details.


# 1.7 27-Dec-2020 rillig

make(1): move test result of var-op-expand.mk from exp to mk

This makes it easier to run this test in older versions of make. Empty
output means success.


# 1.6 27-Dec-2020 rillig

make(1): add more tests for ':=' assignments


# 1.5 27-Dec-2020 rillig

make(1): add tests for variable assignments using the ':=' operator


# 1.4 08-Nov-2020 rillig

make(1): fix bug description of using := with undefined variable

In 1993, the variable names could not refer to other variables yet.
This has been made possible on 2000-05-11, when the "cool magic" was
added that allows assigning to VAR.${param}.


# 1.3 08-Nov-2020 rillig

make(1): add test for edge case in resolving undefined variables


# 1.2 16-Aug-2020 rillig

make(1): describe the purpose of each newly added unit test dummy


# 1.1 16-Aug-2020 rillig

make(1): add dummies for fine-grained tests, one per single feature

The test names have been derived from the current manual page.

All these tests are dummies right now, and the code from the existing
tests will be moved into the new tests step by step.

This is done to prevent modmisc, escape, varmod-edge and varmisc from
growing without any bounds, and to reduce the side-effects of one test
to the others.


# 1.10 28-Dec-2020 rillig

make(1): extend test for modifier parts in ':=' assignments


# 1.9 27-Dec-2020 rillig

make(1): add test for modifier parts in ':=' assignments


# 1.8 27-Dec-2020 rillig

make(1): fix edge case in := with undefined in variable name

Previously, the assignment "VAR${UNDEF} := value" actually assigned to 2
variables. See var-op-expand.mk for details.


# 1.7 27-Dec-2020 rillig

make(1): move test result of var-op-expand.mk from exp to mk

This makes it easier to run this test in older versions of make. Empty
output means success.


# 1.6 27-Dec-2020 rillig

make(1): add more tests for ':=' assignments


# 1.5 27-Dec-2020 rillig

make(1): add tests for variable assignments using the ':=' operator


# 1.4 08-Nov-2020 rillig

make(1): fix bug description of using := with undefined variable

In 1993, the variable names could not refer to other variables yet.
This has been made possible on 2000-05-11, when the "cool magic" was
added that allows assigning to VAR.${param}.


# 1.3 08-Nov-2020 rillig

make(1): add test for edge case in resolving undefined variables


# 1.2 16-Aug-2020 rillig

make(1): describe the purpose of each newly added unit test dummy


# 1.1 16-Aug-2020 rillig

make(1): add dummies for fine-grained tests, one per single feature

The test names have been derived from the current manual page.

All these tests are dummies right now, and the code from the existing
tests will be moved into the new tests step by step.

This is done to prevent modmisc, escape, varmod-edge and varmisc from
growing without any bounds, and to reduce the side-effects of one test
to the others.


# 1.4 08-Nov-2020 rillig

make(1): fix bug description of using := with undefined variable

In 1993, the variable names could not refer to other variables yet.
This has been made possible on 2000-05-11, when the "cool magic" was
added that allows assigning to VAR.${param}.


# 1.3 08-Nov-2020 rillig

make(1): add test for edge case in resolving undefined variables


# 1.2 16-Aug-2020 rillig

make(1): describe the purpose of each newly added unit test dummy


# 1.1 16-Aug-2020 rillig

make(1): add dummies for fine-grained tests, one per single feature

The test names have been derived from the current manual page.

All these tests are dummies right now, and the code from the existing
tests will be moved into the new tests step by step.

This is done to prevent modmisc, escape, varmod-edge and varmisc from
growing without any bounds, and to reduce the side-effects of one test
to the others.