head	1.2;
access;
symbols
	perseant-exfatfs-base-20250801:1.2
	perseant-exfatfs-base-20240630:1.2
	perseant-exfatfs:1.2.0.16
	perseant-exfatfs-base:1.2
	cjep_sun2x:1.2.0.14
	cjep_sun2x-base:1.2
	cjep_staticlib_x-base1:1.2
	cjep_staticlib_x:1.2.0.12
	cjep_staticlib_x-base:1.2
	phil-wifi-20200421:1.2
	phil-wifi-20200411:1.2
	phil-wifi-20200406:1.2
	pgoyette-compat-merge-20190127:1.2
	pgoyette-compat-20190127:1.2
	pgoyette-compat-20190118:1.2
	pgoyette-compat-1226:1.2
	pgoyette-compat-1126:1.2
	pgoyette-compat-1020:1.2
	pgoyette-compat-0930:1.2
	pgoyette-compat-0906:1.2
	netbsd-7-2-RELEASE:1.1
	pgoyette-compat-0728:1.2
	pgoyette-compat-0625:1.2
	pgoyette-compat-0521:1.2
	pgoyette-compat-0502:1.2
	pgoyette-compat-0422:1.2
	pgoyette-compat-0415:1.2
	pgoyette-compat-0407:1.2
	pgoyette-compat-0330:1.2
	pgoyette-compat-0322:1.2
	pgoyette-compat-0315:1.2
	netbsd-7-1-2-RELEASE:1.1
	pgoyette-compat:1.2.0.10
	pgoyette-compat-base:1.2
	netbsd-7-1-1-RELEASE:1.1
	perseant-stdc-iso10646:1.2.0.8
	perseant-stdc-iso10646-base:1.2
	prg-localcount2-base3:1.2
	prg-localcount2-base2:1.2
	prg-localcount2-base1:1.2
	prg-localcount2:1.2.0.6
	prg-localcount2-base:1.2
	pgoyette-localcount-20170426:1.2
	bouyer-socketcan-base1:1.2
	pgoyette-localcount-20170320:1.2
	netbsd-7-1:1.1.0.82
	netbsd-7-1-RELEASE:1.1
	netbsd-7-1-RC2:1.1
	netbsd-7-nhusb-base-20170116:1.1
	bouyer-socketcan:1.2.0.4
	bouyer-socketcan-base:1.2
	pgoyette-localcount-20170107:1.2
	netbsd-7-1-RC1:1.1
	pgoyette-localcount-20161104:1.2
	netbsd-7-0-2-RELEASE:1.1
	localcount-20160914:1.2
	netbsd-7-nhusb:1.1.0.80
	netbsd-7-nhusb-base:1.1
	pgoyette-localcount-20160806:1.2
	pgoyette-localcount-20160726:1.2
	pgoyette-localcount:1.2.0.2
	pgoyette-localcount-base:1.2
	netbsd-7-0-1-RELEASE:1.1
	netbsd-7-0:1.1.0.78
	netbsd-7-0-RELEASE:1.1
	netbsd-7-0-RC3:1.1
	netbsd-7-0-RC2:1.1
	netbsd-7-0-RC1:1.1
	netbsd-5-2-3-RELEASE:1.1
	netbsd-5-1-5-RELEASE:1.1
	netbsd-6-0-6-RELEASE:1.1
	netbsd-6-1-5-RELEASE:1.1
	netbsd-7:1.1.0.76
	netbsd-7-base:1.1
	yamt-pagecache-base9:1.1
	yamt-pagecache-tag8:1.1
	netbsd-6-1-4-RELEASE:1.1
	netbsd-6-0-5-RELEASE:1.1
	tls-earlyentropy:1.1.0.74
	tls-earlyentropy-base:1.1
	riastradh-xf86-video-intel-2-7-1-pre-2-21-15:1.1
	riastradh-drm2-base3:1.1
	netbsd-6-1-3-RELEASE:1.1
	netbsd-6-0-4-RELEASE:1.1
	netbsd-5-2-2-RELEASE:1.1
	netbsd-5-1-4-RELEASE:1.1
	netbsd-6-1-2-RELEASE:1.1
	netbsd-6-0-3-RELEASE:1.1
	netbsd-5-2-1-RELEASE:1.1
	netbsd-5-1-3-RELEASE:1.1
	netbsd-6-1-1-RELEASE:1.1
	riastradh-drm2-base2:1.1
	riastradh-drm2-base1:1.1
	riastradh-drm2:1.1.0.68
	riastradh-drm2-base:1.1
	netbsd-6-1:1.1.0.72
	netbsd-6-0-2-RELEASE:1.1
	netbsd-6-1-RELEASE:1.1
	netbsd-6-1-RC4:1.1
	netbsd-6-1-RC3:1.1
	agc-symver:1.1.0.70
	agc-symver-base:1.1
	netbsd-6-1-RC2:1.1
	dholland-make-base:1.1
	netbsd-6-1-RC1:1.1
	yamt-pagecache-base8:1.1
	netbsd-5-2:1.1.0.66
	netbsd-6-0-1-RELEASE:1.1
	yamt-pagecache-base7:1.1
	netbsd-5-2-RELEASE:1.1
	netbsd-5-2-RC1:1.1
	matt-nb6-plus-nbase:1.1
	yamt-pagecache-base6:1.1
	netbsd-6-0:1.1.0.64
	netbsd-6-0-RELEASE:1.1
	netbsd-6-0-RC2:1.1
	tls-maxphys:1.1.0.62
	tls-maxphys-base:1.1
	matt-nb6-plus:1.1.0.60
	matt-nb6-plus-base:1.1
	netbsd-6-0-RC1:1.1
	yamt-pagecache-base5:1.1
	yamt-pagecache-base4:1.1
	netbsd-6:1.1.0.58
	netbsd-6-base:1.1
	netbsd-5-1-2-RELEASE:1.1
	netbsd-5-1-1-RELEASE:1.1
	yamt-pagecache-base3:1.1
	yamt-pagecache-base2:1.1
	yamt-pagecache:1.1.0.56
	yamt-pagecache-base:1.1
	cherry-xenmp:1.1.0.54
	cherry-xenmp-base:1.1
	bouyer-quota2-nbase:1.1
	bouyer-quota2:1.1.0.52
	bouyer-quota2-base:1.1
	matt-mips64-premerge-20101231:1.1
	matt-nb5-mips64-premerge-20101231:1.1
	matt-nb5-pq3:1.1.0.50
	matt-nb5-pq3-base:1.1
	netbsd-5-1:1.1.0.48
	netbsd-5-1-RELEASE:1.1
	netbsd-5-1-RC4:1.1
	matt-nb5-mips64-k15:1.1
	netbsd-5-1-RC3:1.1
	netbsd-5-1-RC2:1.1
	netbsd-5-1-RC1:1.1
	netbsd-5-0-2-RELEASE:1.1
	matt-nb5-mips64-premerge-20091211:1.1
	matt-premerge-20091211:1.1
	matt-nb5-mips64-u2-k2-k4-k7-k8-k9:1.1
	matt-nb4-mips64-k7-u2a-k9b:1.1
	matt-nb5-mips64-u1-k1-k5:1.1
	matt-nb5-mips64:1.1.0.46
	netbsd-5-0-1-RELEASE:1.1
	jym-xensuspend-nbase:1.1
	netbsd-5-0:1.1.0.44
	netbsd-5-0-RELEASE:1.1
	netbsd-5-0-RC4:1.1
	netbsd-5-0-RC3:1.1
	netbsd-5-0-RC2:1.1
	jym-xensuspend:1.1.0.42
	jym-xensuspend-base:1.1
	netbsd-5-0-RC1:1.1
	netbsd-5:1.1.0.40
	netbsd-5-base:1.1
	matt-mips64-base2:1.1
	matt-mips64:1.1.0.38
	mjf-devfs2:1.1.0.36
	mjf-devfs2-base:1.1
	netbsd-4-0-1-RELEASE:1.1
	wrstuden-revivesa-base-3:1.1
	wrstuden-revivesa-base-2:1.1
	wrstuden-fixsa-newbase:1.1
	wrstuden-revivesa-base-1:1.1
	yamt-pf42-base4:1.1
	yamt-pf42-base3:1.1
	hpcarm-cleanup-nbase:1.1
	yamt-pf42-baseX:1.1
	yamt-pf42-base2:1.1
	wrstuden-revivesa:1.1.0.34
	wrstuden-revivesa-base:1.1
	yamt-pf42:1.1.0.32
	yamt-pf42-base:1.1
	keiichi-mipv6-nbase:1.1
	keiichi-mipv6:1.1.0.30
	keiichi-mipv6-base:1.1
	christos-broken:1.1
	matt-armv6-nbase:1.1
	matt-armv6-prevmlocking:1.1
	wrstuden-fixsa-base-1:1.1
	netbsd-4-0:1.1.0.28
	netbsd-4-0-RELEASE:1.1
	cube-autoconf:1.1.0.26
	cube-autoconf-base:1.1
	netbsd-4-0-RC5:1.1
	netbsd-4-0-RC4:1.1
	netbsd-4-0-RC3:1.1
	netbsd-4-0-RC2:1.1
	netbsd-4-0-RC1:1.1
	matt-armv6:1.1.0.24
	matt-armv6-base:1.1
	matt-mips64-base:1.1
	hpcarm-cleanup:1.1.0.22
	hpcarm-cleanup-base:1.1
	netbsd-3-1-1-RELEASE:1.1
	netbsd-3-0-3-RELEASE:1.1
	wrstuden-fixsa:1.1.0.20
	wrstuden-fixsa-base:1.1
	abandoned-netbsd-4-base:1.1
	abandoned-netbsd-4:1.1.0.14
	netbsd-3-1:1.1.0.16
	netbsd-3-1-RELEASE:1.1
	netbsd-3-0-2-RELEASE:1.1
	netbsd-3-1-RC4:1.1
	netbsd-3-1-RC3:1.1
	netbsd-3-1-RC2:1.1
	netbsd-3-1-RC1:1.1
	netbsd-4:1.1.0.18
	netbsd-4-base:1.1
	chap-midi-nbase:1.1
	netbsd-3-0-1-RELEASE:1.1
	chap-midi:1.1.0.12
	chap-midi-base:1.1
	netbsd-3-0:1.1.0.10
	netbsd-3-0-RELEASE:1.1
	netbsd-3-0-RC6:1.1
	netbsd-3-0-RC5:1.1
	netbsd-3-0-RC4:1.1
	netbsd-3-0-RC3:1.1
	netbsd-3-0-RC2:1.1
	netbsd-3-0-RC1:1.1
	netbsd-2-0-3-RELEASE:1.1
	netbsd-2-1:1.1.0.8
	netbsd-2-1-RELEASE:1.1
	netbsd-2-1-RC6:1.1
	netbsd-2-1-RC5:1.1
	netbsd-2-1-RC4:1.1
	netbsd-2-1-RC3:1.1
	netbsd-2-1-RC2:1.1
	netbsd-2-1-RC1:1.1
	netbsd-2-0-2-RELEASE:1.1
	netbsd-3:1.1.0.6
	netbsd-3-base:1.1
	netbsd-2-0-1-RELEASE:1.1
	netbsd-2:1.1.0.4
	netbsd-2-base:1.1
	netbsd-2-0-RELEASE:1.1
	netbsd-2-0-RC5:1.1
	netbsd-2-0-RC4:1.1
	netbsd-2-0-RC3:1.1
	netbsd-2-0-RC2:1.1
	netbsd-2-0-RC1:1.1
	netbsd-2-0:1.1.0.2
	netbsd-2-0-base:1.1;
