summaryrefslogtreecommitdiff
blob: 019bc75ee79a5dcb36172481e2a758cf7084336f (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
# Copyright 1999-2021 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2

# @ECLASS: wxwidgets.eclass
# @MAINTAINER:
# wxwidgets@gentoo.org
# @SUPPORTED_EAPIS: 0 1 2 3 4 5 6 7
# @BLURB: Manages build configuration for wxGTK-using packages.
# @DESCRIPTION:
# This eclass sets up the proper environment for ebuilds using the wxGTK
# libraries.  Ebuilds using wxPython do not need to inherit this eclass.
#
# More specifically, this eclass controls the configuration chosen by the
# /usr/bin/wx-config wrapper.
#
# Using the eclass is simple:
#
#   - set WX_GTK_VER equal to a SLOT of wxGTK
#   - call setup-wxwidgets()
#
# The configuration chosen is based on the version required and the flags
# wxGTK was built with.

if [[ -z ${_WXWIDGETS_ECLASS} ]]; then
_WXWIDGETS_ECLASS=1

# @ECLASS-VARIABLE: WX_GTK_VER
# @PRE_INHERIT
# @REQUIRED
# @DESCRIPTION:
# The SLOT of the x11-libs/wxGTK you're targeting.  Needs to be defined before
# inheriting the eclass.  Can be either "3.0" or "3.0-gtk3".
case ${WX_GTK_VER} in
	3.0|3.0-gtk3) ;;
	"")           die "WX_GTK_VER not declared" ;;
	*)            die "Invalid WX_GTK_VER: must be set to a valid wxGTK SLOT ('3.0' or '3.0-gtk3')" ;;
esac
readonly WX_GTK_VER

inherit flag-o-matic

case ${EAPI:-0} in
	0|1|2|3|4|5)
		inherit eutils multilib

		# This was used to set up a sane default for ebuilds so they could
		# avoid calling need-wxwidgets if they didn't need a particular build.
		# This was a bad idea for a couple different reasons, and because
		# get_libdir() is now illegal in global scope in EAPI 6 we can't do it
		# anymore.  All ebuilds must now use setup-wxwidgets and this code is
		# only here for backwards compatability.
		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 config
					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
		unset _wxtoolkit
		unset _wxdebug
		unset _wxconf
		;;
	6)	inherit multilib ;; # compatibility only, not needed by eclass
	7)	;;
	*)	die "${ECLASS}: EAPI ${EAPI:-0} is not supported" ;;
esac

# @FUNCTION: setup-wxwidgets
# @DESCRIPTION:
# Call this in your ebuild to set up the environment for wxGTK in src_configure.
# Besides controlling the wx-config wrapper, this exports WX_CONFIG containing
# the path to the config in case it needs to be passed to the build system.
#
# This function also controls the level of debugging output from the libraries.
# Debugging features are enabled by default and need to be disabled at the
# package level.  Because this causes many warning dialogs to pop up during
# runtime, we add -DNDEBUG to CPPFLAGS to disable debugging features (unless
# your ebuild has a debug USE flag and it's enabled).  If you don't like this
# behavior, you can set WX_DISABLE_NDEBUG to override it.
#
# See: https://docs.wxwidgets.org/trunk/overview_debugging.html
setup-wxwidgets() {
	local w wxtoolkit wxconf

	case ${WX_GTK_VER} in
		3.0-gtk3) wxtoolkit=gtk3 ;;
		3.0)      wxtoolkit=gtk2 ;;
	esac

	if [[ -z ${WX_DISABLE_NDEBUG} ]]; then
		{ in_iuse debug && use debug; } || append-cppflags -DNDEBUG
	fi

	# toolkit overrides
	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="base"
	fi

	wxconf="${wxtoolkit}-unicode-${WX_GTK_VER}"
	for w in "${CHOST:-${CBUILD}}-${wxconf}" "${wxconf}"; do
		[[ -f ${ESYSROOT:-${EPREFIX}}/usr/$(get_libdir)/wx/config/${w} ]] && wxconf=${w} && break
	done || die "Failed to find configuration ${wxconf}"

	export WX_CONFIG="${ESYSROOT:-${EPREFIX}}/usr/$(get_libdir)/wx/config/${wxconf}"
	export WX_ECLASS_CONFIG="${WX_CONFIG}"

	einfo
	einfo "Requested wxWidgets:        ${WX_GTK_VER}"
	einfo "Using wxWidgets:            ${wxconf}"
	einfo
}

fi