Sun Jul 19 20:49:45 2020 UTC ()
make(1): add tests for the ::= modifiers


(rillig)
diff -r1.18 -r1.19 src/usr.bin/make/unit-tests/modmisc.exp
diff -r1.15 -r1.16 src/usr.bin/make/unit-tests/modmisc.mk

cvs diff -r1.18 -r1.19 src/usr.bin/make/unit-tests/modmisc.exp (expand / switch to unified diff)

--- src/usr.bin/make/unit-tests/modmisc.exp 2020/07/19 19:36:20 1.18
+++ src/usr.bin/make/unit-tests/modmisc.exp 2020/07/19 20:49:44 1.19
@@ -60,14 +60,22 @@ mod-C-limits:11-missing:1 6 @@ -60,14 +60,22 @@ mod-C-limits:11-missing:1 6
60mod-C-limits:11-ok:1 22 446 60mod-C-limits:11-ok:1 22 446
61make: No subexpression \2 61make: No subexpression \2
62make: No subexpression \2 62make: No subexpression \2
63make: No subexpression \2 63make: No subexpression \2
64make: No subexpression \2 64make: No subexpression \2
65mod-C-limits:22-missing:1 6 65mod-C-limits:22-missing:1 6
66make: No subexpression \2 66make: No subexpression \2
67make: No subexpression \2 67make: No subexpression \2
68make: No subexpression \2 68make: No subexpression \2
69make: No subexpression \2 69make: No subexpression \2
70mod-C-limits:22-missing:1 6 70mod-C-limits:22-missing:1 6
71mod-C-limits:22-ok:1 33 556 71mod-C-limits:22-ok:1 33 556
72mod-C-limits:capture:ihgfedcbaabcdefghijABCDEFGHIJa0a1a2rest 72mod-C-limits:capture:ihgfedcbaabcdefghijABCDEFGHIJa0a1a2rest
 73mod-assign: first=1.
 74mod-assign: last=3.
 75mod-assign: appended=1 2 3.
 761
 772
 783
 79mod-assign: ran:3.
 80mod-assign: global: 1, 3, 1 2 3, 3.
73exit status 0 81exit status 0

cvs diff -r1.15 -r1.16 src/usr.bin/make/unit-tests/modmisc.mk (expand / switch to unified diff)

--- src/usr.bin/make/unit-tests/modmisc.mk 2020/07/19 19:36:20 1.15
+++ src/usr.bin/make/unit-tests/modmisc.mk 2020/07/19 20:49:44 1.16
@@ -1,34 +1,35 @@ @@ -1,34 +1,35 @@
1# $Id: modmisc.mk,v 1.15 2020/07/19 19:36:20 rillig Exp $ 1# $Id: modmisc.mk,v 1.16 2020/07/19 20:49:44 rillig Exp $
2# 2#
3# miscellaneous modifier tests 3# miscellaneous modifier tests
4 4
5# do not put any dirs in this list which exist on some 5# do not put any dirs in this list which exist on some
6# but not all target systems - an exists() check is below. 6# but not all target systems - an exists() check is below.
7path=:/bin:/tmp::/:.:/no/such/dir:. 7path=:/bin:/tmp::/:.:/no/such/dir:.
8# strip cwd from path. 8# strip cwd from path.
9MOD_NODOT=S/:/ /g:N.:ts: 9MOD_NODOT=S/:/ /g:N.:ts:
10# and decorate, note that $'s need to be doubled. Also note that  10# and decorate, note that $'s need to be doubled. Also note that
11# the modifier_variable can be used with other modifiers. 11# the modifier_variable can be used with other modifiers.
12MOD_NODOTX=S/:/ /g:N.:@d@'$$d'@ 12MOD_NODOTX=S/:/ /g:N.:@d@'$$d'@
13# another mod - pretend it is more interesting 13# another mod - pretend it is more interesting
14MOD_HOMES=S,/home/,/homes/, 14MOD_HOMES=S,/home/,/homes/,
15MOD_OPT=@d@$${exists($$d):?$$d:$${d:S,/usr,/opt,}}@ 15MOD_OPT=@d@$${exists($$d):?$$d:$${d:S,/usr,/opt,}}@
16MOD_SEP=S,:, ,g 16MOD_SEP=S,:, ,g
17 17
18all: modvar modvarloop modsysv mod-HTE emptyvar undefvar 18all: modvar modvarloop modsysv mod-HTE emptyvar undefvar
19all: mod-S mod-C mod-at-varname mod-at-resolve mod-at-dollar 19all: mod-S mod-C mod-at-varname mod-at-resolve mod-at-dollar
20all: mod-subst-dollar mod-loop-dollar 20all: mod-subst-dollar mod-loop-dollar
21all: mod-C-limits 21all: mod-C-limits
 22all: mod-assign
