Index: Makefile
===================================================================
RCS file: /cvs/ports/sysutils/sleuthkit/Makefile,v
diff -u -r1.35 Makefile
--- Makefile	22 May 2026 08:28:37 -0000	1.35
+++ Makefile	2 Oct 2026 19:57:08 -0000
@@ -1,10 +1,12 @@
-COMMENT=		forensic toolkit based on TCT
+COMMENT =		forensic toolkit based on TCT
 
-DISTNAME=		sleuthkit-4.15.0
+VERSION =		4.15.0
+DISTNAME =		sleuthkit-${VERSION}
 
 CATEGORIES=		sysutils security
 
 SHARED_LIBS +=		tsk 4.0
+SHARED_LIBS +=		tsk_jni 0.0
 
 HOMEPAGE =		https://www.sleuthkit.org/
 MAINTAINER =		Sebastian Reitenbach <sebastia@openbsd.org>
@@ -16,7 +18,56 @@
 WANTLIB +=	afflib aio_compat crypto curl expat nghttp2 nghttp3
 WANTLIB +=	ngtcp2 ngtcp2_crypto_libressl readline ssl ewf vslvm
 
+# Define the Maven Central master site shortcut
+SITES.maven =		https://repo1.maven.org/maven2/
+SITES.uco =		${SITES.maven}
+
+VIJODA =	2.13.1
+VIGUAVA =	33.4.0-jre
+VIFAILACC =	1.0.2
+VICOMMLAN =	3.17.0
+VICOMMVAL =	1.9.0
+VIGSON =	2.12.1
+VIJUNIT =	4.13.2
+VIJDU =		4.12
+VIPGSQL =	42.7.5
+VIC3PO =	0.12.0
+VIMCJ =		0.4.0
+VISBS =		1.3
+VUGSON =	2.8.5
+VUJUNIT =	4.12
+VUHCC =		1.3
+
+
+# list taken from: bindings/java/ivy.xml
+DISTFILES.maven = \
+	{joda-time/joda-time/${VIJODA}/}joda-time-${VIJODA}.jar \
+	{com/google/guava/guava/${VIGUAVA}/}guava-${VIGUAVA}.jar \
+	{com/google/guava/failureaccess/${VIFAILACC}/}failureaccess-${VIFAILACC}.jar \
+	{org/apache/commons/commons-lang3/${VICOMMLAN}/}commons-lang3-${VICOMMLAN}.jar \
+	{commons-validator/commons-validator/${VICOMMVAL}/}commons-validator-${VICOMMVAL}.jar \
+	{com/google/code/gson/gson/${VIGSON}/}gson-${VIGSON}.jar \
+	{junit/junit/${VIJUNIT}/}junit-${VIJUNIT}.jar \
+	{io/github/java-diff-utils/java-diff-utils/${VIJDU}/}java-diff-utils-${VIJDU}.jar \
+	{org/postgresql/postgresql/${VIPGSQL}/}postgresql-${VIPGSQL}.jar \
+	{com/mchange/c3p0/${VIC3PO}/}c3p0-${VIC3PO}.jar \
+	{com/mchange/mchange-commons-java/${VIMCJ}/}mchange-commons-java-${VIMCJ}.jar \
+	{com/zaxxer/SparseBitSet/${VISBS}/}SparseBitSet-${VISBS}.jar
+
+# list taken from: case-uco/java/ivy.xml and
+# case-uco/java/nbproject/project.properties
+DISTFILES.uco = \
+	{com/google/code/gson/gson/${VUGSON}/}gson-${VUGSON}.jar \
+	{junit/junit/${VUJUNIT}/}junit-${VUJUNIT}.jar \
+	{org/hamcrest/hamcrest-core/${VUHCC}/}hamcrest-core-${VUHCC}.jar
+	
+
 SITES =	https://github.com/sleuthkit/sleuthkit/releases/download/${DISTNAME}/
+EXTRACT_ONLY = ${DISTNAME}.tar.gz
+
+MODULES +=              java
+MODJAVA_VER =           21
+# not using MODJAVA_BUILD=ant on purpose
 
 COMPILER =		base-clang ports-gcc
 
@@ -25,28 +76,61 @@
 CONFIGURE_STYLE =	autoreconf
 USE_GMAKE =		Yes
 
-LIB_DEPENDS =		databases/sqlite3 \
+BUILD_DEPENDS +=        devel/apache-ant
+LIB_DEPENDS =	databases/sqlite3 \
 			devel/libbfio \
 			sysutils/afflib3 \
 			sysutils/libvhdi \
 			sysutils/libvmdk \
 			sysutils/libvslvm \
 			security/libewf
