# Contributor: Sheila Aman <sheila@vulpine.house>
# Maintainer: Natanael Copa <ncopa@alpinelinux.org>
pkgname=protobuf
_gemname=google-protobuf
pkgver=23.4
_rubyver=3.23.4
pkgrel=1
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
	ruby3.0
	ruby3.0-dev
	ruby3.0-rake
	samurai
	"
checkdepends="gtest-dev"
subpackages="
	ruby3.0-$_gemname:_ruby
	$pkgname-dev
	$pkgname-vim::noarch
	protoc
	libprotoc
	libprotobuf
	libprotobuf-lite
	"
	# exclude.patch
source="$pkgname-$pkgver.tar.gz::https://github.com/protocolbuffers/protobuf/archive/refs/tags/v$pkgver.tar.gz
	exclude.patch
	protoc-cmake.patch
	ruby-fix-cflags.patch
	skip-failing-tests.patch
	soversion.patch
	trim-rakefile.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

	cd "$builddir"/ruby

	export PATH="$PATH:$builddir/build"

	# Generate proto files for built-in protocols.
	rake genproto

	gem build $_gemname.gemspec
	gem install --local \
		--install-dir dist \
		--ignore-dependencies \
		--no-document \
		--verbose \
		$_gemname
}

# TODO: Run tests for ruby gem.
check() {
	ctest --test-dir build --output-on-failure
}

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

	local gemdir="$pkgdir/$(ruby -e 'puts Gem.default_dir')"
	cd ruby/dist

	mkdir -p "$gemdir"
	cp -r extensions gems specifications "$gemdir"/

	# Remove duplicated .so libs (should be only in extensions directory).
	find "$gemdir"/gems/ -name "*.so" -delete

	# Remove unnecessary files.
	cd "$gemdir"/gems/$_gemname-$_rubyver
	rm -r ext/
}

_ruby() {
	depends=""
	pkgdesc="Ruby bindings to Google's data interchange format"

	amove usr/lib/ruby/gems
}

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="
b93a4e0339ecbe085796de5b6c61feae35229d40db9019c043090bcaa483a1cce78a99487c5638482c68832fcede5579a0e5ec731221a88359b80db9bb6dc566  protobuf-23.4.tar.gz
0d46d105a0670ab5cfcb04ed534927a71613234a88efede0b20d426e1caaa708e6ff275a09c5dab7786fe26e69e0882f022b893302e4869006b4ac55fc6172e5  exclude.patch
16b8ee0e50dbb2144ddb83654a63e410b4218e667b6b8b77c7b6f9797508f63c3e8be0f9711841bb6ebbed0883cda2394b219a62b468240f65f4dac418b5a56e  protoc-cmake.patch
0cb202a6151ae3746c09e85f2e4ce9abb0d810d4a3c84cb647fde407cf8d13894d3c9b340e06d7a3a85669da1899db265d26d8309d59249f841a40a66e045c83  ruby-fix-cflags.patch
b5070f8e150920c316130ba40f46c66eefddc634844f5d6b8ee11f6824a3707b3e74f68aa0612c16305bf096050214c6120e693225e07e0cea80e68a7830f863  skip-failing-tests.patch
850dc1d6fd3ea01f1689fd700ac35e7da0882092ab34c616702e01bdf4b5327b8ab27381ecf291431a94f54c89d31707a4a171929937e880543974cb64f9e685  soversion.patch
13514a456a50d7243baa23fe43586fc4544cda87b9e2a5afe9d2fac8afca8e8853f9b42232c3fff4c5cf2df443af32f944f451daa1d604d80fd03ee4e7abed3e  trim-rakefile.patch
"
