summaryrefslogtreecommitdiff
path: root/eclass/wxwidgets.eclass
blob: 07e2d8c8e19a003bd67589a4ce660063d4b5a560 (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
# 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].

inherit eutils 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 configurations are:
#
#    unicode       (USE="X")
#    base-unicode  (USE="-X")

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