# Maintainer: Frank ENDRES <frankendres@tuxfamily.org>
# From: https://github.com/alphacep/vosk-api/blob/master/travis/Dockerfile.manylinux
pkgname=vosk-git
pkgver=0.3.30
pkgrel=1
pkgdesc="Vosk is an offline open source speech recognition toolkit."
arch=("x86_64" "armv7h")
[ "$CARCH" = "x86_64" ] && BLAS_MAKE="DYNAMIC_ARCH=1 TARGET=NEHALEM"
[ "$CARCH" = "armv7" ] && BLAS_MAKE="ARMV7"
url="https://alphacephei.com/vosk/"
license=('Apache')
makedepends=("cmake" "python-setuptools" "python-pip") #"git"
clapackver=3.2.1
kaldiver=lookahead-1.8.0
openblasver=0.3.13

options=("!buildflags")
#~ source=(
	#~ "git+https://github.com/alphacep/vosk-api"
	#~ "git+https://github.com/alphacep/kaldi#branch=$kaldiver"
	#~ "git+https://github.com/xianyi/OpenBLAS#tag=v$openblasver"
	#~ "git+https://github.com/alphacep/clapack#branch=v$clapackver"
	#~ "git+https://github.com/alphacep/openfst"
#~ )
#~ sha256sums=("SKIP" "SKIP" "SKIP" "SKIP" "SKIP")
source=(
	"vosk-api.zip::https://codeload.github.com/alphacep/vosk-api/zip/refs/heads/master"
	"kaldi-$kaldiver.zip::https://codeload.github.com/alphacep/kaldi/zip/refs/heads/$kaldiver"
	"OpenBLAS-$openblasver.zip::https://github.com/xianyi/OpenBLAS/archive/refs/tags/v$openblasver.zip"
	"clapack-$clapackver.zip::https://codeload.github.com/alphacep/clapack/zip/refs/heads/v$clapackver"
	"openfst.zip::https://codeload.github.com/alphacep/openfst/zip/refs/heads/master"
)
sha256sums=(
	"33987815123958b877158508315d23e35ad4734844281effd60b36b2ac9d1f07"
	"a9d4130907ef401d734b53058bdcd3b539522009f2baa11a2761984b80b0f024"
	"ad29a87ba1231f855038f3bb81a2f8fd780b79f1bc0ab8fd2007063a500eca8a"
	"8af448908e43443370fa93c6b4c8a5ee0ced1733926d8532f87ba2a3c55967df"
	"33cbb6bc47792ad3903e81b43d67cb8d69a7c6b16f3925ca3b483bdeed3642b1"
)
prepare() { #for zips
	if [ -d vosk-api ]; then rm -rf vosk-api-master; else mv vosk-api-master vosk-api; fi
	if [ -d kaldi ]; then rm -rf kaldi-$kaldiver; else mv kaldi-$kaldiver kaldi; fi
	if [ -d kaldi/tools/OpenBLAS ]; then rm -rf OpenBLAS-$openblasver; else mv OpenBLAS-$openblasver kaldi/tools/OpenBLAS; fi
	if [ -d kaldi/tools/clapack ]; then rm -rf clapack-$clapackver; else mv clapack-$clapackver kaldi/tools/clapack; fi
	if [ -d kaldi/tools/openfst ]; then rm -rf openfst-master; else mv openfst-master kaldi/tools/openfst; fi
}

build() {
	cd kaldi/tools
	make -C OpenBLAS ONLY_CBLAS=1 $BLAS_MAKE USE_LOCKING=1 USE_THREAD=0 all
	make -C OpenBLAS PREFIX="$srcdir/kaldi/tools/OpenBLAS/install" install

	cmake -B clapack/BUILD clapack
	make -C clapack/BUILD -j 10 || true #tests fail due to function redefinitions in object files
	find clapack/BUILD/ -name "*.a" | xargs cp -t OpenBLAS/install/lib

	cd openfst
	autoreconf -i
	CFLAGS="-g -O3" ./configure --prefix="$srcdir/kaldi/tools/openfst" --enable-static --enable-shared --enable-far --enable-ngram-fsts --enable-lookahead-fsts --with-pic --disable-bin
	make -j 10 && make install

	cd "../../src"
	sed -i "s: -O1 : -O3 :g" makefiles/linux_openblas_arm.mk #ARM
	./configure --mathlib=OPENBLAS_CLAPACK --shared --use-cuda=no
	sed -i 's:-msse -msse2:-msse -msse2:g' kaldi.mk #X86_64
	sed -i 's: -O1 : -O3 :g' kaldi.mk #X86_64
	make -j 4 online2 lm rnnlm

	cd "../../vosk-api/src"
	make KALDI_ROOT="$srcdir/kaldi"
	cd ../..
}

package() {
	mkdir -p "$pkgdir/usr/share/doc/vosk"
	cp -r "$srcdir/vosk-api/python/example" "$pkgdir/usr/share/doc/vosk/python"
	cp -r "$srcdir/vosk-api/c" "$pkgdir/usr/share/doc/vosk/"
	sed -e 's@CFLAGS=.*@CFLAGS=-I/usr/include/vosk@' -e 's/LDFLAGS=.*/LDFLAGS=-lvosk -ldl -lpthread/' -i "$pkgdir/usr/share/doc/vosk/c/Makefile"
	
	mkdir -p "$pkgdir/usr/lib"
	mkdir -p "$pkgdir/usr/include/vosk"
	cp "$srcdir/vosk-api/src/libvosk.so" "$pkgdir/usr/lib/"
	cp "$srcdir/vosk-api/src/vosk_api.h" "$pkgdir/usr/include/vosk/"
	mkdir "$pkgdir/usr/lib/pkgconfig/"
	cat > "$pkgdir/usr/lib/pkgconfig/libvosk.pc" << EOF
libvosk.pc:
prefix=/usr/
exec_prefix=${prefix}
includedir=${prefix}/include
libdir=${prefix}/lib

Cflags: -I${includedir}/vosk
Libs: -lvosk

Name: libvosk
Description: $pkgdesc
URL: $url
Version: $pkgver
EOF
	
	cd "$srcdir/vosk-api/python"
	python setup.py install --root "$pkgdir"
}
