aboutsummaryrefslogtreecommitdiff
path: root/contrib/bmake/unit-tests/varmod-l-name-to-value.mk
blob: e87e6896754400b0ee2f56992b3ecb260f565dd7 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# $NetBSD: varmod-l-name-to-value.mk,v 1.8 2023/11/19 21:47:52 rillig Exp $
#
# Tests for the :L modifier, which returns the variable name as the new value.

# The empty variable name leads to an empty string.
.if ${:L} != ""
.  error
.endif

# The variable name is converted into an expression with the variable name
# "VARNAME" and the value "VARNAME".
.if ${VARNAME:L} != "VARNAME"
.  error
.endif

# The value of the expression can be modified afterwards.
.if ${VARNAME:L:S,VAR,,} != "NAME"
.  error
.endif

# The name of the expression is still the same as before. Using the :L
# modifier, it can be restored.
#
# Hmmm, this can be used as a double storage or a backup mechanism.
# Probably unintended, but maybe useful.
.if ${VARNAME:L:S,VAR,,:L} != "VARNAME"
.  error
.endif

# Between 2020-09-22 (var.c 1.527) and 2020-09-30 (var.c 1.553), there was
# a bug in the evaluation of expressions.  Indirect modifiers like
# the below :L did not update the definedness of the enclosing expression.
# This resulted in a wrong "Malformed conditional".
.if ${value:${:UL}} == ""
.endif

# As of 2020-10-02, the :L modifier does not ensure that it is followed by
# a delimiter, that is, a ':' or endc.  Neither does the :P modifier.
.if ${value:LLLLLLPL} != "value"
.  error
.endif

all:
	@:;