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

EAPI=8

inherit autotools

MY_P=${PN}_${PV}

DESCRIPTION="Really Slick OpenGL Screensavers for XScreenSaver"
HOMEPAGE="https://rss-glx.sourceforge.net"
SRC_URI="https://sourceforge.net/projects/rss-glx/files/rss-glx/${PV}/${PN}_${PV}.tar.bz2/download -> ${PN}_${PV}.tar.bz2"

LICENSE="GPL-2"
SLOT="0"
KEYWORDS="~alpha amd64 ppc ~ppc64 sparc x86"
IUSE="+bzip2 openal quesoglc"

RDEPEND="
	x11-libs/libX11
	x11-libs/libXext
	>=media-libs/glew-1.5.1:=
	media-libs/mesa[X(+)]
	>=media-gfx/imagemagick-6.4:=
	>=x11-misc/xscreensaver-5.08-r2
	bzip2? ( app-arch/bzip2 )
	openal? ( >=media-libs/freealut-1.1.0-r1 )
	quesoglc? ( media-libs/quesoglc )
"
DEPEND="
	${RDEPEND}
	x11-base/xorg-proto
"
BDEPEND="
	virtual/pkgconfig
	bzip2? ( app-arch/bzip2 )
"

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

PATCHES=(
	"${FILESDIR}"/${P}-quesoglc.patch
	"${FILESDIR}"/${P}-asneeded.patch
	"${FILESDIR}"/${P}-imagemagick-7.patch
	"${FILESDIR}"/${P}-c++11-narrowing.patch
	"${FILESDIR}"/${P}-hang.patch
	"${FILESDIR}"/${P}-matrixview-copy-font.patch
	"${FILESDIR}"/${P}-missing-include.patch
	"${FILESDIR}"/${P}-bashism.patch
	"${FILESDIR}"/${P}-strict-aliasing.patch
	"${FILESDIR}"/${P}-variable-mismatch.patch
	"${FILESDIR}"/${P}-macro-if-scope.patch
	"${FILESDIR}"/${P}-param-bound-mismatch.patch
)

src_prepare() {
	default

	sed -i \
		-e '/CFLAGS=/s:-O2:${CFLAGS}:' \
		-e '/CXXFLAGS=/s:-O2:${CXXFLAGS}:' \
		-e 's|AM_CONFIG_HEADER|AC_CONFIG_HEADERS|g' \
		configure.in || die
	mv configure.{in,ac} || die

	eautoreconf
}

src_configure() {
	econf \
		--disable-static \
		--enable-shared \
		$(use_enable bzip2) \
		$(use_enable openal sound) \
		$(use_with quesoglc) \
		--bindir="${EPREFIX}"/usr/$(get_libdir)/misc/xscreensaver \
		--with-configdir="${EPREFIX}"/usr/share/xscreensaver/config
}

src_install() {
	default
	find "${ED}" -name '*.la' -delete || die
}

pkg_postinst() {
	local xssconf="${EROOT}"/usr/share/X11/app-defaults/XScreenSaver

	if [[ -f ${xssconf} ]]; then
		sed -e '/*programs:/a\
		GL:       \"Cyclone\"  cyclone --root     \\n\\\
		GL:      \"Euphoria\"  euphoria --root    \\n\\\
		GL:    \"Fieldlines\"  fieldlines --root  \\n\\\
		GL:        \"Flocks\"  flocks --root      \\n\\\
		GL:          \"Flux\"  flux --root        \\n\\\
		GL:        \"Helios\"  helios --root      \\n\\\
		GL:    \"Hyperspace\"  hyperspace --root  \\n\\\
		GL:       \"Lattice\"  lattice --root     \\n\\\
		GL:        \"Plasma\"  plasma --root      \\n\\\
		GL:     \"Pixelcity\"  pixelcity --root   \\n\\\
		GL:     \"Skyrocket\"  skyrocket --root   \\n\\\
		GL:    \"Solarwinds\"  solarwinds --root  \\n\\\
		GL:     \"Colorfire\"  colorfire --root   \\n\\\
		GL:  \"Hufo\x27s Smoke\"  hufo_smoke --root  \\n\\\
		GL: \"Hufo\x27s Tunnel\"  hufo_tunnel --root \\n\\\
		GL:    \"Sundancer2\"  sundancer2 --root  \\n\\\
		GL:          \"BioF\"  biof --root        \\n\\\
		GL:   \"BusySpheres\"  busyspheres --root \\n\\\
		GL:   \"SpirographX\"  spirographx --root \\n\\\
		GL:    \"MatrixView\"  matrixview --root  \\n\\\
		GL:        \"Lorenz\"  lorenz --root      \\n\\\
		GL:      \"Drempels\"  drempels --root    \\n\\\
		GL:      \"Feedback\"  feedback --root    \\n\\' \
			-i "${xssconf}" || die
	fi
}

pkg_postrm() {
	local xssconf="${EROOT}"/usr/share/X11/app-defaults/XScreenSaver

	if [[ -f ${xssconf} ]]; then
		sed \
			-e '/\"Cyclone\"  cyclone/d' \
			-e '/\"Euphoria\"  euphoria/d' \
			-e '/\"Fieldlines\"  fieldlines/d' \
			-e '/\"Flocks\"  flocks/d' \
			-e '/\"Flux\"  flux/d' \
			-e '/\"Helios\"  helios/d' \
			-e '/\"Hyperspace\"  hyperspace/d' \
			-e '/\"Lattice\"  lattice/d' \
			-e '/\"Plasma\"  plasma/d' \
			-e '/\"Pixelcity\"  pixelcity/d' \
			-e '/\"Skyrocket\"  skyrocket/d' \
			-e '/\"Solarwinds\"  solarwinds/d' \
			-e '/\"Colorfire\"  colorfire/d' \
			-e '/\"Hufo.*Smoke\"  hufo_smoke/d' \
			-e '/\"Hufo.*Tunnel\"  hufo_tunnel/d' \
			-e '/\"Sundancer2\"  sundancer2/d' \
			-e '/\"BioF\"  biof/d' \
			-e '/\"BusySpheres\"  busyspheres/d' \
			-e '/\"SpirographX\"  spirographx/d' \
			-e '/\"MatrixView\"  matrixview/d' \
			-e '/\"Lorenz\"  lorenz/d' \
			-e '/\"Drempels\"  drempels/d' \
			-e '/\"Feedback\"  feedback/d' \
			-i "${xssconf}" || die
	fi
}