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

EAPI=8

inherit cmake

# Bundled third-party code
TINYNURBS_COMMIT="47115cd9b6e922b27bbc4ab01fdeac2e9ea597a4"
EARCUT_COMMIT="4811a2b69b91f6127a75e780de6e2113609ddabb"
CDT_COMMIT="4d0c9026b8ec846fe544897e7111f8f9080d5f8a"
STDUUID_COMMIT="3afe7193facd5d674de709fccc44d5055e144d7a"
UNORDERED_DENSE_COMMIT="3234af2c03549bc85656bfd3a86993bf1cd8aef1"
TINYCPPTEST_COMMIT="12e42c8ac6e032ce450fb3f772ebdfd1ddc6008c"

DESCRIPTION="Native C++ library for reading/writing IFC (from engine_web-ifc)"
HOMEPAGE="https://github.com/ThatOpen/engine_web-ifc"
SRC_URI="
	https://github.com/ThatOpen/engine_web-ifc/archive/refs/tags/${PV}.tar.gz -> ${P}.tar.gz
	https://github.com/QuimMoya/tinynurbs/archive/${TINYNURBS_COMMIT}.tar.gz
		-> tinynurbs-${TINYNURBS_COMMIT}.tar.gz
	https://github.com/mapbox/earcut.hpp/archive/${EARCUT_COMMIT}.tar.gz
		-> earcut.hpp-${EARCUT_COMMIT}.tar.gz
	https://github.com/artem-ogre/CDT/archive/${CDT_COMMIT}.tar.gz
		-> CDT-${CDT_COMMIT}.tar.gz
	https://github.com/mariusbancila/stduuid/archive/${STDUUID_COMMIT}.tar.gz
		-> stduuid-${STDUUID_COMMIT}.tar.gz
	https://github.com/martinus/unordered_dense/archive/${UNORDERED_DENSE_COMMIT}.tar.gz
		-> unordered_dense-${UNORDERED_DENSE_COMMIT}.tar.gz
	test? (
		https://github.com/kovacsv/TinyCppTest/archive/${TINYCPPTEST_COMMIT}.tar.gz
			-> TinyCppTest-${TINYCPPTEST_COMMIT}.tar.gz
	)
"
S="${WORKDIR}/engine_web-ifc-${PV}/src/cpp"

LICENSE="MPL-2.0"
SLOT="0"
KEYWORDS="~amd64"
IUSE="test"

DEPEND="
	media-libs/glm
	dev-libs/spdlog
	dev-cpp/fast_float
"
RDEPEND="${DEPEND}"
BDEPEND="virtual/pkgconfig"

RESTRICT="!test? ( test )"

PATCHES=(
	"${FILESDIR}"/${PN}-0.77-no-fetchcontent.patch
)

src_prepare() {
	cmake_src_prepare

	mkdir -p "${S}/third_party" || die

	rm -rf "${S}/third_party/tinynurbs" || die
	mv "${WORKDIR}/tinynurbs-${TINYNURBS_COMMIT}" "${S}/third_party/tinynurbs" || die

	rm -rf "${S}/third_party/earcut.hpp" || die
	mv "${WORKDIR}/earcut.hpp-${EARCUT_COMMIT}" "${S}/third_party/earcut.hpp" || die

	rm -rf "${S}/third_party/CDT" || die
	mv "${WORKDIR}/CDT-${CDT_COMMIT}" "${S}/third_party/CDT" || die

	rm -rf "${S}/third_party/stduuid" || die
	mv "${WORKDIR}/stduuid-${STDUUID_COMMIT}" "${S}/third_party/stduuid" || die

	rm -rf "${S}/third_party/unordered_dense" || die
	mv "${WORKDIR}/unordered_dense-${UNORDERED_DENSE_COMMIT}" "${S}/third_party/unordered_dense" || die

	if use test; then
		rm -rf "${S}/third_party/TinyCppTest" || die
		mv "${WORKDIR}/TinyCppTest-${TINYCPPTEST_COMMIT}" "${S}/third_party/TinyCppTest" || die
	fi
}

src_configure() {
	CMAKE_BUILD_TYPE=Release

	local mycmakeargs=(
		-DBUILD_TESTING=$(usex test)
		-DCMAKE_POSITION_INDEPENDENT_CODE=ON
	)

	cmake_src_configure
}

src_test() {
	ctest --test-dir "${BUILD_DIR}" --output-on-failure || die
}

src_install() {
	cmake_src_install

	insinto /usr/include/mapbox
	doins "${S}/third_party/earcut.hpp/include/mapbox/earcut.hpp"
}