summaryrefslogtreecommitdiff
blob: ea7cf9f4c75bf2a6e8bd5a4561f1976e4a30cfb9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# 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:2.8[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:2.8[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 gtk2 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:       <profile>
# @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 gtk2 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="gtk2"
	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
}