-RUN_DEPENDS =		converters/p5-DateManip
+RUN_DEPENDS =	converters/p5-DateManip \
+		databases/sqlite-jdbc
 
 CONFIGURE_ARGS += 	--mandir='${PREFIX}/man' \
 			--enable-offline \
-			--disable-java
+			--enable-java \
+			PATH=${PORTPATH}:${JAVA_HOME}/bin \
+			CFLAGS="${CFLAGS} -I${JAVA_HOME}/include/openbsd" \
+			CPPFLAGS="${CPPFLAGS} -I${JAVA_HOME}/include/openbsd" \
+			CXXFLAGS="${CXXFLAGS} -I${JAVA_HOME}/include/openbsd"
+
 
 CONFIGURE_ENV =		ac_cv_path_CPPUNIT_CONFIG=no \
 			ac_cv_header_postgresql_libpq_fe_h=no
 
 NO_TEST =		Yes
+SUBST_VARS +=		VERSION
+
+post-patch:
+	${SUBST_CMD} ${WRKSRC}/bindings/java/Makefile.am \
+			 ${WRKSRC}/case-uco/java/Makefile.am
 
 pre-configure:
 	@sed -i 's:%%PREFIX%%:${PREFIX}:' ${WRKSRC}/man/sorter.1
 
