# 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 }