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

EAPI=8

inherit flag-o-matic toolchain-funcs

DESCRIPTION="Tcl bindings to OpenGL and other 3D libraries"
HOMEPAGE="http://www.tcl3d.org"
SRC_URI="http://www.tcl3d.org/download/${P}.distrib/${PN}-src-${PV}.zip"

LICENSE="BSD"
SLOT="0"
KEYWORDS="amd64 x86"
IUSE="debug ode osg sdl truetype"

RDEPEND="dev-lang/tcl:0=
	dev-lang/tk:0=
	x11-libs/libXi
	x11-libs/libXmu
	virtual/opengl
	virtual/glu
	ode? ( dev-games/ode )
	osg? ( dev-games/openscenegraph )
	truetype? ( media-libs/ftgl )
	sdl? ( media-libs/libsdl )"
DEPEND="${RDEPEND}
	>=dev-lang/swig-1.3.38:0=
	app-arch/unzip"

S="${WORKDIR}/${PN}"
PATCHES=(
	"${FILESDIR}/${P}-include-tk-dir-and-permissive.patch"
	"${FILESDIR}/${P}-implicit.patch"
)

src_prepare() {
	sed -i \
		-e '/\..$(DSEP)pkgIndex.tcl/d' \
		tcl3d*/Makefile \
		|| die

	default
}

src_configure() {
	local _TCL_V=( $(echo 'puts [info tclversion]' | tclsh | tr '.' ' ') )
	local _TCL_FV="${_TCL_V[0]}.${_TCL_V[1]}"

	einfo "Configuring for Tcl ${_TCL_FV}"
	sed -i \
		-e 's:^\(TCLMAJOR\) *=\(.*\)$:\1 = '${_TCL_V[0]}':' \
		-e 's:^\(TCLMINOR\) *=\(.*\)$:\1 = '${_TCL_V[1]}':' \
		-e "s:lib64:$(get_libdir):" \
		config_Linux* || die

	# Fix libSDL link
	sed -i -e 's:-lSDL-1\.2:-lSDL:g' tcl3dSDL/Makefile || die
}

src_compile() {
	append-flags -fPIC
	use debug || append-flags -DNDEBUG

	# Configure wrapper
	local CONFIG_PLUGIN="WRAP_GL2PS="
	use truetype || CONFIG_PLUGIN+=" WRAP_FTGL="
	use ode || CONFIG_PLUGIN+=" WRAP_ODE="
	use osg || CONFIG_PLUGIN+=" WRAP_OSG="
	use sdl || CONFIG_PLUGIN+=" WRAP_SDL="

	# Restricting build to -j1 since it seems that if we build it in parallel,
	# it fails with the "tcl3dOsg" project attempting to import glewdefs.i,
	# and not finding it.
	emake \
		-j1 \
		INSTDIR="/usr" \
		OPT="${CFLAGS}" \
		CC="$(tc-getCC) -c" \
		CXX="$(tc-getCXX) -c" \
		LD="$(tc-getLD)" \
		LDOUT="${LDFLAGS} -o" \
		SHLIB_LD="$(tc-getCC) -shared" \
		SHLIB_LDXX="$(tc-getCXX) -shared" \
		${CONFIG_PLUGIN}
}

src_install() {
	emake INSTDIR="${D}/usr" DESTDIR="${D}" INSTLIB="${D}/usr/$(get_libdir)" install
	insinto /usr/$(get_libdir)/${PN}${PV}
	doins pkgIndex.tcl
}