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

EAPI=8

WX_GTK_VER="3.2-gtk3"
inherit wxwidgets cmake virtualx

DESCRIPTION="A cross-platform C++ GUI toolkit"
HOMEPAGE="https://wxwidgets.org"
VIRTUALX_REQUIRED="X"

MY_PV="204db7e"
[[ -n ${PV%%*_p*} ]] && MY_PV="v${PV}"
MY_CA="Catch-5f5e4ce"
SRC_URI="
	mirror://githubcl/${PN}/${PN}/tar.gz/${MY_PV} -> ${P}.tar.gz
	test? (
		mirror://githubcl/${PN}/${MY_CA%-*}/tar.gz/${MY_CA##*-}
		-> ${MY_CA}.tar.gz
	)
"
S="${WORKDIR}/${PN}-${MY_PV#v}"

LICENSE="wxWinLL-3 GPL-2 doc? ( wxWinFDL-3 )"
SLOT="$(ver_cut 1-2)/$(ver_cut 3)"
KEYWORDS="~amd64"
IUSE="+X curl doc debug keyring gstreamer libnotify +lzma opengl pch sdl +spell test tiff wayland webkit"
IUSE+=" chm egl gtk3 gtk4 pcre qt6 stc svg threads"
REQUIRED_USE="
	egl? ( opengl )
	test? ( tiff )
	tiff? ( X )
	spell? ( X )
	keyring? ( X )
	X? ( || ( gtk3 gtk4 qt6 ) )
	webkit? ( X gtk3 )
"
RESTRICT="!test? ( test )"
RESTRICT+=" primaryuri"

RDEPEND="
	>=dev-libs/glib-2.22:2
	dev-libs/expat
	pcre? ( dev-libs/libpcre2[pcre16,pcre32,unicode] )
	sdl? ( media-libs/libsdl2 )
	curl? ( net-misc/curl )
	lzma? ( app-arch/xz-utils )
	X? (
		media-libs/libjpeg-turbo:=
		media-libs/libpng:0=
		virtual/zlib:=
		x11-libs/cairo
		x11-libs/libSM
		x11-libs/libX11
		x11-libs/libXtst
		x11-libs/libXxf86vm
		media-libs/fontconfig
		x11-libs/pango
		keyring? ( app-crypt/libsecret )
		gstreamer? (
			media-libs/gstreamer:1.0
			media-libs/gst-plugins-base:1.0
			media-libs/gst-plugins-bad:1.0
		)
		>=dev-libs/glib-2.22:2
		libnotify? ( x11-libs/libnotify )
		opengl? (
			virtual/opengl
			wayland? ( dev-libs/wayland )
		)
		spell? ( app-text/gspell:= )
		tiff? ( media-libs/tiff:= )
		webkit? ( net-libs/webkit-gtk:4.1= )
	)
	gtk3? (
		>=x11-libs/gtk+-3.24.41-r1:3[wayland?,X?]
		x11-libs/gdk-pixbuf:2
		x11-libs/wxGTK:${WX_GTK_VER}[legacy(-)]
	)
	gtk4? (
		gui-libs/gtk:4[wayland?,X?]
		x11-libs/gdk-pixbuf:2
	)
	qt6? (
		dev-qt/qtbase:6=[gui,opengl,widgets]
	)
	chm? ( dev-libs/libmspack )
	svg? ( media-libs/nanosvg )
"
DEPEND="
	${RDEPEND}
	opengl? ( virtual/glu )
	X? ( x11-base/xorg-proto )
"
PDEPEND="
	!x11-libs/wxGTK:${WX_GTK_VER}[-legacy(-)]
"
BDEPEND="
	test? ( >=dev-util/cppunit-1.8.0 )
	>=app-eselect/eselect-wxwidgets-20131230
	virtual/pkgconfig
"
DOCS=(
	docs/{changes,readme}.txt
	docs/{base,gtk}
)
PATCHES=(
	"${FILESDIR}"/cmake.diff
)