+pre-build:
+	mkdir -p ${WRKBUILD}/bindings/java/jni/.libs/
+	ln -sf ${WRKBUILD}/bindings/java/jni/.libs/libtsk_jni.so.0.0 \
+		${WRKBUILD}/bindings/java/jni/.libs/libtsk_jni.so
+	mkdir -p ${WRKBUILD}/bindings/java/lib
+.for jar in ${DISTFILES.maven}
+	cp ${DISTDIR}/${jar:C/\{.*\}//} ${WRKBUILD}/bindings/java/lib/
+.endfor
+	cp ${TRUEPREFIX}/share/java/classes/sqlite-jdbc.jar \
+		${WRKBUILD}/bindings/java/lib/
+	
+	mkdir -p ${WRKBUILD}/case-uco/java/lib/
+.for jar in ${DISTFILES.uco}
+	cp ${DISTDIR}/${jar:C/\{.*\}//} ${WRKBUILD}/case-uco/java/lib/
+.endfor
+
+
 post-install:
 	mv ${PREFIX}/bin/pstat ${PREFIX}/bin/pstat.sleuthkit
+	mv ${MODJAVA_SHARE_DIR}/classes/sleuthkit-${VERSION}.jar \
+		${MODJAVA_SHARE_DIR}/classes/sleuthkit.jar
+	mv ${MODJAVA_SHARE_DIR}/classes/sleuthkit-caseuco-${VERSION}.jar \
+		${MODJAVA_SHARE_DIR}/classes/sleuthkit-caseuco.jar
 
 .include <bsd.port.mk>
Index: distinfo
===================================================================
RCS file: /cvs/ports/sysutils/sleuthkit/distinfo,v
diff -u -r1.17 distinfo
--- distinfo	22 May 2026 08:28:37 -0000	1.17
+++ distinfo	2 Oct 2026 19:57:08 -0000
@@ -1,2 +1,32 @@
+SHA256 (SparseBitSet-1.3.jar) = 92uFrbDAByGuJnt8/eTaf3HTEhzCFgyfwAwMifjFPIo=
+SHA256 (c3p0-0.12.0.jar) = TYWn1GQ6It9+niGhWeAi3kYlMHJ0Q+yD0ZAyHrMFhR0=
+SHA256 (commons-lang3-3.17.0.jar) = bucx31yOWil2ocoCO2uzIOqNNTn75kyKHVy3ZRJ8M7Q=
+SHA256 (commons-validator-1.9.0.jar) = w8FHSOLXjbWN+IgIdAcRvWQ7MsRf+nuKc58A+0Z819c=
+SHA256 (failureaccess-1.0.2.jar) = io+Bz5s1nj9t+mkaHndphcBh7y8iPJssgHU+G0WOgGQ=
+SHA256 (gson-2.12.1.jar) = 6+4T1ft0d81/HMAQ4MNW34yoBwlxUkjal/eeNcy0++w=
+SHA256 (gson-2.8.5.jar) = IzoBSfw2XJ9u29aDz+JmsZvcdzvpjqva9rPJJLSOfYE=
+SHA256 (guava-33.4.0-jre.jar) = uRjJin5E2+lOvZ/j5Azdqttak+anjrYAi0LfI3JB5Tg=
+SHA256 (hamcrest-core-1.3.jar) = Zv3vkelzk0jfeglqo4SlaF9Oh1WEzOiThqekclHE2Ok=
+SHA256 (java-diff-utils-4.12.jar) = mZCiA5d49rTMlHkBQcKGiGTqzuBiDGxFlFESGpAc1bU=
+SHA256 (joda-time-2.13.1.jar) = qb5HtGOQ96bausx8BVtP62+48iJUd6cnCoIzspbiZnc=
+SHA256 (junit-4.12.jar) = WXIfCAXiI9hLkGd4h9n/Vn3FNNfFAsqQPAwrF/BcEWo=
+SHA256 (junit-4.13.2.jar) = jklbY0Rp1k+4rPo0laBly6zIoP/1XOHjEAe+TBbcV9M=
+SHA256 (mchange-commons-java-0.4.0.jar) = /YjjhaON93ARd7B241BIqEHcXfERjGsthgu6CMQbwLY=
+SHA256 (postgresql-42.7.5.jar) = aQILO9IJhFQ+gXOT8ubAGokO8uN6d90R1thQgYHQeas=
 SHA256 (sleuthkit-4.15.0.tar.gz) = OowefRipuB8+XoqngxOXSs6q/G4FHWNrySzXFoKG7Kk=
+SIZE (SparseBitSet-1.3.jar) = 25843
+SIZE (c3p0-0.12.0.jar) = 399517
+SIZE (commons-lang3-3.17.0.jar) = 673587
+SIZE (commons-validator-1.9.0.jar) = 201424
+SIZE (failureaccess-1.0.2.jar) = 4740
+SIZE (gson-2.12.1.jar) = 285943
+SIZE (gson-2.8.5.jar) = 241622
+SIZE (guava-33.4.0-jre.jar) = 3080298
+SIZE (hamcrest-core-1.3.jar) = 45024
+SIZE (java-diff-utils-4.12.jar) = 72305
+SIZE (joda-time-2.13.1.jar) = 638947
+SIZE (junit-4.12.jar) = 314932
+SIZE (junit-4.13.2.jar) = 384581
+SIZE (mchange-commons-java-0.4.0.jar) = 642988
+SIZE (postgresql-42.7.5.jar) = 1087908
 SIZE (sleuthkit-4.15.0.tar.gz) = 4951534
Index: patches/patch-bindings_java_Makefile_am
===================================================================
RCS file: patches/patch-bindings_java_Makefile_am
diff -N patches/patch-bindings_java_Makefile_am
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-bindings_java_Makefile_am	2 Oct 2026 19:57:08 -0000
@@ -0,0 +1,12 @@
+Index: bindings/java/Makefile.am
+--- bindings/java/Makefile.am.orig
++++ bindings/java/Makefile.am
+@@ -2,7 +2,7 @@
+ SUBDIRS = jni
+ 
+ tsk_jar = $(top_builddir)/bindings/java/dist/sleuthkit-$(PACKAGE_VERSION).jar
+-jardir = $(prefix)/share/java
++jardir = ${MODJAVA_SHARE_DIR}classes
+ jar_DATA = $(tsk_jar)
+ 
+ if OFFLINE
Index: patches/patch-bindings_java_build-unix_xml
===================================================================
RCS file: patches/patch-bindings_java_build-unix_xml
diff -N patches/patch-bindings_java_build-unix_xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-bindings_java_build-unix_xml	2 Oct 2026 19:57:08 -0000
@@ -0,0 +1,36 @@
+Index: bindings/java/build-unix.xml
+--- bindings/java/build-unix.xml.orig
++++ bindings/java/build-unix.xml
+@@ -31,7 +31,7 @@
+ 	</target>
+ 
+ 	<target name="check-native-build-unix" depends="testTSKLibs" if="tsk_so.present">
+-		<uptodate property="native-up-to-date" srcfile="${jni.build.dir}/.libs/libtsk_jni.so" targetfile="${amd64}/linux/libtsk_jni.so"/>
++		<uptodate property="native-up-to-date" srcfile="${jni.build.dir}/.libs/libtsk_jni.so" targetfile="${amd64}/unix/libtsk_jni.so"/>
+ 	</target>
+ 
+ 	<target name="testTSKLibs">
+@@ -84,17 +84,17 @@
+ 		<property name="zlib.so" location="${lib.z.path}/libz.so"/>
+ 		<property name="libewf.so" location="${lib.ewf.path}/libewf.so"/>
+ 		<!-- x86_64 -->
+-		<copy file="${jni.so}" tofile="${x86_64}/linux/libtsk_jni.so" overwrite="true"/>
++		<copy file="${jni.so}" tofile="${x86_64}/openbsd/libtsk_jni.so" overwrite="true"/>
+ 		<!-- amd64 -->
+-		<copy file="${jni.so}" tofile="${amd64}/linux/libtsk_jni.so" overwrite="true"/>
++		<copy file="${jni.so}" tofile="${amd64}/openbsd/libtsk_jni.so" overwrite="true"/>
+ 		<!-- x86 -->
+-		<copy file="${jni.so}" tofile="${x86}/linux/libtsk_jni.so" overwrite="true"/>
++		<copy file="${jni.so}" tofile="${x86}/openbsd/libtsk_jni.so" overwrite="true"/>
+ 		<!-- i386 -->
+-		<copy file="${jni.so}" tofile="${i386}/linux/libtsk_jni.so" overwrite="true"/>
++		<copy file="${jni.so}" tofile="${i386}/openbsd/libtsk_jni.so" overwrite="true"/>
+ 		<!-- i586 -->
+-		<copy file="${jni.so}" tofile="${i586}/linux/libtsk_jni.so" overwrite="true"/>
++		<copy file="${jni.so}" tofile="${i586}/openbsd/libtsk_jni.so" overwrite="true"/>
+ 		<!-- i686 -->
+-		<copy file="${jni.so}" tofile="${i686}/linux/libtsk_jni.so" overwrite="true"/>
++		<copy file="${jni.so}" tofile="${i686}/openbsd/libtsk_jni.so" overwrite="true"/>
+ 	</target>
+ 
+ 	<target name="copyLibs" depends="copyLinuxLibs,copyMacLibs"/>
Index: patches/patch-bindings_java_build_xml
===================================================================
RCS file: patches/patch-bindings_java_build_xml
diff -N patches/patch-bindings_java_build_xml
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-bindings_java_build_xml	2 Oct 2026 19:57:08 -0000
@@ -0,0 +1,42 @@
+Index: bindings/java/build.xml
+--- bindings/java/build.xml.orig
++++ bindings/java/build.xml
+@@ -14,7 +14,7 @@
+ <property name="VERSION" value="4.15.0"/>
+ 
+ 	<!-- set global properties for this build -->
+-	<property name="default-jar-location" location="/usr/share/java"/>
++	<property name="default-jar-location" location="/usr/local/share/java/classes"/>
+ 	<property name="src" location="src/org/sleuthkit/datamodel"/>
+ 	<property name="sample" location="src/org/sleuthkit/datamodel/Examples"/>
+ 	<property name="build" location="build/"/>
+@@ -46,23 +46,23 @@
+ 		<mkdir dir="${amd64}"/>
+ 		<mkdir dir="${amd64}/win"/>
+ 		<mkdir dir="${amd64}/mac"/>
+-		<mkdir dir="${amd64}/linux"/>
++		<mkdir dir="${amd64}/openbsd"/>
+ 		<mkdir dir="${x86}"/>
+ 		<mkdir dir="${x86}/win"/>
+-		<mkdir dir="${x86}/linux"/>
++		<mkdir dir="${x86}/openbsd"/>
+ 		<mkdir dir="${x86_64}"/>
+ 		<mkdir dir="${x86_64}/win"/>
+ 		<mkdir dir="${x86_64}/mac"/>
+-		<mkdir dir="${x86_64}/linux"/>
++		<mkdir dir="${x86_64}/openbsd"/>
+ 		<mkdir dir="${i386}"/>
+ 		<mkdir dir="${i386}/win"/>
+-		<mkdir dir="${i386}/linux"/>
++		<mkdir dir="${i386}/openbsd"/>
+ 		<mkdir dir="${i586}"/>
+ 		<mkdir dir="${i586}/win"/>
+-		<mkdir dir="${i586}/linux"/>
++		<mkdir dir="${i586}/openbsd"/>
+ 		<mkdir dir="${i686}"/>
+ 		<mkdir dir="${i686}/win"/>
+-		<mkdir dir="${i686}/linux"/>
++		<mkdir dir="${i686}/openbsd"/>
+ 	</target>
+ 
+ 	<!-- set classpath for dependencies-->
Index: patches/patch-bindings_java_src_org_sleuthkit_datamodel_LibraryUtils_java
===================================================================
RCS file: patches/patch-bindings_java_src_org_sleuthkit_datamodel_LibraryUtils_java
diff -N patches/patch-bindings_java_src_org_sleuthkit_datamodel_LibraryUtils_java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-bindings_java_src_org_sleuthkit_datamodel_LibraryUtils_java	2 Oct 2026 19:57:08 -0000
@@ -0,0 +1,36 @@
+Index: bindings/java/src/org/sleuthkit/datamodel/LibraryUtils.java
+--- bindings/java/src/org/sleuthkit/datamodel/LibraryUtils.java.orig
++++ bindings/java/src/org/sleuthkit/datamodel/LibraryUtils.java
+@@ -94,11 +94,12 @@ public class LibraryUtils {
+ 			os = "win"; //NON-NLS
+ 		} else if (LibraryUtils.isMac()) {
+ 			os = "mac"; //NON-NLS
+-		} else if (LibraryUtils.isLinux()) {
+-			os = "linux"; //NON-NLS
++		} else if (LibraryUtils.isOpenbsd()) {
++			os = "openbsd"; //NON-NLS
+ 		}
+ 		// os.arch represents the architecture of the JVM, not the os
+ 		String arch = System.getProperty("os.arch");
++		System.out.println("os/arch: " + os + "/" + arch); //NON-NLS
+ 		return arch.toLowerCase() + "/" + os.toLowerCase();
+ 	}
+ 
+@@ -127,6 +128,17 @@ public class LibraryUtils {
+ 	 */
+ 	private static boolean isLinux() {
+ 		return System.getProperty("os.name").equals("Linux"); //NON-NLS
++	}
++
++	/**
++	 * Is the platform OpenBSD?
++	 *
++	 * @return
++	 */
++	private static boolean isOpenbsd() {
++		String osName = System.getProperty("os.name");
++		System.out.println("Checking OS Name: " + osName); //NON-NLS
++		return System.getProperty("os.name").equals("OpenBSD"); //NON-NLS
+ 	}
+ 
+ 	/**
Index: patches/patch-case-uco_java_Makefile_am
===================================================================
RCS file: patches/patch-case-uco_java_Makefile_am
diff -N patches/patch-case-uco_java_Makefile_am
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ patches/patch-case-uco_java_Makefile_am	2 Oct 2026 19:57:08 -0000
@@ -0,0 +1,10 @@
+Index: case-uco/java/Makefile.am
+--- case-uco/java/Makefile.am.orig
++++ case-uco/java/Makefile.am
+@@ -1,5 +1,5 @@
+ tsk_caseuco_jar = $(top_builddir)/case-uco/java/dist/sleuthkit-caseuco-$(PACKAGE_VERSION).jar
+-jardir = $(prefix)/share/java
++jardir = ${MODJAVA_SHARE_DIR}classes
+ jar_DATA = $(tsk_caseuco_jar)
+ 
+ if OFFLINE
Index: pkg/PLIST
===================================================================
RCS file: /cvs/ports/sysutils/sleuthkit/pkg/PLIST,v
diff -u -r1.12 PLIST
--- pkg/PLIST	18 Feb 2026 21:26:40 -0000	1.12
+++ pkg/PLIST	2 Oct 2026 19:57:08 -0000
@@ -1,11 +1,8 @@
-@conflict ja-jvim-*
 @conflict freeze-*
 @bin bin/blkcalc
 @bin bin/blkcat
 @bin bin/blkls
 @bin bin/blkstat
-@comment bin/disk_sreset
-@comment bin/disk_stat
 @bin bin/fcat
 @bin bin/ffind
 @bin bin/fiwalk
@@ -107,6 +104,9 @@
 @static-lib lib/libtsk.a
 lib/libtsk.la
 @lib lib/libtsk.so.${LIBtsk_VERSION}
+@static-lib lib/libtsk_jni.a
+lib/libtsk_jni.la
+@lib lib/libtsk_jni.so.${LIBtsk_jni_VERSION}
 lib/pkgconfig/tsk.pc
 @man man/man1/blkcalc.1
 @man man/man1/blkcat.1
@@ -136,6 +136,8 @@
 @man man/man1/tsk_loaddb.1
 @man man/man1/tsk_recover.1
 @man man/man1/usnjls.1
+share/java/classes/sleuthkit-caseuco.jar
+share/java/classes/sleuthkit.jar
 share/tsk/
 share/tsk/sorter/
 share/tsk/sorter/default.sort
