# Contributor: Sheila Aman <sheila@vulpine.house>
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
pkgname=protobuf
pkgver=29.4
pkgrel=0
pkgdesc="Library for extensible, efficient structure packing"
url="https://github.com/protocolbuffers/protobuf"
arch="all"
license="BSD-3-Clause"
depends="
	protoc=$pkgver-r$pkgrel
	libprotoc=$pkgver-r$pkgrel
	libprotobuf=$pkgver-r$pkgrel
	libprotobuf-lite=$pkgver-r$pkgrel
	"
depends_dev="
	protoc=$pkgver-r$pkgrel
	zlib-dev
	"
makedepends="
	$depends_dev
	abseil-cpp-dev
	cmake
	samurai
	"
checkdepends="gtest-dev"
subpackages="
	$pkgname-dev
	$pkgname-vim::noarch
	protoc
	libprotoc
	libprotobuf
	libprotobuf-lite
	"
source="$pkgname-$pkgver.tar.gz::https://github.com/protocolbuffers/protobuf/archive/refs/tags/v$pkgver.tar.gz
	fix-tests.patch
	fix-upb-linkarray.patch
	soversion.patch
	"

# fails some
case "$CARCH" in
armhf) options="$options !check" ;;
esac

build() {
	export CFLAGS="$CFLAGS -DNDEBUG -O2 -flto=auto"
	export CXXFLAGS="$CXXFLAGS -DNDEBUG -O2 -flto=auto -Wno-deprecated-declarations"

	cmake -B build -G Ninja \
		-DCMAKE_BUILD_TYPE=None \
		-DCMAKE_INSTALL_PREFIX=/usr \
		-DBUILD_SHARED_LIBS=ON \
		-Dprotobuf_BUILD_TESTS="$(want_check && echo ON || echo OFF)" \
		-Dprotobuf_BUILD_LIBPROTOC=ON \
		-Dprotobuf_ABSL_PROVIDER="package" \
		-Dprotobuf_ALLOW_CCACHE=ON \
		-Dprotobuf_USE_EXTERNAL_GTEST=ON
	cmake --build build
}

check() {
	ctest --test-dir build
}

package() {
	DESTDIR="$pkgdir" cmake --install build

	sed -i \
		-e "/Requires:/s|;| |g" \
		-e "/Requires:/s|::|_|g" \
		"$pkgdir"/usr/lib/pkgconfig/protobuf.pc

	install -Dm644 editors/proto.vim \
		"$pkgdir"/usr/share/vim/vimfiles/syntax/proto.vim
}

vim() {
	pkgdesc="Vim syntax for $pkgname"
	depends=""
	install_if="$pkgname=$pkgver-r$pkgrel vim"

	amove usr/share/vim/vimfiles/syntax/proto.vim
}

libprotoc() {
	depends=""
	pkgdesc="Runtime library for Protocol Buffer compiler"

	amove usr/lib/libprotoc.so.*
}

protoc() {
	depends=""
	pkgdesc="Protocol buffer compiler binary and library"

	amove usr/bin/protoc*
}

libprotobuf() {
	depends=""
	pkgdesc="Runtime library for C++ users of protocol buffers"

	amove usr/lib/libprotobuf.so.*
}

lite() {
	depends=""
	pkgdesc="Runtime library for C++ users with 'lite runtime' setting of protocol buffers"

	amove usr/lib/libprotobuf-lite.so.*
}

sha512sums="
c888cb9961d58b7fb11a3363ff4d2684605cdd79756712f407ffe5f275569bf69b4370f1d2a0e20775646745cddd41a9b510f1c1981be4e969c9acf0dc2ba734  protobuf-29.4.tar.gz
f35a076a33766253769fd6b3abdbe9deddfbf9f9f6743c6afb3f1f0d07ab8462c68e0a00549e0b2d5400208585cdab6cdb1ccb904d33cc69c458a06425505da0  fix-tests.patch
91487cf7f234cdb000b16406b338ce08930370a2bebf94a1552aeee0cd466d839fddeb15af24fde02c19b3904f2d97055f3c006ac1c5c4094dc2972cb8234e99  fix-upb-linkarray.patch
5ab37a77566a55f1a47287594899e07788afb939586b3249be024945af6cb28c22847b2af2b46a9bd8e497293b650c93d348514f562d271a1498b5e8ca7c612f  soversion.patch
"
