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
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
|
# Copyright 1999-2014 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Header: /var/cvsroot/gentoo-x86/eclass/gnome2.eclass,v 1.125 2014/02/11 21:14:20 pacho Exp $
# @ECLASS: gnome2.eclass
# @MAINTAINER:
# gnome@gentoo.org
# @BLURB: Provides phases for Gnome/Gtk+ based packages.
# @DESCRIPTION:
# Exports portage base functions used by ebuilds written for packages using the
# GNOME framework. For additional functions, see gnome2-utils.eclass.
inherit eutils fdo-mime libtool gnome.org gnome2-utils
case "${EAPI:-0}" in
0|1)
EXPORT_FUNCTIONS src_unpack src_compile src_install pkg_preinst pkg_postinst pkg_postrm
;;
2|3|4|5)
EXPORT_FUNCTIONS src_unpack src_prepare src_configure src_compile src_install pkg_preinst pkg_postinst pkg_postrm
;;
*) die "EAPI=${EAPI} is not supported" ;;
esac
# @ECLASS-VARIABLE: G2CONF
# @DEFAULT_UNSET
# @DESCRIPTION:
# Extra configure opts passed to econf
G2CONF=${G2CONF:-""}
# @ECLASS-VARIABLE: GNOME2_LA_PUNT
# @DESCRIPTION:
# Should we delete ALL the .la files?
# NOT to be used without due consideration.
if has ${EAPI:-0} 0 1 2 3 4; then
GNOME2_LA_PUNT=${GNOME2_LA_PUNT:-"no"}
else
GNOME2_LA_PUNT=${GNOME2_LA_PUNT:-""}
fi
# @ECLASS-VARIABLE: ELTCONF
# @DEFAULT_UNSET
# @DESCRIPTION:
# Extra options passed to elibtoolize
ELTCONF=${ELTCONF:-""}
# @ECLASS-VARIABLE: USE_EINSTALL
# @DEFAULT_UNSET
# @DESCRIPTION:
# Should we use EINSTALL instead of DESTDIR. DEPRECATED
USE_EINSTALL=${USE_EINSTALL:-""}
# @ECLASS-VARIABLE: DOCS
# @DEFAULT_UNSET
# @DESCRIPTION:
# String containing documents passed to dodoc command.
# @ECLASS-VARIABLE: GCONF_DEBUG
# @DEFAULT_UNSET
# @DESCRIPTION:
# Whether to handle debug or not.
# Some gnome applications support various levels of debugging (yes, no, minimum,
# etc), but using --disable-debug also removes g_assert which makes debugging
# harder. This variable should be set to yes for such packages for the eclass
# to handle it properly. It will enable minimal debug with USE=-debug.
# Note that this is most commonly found in configure.ac as GNOME_DEBUG_CHECK.
if [[ ${GCONF_DEBUG} != "no" ]]; then
IUSE="debug"
fi
# @FUNCTION: gnome2_src_unpack
# @DESCRIPTION:
# Stub function for old EAPI.
gnome2_src_unpack() {
unpack ${A}
cd "${S}"
has ${EAPI:-0} 0 1 && gnome2_src_prepare
}
# @FUNCTION: gnome2_src_prepare
# @DESCRIPTION:
# Prepare environment for build, fix build of scrollkeeper documentation,
# run elibtoolize.
gnome2_src_prepare() {
# Prevent assorted access violations and test failures
gnome2_environment_reset
# Prevent scrollkeeper access violations
gnome2_omf_fix
# Disable all deprecation warnings
gnome2_disable_deprecation_warning
# Run libtoolize
if has ${EAPI:-0} 0 1 2 3; then
elibtoolize ${ELTCONF}
else
# Everything is fatal EAPI 4 onwards
nonfatal elibtoolize ${ELTCONF}
fi
}
# @FUNCTION: gnome2_src_configure
# @DESCRIPTION:
# Gnome specific configure handling
gnome2_src_configure() {
# Update the GNOME configuration options
if [[ ${GCONF_DEBUG} != 'no' ]] ; then
if use debug ; then
G2CONF="--enable-debug=yes ${G2CONF}"
fi
fi
# Starting with EAPI=5, we consider packages installing gtk-doc to be
# handled by adding DEPEND="dev-util/gtk-doc-am" which provides tools to
# relink URLs in documentation to already installed documentation.
# This decision also greatly helps with constantly broken doc generation.
# Remember to drop 'doc' USE flag from your package if it was only used to
# rebuild docs.
# Preserve old behavior for older EAPI.
if grep -q "enable-gtk-doc" "${ECONF_SOURCE:-.}"/configure ; then
if has ${EAPI:-0} 0 1 2 3 4 && in_iuse doc ; then
G2CONF="$(use_enable doc gtk-doc) ${G2CONF}"
else
G2CONF="--disable-gtk-doc ${G2CONF}"
fi
fi
# Pass --disable-maintainer-mode when needed
if grep -q "^[[:space:]]*AM_MAINTAINER_MODE(\[enable\])" \
"${ECONF_SOURCE:-.}"/configure.*; then
G2CONF="--disable-maintainer-mode ${G2CONF}"
fi
# Pass --disable-scrollkeeper when possible
if grep -q "disable-scrollkeeper" "${ECONF_SOURCE:-.}"/configure; then
G2CONF="--disable-scrollkeeper ${G2CONF}"
fi
# Pass --disable-silent-rules when possible (not needed for eapi5), bug #429308
if has ${EAPI:-0} 0 1 2 3 4; then
if grep -q "disable-silent-rules" "${ECONF_SOURCE:-.}"/configure; then
G2CONF="--disable-silent-rules ${G2CONF}"
fi
fi
# Pass --disable-schemas-install when possible
if grep -q "disable-schemas-install" "${ECONF_SOURCE:-.}"/configure; then
G2CONF="--disable-schemas-install ${G2CONF}"
fi
# Pass --disable-schemas-compile when possible
if grep -q "disable-schemas-compile" "${ECONF_SOURCE:-.}"/configure; then
G2CONF="--disable-schemas-compile ${G2CONF}"
fi
# Pass --enable-compile-warnings=minimum as we don't want -Werror* flags, bug #471336
if grep -q "enable-compile-warnings" "${ECONF_SOURCE:-.}"/configure; then
G2CONF="--enable-compile-warnings=minimum ${G2CONF}"
fi
# Pass --docdir with proper directory, bug #482646
if grep -q "^ *--docdir=" "${ECONF_SOURCE:-.}"/configure; then
G2CONF="--docdir="${EPREFIX}"/usr/share/doc/${PF} ${G2CONF}"
fi
# Avoid sandbox violations caused by gnome-vfs (bug #128289 and #345659)
addwrite "$(unset HOME; echo ~)/.gnome2"
econf ${G2CONF} "$@"
}
# @FUNCTION: gnome2_src_compile
# @DESCRIPTION:
# Stub function for old EAPI.
gnome2_src_compile() {
has ${EAPI:-0} 0 1 && gnome2_src_configure "$@"
emake || die "compile failure"
}
# @FUNCTION: gnome2_src_install
# @DESCRIPTION:
# Gnome specific install. Handles typical GConf and scrollkeeper setup
# in packages and removal of .la files if requested
gnome2_src_install() {
has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}"
# if this is not present, scrollkeeper-update may segfault and
# create bogus directories in /var/lib/
local sk_tmp_dir="/var/lib/scrollkeeper"
dodir "${sk_tmp_dir}" || die "dodir failed"
# we must delay gconf schema installation due to sandbox
export GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL="1"
if [[ -z "${USE_EINSTALL}" || "${USE_EINSTALL}" = "0" ]]; then
debug-print "Installing with 'make install'"
emake DESTDIR="${D}" "scrollkeeper_localstate_dir=${ED}${sk_tmp_dir} " "$@" install || die "install failed"
else
debug-print "Installing with 'einstall'"
einstall "scrollkeeper_localstate_dir=${ED}${sk_tmp_dir} " "$@" || die "einstall failed"
fi
unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL
# Handle documentation as 'default' for eapi5 and newer, bug #373131
if has ${EAPI:-0} 0 1 2 3 4; then
# Manual document installation
if [[ -n "${DOCS}" ]]; then
dodoc ${DOCS} || die "dodoc failed"
fi
else
einstalldocs
fi
# Do not keep /var/lib/scrollkeeper because:
# 1. The scrollkeeper database is regenerated at pkg_postinst()
# 2. ${ED}/var/lib/scrollkeeper contains only indexes for the current pkg
# thus it makes no sense if pkg_postinst ISN'T run for some reason.
rm -rf "${ED}${sk_tmp_dir}"
rmdir "${ED}/var/lib" 2>/dev/null
rmdir "${ED}/var" 2>/dev/null
# Make sure this one doesn't get in the portage db
rm -fr "${ED}/usr/share/applications/mimeinfo.cache"
# Delete all .la files
if has ${EAPI:-0} 0 1 2 3 4; then
if [[ "${GNOME2_LA_PUNT}" != "no" ]]; then
ebegin "Removing .la files"
if ! use_if_iuse static-libs ; then
find "${D}" -name '*.la' -exec rm -f {} + || die "la file removal failed"
fi
eend
fi
else
case "${GNOME2_LA_PUNT}" in
yes) prune_libtool_files --modules;;
no) ;;
*) prune_libtool_files;;
esac
fi
}
# @FUNCTION: gnome2_pkg_preinst
# @DESCRIPTION:
# Finds Icons, GConf and GSettings schemas for later handling in pkg_postinst
gnome2_pkg_preinst() {
gnome2_gconf_savelist
gnome2_icon_savelist
gnome2_schemas_savelist
gnome2_scrollkeeper_savelist
gnome2_gdk_pixbuf_savelist
}
# @FUNCTION: gnome2_pkg_postinst
# @DESCRIPTION:
# Handle scrollkeeper, GConf, GSettings, Icons, desktop and mime
# database updates.
gnome2_pkg_postinst() {
gnome2_gconf_install
fdo-mime_desktop_database_update
fdo-mime_mime_database_update
gnome2_icon_cache_update
gnome2_schemas_update
gnome2_scrollkeeper_update
gnome2_gdk_pixbuf_update
}
# # FIXME Handle GConf schemas removal
#gnome2_pkg_prerm() {
# gnome2_gconf_uninstall
#}
# @FUNCTION: gnome2_pkg_postrm
# @DESCRIPTION:
# Handle scrollkeeper, GSettings, Icons, desktop and mime database updates.
gnome2_pkg_postrm() {
fdo-mime_desktop_database_update
fdo-mime_mime_database_update
gnome2_icon_cache_update
gnome2_schemas_update
gnome2_scrollkeeper_update
}
|