head	1.4;
access;
symbols;
locks; strict;
comment	@# @;


1.4
date	2026.10.14.22.25.12;	author agc;	state dead;
branches;
next	1.3;
commitid	EvQuBHLEvZ6nMuZG;

1.3
date	2025.07.23.01.14.07;	author agc;	state Exp;
branches;
next	1.2;
commitid	rSrs7KEnJrB89O3G;

1.2
date	2023.02.24.19.01.10;	author agc;	state Exp;
branches;
next	1.1;
commitid	XNCIUwEY3IazkOeE;

1.1
date	2017.08.16.23.38.13;	author agc;	state Exp;
branches;
next	;
commitid	QRh3ZHtCDsbQJu3A;


desc
@@


1.4
log
@Remove this old code, it's been superceded - see pkgsrc/devel/libagcre
and pkgsrc/textproc/agcre
@
text
@# $NetBSD: Makefile,v 1.3 2025/07/23 01:14:07 agc Exp $

.include <bsd.own.mk>

PROG=	agcre
SRCS+=	main.c
LDADD+=	-L${.CURDIR} -Wl,-R${.CURDIR} -lagcre
CPPFLAGS+=	-I${DIST}
MAN=	agcre.1
WARNS=	5

.sinclude "../namespace.mk"

DIST=	${.CURDIR}/../dist
.PATH: ${DIST}

LIB_AGCRE_DIR!= cd ${.CURDIR}/../lib && ${PRINTOBJDIR}
LDADD+=         -Wl,-R${LIB_AGCRE_DIR} -L${LIB_AGCRE_DIR} -lagcre
DPADD+=         ${LIB_AGCRE_DIR}/libagcre.a

TESTDIR=	${.CURDIR}/../dist/tests

PRODUCTION=1
.ifndef PRODUCTION
CPPFLAGS+=	-g -O0
LDFLAGS+=	-g -O0
.endif

BINDIR=	/usr/bin

.include <bsd.prog.mk>

