git: 62072792a60d - main - math/libdivsufsort: New port: Lightweight suffix-sorting library

From: Yuri Victorovich <yuri_at_FreeBSD.org>
Date: Fri, 21 Jul 2023 19:00:00 UTC
The branch main has been updated by yuri:

URL: https://cgit.FreeBSD.org/ports/commit/?id=62072792a60d0c11a8d4fa07d9b93c13976c56b7

commit 62072792a60d0c11a8d4fa07d9b93c13976c56b7
Author:     Yuri Victorovich <yuri@FreeBSD.org>
AuthorDate: 2023-07-21 18:59:23 +0000
Commit:     Yuri Victorovich <yuri@FreeBSD.org>
CommitDate: 2023-07-21 18:59:57 +0000

    math/libdivsufsort: New port: Lightweight suffix-sorting library
---
 math/Makefile                   |  1 +
 math/libdivsufsort/Makefile     | 32 ++++++++++++++++++++++++++++++++
 math/libdivsufsort/distinfo     |  3 +++
 math/libdivsufsort/files/test.c | 34 ++++++++++++++++++++++++++++++++++
 math/libdivsufsort/pkg-descr    |  7 +++++++
 5 files changed, 77 insertions(+)

diff --git a/math/Makefile b/math/Makefile
index 0d8c393b4db6..7fea1dcd2f10 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -444,6 +444,7 @@
     SUBDIR += libccd
     SUBDIR += libcerf
     SUBDIR += libdivide
+    SUBDIR += libdivsufsort
     SUBDIR += libfixmath
     SUBDIR += libflame
     SUBDIR += libformfactor
diff --git a/math/libdivsufsort/Makefile b/math/libdivsufsort/Makefile
new file mode 100644
index 000000000000..220c8accbb85
--- /dev/null
+++ b/math/libdivsufsort/Makefile
@@ -0,0 +1,32 @@
+PORTNAME=	libdivsufsort
+DISTVERSIONPREFIX=	v
+DISTVERSION=	2.0.1-14
+DISTVERSIONSUFFIX=	-g5f60d6f
+CATEGORIES=	math
+
+MAINTAINER=	yuri@FreeBSD.org
+COMMENT=	Lightweight suffix-sorting library
+WWW=		https://github.com/y-256/libdivsufsort
+
+LICENSE=	MIT
+LICENSE_FILE=	${WRKSRC}/LICENSE
+
+USES=		cmake pathfix
+USE_LDCONFIG=	yes
+
+USE_GITHUB=	yes
+GH_ACCOUNT=	y-256
+
+PLIST_FILES=	include/divsufsort.h \
+		lib/libdivsufsort.so \
+		lib/libdivsufsort.so.3 \
+		lib/libdivsufsort.so.3.0.1 \
+		libdata/pkgconfig/libdivsufsort.pc
+
+do-test:
+	@cd ${TEST_WRKSRC} && \
+		${SETENV} ${TEST_ENV} ${CC} ${FILESDIR}/test.c -I${STAGEDIR}${PREFIX}/include -L${STAGEDIR}${PREFIX}/lib -ldivsufsort && \
+		${ECHO} "==> running the test program:" && \
+		LD_PRELOAD=${STAGEDIR}${PREFIX}/lib/libdivsufsort.so ${TEST_WRKSRC}/a.out
+
+.include <bsd.port.mk>
diff --git a/math/libdivsufsort/distinfo b/math/libdivsufsort/distinfo
new file mode 100644
index 000000000000..63ebe645c508
--- /dev/null
+++ b/math/libdivsufsort/distinfo
@@ -0,0 +1,3 @@
+TIMESTAMP = 1689965360
+SHA256 (y-256-libdivsufsort-v2.0.1-14-g5f60d6f_GH0.tar.gz) = 9de40c9a343a3776c4a9ebc2dac93d0f1cd8ce021cd095b5d9ecc381c2207eab
+SIZE (y-256-libdivsufsort-v2.0.1-14-g5f60d6f_GH0.tar.gz) = 25900
diff --git a/math/libdivsufsort/files/test.c b/math/libdivsufsort/files/test.c
new file mode 100644
index 000000000000..f001733d9254
--- /dev/null
+++ b/math/libdivsufsort/files/test.c
@@ -0,0 +1,34 @@
+// simple example from README
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <divsufsort.h>
+
+int main() {
+    // intput data
+    char *Text = "abracadabra";
+    int n = strlen(Text);
+    int i, j;
+
+    // allocate
+    int *SA = (int *)malloc(n * sizeof(int));
+
+    // sort
+    divsufsort((unsigned char *)Text, SA, n);
+
+    // output
+    for(i = 0; i < n; ++i) {
+        printf("SA[%2d] = %2d: ", i, SA[i]);
+        for(j = SA[i]; j < n; ++j) {
+            printf("%c", Text[j]);
+        }
+        printf("$\n");
+    }
+
+    // deallocate
+    free(SA);
+
+    return 0;
+}
diff --git a/math/libdivsufsort/pkg-descr b/math/libdivsufsort/pkg-descr
new file mode 100644
index 000000000000..0024aaeafae3
--- /dev/null
+++ b/math/libdivsufsort/pkg-descr
@@ -0,0 +1,7 @@
+libdivsufsort is a software library that implements a lightweight suffix array
+construction algorithm.
+
+This library provides a simple and an efficient C API to construct a suffix
+array and a Burrows-Wheeler transformed string from a given string over a
+constant-size alphabet. The algorithm runs in O(n log n) worst-case time using
+only 5n+O(1) bytes of memory space, where n is the length of the string.