# Copyright 1999-2015 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 gives ebuilds the ability to build against a specific wxGTK # SLOT and profile without interfering with the system configuration. Any # ebuild with a x11-libs/wxGTK dependency must use this eclass. # # There are two ways to do it: # # - set WX_GTK_VER before inheriting the eclass # - set WX_GTK_VER and call need-wxwidgets from a phase function # # (where WX_GTK_VER is the SLOT you want) # # If your package has optional support for wxGTK (ie. by a USE flag) then # you should use need-wxwidgets. This is important because some packages # will force-enable wxGTK if they find WX_CONFIG set in the environment. # # @CODE # inherit wxwidgets # # IUSE="X wxwidgets" # DEPEND="wxwidgets? ( x11-libs/wxGTK:3.0[X?] )" # # 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 # econf --with-wx-config="${WX_CONFIG}" # } # @CODE # # That's about as complicated as it gets. 99% of ebuilds can get away with: # # @CODE # inherit wxwidgets # DEPEND="wxwidgets? ( x11-libs/wxGTK:3.0[X] ) # ... # WX_GTK_VER=2.8 need-wxwidgets unicode # @CODE # # Note: unless you know your package works with wxbase (which is very # doubtful), always depend on wxGTK[X]. # # Debugging: In wxGTK 3.0 and later debugging support is enabled in the # library by default and needs to be controlled at the package level. # Use the -DNDEBUG preprocessor flag to disable debugging features. # (Using need-wxwidgets will do this for you, see below.) inherit eutils flag-o-matic multilib # We do this in global scope so ebuilds can get sane defaults just by # inheriting. if [[ -z ${WX_CONFIG} ]]; then if [[ -n ${WX_GTK_VER} ]]; then for wxtoolkit in mac gtk3 base; do # newer versions don't have a seperate debug profile 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 # @FUNCTION: need-wxwidgets # @USAGE: # @DESCRIPTION: # # Available profiles are: # # unicode (USE="X") # base-unicode (USE="-X") # # This lets you choose which config file from /usr/lib/wx/config is used when # building the package. It also exports ${WX_CONFIG} with the full path to # that config. # # If your ebuild does not have a debug USE flag, or it has one and it is # disabled, -DNDEBUG will be automatically added to CPPFLAGS. This can be # overridden by setting WX_DISABLE_DEBUG if you want to handle it yourself. need-wxwidgets() { local wxtoolkit wxdebug wxconf if [[ -z ${WX_GTK_VER} ]]; then eerror "WX_GTK_VER must be set before calling $FUNCNAME." echo die fi if [[ ${WX_GTK_VER} != 2.8 && ${WX_GTK_VER} != 2.9 && ${WX_GTK_VER} != 3.0 ]]; then eerror "Invalid WX_GTK_VER: ${WX_GTK_VER} - must be set to a valid wxGTK SLOT." echo die fi case $1 in unicode|base-unicode) ;; *) eerror "Invalid $FUNCNAME profile: $1" echo die ;; esac # wxbase is provided by both gtk3 and base installations 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="gtk3" else wxtoolkit="base" fi # 2.8 has a separate debug element if [[ ${WX_GTK_VER} == 2.8 ]]; then if has_version "x11-libs/wxGTK:${WX_GTK_VER}[debug]"; then wxdebug="debug-" else wxdebug="release-" fi else if [[ -z ${WX_DISABLE_DEBUG} ]]; then use_if_iuse debug || append-cppflags -DNDEBUG fi fi wxconf="${wxtoolkit}-unicode-${wxdebug}${WX_GTK_VER}" if [[ ! -f ${EPREFIX}/usr/$(get_libdir)/wx/config/${wxconf} ]]; then echo eerror "Failed to find configuration ${wxconf}" echo die fi export WX_CONFIG="${EPREFIX}/usr/$(get_libdir)/wx/config/${wxconf}" export WX_ECLASS_CONFIG="${WX_CONFIG}" echo einfo "Requested wxWidgets: ${1} ${WX_GTK_VER}" einfo "Using wxWidgets: ${wxconf}" echo }