t: ${PROG}
	@@echo "1. basics"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} PROG ${TESTDIR}/1.in > 1.out
	diff ${TESTDIR}/1.expected 1.out
	rm -f 1.out
	@@echo "2. zero width matching"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} 'a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?aaaaaaaaaaaaaaaaaaaaaaaaaaaaa' ${TESTDIR}/2.in > 2.out
	diff ${TESTDIR}/2.expected 2.out
	rm -f 2.out
	@@echo "3. basics"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} 'PR.*G' ${TESTDIR}/1.in > 3.out
	diff ${TESTDIR}/3.expected 3.out
	rm -f 3.out
	@@echo "4. basics"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} 'PR.*?G' ${TESTDIR}/1.in > 4.out
	diff ${TESTDIR}/4.expected 4.out
	rm -f 4.out
	@@echo "5. basics"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} 'C.*?S' ${TESTDIR}/1.in > 5.out
	diff ${TESTDIR}/5.expected 5.out
	rm -f 5.out
	@@echo "6. basics"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} -i 'CQ?.*?S' ${TESTDIR}/1.in > 6.out
	diff ${TESTDIR}/6.expected 6.out
	rm -f 6.out
	@@echo "7. alternates"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} -i 'pr(o)*g' ${TESTDIR}/1.in > 7.out
	diff ${TESTDIR}/7.expected 7.out
	rm -f 7.out
	@@echo "8. alternates"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} -i 'pr(i|o)*g' ${TESTDIR}/1.in > 8.out
	diff ${TESTDIR}/8.expected 8.out
	rm -f 8.out
	@@echo "9. alternates"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} -i 'pr(e|i|o)*g' ${TESTDIR}/1.in > 9.out
	diff ${TESTDIR}/9.expected 9.out
	rm -f 9.out
	@@echo "10. alternates"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} -i 'pr(a|e|i|o|u)*g' ${TESTDIR}/1.in > 10.out
	diff ${TESTDIR}/10.expected 10.out
	rm -f 10.out
	@@echo "11. alternates"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} 'u?int(8|16|32|64)_t' ${TESTDIR}/3.in > 11.out
	diff ${TESTDIR}/11.expected 11.out
	rm -f 11.out
	@@echo "12. alternates"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} 'u?int(8|16|32|64)*_t' ${TESTDIR}/3.in > 12.out
	diff ${TESTDIR}/12.expected 12.out
	rm -f 12.out
	@@echo "13. alternates"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} 'u?int(8|16|32|64)*?_t' ${TESTDIR}/3.in > 13.out
	diff ${TESTDIR}/13.expected 13.out
	rm -f 13.out
	@@echo "14. alternates"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} 'u?int(8|16|32|64)*?_t' ${TESTDIR}/3.in > 14.out
	diff ${TESTDIR}/14.expected 14.out
	rm -f 14.out
	@@echo "15. alternates"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} 'u?int(8|16|32|64)+?_t' ${TESTDIR}/3.in > 15.out
	diff ${TESTDIR}/15.expected 15.out
	rm -f 15.out
	@@echo "16. begin line"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '^PROG' ${TESTDIR}/1.in > 16.out
	diff ${TESTDIR}/16.expected 16.out
	rm -f 16.out
	@@echo "17. end line"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '0$$' ${TESTDIR}/1.in > 17.out
	diff ${TESTDIR}/17.expected 17.out
	rm -f 17.out
	@@echo "18. unicode"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '\u0050\u0052\u004f\u0047' ${TESTDIR}/1.in > 18.out
	diff ${TESTDIR}/18.expected 18.out
	rm -f 18.out
	@@echo "19. beg word"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} -i '\<(P|B)' ${TESTDIR}/1.in > 19.out
	diff ${TESTDIR}/19.expected 19.out
	rm -f 19.out
	@@echo "20. end word"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '0\>' ${TESTDIR}/1.in > 20.out
	diff ${TESTDIR}/20.expected 20.out
	rm -f 20.out
	@@echo "21. sets"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} 'PR[AEIOU]G' ${TESTDIR}/1.in > 21.out
	diff ${TESTDIR}/21.expected 21.out
	rm -f 21.out
	@@echo "22. word boundaries"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} -i '\bP' ${TESTDIR}/1.in > 22.out
	diff ${TESTDIR}/22.expected 22.out
	rm -f 22.out
	@@echo "23. word boundaries"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} -i 's\b' ${TESTDIR}/1.in > 23.out
	diff ${TESTDIR}/23.expected 23.out
	rm -f 23.out
	@@echo "24. ranges"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} -i 'PR[M-P]G' ${TESTDIR}/1.in > 24.out
	diff ${TESTDIR}/24.expected 24.out
	rm -f 24.out
	@@echo "25. ranges"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} -i 'PR[^0-9]G' ${TESTDIR}/1.in > 25.out
	diff ${TESTDIR}/25.expected 25.out
	rm -f 25.out
	@@echo "26. perl escapes"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} -i 'P\w\w\w' ${TESTDIR}/1.in > 26.out
	diff ${TESTDIR}/26.expected 26.out
	rm -f 26.out
	@@echo "27. perl escapes"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} -i 'P\w\w\w\b' ${TESTDIR}/1.in > 27.out
	diff ${TESTDIR}/27.expected 27.out
	rm -f 27.out
	@@echo "28. REG_PEND"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} -i -P 4 'PROGRAMMATIC INTERFACE FOR DUMMIES' ${TESTDIR}/1.in > 28.out
	diff ${TESTDIR}/28.expected 28.out
	rm -f 28.out
	@@echo "29. {} repetition"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} 'CP{2}FLAGS' ${TESTDIR}/1.in > 29.out
	diff ${TESTDIR}/29.expected 29.out
	rm -f 29.out
	@@echo "30. {} repetition"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} 'CP{2,5}FLAGS' ${TESTDIR}/1.in > 30.out
	diff ${TESTDIR}/30.expected 30.out
	rm -f 30.out
	@@echo "31. {} repetition"
	-env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} 'CP{3,5}FLAGS' ${TESTDIR}/1.in > 31.out
	diff ${TESTDIR}/31.expected 31.out
	rm -f 31.out
	@@echo "32. {} repetition"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} 'CP{1,2}FLAGS' ${TESTDIR}/1.in > 32.out
	diff ${TESTDIR}/32.expected 32.out
	rm -f 32.out
	@@echo "33. {} repetition"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} 'C\w{2,5}GS' ${TESTDIR}/1.in > 33.out
	diff ${TESTDIR}/33.expected 33.out
	rm -f 33.out
	@@echo "34. one-letter words"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '\b\w\b' ${TESTDIR}/1.in > 34.out
	diff ${TESTDIR}/34.expected 34.out
	rm -f 34.out
	@@echo "35. two-letter words"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '\b\w{2}\b' ${TESTDIR}/1.in > 35.out
	diff ${TESTDIR}/35.expected 35.out
	rm -f 35.out
	@@echo "36. {} repetition"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} 'C\w{2,5}GS' ${TESTDIR}/1.in > 36.out
	diff ${TESTDIR}/36.expected 36.out
	rm -f 36.out
	@@echo "37. {} repetition"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} 'C\w{2,5}AGS' ${TESTDIR}/1.in > 37.out
	diff ${TESTDIR}/37.expected 37.out
	rm -f 37.out
	@@echo "38. {} repetition"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} 'C\w{2,5}LAGS' ${TESTDIR}/1.in > 38.out
	diff ${TESTDIR}/38.expected 38.out
	rm -f 38.out
	@@echo "39. {} repetition"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} 'C\w{2,5}FLAGS' ${TESTDIR}/1.in > 39.out
	diff ${TESTDIR}/39.expected 39.out
	rm -f 39.out
	@@echo "40. -v"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} -v 'PR[A-Z]G' ${TESTDIR}/1.in > 40.out
	diff ${TESTDIR}/40.expected 40.out
	rm -f 40.out
	@@echo "41. error input"
	-env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} 'PR[A-Z' ${TESTDIR}/1.in > 41.out
	diff ${TESTDIR}/41.expected 41.out
	rm -f 41.out
	@@echo "42. error input"
	-env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '(u_?)?int(8|16|32|64_t' ${TESTDIR}/1.in > 42.out
	diff ${TESTDIR}/42.expected 42.out
	rm -f 42.out
	@@echo "43. alternates"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '(u_?)?int(8|16|32|64)+?_t' ${TESTDIR}/3.in > 43.out
	diff ${TESTDIR}/43.expected 43.out
	rm -f 43.out
	@@echo "44. unicode sets"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '\u0050\u0052[\u0051\u0052\u0053\u004f\u0050]\u0047' ${TESTDIR}/1.in > 44.out
	diff ${TESTDIR}/44.expected 44.out
	rm -f 44.out
	@@echo "45. unicode sets"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} -i '\u0050\u0052[\u0051\u0052\u0053\u004f\u0050]\u0047' ${TESTDIR}/1.in > 45.out
	diff ${TESTDIR}/45.expected 45.out
	rm -f 45.out
	@@echo "46. bugfix - last two alternates only recognised, not first n-2"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} -i 'pr(o|u|a|e|i)g' ${TESTDIR}/1.in > 46.out
	diff ${TESTDIR}/46.expected 46.out
	rm -f 46.out
	@@echo "47. test program display"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} -Di 'pr(o|u|a|e|i)g' ${TESTDIR}/1.in > 47.out
	diff ${TESTDIR}/47.expected 47.out
	rm -f 47.out
	@@echo "48. sub-expressions"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} -D -S 3 '(i(n(t\d*)))' ${TESTDIR}/3.in > 48.out
	diff ${TESTDIR}/48.expected 48.out
	rm -f 48.out
	@@echo "49. sub-expressions"
	-env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} -S 5 PROG ${TESTDIR}/1.in > 49.out
	diff ${TESTDIR}/49.expected 49.out
	rm -f 49.out
	@@echo "50. sub-expressions"
	-env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} -S 5 'P{1}ROG' ${TESTDIR}/1.in > 50.out
	diff ${TESTDIR}/50.expected 50.out
	rm -f 50.out
	@@echo "51. tabs"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '\t' ${TESTDIR}/1.in > 51.out
	diff ${TESTDIR}/51.expected 51.out
	rm -f 51.out
	@@echo "52. basic regexps"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} -T basic '+=' ${TESTDIR}/1.in > 52.out
	diff ${TESTDIR}/52.expected 52.out
	rm -f 52.out
	@@echo "53. blank lines"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '^$$' ${TESTDIR}/1.in > 53.out
	diff ${TESTDIR}/53.expected 53.out
	rm -f 53.out
	@@echo "54. recursive"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} -rn __arraycount /usr/include > 54.out
	diff ${TESTDIR}/54.expected 54.out
	rm -f 54.out
	@@echo "55. posix char sets"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '\b[[:alnum:]]{4}\b' ${TESTDIR}/1.in > 55.out
	diff ${TESTDIR}/55.expected 55.out
	rm -f 55.out
	@@echo "56. posix word delimiters"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '[[:<:]][[:alnum:]]{4}[[:>:]]' ${TESTDIR}/1.in > 56.out
	diff ${TESTDIR}/56.expected 56.out
	rm -f 56.out
	@@echo "57. perl escapes again"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '\s-' ${TESTDIR}/1.in > 57.out
	diff ${TESTDIR}/57.expected 57.out
	rm -f 57.out
	@@echo "58. bad input"
	-env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} 'lsdhavcljsadhvcljsadhvcljhv(()*&^&&^*^%&^%&' ${TESTDIR}/1.in > 58.out
	diff ${TESTDIR}/58.expected 58.out
	rm -f 58.out
	@@echo "59. bad input"
	echo abcdefg | env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '(a|bcdef|g|ab|c|d|e|efg|fg)*' > 59.out
	diff ${TESTDIR}/59.expected 59.out
	rm -f 59.out
	@@echo "60. xdigit and complements"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '\<[^[:xdigit:]]{4}' ${TESTDIR}/1.in > 60.out
	diff ${TESTDIR}/60.expected 60.out
	rm -f 60.out
	@@echo "61. at least repeats"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} 'CP{1,}.*S' ${TESTDIR}/1.in > 61.out
	diff ${TESTDIR}/61.expected 61.out
	rm -f 61.out
	@@echo "62. version number"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} -V > 62.out
	diff ${TESTDIR}/62.expected 62.out
	rm -f 62.out
	@@echo "63. 256 upper bound"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} 'CP{1,256}FLAGS' ${TESTDIR}/1.in > 63.out
	diff ${TESTDIR}/63.expected 63.out
	rm -f 63.out
	@@echo "64. zero width matching"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '(a?){9999}aaaaaaaaaaaaaaaaaaaaaaaaaaaaa' ${TESTDIR}/2.in > 64.out
	diff ${TESTDIR}/64.expected 64.out
	rm -f 64.out
	@@echo "65. palindromes"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '(.).\1' ${TESTDIR}/1.in > 65.out
	diff ${TESTDIR}/65.expected 65.out
	rm -f 65.out
	@@echo "66. multi-char seqs repeated"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '\<(\w{2}).\1\>' ${TESTDIR}/words > 66.out
	diff ${TESTDIR}/66.expected 66.out
	rm -f 66.out
	@@echo "67. 5-letter palindromes"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '\<(.)(.).\2\1\>' ${TESTDIR}/words > 67.out
	diff ${TESTDIR}/67.expected 67.out
	rm -f 67.out
	@@echo "68. 6-letter palindromes"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '\<(.)(.)(.)\3\2\1\>' ${TESTDIR}/words > 68.out
	diff ${TESTDIR}/68.expected 68.out
	rm -f 68.out
	@@echo "69. 7-letter palindromes"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '\<(.)(.)(.).\3\2\1\>' ${TESTDIR}/words > 69.out
	diff ${TESTDIR}/69.expected 69.out
	rm -f 69.out
	@@echo "70. 8-letter palindromes in surrounding text"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '(.)(.)(.)(.)\4\3\2\1' ${TESTDIR}/words > 70.out
	diff ${TESTDIR}/70.expected 70.out
	rm -f 70.out
	@@echo "71. 9-letter palindromes in surrounding text"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '(.)(.)(.)(.).\4\3\2\1' ${TESTDIR}/words > 71.out
	diff ${TESTDIR}/71.expected 71.out
	rm -f 71.out
	@@echo "72. multi-char seqs repeated"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '\<(\w{3}).\1\>' ${TESTDIR}/words > 72.out
	diff ${TESTDIR}/72.expected 72.out
	rm -f 72.out
	@@echo "73. multi-char seqs repeated"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '\<(\w{3})\1\>' ${TESTDIR}/words > 73.out
	diff ${TESTDIR}/73.expected 73.out
	rm -f 73.out
	@@echo "74. nospec searching"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} -T nospec '+=' ${TESTDIR}/1.in > 74.out
	diff ${TESTDIR}/74.expected 74.out
	rm -f 74.out
	@@echo "75. UTF8 input file"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} 'STARG..TE' ${TESTDIR}/UTF-8-demo.txt > 75.out
	diff ${TESTDIR}/75.expected 75.out
	rm -f 75.out
	@@echo "76. UTF8 input file"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} .A ${TESTDIR}/UTF-8-demo.txt > 76.out
	diff ${TESTDIR}/76.expected 76.out
	rm -f 76.out
	@@echo "77. UTF8 input file"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} H. ${TESTDIR}/UTF-8-demo.txt > 77.out
	diff ${TESTDIR}/77.expected 77.out
	rm -f 77.out
	@@echo "78. UTF8 input file"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} 'STARG.{2}TE' ${TESTDIR}/UTF-8-demo.txt > 78.out
	diff ${TESTDIR}/78.expected 78.out
	rm -f 78.out
	@@echo "79. UTF8 input file"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} 'STARG.*TE' ${TESTDIR}/UTF-8-demo.txt > 79.out
	diff ${TESTDIR}/79.expected 79.out
	rm -f 79.out
	@@echo "80. UTF8 input file"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} 'STARG.+TE' ${TESTDIR}/UTF-8-demo.txt > 80.out
	diff ${TESTDIR}/80.expected 80.out
	rm -f 80.out
	@@echo "81. UTF8 input file"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} -i 'starg.*?e\>' ${TESTDIR}/UTF-8-demo.txt > 81.out
	diff ${TESTDIR}/81.expected 81.out
	rm -f 81.out
	@@echo "82. UTF8 expression and input file"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} 'Λ̊' ${TESTDIR}/UTF-8-demo.txt > 82.out
	diff ${TESTDIR}/82.expected 82.out
	rm -f 82.out
	@@echo "83. UTF8 expression and input file"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} -f ${TESTDIR}/expression ${TESTDIR}/UTF-8-demo.txt > 83.out
	diff ${TESTDIR}/83.expected 83.out
	rm -f 83.out
	@@echo "84. 4 char words in utf8 file"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '\<\S{4}\>' ${TESTDIR}/UTF-8-demo.txt > 84.out
	diff ${TESTDIR}/84.expected 84.out
	rm -f 84.out
	@@echo "85. nospec searching"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} -T nospec 'in' ${TESTDIR}/UTF-8-demo.txt > 85.out
	diff ${TESTDIR}/85.expected 85.out
	rm -f 85.out
	@@echo "86. offsets"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} -O -e PROG ${TESTDIR}/1.in > 86.out
	diff ${TESTDIR}/86.expected 86.out
	rm -f 86.out
	@@echo "87. offsets"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} echo '/XXX' | ./${PROG} -OD '.*(/XXX).*' > 87.out
	diff ${TESTDIR}/87.expected 87.out
	rm -f 87.out
	@@echo "88. zero repetition"
	echo abab | env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} -D 'a?(ac{0}b|ba)ab' > 88.out
	diff ${TESTDIR}/88.expected 88.out
	rm -f 88.out
	@@echo "89. zero width instruction gens"
	echo vivi | env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '^.+$$' > 89.out
	diff ${TESTDIR}/89.expected 89.out
	rm -f 89.out
	@@echo "90. multiple sets"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '[P][R][O][G]' ${TESTDIR}/1.in > 90.out
	diff ${TESTDIR}/90.expected 90.out
	rm -f 90.out
	@@echo "91. icase directive"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} 'PR(?i)o(?-i)G' ${TESTDIR}/1.in > 91.out
	diff ${TESTDIR}/91.expected 91.out
	rm -f 91.out
	@@echo "92. icase directive"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '(?i)prog(?-i)' ${TESTDIR}/1.in > 92.out
	diff ${TESTDIR}/92.expected 92.out
	rm -f 92.out
	@@echo "93. word matching"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '\w+' ${TESTDIR}/UTF-8-demo.txt > 93.out
	diff ${TESTDIR}/93.expected 93.out
	rm -f 93.out
	@@echo "94. word matching with begword and endword"
	env LD_LIBRARY_PATH=${LIB_AGCRE_DIR} ./${PROG} '\<\w+\>' ${TESTDIR}/UTF-8-demo.txt > 94.out
	diff ${TESTDIR}/94.expected 94.out
	rm -f 94.out