src_prepare() {
	use test && mv "${WORKDIR}"/${MY_CA}/* 3rdparty/catch
	sed -e '/find_package(QT NAMES Qt5/d' -i build/cmake/toolkit.cmake
	cmake_src_prepare
	MY_TOOLKITS=( $(usev gtk3) $(usev gtk4) $(usev qt6) )
}

src_configure() {
	local mycmakeargs=(
		-DwxUSE_GUI=$(usex X)
		-DwxUSE_ZLIB=sys
		-DwxUSE_EXPAT=sys
		-DwxUSE_THREADS=$(usex threads)
		-DwxUSE_LIBSDL=$(usex sdl)
		-DwxUSE_REGEX=$(usex pcre sys no)
		-DwxUSE_LIBLZMA=$(usex lzma)
		-DwxUSE_WEBREQUEST_CURL=$(usex curl)
		-DwxBUILD_DEBUG_LEVEL=$(usex debug 2 1)
		-DwxBUILD_TESTS=$(usex test $(usex X ALL CONSOLE_ONLY))
	)
	if use X; then
		mycmakeargs+=(
			-DwxUSE_GRAPHICS_CONTEXT=yes
			-DwxUSE_GTKPRINT=sys
			-DwxUSE_LIBPNG=sys
			-DwxUSE_LIBJPEG=sys
			-DwxUSE_LIBGNOMEVFS=no
			-DwxUSE_MEDIACTRL=$(usex gstreamer)
			-DwxUSE_LIBNOTIFY=$(usex libnotify)
			-DwxUSE_OPENGL=$(usex opengl)
			-DwxUSE_LIBTIFF=$(usex tiff sys no)
			-DwxUSE_SECRETSTORE=$(usex keyring)
			-DwxUSE_SPELLCHECK=$(usex spell)
			-DwxUSE_NANOSVG=$(usex svg sys no)
			-DwxUSE_GLCANVAS_EGL=$(usex egl)
			-DwxUSE_LIBMSPACK=$(usex chm)
			-DwxUSE_STC=$(usex stc)
			-DwxUSE_DETECT_SM=yes
		)
		local _t
		for _t in ${MY_TOOLKITS[@]}; do
			_c=( ${mycmakeargs[*]} )
			mycmakeargs+=(
				-DwxBUILD_TOOLKIT=${_t}
			)
			[[ ${_t} == 'gtk3' ]] && \
			mycmakeargs+=(
				-DwxUSE_WEBVIEW=$(usex webkit)
			)
			BUILD_DIR="${CMAKE_USE_DIR}_${_t}" \
				cmake_src_configure
			mycmakeargs=( ${_c[*]} )
		done
	else
		cmake_src_configure
	fi
}

src_compile() {
	if use X; then
		local _t
		for _t in ${MY_TOOLKITS[@]}; do
			BUILD_DIR="${CMAKE_USE_DIR}_${_t}" \
				cmake_src_compile
		done
	else
		cmake_src_compile
	fi
}

src_test() {
	if use X; then
		local _t
		for _t in ${MY_TOOLKITS[@]}; do
			BUILD_DIR="${CMAKE_USE_DIR}_${_t}" \
				cmake_src_compile
		done
	else
		cmake_src_test
	fi
}

src_install() {
	if use X; then
		local _t _c _p=( ) _e
		for _t in ${MY_TOOLKITS[@]}; do
			_c=/usr/share/wx/${_t}
			dodir "${_c}"
			BUILD_DIR="${CMAKE_USE_DIR}_${_c##*/}" cmake_src_install
			mv "${ED}"/usr/lib64/cmake "${ED}${_c}"
			_p+=( "${EPREFIX}${_c}" )
		done
		_c="$(printf '%s/cmake:' ${_p[@]})"
		_e="${T}/99${PN}${SLOT%/*}"
		printf 'CMAKE_PREFIX_PATH="%s:${CMAKE_PREFIX_PATH}"\n' "${_c}" >\
			"${_e}"
		doenvd "${_e}"
	else
		cmake_src_install
	fi
	# Unversioned links
	rm -f "${ED}"/usr/bin/wx{-config,rc}
}