locks; strict;
comment	@# @;


1.2
date	2014.08.21.13.44.51;	author apb;	state dead;
branches;
next	1.1;
commitid	PNRbDMs9XSDHweNx;

1.1
date	2003.09.27.21.29.37;	author sjg;	state Exp;
branches;
next	;


desc
@@


1.2
log
@Give each group of tests its own output file.

* Rename each sub-makefile to *.mk;
* Add a *.exp file of expected output for each sub-makefile;
* Remove test.exp, which is replaced by all the other *.exp files.
* Use suffix rules to generate *.rawout and *.out files for
  each test case.
* Rewrite the test and accept targets to adapt to the new way.

The old (now removed) test.exp file is almost identical to the
concatenation (in the correct order) of all the new *.exp files.  There
are expected differences in makefile names embedded in the output, and
the new "exit status" lines.  Some old "*** Error code 1 (ignored)"
lines are also removed (replaced by new "exit status 1" lines).
@
text
@# $Id: modword,v 1.1 2003/09/27 21:29:37 sjg Exp $
#
# Test behaviour of new :[] modifier

all: mod-squarebrackets mod-S-W mod-C-W mod-tW-tw

LIST= one two three
LIST+= four five six
LONGLIST= 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23

EMPTY= # the space should be ignored
ESCAPEDSPACE=\ # escaped space before the '#'
REALLYSPACE:=${EMPTY:C/^/ /W}
HASH= \#
AT= @@
STAR= *
ZERO= 0
ONE= 1
MINUSONE= -1

