# Contributor: Jakub Jirutka <jakub@jirutka.cz>
# Maintainer: Jakub Jirutka <jakub@jirutka.cz>
pkgname=neo4j
pkgver=4.4.41
pkgrel=0
pkgdesc="Neo4j Community Edition LTS"
url="https://neo4j.com"
# other platforms are not supported by upstream
arch="aarch64 x86_64"
license="GPL-3.0-or-later"
# Neo4j 4.x requires JVM 11.
depends="
	java-jna
	java-netty-transport-native
	java-zstd-jni
	openjdk11-jre-headless
	"
_depends_shell="
	java-jna
	java-netty-transport-native
	java-jre-headless
	"
makedepends="
	$_depends_shell
	openjdk11
	maven
	unzip
	zip
	"
checkdepends="bash"
install="$pkgname.pre-install"
pkgusers="neo4j"
pkggroups="neo4j"
subpackages="
	$pkgname-doc
	$pkgname-openrc
	cypher-shell:_shell:noarch
	"
source="https://github.com/neo4j/neo4j/archive/refs/tags/$pkgver/neo4j-$pkgver.tar.gz
	system-jars.patch
	conf.patch
	wrapper.sh
	$pkgname.initd
	$pkgname.confd
	cypher-shell
	"
# net: fetches packages from Maven repos
# check: needs ulimit -n 40000
options="net !check"

# Ensure Neo4j is built with JDK11 if multiple JDKs are installed
# to prevent this error: https://github.com/neo4j/neo4j/issues/12933
export JAVA_HOME="/usr/lib/jvm/java-11-openjdk"
export PATH="$JAVA_HOME/bin:$PATH"

# NOTE: Maven 3 dropped support for the M2_HOME variable.
export MAVEN_ARGS="--batch-mode -Duser.home=$srcdir/.home -Dcheckstyle.skip=true -Dlicensing.skip=true"
export MAVEN_OPTS="-Xmx2048m"

prepare() {
	default_prepare

	# See system-jars.patch.
	local jna_ver zstdjni_ver
	jna_ver=$(_jar_version /usr/share/java/jna.jar)
	zstdjni_ver=$(_jar_version /usr/share/java/zstd-jni.jar)
	sed -i -e 's/\${alpine.jna.version}/'"$jna_ver/" \
		-e 's/\${alpine.zstd-jni.version}/'"$zstdjni_ver/"  \
		pom.xml

	# Fix version number (upstream doesn't bump it before tagging).
	mvn versions:set -DnewVersion="$pkgver" -DgenerateBackupPoms=false
}

build() {
	mvn install -DskipTests

	mkdir -p dist
	tar -C dist -xf packaging/standalone/target/neo4j-community-*-unix.tar.gz

	cd dist/neo4j-community-*

	# Remove jansi native binaries (they are actually not needed).
	zip -qd bin/tools/cypher-shell.jar 'org/fusesource/jansi/internal/native/*'
}

check() {
	mvn test
}

package() {
	cd dist/neo4j-community-*

	install -D -m644 lib/*.jar -t "$pkgdir"/usr/share/neo4j/lib/
	install -D -m755 bin/neo4j bin/neo4j-admin -t "$pkgdir"/usr/share/neo4j/bin/
	install -D -m644 LICENSE* NOTICE.txt -t "$pkgdir"/usr/share/licenses/$pkgname/
	install -D -m644 labs/README.txt -t "$pkgdir"/var/lib/neo4j/labs/
	install -D -m644 plugins/README.txt -t "$pkgdir"/var/lib/neo4j/plugins/

	install -D -m644 conf/neo4j.conf -t "$pkgdir"/etc/neo4j/
	install -d -m750 -g neo4j "$pkgdir"/etc/neo4j/certs

	install -D -m755 "$srcdir"/wrapper.sh "$pkgdir"/usr/bin/neo4j
	ln -s neo4j "$pkgdir"/usr/bin/neo4j-admin

	install -D -m755 "$srcdir"/neo4j.initd "$pkgdir"/etc/init.d/neo4j
	install -D -m644 "$srcdir"/neo4j.confd "$pkgdir"/etc/conf.d/neo4j

	# cypher-shell
	install -D -m644 bin/tools/cypher-shell.jar -t "$pkgdir"/usr/share/cypher-shell/
	install -D -m755 "$srcdir"/cypher-shell -t "$pkgdir"/usr/bin/

	cd "$pkgdir"

	install -d -o neo4j -g neo4j -m750 \
		var/lib/neo4j/data \
		var/lib/neo4j/data/databases \
		var/lib/neo4j/data/dbms \
		var/lib/neo4j/data/dumps \
		var/lib/neo4j/data/transactions \
		var/lib/neo4j/import \
		var/log/neo4j

	cd "$pkgdir"/usr/share/neo4j/lib

	# See system-jars.patch.
	ln -s /usr/share/java/zstd-jni.jar .
	ln -s /usr/share/java/jna.jar .

	msg "Checking JARs for native libraries..."
	local f; for f in *.jar; do
		if jar tf "$f" | grep -q '\.so$'; then
			error "Found native library in $f"
			return 1
		fi
	done
}

_shell() {
	pkgdesc="Cypher Shell - CLI for Neo4j"
	depends="$_depends_shell"

	amove usr/bin/cypher-shell
	amove usr/share/cypher-shell
}

_jar_version() {
	unzip -p "$1" META-INF/MANIFEST.MF | sed -En 's/Implementation-Version: (\S+).*/\1/p'
}

sha512sums="
20b16f0252de4706734d7d05c0e30a33394526f4e3070a4c3a17e2a0cf3791881702c5d4e3531f2ad945ccf99ffd70846d2db17b2a568eddf608b2299ab43b71  neo4j-4.4.41.tar.gz
1967594563adf1aa1c0c9809b0cc9fbefe042c933e556f5cb6d01f6ce0d40efcc054533c784d4e12b8fc5ebdd169fd276f2caeb8921eece634fa918219199706  system-jars.patch
6810dfe781aa46882dab971f97aefa8a22e68ed6956754bcb824c28839c7229469316ebe6695819a4bb6b701bea18848d467bd9863bf6dc2a2c01b3f55406202  conf.patch
a1b6f509228dd9925420591803595c67653924ea592c38894f7d3d26e24b40bbc9b35e8b4e67611df9e06a7f0921b13e3f2f1bb54102049c3b1f9c6a2656939d  wrapper.sh
f61a76246039187dcc61bdfd7482e4928ae7b356571e56c86f7b7a243dced79c8d61f0c6ab807ca7f993a78640cda427316a9b274844c794b769b992ff897498  neo4j.initd
8530390bb5292318f03b76d3afe23a3029971f90ce4b0e702d18913c01000c6df8644d6c7415ab6dde2d02f9a4af490234ce817aa2d6976554a971e1ff707d4f  neo4j.confd
45a3b4f9db522eca6dbc616b17005f7ec75a1168242f465dfd6d2475be3cba465573920d34e4fd192d5f0c838e049f4ea6d46d9a56193f4079a8850f4090dfeb  cypher-shell
"