@


1.3
log
@agcre: fix up beginning of word and end of word tests - use parentheses to
make it obvious to the compiler when to short-circuit.

Add tests for beginning word and end of word (with and without \< and \> guards)

Bump version to 20250722
@
text
@d1 1
a1 1
# $NetBSD: Makefile,v 1.2 2023/02/24 19:01:10 agc Exp $
@


1.2
log
@Update agcre (yet another regexp library) to version 20230224

+ revamp the reverse searching functionality
	+ bug fixes
	+ don't terminate searches too early
+ update namespace protection to just use simple definitions
+ bump version to 20230224
@
text
@d1 1
a1 1
# $NetBSD: Makefile,v 1.1 2017/08/16 23:38:13 agc Exp $
d402 8
@


1.1
log
@Just what this world needs - another regexp library. However, for
something I was doing, I needed a regexp library in C, BSD-licensed,
and able to be exposed to a wide range of expressions, some better
controlled than others.

The resulting library is libagcre, which implements regular expression
compilation and execution. It uses the Pike Virtual Machine approach,
and features:

+ standard POSIX features where sane
+ some/most Perl escapes
+ lazy matching via '?'
+ non-capture parenthese (?:...)
+ in-expression case-insensitive directives are supported (?i)...(?-i)
+ all case-insensitivity is actioned at expression exec time.
Case-insensitivity can be specified at expression compile-time,
and, if so, it will be remembered.  But the expression itself, once
compiled, can be used to match in both a case-sensitive and insensitive
manner
+ utf8 is supported both for expressions and for input text when
matching
+ unicode escapes (in the Java format of \uABCD) are supported
+ exact multiple repetition specifiers {N}, and {N,M} are supported
+ backreferences are supported
+ utf16 (LE and BE) and utf32 (LE and BE) are supported, both for the
expression and for the input being searched
+ at the most basic level, individual 32bit unicode characters are
matched
+ an egrep/grep implementation for matching unicode regexps
is included

