| # Copyright 1999-2007 Gentoo Foundation |
| # Distributed under the terms of the GNU General Public License v2 |
| # $Header: /var/cvsroot/gentoo-x86/eclass/wxwidgets.eclass,v 1.29 2010/02/16 01:06:24 dirtyepic Exp $ |
| |
| # @ECLASS: wxwidgets.eclass |
| # @MAINTAINER: |
| # wxwidgets@gentoo.org |
| # @BLURB: Manages build configuration for wxGTK-using packages. |
| # @DESCRIPTION: |
| # The wxGTK libraries come in several different possible configurations |
| # (release, debug, ansi, unicode, etc.) most of which can be installed |
| # side-by-side. The purpose of this eclass is to provide ebuilds the ability |
| # to build against a specific type of profile without interfering with the |
| # user-set system configuration. |
| # |
| # Ebuilds that use wxGTK _must_ inherit this eclass. |
| # |
| # - Using this eclass - |
| # |
| # 1. set WX_GTK_VER to a valid wxGTK SLOT |
| # 2. inherit wxwidgets |
| # 3. add an appropriate DEPEND |
| # 4. done |
| # |
| # @CODE |
| # WX_GTK_VER="2.8" |
| # |
| # inherit wxwidgets |
| # |
| # DEPEND="x11-libs/wxGTK:2.8[X]" |
| # RDEPEND="${DEPEND}" |
| # [...] |
| # @CODE |
| # |
| # This will get you the default configuration, which is what you want 99% |
| # of the time (in 2.6 the default is "ansi", all other versions default to |
| # "unicode"). |
| # |
| # If your package has optional wxGTK support controlled by a USE flag or you |
| # need to use the wxBase libraries (USE="-X") then you should not set |
| # WX_GTK_VER before inherit and instead refer to the need-wxwidgets function |
| # below. |
| # |
| # The variable WX_CONFIG is exported, containing the absolute path to the |
| # wx-config file to use. Most configure scripts use this path if it's set in |
| # the environment or accept --with-wx-config="${WX_CONFIG}". |
| |
| inherit eutils multilib |
| |
| case "${EAPI:-0}" in |
| 0|1) |
| EXPORT_FUNCTIONS pkg_setup |
| ;; |
| *) |
| ;; |
| esac |
| |
| # We do this globally so ebuilds can get sane defaults just by inheriting. They |
| # can be overridden with need-wxwidgets later if need be. |
| |
| # ensure this only runs once |
| if [[ -z ${WX_CONFIG} ]]; then |
| # and only if WX_GTK_VER is set before inherit |
| if [[ -n ${WX_GTK_VER} ]]; then |
| if [[ ${WX_GTK_VER} == 2.6 ]]; then |
| wxchar="ansi" |
| else |
| wxchar="unicode" |
| fi |
| for wxtoolkit in gtk2 base; do |
| # newer versions don't have a seperate debug profile |
| for wxdebug in xxx release- debug-; do |
| wxconf="${wxtoolkit}-${wxchar}-${wxdebug/xxx/}${WX_GTK_VER}" |
| if [[ -f /usr/$(get_libdir)/wx/config/${wxconf} ]]; then |
| # if this is a wxBase install, die in pkg_setup |
| [[ ${wxtoolkit} == "base" ]] && WXBASE_DIE=1 |
| else |
| continue |
| fi |
| WX_CONFIG="/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 |
| |
| # @FUNCTION: wxwidgets_pkg_setup |
| # @DESCRIPTION: |
| # |
| # It's possible for wxGTK to be installed with USE="-X", resulting in something |
| # called wxBase. There's only ever been a couple packages in the tree that use |
| # wxBase so this is probably not what you want. Whenever possible, use EAPI 2 |
| # USE dependencies(tm) to ensure that wxGTK was built with USE="X". This |
| # function is only exported for EAPI 0 or 1 and catches any remaining cases. |
| # |
| # If you do use wxBase, don't set WX_GTK_VER before inherit. Use |
| # need-wxwidgets() instead. |
| |
| wxwidgets_pkg_setup() { |
| [[ -n $WXBASE_DIE ]] && check_wxuse X |
| } |
| |
| # @FUNCTION: need-wxwidgets |
| # @USAGE: <configuration> |
| # @DESCRIPTION: |
| # |
| # Available configurations are: |
| # |
| # [2.6] ansi [>=2.8] unicode |
| # unicode base-unicode |
| # base |
| # base-unicode |
| # |
| # If your package has optional wxGTK support controlled by a USE flag, set |
| # WX_GTK_VER inside a conditional rather than before inherit. Some broken |
| # configure scripts will force wxGTK on if they find ${WX_CONFIG} set. |
| # |
| # @CODE |
| # src_configure() { |
| # if use wxwidgets; then |
| # WX_GTK_VER="2.8" |
| # if use X; then |
| # need-wxwidgets unicode |
| # else |
| # need-wxwidgets base-unicode |
| # fi |
| # fi |
| # @CODE |
| # |
| |
| need-wxwidgets() { |
| debug-print-function $FUNCNAME $* |
| |
| local wxtoolkit wxchar wxdebug wxconf |
| |
| if [[ -z ${WX_GTK_VER} ]]; then |
| echo |
| eerror "WX_GTK_VER must be set before calling $FUNCNAME." |
| echo |
| die "WX_GTK_VER missing" |
| fi |
| |
| if [[ ${WX_GTK_VER} != 2.6 && ${WX_GTK_VER} != 2.8 && ${WX_GTK_VER} != 2.9 ]]; then |
| echo |
| eerror "Invalid WX_GTK_VER: ${WX_GTK_VER} - must be set to a valid wxGTK SLOT." |
| echo |
| die "Invalid WX_GTK_VER" |
| fi |
| |
| debug-print "WX_GTK_VER is ${WX_GTK_VER}" |
| |
| case $1 in |
| ansi) |
| debug-print-section ansi |
| if [[ ${WX_GTK_VER} == 2.6 ]]; then |
| wxchar="ansi" |
| else |
| wxchar="unicode" |
| fi |
| check_wxuse X |
| ;; |
| unicode) |
| debug-print-section unicode |
| check_wxuse X |
| [[ ${WX_GTK_VER} == 2.6 ]] && check_wxuse unicode |
| wxchar="unicode" |
| ;; |
| base) |
| debug-print-section base |
| if [[ ${WX_GTK_VER} == 2.6 ]]; then |
| wxchar="ansi" |
| else |
| wxchar="unicode" |
| fi |
| ;; |
| base-unicode) |
| debug-print-section base-unicode |
| [[ ${WX_GTK_VER} == 2.6 ]] && check_wxuse unicode |
| wxchar="unicode" |
| ;; |
| # backwards compatibility |
| gtk2) |
| debug-print-section gtk2 |
| if [[ ${WX_GTK_VER} == 2.6 ]]; then |
| wxchar="ansi" |
| else |
| wxchar="unicode" |
| fi |
| check_wxuse X |
| ;; |
| *) |
| echo |
| eerror "Invalid $FUNCNAME argument: $1" |
| echo |
| die "Invalid argument" |
| ;; |
| esac |
| |
| debug-print "wxchar is ${wxchar}" |
| |
| # TODO: remove built_with_use |
| |
| # wxBase can be provided by both gtk2 and base installations |
| if built_with_use =x11-libs/wxGTK-${WX_GTK_VER}* X; then |
| wxtoolkit="gtk2" |
| else |
| wxtoolkit="base" |
| fi |
| |
| debug-print "wxtoolkit is ${wxtoolkit}" |
| |
| # debug or release? |
| if [[ ${WX_GTK_VER} == 2.6 || ${WX_GTK_VER} == 2.8 ]]; then |
| if built_with_use =x11-libs/wxGTK-${WX_GTK_VER}* debug; then |
| wxdebug="debug-" |
| else |
| wxdebug="release-" |
| fi |
| fi |
| |
| debug-print "wxdebug is ${wxdebug}" |
| |
| # put it all together |
| wxconf="${wxtoolkit}-${wxchar}-${wxdebug}${WX_GTK_VER}" |
| |
| debug-print "wxconf is ${wxconf}" |
| |
| # if this doesn't work, something is seriously screwed |
| if [[ ! -f /usr/$(get_libdir)/wx/config/${wxconf} ]]; then |
| echo |
| eerror "Failed to find configuration ${wxconf}" |
| echo |
| die "Missing wx-config" |
| fi |
| |
| debug-print "Found config ${wxconf} - setting WX_CONFIG" |
| |
| export WX_CONFIG="/usr/$(get_libdir)/wx/config/${wxconf}" |
| |
| debug-print "WX_CONFIG is ${WX_CONFIG}" |
| |
| export WX_ECLASS_CONFIG="${WX_CONFIG}" |
| |
| echo |
| einfo "Requested wxWidgets: ${1} ${WX_GTK_VER}" |
| einfo "Using wxWidgets: ${wxconf}" |
| echo |
| } |
| |
| |
| # @FUNCTION: check_wxuse |
| # @USAGE: <USE flag> |
| # @DESCRIPTION: |
| # |
| # Provides a consistant way to check if wxGTK was built with a particular USE |
| # flag enabled. A better way is EAPI 2 USE dependencies (hint hint). |
| |
| check_wxuse() { |
| debug-print-function $FUNCNAME $* |
| |
| if [[ -z ${WX_GTK_VER} ]]; then |
| echo |
| eerror "WX_GTK_VER must be set before calling $FUNCNAME." |
| echo |
| die "WX_GTK_VER missing" |
| fi |
| |
| # TODO: Remove built_with_use |
| |
| ebegin "Checking wxGTK-${WX_GTK_VER} for ${1} support" |
| if built_with_use =x11-libs/wxGTK-${WX_GTK_VER}* "${1}"; then |
| eend 0 |
| else |
| eend 1 |
| echo |
| eerror "${FUNCNAME} - You have requested functionality that requires ${1} support to" |
| eerror "have been built into x11-libs/wxGTK." |
| eerror |
| eerror "Please re-merge =x11-libs/wxGTK-${WX_GTK_VER}* with the ${1} USE flag enabled." |
| die "Missing USE flags." |
| fi |
| } |