mod-squarebrackets: mod-squarebrackets-0-star-at \
	mod-squarebrackets-hash \
	mod-squarebrackets-n \
	mod-squarebrackets-start-end \
	mod-squarebrackets-nested

mod-squarebrackets-0-star-at:
	@@echo 'LIST:[]="${LIST:[]}" is an error'
	@@echo 'LIST:[0]="${LIST:[0]}"'
	@@echo 'LIST:[0x0]="${LIST:[0x0]}"'
	@@echo 'LIST:[000]="${LIST:[000]}"'
	@@echo 'LIST:[*]="${LIST:[*]}"'
	@@echo 'LIST:[@@]="${LIST:[@@]}"'
	@@echo 'LIST:[0]:C/ /,/="${LIST:[0]:C/ /,/}"'
	@@echo 'LIST:[0]:C/ /,/g="${LIST:[0]:C/ /,/g}"'
	@@echo 'LIST:[0]:C/ /,/1g="${LIST:[0]:C/ /,/1g}"'
	@@echo 'LIST:[*]:C/ /,/="${LIST:[*]:C/ /,/}"'
	@@echo 'LIST:[*]:C/ /,/g="${LIST:[*]:C/ /,/g}"'
	@@echo 'LIST:[*]:C/ /,/1g="${LIST:[*]:C/ /,/1g}"'
	@@echo 'LIST:[@@]:C/ /,/="${LIST:[@@]:C/ /,/}"'
	@@echo 'LIST:[@@]:C/ /,/g="${LIST:[@@]:C/ /,/g}"'
	@@echo 'LIST:[@@]:C/ /,/1g="${LIST:[@@]:C/ /,/1g}"'
	@@echo 'LIST:[@@]:[0]:C/ /,/="${LIST:[@@]:[0]:C/ /,/}"'
	@@echo 'LIST:[0]:[@@]:C/ /,/="${LIST:[0]:[@@]:C/ /,/}"'
	@@echo 'LIST:[@@]:[*]:C/ /,/="${LIST:[@@]:[*]:C/ /,/}"'
	@@echo 'LIST:[*]:[@@]:C/ /,/="${LIST:[*]:[@@]:C/ /,/}"'

