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

EAPI=7

PYTHON_COMPAT=( python3_{9..11} )

inherit cmake fortran-2 python-any-r1

MY_P="${P}-Source"

DESCRIPTION="A set of encoding/decoding APIs and tools for WMO GRIB, BUFR, and GTS messages"
HOMEPAGE="https://confluence.ecmwf.int/display/ECC"
SRC_URI="https://confluence.ecmwf.int/download/attachments/45757960/${MY_P}.tar.gz
	extra-test? ( http://download.ecmwf.org/test-data/eccodes/${PN}_test_data.tar.gz
	http://download.ecmwf.org/test-data/eccodes/data/mercator.grib2 )"

LICENSE="Apache-2.0"
SLOT="0"
KEYWORDS="~amd64 ~arm ~x86"

IUSE="+defs examples extra-test fortran memfs netcdf jpeg2k openmp png python szip test threads"

REQUIRED_USE="
	fortran? ( !threads ( openmp ) )
	openmp? ( !threads ( fortran ) )
	threads? ( !fortran !openmp )
	test? ( defs !memfs )
	extra-test? ( test )
	!test? ( memfs? ( python ) )"

RDEPEND="
	sys-libs/zlib
	szip? ( sci-libs/szip )
	netcdf? ( >=sci-libs/netcdf-4.2[hdf5] )
	jpeg2k? ( >=media-libs/openjpeg-2:2 )
	png? ( media-libs/libpng )"

DEPEND="${RDEPEND}
	${PYTHON_DEPS}"

BDEPEND="virtual/pkgconfig"

RESTRICT="!test? ( test )"

S="${WORKDIR}/${MY_P}"

CMAKE_BUILD_TYPE=RelWithDebInfo

pkg_setup() {
	use fortran && fortran-2_pkg_setup
	use python && python-any-r1_pkg_setup
}

src_configure() {
	local mycmakeargs=(
		-DCMAKE_INSTALL_PREFIX="${EPREFIX}/usr"
		-DINSTALL_LIB_DIR="$(get_libdir)"
		-DCMAKE_SKIP_INSTALL_RPATH=TRUE
		-DENABLE_ECCODES_THREADS=$(usex threads TRUE FALSE)
		-DENABLE_ECCODES_OMP_THREADS=$(usex openmp TRUE FALSE)
		-DENABLE_EXAMPLES=OFF  # no need to build examples
		-DENABLE_INSTALL_ECCODES_DEFINITIONS=$(usex defs TRUE FALSE)
		-DENABLE_FORTRAN=$(usex fortran TRUE FALSE)
		-DENABLE_PYTHON=OFF  # py2 support is deprecated
		-DENABLE_NETCDF=$(usex netcdf TRUE FALSE)
		-DENABLE_JPG=$(usex jpeg2k TRUE FALSE)
		-DENABLE_JPG_LIBOPENJPEG=$(usex jpeg2k TRUE FALSE)
		-DENABLE_PNG=$(usex png TRUE FALSE)
		-DENABLE_MEMFS=$(usex memfs TRUE FALSE)
		-DENABLE_EXTRA_TESTS=$(usex extra-test TRUE FALSE)
		-DBUILD_SHARED_LIBS=ON
	)
	use fortran && mycmakeargs+=( -DCMAKE_Fortran_FLAGS="-fallow-argument-mismatch" )
	cmake_src_configure
}

src_install() {
	cmake_src_install

	if use examples; then
		insinto "/usr/share/${PN}/examples"
		doins -r examples/C
		use fortran && doins -r examples/F90
		use python && doins -r examples/python
	fi
}

src_test() {
	if use extra-test; then
		touch "${WORKDIR}"/data/.downloaded
		cp -r "${WORKDIR}"/data/* "${BUILD_DIR}"/data/
		cp "${DISTDIR}"/mercator.grib2 "${BUILD_DIR}"/data/
	fi

	cmake_src_test
}