# Copyright 1999-2024 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

EAPI=8

inherit autotools findlib

DESCRIPTION="Platform for deductive program verification"
HOMEPAGE="https://why3.lri.fr/"
SRC_URI="https://why3.gitlabpages.inria.fr/releases/${P}.tar.gz"

LICENSE="LGPL-2"
SLOT="0/${PV}"
KEYWORDS="~amd64"
IUSE="coq doc emacs gtk +ocamlopt re sexp stackify +zarith zip"

RDEPEND="
	!sci-mathematics/why3-for-spark
	>=dev-lang/ocaml-4.05.0:=[ocamlopt?]
	>=dev-ml/menhir-20170418:=
	dev-ml/num:=
	coq? ( >=sci-mathematics/coq-8.7:= )
	emacs? ( app-editors/emacs:* )
	gtk? ( dev-ml/lablgtk:=[sourceview,ocamlopt?] )
	re? ( dev-ml/re:= )
	sexp? (
		dev-ml/ppx_deriving:=[ocamlopt?]
		dev-ml/ppx_sexp_conv:=[ocamlopt?]
		dev-ml/sexplib:=[ocamlopt?]
	)
	stackify? ( dev-ml/ocamlgraph:=[ocamlopt?] )
	zarith? ( dev-ml/zarith:= )
	zip? ( dev-ml/camlzip:= )
"
DEPEND="${RDEPEND}"
BDEPEND="
	doc? (
		dev-python/sphinx
		dev-python/sphinxcontrib-bibtex
		media-gfx/graphviz
		dev-texlive/texlive-latex
		dev-texlive/texlive-fontsrecommended
		dev-texlive/texlive-latexextra
	)
"

DOCS=( CHANGES.md README.md )

PATCHES=( "${FILESDIR}"/${P}-signum.patch )

src_prepare() {
	mv configure.in configure.ac || die

	sed -i 's/configure\.in/configure.ac/g' Makefile.in || die
	sed -e '/^lib\/why3[a-z]*\$(EXE):/{n;s/-Wall/$(CFLAGS) $(LDFLAGS)/}' \
		-e '/^%.o: %.c/{n;s/\$(CC).*-o/$(CC) $(CFLAGS) -o/}' \
		-e '/\$(SPHINX)/s/ -d doc\/\.doctrees / /' \
		-i Makefile.in || die

	# remove QA warning about duplicated compressed file:
	rm examples/mlcfg/basic/why3shapes.gz || die

	eautoreconf
	default
}

src_configure() {
	local -a myconf=(
		--enable-verbose-make
		--disable-frama-c
		--disable-hypothesis-selection
		--disable-infer
		--disable-isabelle-libs
		--disable-pvs-libs
		--disable-web-ide
		$(use_enable coq coq-libs)
		$(use_enable doc)
		$(use_enable emacs emacs-compilation)
		$(use_enable gtk ide)
		$(use_enable ocamlopt native-code)
		$(use_enable re)
		$(use_enable sexp)
		$(use_enable stackify)
		$(use_enable zarith)
		$(use_enable zip)
	)
	econf "${myconf[@]}"
}

src_compile() {
	emake
	emake plugins

	use doc && emake doc
}

src_install(){
	findlib_src_preinst
	emake install install-lib DESTDIR="${ED}"

	einstalldocs
	docompress -x /usr/share/doc/${PF}/examples
	dodoc -r examples

	if use doc; then
		dodoc doc/latex/manual.pdf
		dodoc -r doc/html
	fi
}