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

EAPI=8

FORTRAN_NEEDED="fortran"
FORTRAN_STANDARD="90 2003"

inherit cmake flag-o-matic fortran-2

DESCRIPTION="CFD General Notation System standard library"
HOMEPAGE="
	https://cgns.github.io/
	https://github.com/CGNS/CGNS
"
SRC_URI="https://github.com/CGNS/CGNS/archive/v${PV}.tar.gz -> ${P}.tar.gz"
S="${WORKDIR}/CGNS-${PV}"

LICENSE="ZLIB"
SLOT="0/$(ver_cut 1-2)"
KEYWORDS="~amd64 ~arm ~arm64 ~x86 ~amd64-linux ~x86-linux"
IUSE="base-scope debug examples fortran hdf5 legacy mpi scoping szip test tools"

RDEPEND="
	hdf5? ( sci-libs/hdf5:=[mpi=,szip=] )
	tools? (
		dev-lang/tcl:=
		dev-lang/tk:=
		x11-libs/libXmu:=
		virtual/glu
		virtual/opengl
	)
"
DEPEND="${RDEPEND}"

RESTRICT="
	fortran? ( test )
	!test? ( test )
"
REQUIRED_USE="
	mpi? ( hdf5 )
	szip? ( hdf5 )
"

PATCHES=(
	"${FILESDIR}"/${PN}-4.4.0-c99.patch
)

pkg_setup() {
	use fortran && fortran-2_pkg_setup
}

src_prepare() {
	# gentoo libdir
	sed \
		-e 's|/lib|/'$(get_libdir)'|' \
		-e '/DESTINATION/s|lib|'$(get_libdir)'|g' \
		-i src/CMakeLists.txt || die
	cmake_src_prepare
}

src_configure() {
	# -Werror=lto-type-mismatch
	# https://bugs.gentoo.org/862684
	# https://github.com/CGNS/CGNS/issues/758
	filter-lto

	# Needed for 4.4.0-c99.patch as it uses an internal header (bug #934122)
	local tk_ver=$(best_version dev-lang/tk)
	tk_ver=${tk_ver#dev-lang/tk-}
	tk_ver=$(ver_cut 1-2 ${tk_ver})
	append-cppflags -I"${ESYSROOT}/usr/$(get_libdir)/tk${tk_ver}/include/generic"

	local mycmakeargs=(
		-DCGNS_BUILD_SHARED=ON
		-DCGNS_USE_SHARED=ON

		-DCGNS_BUILD_CGNSTOOLS="$(usex tools)"
		-DCGNS_ENABLE_BASE_SCOPE="$(usex base-scope)"
		-DCGNS_ENABLE_FORTRAN="$(usex fortran)"
		-DCGNS_ENABLE_HDF5="$(usex hdf5)"
		-DCGNS_ENABLE_LEGACY="$(usex legacy)"
		-DCGNS_ENABLE_SCOPING="$(usex scoping)"
		-DCGNS_ENABLE_MEM_DEBUG="$(usex debug)"
		-DCGNS_ENABLE_TESTS="$(usex test)"
	)

	if use mpi; then
		mycmakeargs+=(
			-DHDF5_NEED_MPI="$(usex mpi)"
			-DHDF5_NEED_SZIP="$(usex szip)"
			-DHDF5_NEED_ZLIB="$(usex szip)"
		)
	fi

	cmake_src_configure
}

src_install() {
	cmake_src_install
	dodoc README.md release_docs/{HISTORY,RELEASE,changes_from_2.5}.txt
	rm "${ED}/usr/$(get_libdir)/libcgns.a" || die
	dodoc release_docs/*.pdf
	docompress -x /usr/share/doc/${PF}/examples
	use examples && dodoc -r src/examples
}