# Maintainer: Celeste <cielesti@protonmail.com>
maintainer="Celeste <cielesti@protonmail.com>"
pkgname=cpdf
pkgver=2.8.1
pkgrel=0
pkgdesc="Coherent PDF command line tools"
url="https://community.coherentpdf.com/"
# riscv64, loongarch64: ocaml & ocaml-findlib unavailable
arch="all !riscv64 !loongarch64"
license="AGPL-3.0-or-later"
makedepends="
	bash
	ocaml
	ocaml-findlib
	ocaml-ocamldoc
	"
subpackages="
	$pkgname-doc
	ocaml-camlpdf
	ocaml-cpdf
	libcpdf
	libcpdf-static
	libcpdf-dev
	"
depends_dev="libcpdf=$pkgver-r$pkgrel"
_cpdflib=e784b34eb3551c74888d45fe358b2f46257ee9b7
_cpdflibdir="$srcdir/cpdflib-source-$_cpdflib"
source="https://github.com/johnwhitington/cpdf-source/archive/refs/tags/v$pkgver/cpdf-source-$pkgver.tar.gz
	https://github.com/johnwhitington/camlpdf/archive/refs/tags/v$pkgver/camlpdf-$pkgver.tar.gz
	https://github.com/johnwhitington/cpdflib-source/archive/$_cpdflib/cpdflib-source-$_cpdflib.tar.gz
	use-asmrun-pic-variant_patch
	"
builddir="$srcdir/$pkgname-source-$pkgver"

# compiler produces textrels on 32-bit archs
case "$CARCH" in
	arm*|x86) options="$options textrels" ;;
esac

prepare() {
	default_prepare

	mkdir -p "$tmpdir"
	ln -svf "$srcdir"/camlpdf-$pkgver "$tmpdir"/camlpdf
	ln -svf "$srcdir"/cpdf-source-$pkgver "$tmpdir"/cpdf

	ln -svf use-asmrun-pic-variant_patch \
		"$srcdir"/use-asmrun-pic-variant.patch
	builddir="$_cpdflibdir" \
	source="use-asmrun-pic-variant.patch" \
	default_prepare
}

build() {
	make -j1 -C "$srcdir/camlpdf-$pkgver"
	make -j1 OCAMLPATH="$tmpdir"
	make -j1 OCAMLPATH="$tmpdir" NCSUFFIX=.exe native-code

	cd "$_cpdflibdir"
	OCAMLPATH="$tmpdir" ./build
}

check() {
	./cpdf.exe --help

	cd "$_cpdflibdir"

	msg "Testing shared"
	CAMLPDF_REPRODUCIBLE_IDS=true \
	CPDF_REPRODUCIBLE_DATES=true \
	LD_LIBRARY_PATH="$_cpdflibdir" \
	./cpdflibtest-withshared

	# static test segfaults on 32-bit archs
	case "$CARCH" in
		arm*|x86) return 0 ;;
	esac

	msg "Testing static"
	CAMLPDF_REPRODUCIBLE_IDS=true \
	CPDF_REPRODUCIBLE_DATES=true \
	./cpdflibtest
}

package() {
	export OCAMLFIND_DESTDIR="$pkgdir/usr/lib/ocaml"
	export OCAMLFIND_LDCONF=ignore
	mkdir -p "$OCAMLFIND_DESTDIR/stublibs"

	make -C "$srcdir"/camlpdf-$pkgver install
	make install OCAMLPATH="$OCAMLFIND_DESTDIR"

	install -Dvm755 cpdf.exe "$pkgdir"/usr/bin/cpdf
	install -Dvm644 cpdfmanual.pdf \
		"$srcdir"/camlpdf-$pkgver/introduction_to_camlpdf.pdf \
		-t "$pkgdir"/usr/share/doc/$pkgname/

	cd "$_cpdflibdir"
	install -Dvm755 libcpdf.so -t "$pkgdir"/usr/lib/
	install -Dvm644 libcpdf.a -t "$pkgdir"/usr/lib/
	install -Dvm644 cpdflibwrapper.h -t "$pkgdir"/usr/include/

	# Install license because cpdflibwrapper.h says "See LICENSE for details"
	install -Dvm644 LICENSE.md "$pkgdir"/usr/share/licenses/$pkgname/LICENSE
}

camlpdf() {
	pkgdesc="OCaml library for reading, writing, and modifying PDF files"
	license="LGPL-2.1-or-later WITH OCaml-LGPL-linking-exception"

	amove \
		usr/lib/ocaml/camlpdf \
		usr/lib/ocaml/stublibs/dllcamlpdf*
}

cpdf() {
	pkgdesc="$pkgdesc (OCaml library)"

	amove usr/lib/ocaml/cpdf
}

libcpdf() {
	default_libs

	amove usr/lib/libcpdf.so
}

prepare_py_provides() {
	local datadir="${subpkgdir:-$pkgdir}"
	local pkgbasedir=${pkgbasedir:-"$startdir/pkg"}
	local controldir="$pkgbasedir"/.control.${subpkgname:-$pkgname}

	options_has "!tracedeps" && return 0

	ocaml4-abuild-find provides \
		"$datadir"/usr/lib/ocaml \
		"$controldir" \
		"$pkgver-r$pkgrel"
}

scan_python3_dependency() {
	local controldir="$2" datadir="$3"

	ocaml4-abuild-find requires \
		"$datadir"/usr/lib/ocaml \
		"$controldir"
}

sha512sums="
f325c703835a82be462cafa5fb9548329ef648e3aa66bca73c2ae1d9e99813b3008915018bf5090e0c0dd6e31509e97895b01c64a9b4484c4993be59e85995e8  cpdf-source-2.8.1.tar.gz
baf16128dbe4b3bf1cc1c726976e083cd12113de6865a1d847f1e606bdc2570ce474076d5350d705dd22f538e21dd524d9e8bd56708fedd56df822be92be36a2  camlpdf-2.8.1.tar.gz
fa15dabe4e7fe01a774b1167e2dacd1e2135f4e021d3a1de2af14eb0744d1fb9476ccbc943bb774c09cce2d9d627efd6930bb4b998271ace48212e746bf091dc  cpdflib-source-e784b34eb3551c74888d45fe358b2f46257ee9b7.tar.gz
2a2469b4a584a21e6402c75a86e6e3879dd5fc8e65d08fc1d066613b5d58169408f45c4b68ea67dfe22c7f73d73f370d82cf9db0dd98fb0977008205aed49d67  use-asmrun-pic-variant_patch
"