mod-squarebrackets-hash:
	@@echo 'EMPTY="${EMPTY}"'
	@@echo 'EMPTY:[#]="${EMPTY:[#]}" == 1 ?'
	@@echo 'ESCAPEDSPACE="${ESCAPEDSPACE}"'
	@@echo 'ESCAPEDSPACE:[#]="${ESCAPEDSPACE:[#]}" == 1 ?'
	@@echo 'REALLYSPACE="${REALLYSPACE}"'
	@@echo 'REALLYSPACE:[#]="${REALLYSPACE:[#]}" == 1 ?'
	@@echo 'LIST:[#]="${LIST:[#]}"'
	@@echo 'LIST:[0]:[#]="${LIST:[0]:[#]}" == 1 ?'
	@@echo 'LIST:[*]:[#]="${LIST:[*]:[#]}" == 1 ?'
	@@echo 'LIST:[@@]:[#]="${LIST:[@@]:[#]}"'
	@@echo 'LIST:[1]:[#]="${LIST:[1]:[#]}"'
	@@echo 'LIST:[1..3]:[#]="${LIST:[1..3]:[#]}"'

mod-squarebrackets-n:
	@@echo 'EMPTY:[1]="${EMPTY:[1]}"'
	@@echo 'ESCAPEDSPACE="${ESCAPEDSPACE}"'
	@@echo 'ESCAPEDSPACE:[1]="${ESCAPEDSPACE:[1]}"'
	@@echo 'REALLYSPACE="${REALLYSPACE}"'
	@@echo 'REALLYSPACE:[1]="${REALLYSPACE:[1]}" == "" ?'
	@@echo 'REALLYSPACE:[*]:[1]="${REALLYSPACE:[*]:[1]}" == " " ?'
	@@echo 'LIST:[1]="${LIST:[1]}"'
	@@echo 'LIST:[1.]="${LIST:[1.]}" is an error'
	@@echo 'LIST:[1].="${LIST:[1].}" is an error'
	@@echo 'LIST:[2]="${LIST:[2]}"'
	@@echo 'LIST:[6]="${LIST:[6]}"'
	@@echo 'LIST:[7]="${LIST:[7]}"'
	@@echo 'LIST:[999]="${LIST:[999]}"'
	@@echo 'LIST:[-]="${LIST:[-]}" is an error'
	@@echo 'LIST:[--]="${LIST:[--]}" is an error'
	@@echo 'LIST:[-1]="${LIST:[-1]}"'
	@@echo 'LIST:[-2]="${LIST:[-2]}"'
	@@echo 'LIST:[-6]="${LIST:[-6]}"'
	@@echo 'LIST:[-7]="${LIST:[-7]}"'
	@@echo 'LIST:[-999]="${LIST:[-999]}"'
	@@echo 'LONGLIST:[17]="${LONGLIST:[17]}"'
	@@echo 'LONGLIST:[0x11]="${LONGLIST:[0x11]}"'
	@@echo 'LONGLIST:[021]="${LONGLIST:[021]}"'
	@@echo 'LIST:[0]:[1]="${LIST:[0]:[1]}"'
	@@echo 'LIST:[*]:[1]="${LIST:[*]:[1]}"'
	@@echo 'LIST:[@@]:[1]="${LIST:[@@]:[1]}"'
	@@echo 'LIST:[0]:[2]="${LIST:[0]:[2]}"'
	@@echo 'LIST:[*]:[2]="${LIST:[*]:[2]}"'
	@@echo 'LIST:[@@]:[2]="${LIST:[@@]:[2]}"'
	@@echo 'LIST:[*]:C/ /,/:[2]="${LIST:[*]:C/ /,/:[2]}"'
	@@echo 'LIST:[*]:C/ /,/:[*]:[2]="${LIST:[*]:C/ /,/:[*]:[2]}"'
	@@echo 'LIST:[*]:C/ /,/:[@@]:[2]="${LIST:[*]:C/ /,/:[@@]:[2]}"'

