# Copyright 1999-2016 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id$

# @ECLASS: wxwidgets.eclass
# @MAINTAINER:
# wxwidgets@gentoo.org
# @BLURB: Manages build configuration for wxGTK-using packages.
# @DESCRIPTION:
#  This eclass sets up the proper environment for ebuilds using the wxGTK
#  libraries.  Ebuilds using wxPython do not need to inherit this eclass.
#
#  More specifically, this eclass controls the configuration chosen by the
#  /usr/bin/wx-config wrapper.
#
#  Using the eclass is simple:
#
#    - set WX_GTK_VER equal to a SLOT of wxGTK
#    - call setup-wxwidgets()
#
#  The configuration chosen is based on the version required and the flags
#  wxGTK was built with.

if [[ -z ${_WXWIDGETS_ECLASS} ]]; then

case ${EAPI} in
	0|1|2|3|4|5)
		inherit eutils flag-o-matic multilib

		# This was used to set up a sane default for ebuilds so they could
		# avoid calling need-wxwidgets if they didn't need a particular build.
		# This was a bad idea for a couple different reasons, and because
		# get_libdir() is now illegal in global scope in EAPI 6 we can't do it
		# anymore.  All ebuilds must now use setup-wxwidgets and this code is
		# only here for backwards compatability.
		if [[ -z ${WX_CONFIG} ]]; then
			if [[ -n ${WX_GTK_VER} ]]; then
				for _wxtoolkit in mac gtk2 base; do
					# newer versions don't have a seperate debug config
					for _wxdebug in xxx release- debug-; do
						_wxconf="${_wxtoolkit}-unicode-${_wxdebug/xxx/}${WX_GTK_VER}"

						[[ -f ${EPREFIX}/usr/$(get_libdir)/wx/config/${_wxconf} ]] \
							|| continue

						WX_CONFIG="${EPREFIX}/usr/$(get_libdir)/wx/config/${_wxconf}"
						WX_ECLASS_CONFIG="${WX_CONFIG}"
						break
					done
					[[ -n ${WX_CONFIG} ]] && break
				done
				[[ -n ${WX_CONFIG} ]] && export WX_CONFIG WX_ECLASS_CONFIG
			fi
		fi
		unset _wxtoolkit
		unset _wxdebug
		unset _wxconf
		;;
	6)
		inherit flag-o-matic multilib
		;;
	*)
		die "EAPI=${EAPI:-0} is not supported"
		;;
esac

# @FUNCTION:    setup-wxwidgets
# @DESCRIPTION:
#
#  Call this in your ebuild to set up the environment for wxGTK.  Besides
#  controlling the wx-config wrapper this exports WX_CONFIG containing
#  the path to the config in case it needs to be passed to a build system.
#
#  In wxGTK-2.9 and later it also controls the level of debugging output
#  from the libraries.  In these versions debugging features are enabled
#  by default and need to be disabled at the package level.  Because this
#  causes many warning dialogs to pop up during runtime we add -DNDEBUG to
#  CPPFLAGS to disable debugging features (unless your ebuild has a debug
#  USE flag and it's enabled).  If you don't like this behavior you can set
#  WX_DISABLE_NDEBUG to override it.
#
#  See: http://docs.wxwidgets.org/trunk/overview_debugging.html

setup-wxwidgets() {
	local wxtoolkit wxdebug wxconf

	[[ -z ${WX_GTK_VER} ]] \
		&& die "WX_GTK_VER must be set before calling $FUNCNAME."

	case "${WX_GTK_VER}" in
		3.0-gtk3)
			wxtoolkit=gtk3
			if [[ -z ${WX_DISABLE_NDEBUG} ]]; then
				( in_iuse debug && use debug ) || append-cppflags -DNDEBUG
			fi
			;;
		2.9|3.0)
			wxtoolkit=gtk2
			if [[ -z ${WX_DISABLE_NDEBUG} ]]; then
				( in_iuse debug && use debug ) || append-cppflags -DNDEBUG
			fi
			;;
		2.8)
			wxtoolkit=gtk2
			wxdebug="release-"
			has_version x11-libs/wxGTK:${WX_GTK_VER}[debug] && wxdebug="debug-"
			;;
		*)
			die "Invalid WX_GTK_VER: must be set to a valid wxGTK SLOT"
			;;
	esac

	# toolkit overrides
	if has_version "x11-libs/wxGTK:${WX_GTK_VER}[aqua]"; then
		wxtoolkit="mac"
	elif ! has_version "x11-libs/wxGTK:${WX_GTK_VER}[X]"; then
		wxtoolkit="base"
	fi

	wxconf="${wxtoolkit}-unicode-${wxdebug}${WX_GTK_VER}"

	[[ ! -f ${EPREFIX}/usr/$(get_libdir)/wx/config/${wxconf} ]] \
		&& die "Failed to find configuration ${wxconf}"

	export WX_CONFIG="${EPREFIX}/usr/$(get_libdir)/wx/config/${wxconf}"
	export WX_ECLASS_CONFIG="${WX_CONFIG}"

	echo
	einfo "Requested wxWidgets:        ${WX_GTK_VER}"
	einfo "Using wxWidgets:            ${wxconf}"
	echo
}

# deprecated
need-wxwidgets() {
	setup-wxwidgets
}

_WXWIDGETS_ECLASS=1
fi