22 23
23modsysv: 24modsysv:
24 @echo "The answer is ${libfoo.a:L:libfoo.a=42}" 25 @echo "The answer is ${libfoo.a:L:libfoo.a=42}"
25 26
26modvar: 27modvar:
27 @echo "path='${path}'" 28 @echo "path='${path}'"
28 @echo "path='${path:${MOD_NODOT}}'" 29 @echo "path='${path:${MOD_NODOT}}'"
29 @echo "path='${path:S,home,homes,:${MOD_NODOT}}'" 30 @echo "path='${path:S,home,homes,:${MOD_NODOT}}'"
30 @echo "path=${path:${MOD_NODOTX}:ts:}" 31 @echo "path=${path:${MOD_NODOTX}:ts:}"
31 @echo "path=${path:${MOD_HOMES}:${MOD_NODOTX}:ts:}" 32 @echo "path=${path:${MOD_HOMES}:${MOD_NODOTX}:ts:}"
32 33
33.for d in ${path:${MOD_SEP}:N.} /usr/xbin 34.for d in ${path:${MOD_SEP}:N.} /usr/xbin
34path_$d?= ${d:${MOD_OPT}:${MOD_HOMES}}/ 35path_$d?= ${d:${MOD_OPT}:${MOD_HOMES}}/
@@ -135,13 +136,23 @@ mod-loop-dollar: @@ -135,13 +136,23 @@ mod-loop-dollar:
135 @echo $@:${:U5:@word@$$$$${word}$$$$$@:Q}: 136 @echo $@:${:U5:@word@$$$$${word}$$$$$@:Q}:
136 @echo $@:${:U6:@word@$$$$$${word}$$$$$$@:Q}: 137 @echo $@:${:U6:@word@$$$$$${word}$$$$$$@:Q}:
137 138
138mod-C-limits: 139mod-C-limits:
139 @echo $@:00-ok:${:U1 23 456:C,..,\0\0,:Q} 140 @echo $@:00-ok:${:U1 23 456:C,..,\0\0,:Q}
140 @echo $@:11-missing:${:U1 23 456:C,..,\1\1,:Q} 141 @echo $@:11-missing:${:U1 23 456:C,..,\1\1,:Q}
141 @echo $@:11-ok:${:U1 23 456:C,(.).,\1\1,:Q} 142 @echo $@:11-ok:${:U1 23 456:C,(.).,\1\1,:Q}
142 @echo $@:22-missing:${:U1 23 456:C,..,\2\2,:Q} 143 @echo $@:22-missing:${:U1 23 456:C,..,\2\2,:Q}
143 @echo $@:22-missing:${:U1 23 456:C,(.).,\2\2,:Q} 144 @echo $@:22-missing:${:U1 23 456:C,(.).,\2\2,:Q}
144 @echo $@:22-ok:${:U1 23 456:C,(.)(.),\2\2,:Q} 145 @echo $@:22-ok:${:U1 23 456:C,(.)(.),\2\2,:Q}
145 # The :C modifier only handles single-digit capturing groups, 146 # The :C modifier only handles single-digit capturing groups,
146 # which is more than enough for daily use. 147 # which is more than enough for daily use.
147 @echo $@:capture:${:UabcdefghijABCDEFGHIJrest:C,(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.),\9\8\7\6\5\4\3\2\1\0\10\11\12,} 148 @echo $@:capture:${:UabcdefghijABCDEFGHIJrest:C,(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)(.),\9\8\7\6\5\4\3\2\1\0\10\11\12,}
 149
 150# Just a bit of basic code coverage for the obscure ::= assignment modifiers.
 151mod-assign:
 152 @echo $@: ${1 2 3:L:@i@${FIRST::?=$i}@} first=${FIRST}.
 153 @echo $@: ${1 2 3:L:@i@${LAST::=$i}@} last=${LAST}.
 154 @echo $@: ${1 2 3:L:@i@${APPENDED::+=$i}@} appended=${APPENDED}.
 155 @echo $@: ${echo.1 echo.2 echo.3:L:@i@${RAN::!=${i:C,.*,&; & 1>\&2,:S,., ,g}}@} ran:${RAN}.
 156 # The assignments happen in the global scope and thus are
 157 # preserved even after the shell command has been run.
 158 @echo $@: global: ${FIRST:Q}, ${LAST:Q}, ${APPENDED:Q}, ${RAN:Q}.