mod-squarebrackets-start-end:
	@@echo 'LIST:[1.]="${LIST:[1.]}" is an error'
	@@echo 'LIST:[1..]="${LIST:[1..]}" is an error'
	@@echo 'LIST:[1..1]="${LIST:[1..1]}"'
	@@echo 'LIST:[1..1.]="${LIST:[1..1.]}" is an error'
	@@echo 'LIST:[1..2]="${LIST:[1..2]}"'
	@@echo 'LIST:[2..1]="${LIST:[2..1]}"'
	@@echo 'LIST:[3..-2]="${LIST:[3..-2]}"'
	@@echo 'LIST:[-4..4]="${LIST:[-4..4]}"'
	@@echo 'LIST:[0..1]="${LIST:[0..1]}" is an error'
	@@echo 'LIST:[-1..0]="${LIST:[-1..0]}" is an error'
	@@echo 'LIST:[-1..1]="${LIST:[-1..1]}"'
	@@echo 'LIST:[0..0]="${LIST:[0..0]}"'
	@@echo 'LIST:[3..99]="${LIST:[3..99]}"'
	@@echo 'LIST:[-3..-99]="${LIST:[-3..-99]}"'
	@@echo 'LIST:[-99..-3]="${LIST:[-99..-3]}"'

mod-squarebrackets-nested:
	@@echo 'HASH="${HASH}" == "#" ?'
	@@echo 'LIST:[$${HASH}]="${LIST:[${HASH}]}"'
	@@echo 'LIST:[$${ZERO}]="${LIST:[${ZERO}]}"'
	@@echo 'LIST:[$${ZERO}x$${ONE}]="${LIST:[${ZERO}x${ONE}]}"'
	@@echo 'LIST:[$${ONE}]="${LIST:[${ONE}]}"'
	@@echo 'LIST:[$${MINUSONE}]="${LIST:[${MINUSONE}]}"'
	@@echo 'LIST:[$${STAR}]="${LIST:[${STAR}]}"'
	@@echo 'LIST:[$${AT}]="${LIST:[${AT}]}"'
	@@echo 'LIST:[$${EMPTY}]="${LIST:[${EMPTY}]}" is an error'
	@@echo 'LIST:[$${LONGLIST:[21]:S/2//}]="${LIST:[${LONGLIST:[21]:S/2//}]}"'
	@@echo 'LIST:[$${LIST:[#]}]="${LIST:[${LIST:[#]}]}"'
	@@echo 'LIST:[$${LIST:[$${HASH}]}]="${LIST:[${LIST:[${HASH}]}]}"'