A simple implementation of sets is used to provide inclusion and
exclusion information for unicode characters, which is taken directly
from unicode.org. No bitmasks are used - ranges are specified by
using an upper and a lower bound for the codepoints. Callbacks can
also be added to these sets, to provide functionality similar to
the ctype macros across the whole unicode character set.

The standard regular expression basic3 torture test is passed with
4 known (and, I'd argue, incorrect) results flagged.  As expected,
the expression '(a?){9999}aaaaaaaaaaaaaaaaaaaaaaaaaaaaa' matches
in linear time, as does the expression
'((((((((((((((((((((((((((((((x))))))))))))))))))))))))))))))'

	% time agcre '(a?){9999}aaaaaaaaaaaaaaaaaaaaaaaaaaaaa' dist/tests/2.in
	aaaaaaaaaaaaaaaaaaaaaaaaaaaaa
	0.063u 0.000s 0:00.06 100.0%    0+0k 0+0io 0pf+0w
	% time egrep '(a?){9999}aaaaaaaaaaaaaaaaaaaaaaaaaaaaa' dist/tests/2.in
	^C88.462u 0.730s 1:29.21 99.9%  0+0k 0+0io 0pf+0w
	%

The library and agcre utility have been run through valgrind to
confirm no memory leaks.

In general, the emphasis is on a modern, predictable, VM-style,
well-featured regexp library, in C, with a BSD license. In
particular, sljit has not been used to speed up on certain platforms,
most Perl regexp features are supported, as are back references,
and UTF-8, UTF-16 and UTF32.

Once again, I wouldn't expect anyone to use this as the main engine
in egrep. But I am always amazed at the uses for some of the things
that I write.

For more information about the Pike VM, and comparison to other
regexp implementations, please see:

	https://swtch.com/~rsc/regexp/regexp2.html

Alistair Crooks
Tue Aug 15 07:43:34 PDT 2017
@
text
@d1 1
a1 1
# $NetBSD$
d12 2
@