mod-C-W:
	@@echo 'LIST:C/ /,/="${LIST:C/ /,/}"'
	@@echo 'LIST:C/ /,/W="${LIST:C/ /,/W}"'
	@@echo 'LIST:C/ /,/gW="${LIST:C/ /,/gW}"'
	@@echo 'EMPTY:C/^/,/="${EMPTY:C/^/,/}"'
	@@echo 'EMPTY:C/^/,/W="${EMPTY:C/^/,/W}"'

mod-S-W:
	@@echo 'LIST:S/ /,/="${LIST:S/ /,/}"'
	@@echo 'LIST:S/ /,/W="${LIST:S/ /,/W}"'
	@@echo 'LIST:S/ /,/gW="${LIST:S/ /,/gW}"'
	@@echo 'EMPTY:S/^/,/="${EMPTY:S/^/,/}"'
	@@echo 'EMPTY:S/^/,/W="${EMPTY:S/^/,/W}"'

mod-tW-tw:
	@@echo 'LIST:tW="${LIST:tW}"'
	@@echo 'LIST:tw="${LIST:tw}"'
	@@echo 'LIST:tW:C/ /,/="${LIST:tW:C/ /,/}"'
	@@echo 'LIST:tW:C/ /,/g="${LIST:tW:C/ /,/g}"'
	@@echo 'LIST:tW:C/ /,/1g="${LIST:tW:C/ /,/1g}"'
	@@echo 'LIST:tw:C/ /,/="${LIST:tw:C/ /,/}"'
	@@echo 'LIST:tw:C/ /,/g="${LIST:tw:C/ /,/g}"'
	@@echo 'LIST:tw:C/ /,/1g="${LIST:tw:C/ /,/1g}"'
	@@echo 'LIST:tw:tW:C/ /,/="${LIST:tw:tW:C/ /,/}"'
	@@echo 'LIST:tW:tw:C/ /,/="${LIST:tW:tw:C/ /,/}"'
@


1.1
log
@Implement :[] modifier to allow picking a range of words out of a variable.
Also :tW and a W flag to :C and :S to allow treating value as a single word.
Add unit tests for the above, and fix some corner cases.
Based on patches supplied by Alan Barrett <apb@@cequrux.com>
@
text
@d1 1
a1 1
# $Id: varcmd,v 1.1 2003/07/31 00:46:15 sjg Exp $
@

