/[gentoo-x86]/eclass/gnome2-utils.eclass
Gentoo

Diff of /eclass/gnome2-utils.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.15 Revision 1.27
1# Copyright 1999-2006 Gentoo Foundation 1# Copyright 1999-2012 Gentoo Foundation
2# Distributed under the terms of the GNU General Public License v2 2# Distributed under the terms of the GNU General Public License v2
3# $Header: /var/cvsroot/gentoo-x86/eclass/gnome2-utils.eclass,v 1.15 2010/12/07 06:21:59 eva Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/gnome2-utils.eclass,v 1.27 2012/05/02 21:05:38 eva Exp $
4 4
5#
6# gnome2-utils.eclass 5# @ECLASS: gnome2-utils.eclass
7# 6# @MAINTAINER:
8# Set of auxiliary functions used to perform actions commonly needed by packages 7# gnome@gentoo.org
9# using the GNOME framework. 8# @BLURB: Auxiliary functions commonly used by Gnome packages.
10# 9# @DESCRIPTION:
11# Maintained by Gentoo's GNOME herd <gnome@gentoo.org> 10# This eclass provides a set of auxiliary functions needed by most Gnome
12# 11# packages. It may be used by non-Gnome packages as needed for handling various
12# Gnome stack related functions such as:
13# * Gtk+ icon cache management
14# * GSettings schemas management
15# * GConf schemas management
16# * scrollkeeper (old Gnome help system) management
13 17
18case "${EAPI:-0}" in
19 0|1|2|3|4) ;;
20 *) die "EAPI=${EAPI} is not supported" ;;
21esac
14 22
15 23# @ECLASS-VARIABLE: GCONFTOOL_BIN
24# @INTERNAL
25# @DESCRIPTION:
16# Path to gconftool-2 26# Path to gconftool-2
17: ${GCONFTOOL_BIN:="${ROOT}usr/bin/gconftool-2"} 27: ${GCONFTOOL_BIN:="/usr/bin/gconftool-2"}
18 28
29# @ECLASS-VARIABLE: SCROLLKEEPER_DIR
30# @INTERNAL
31# @DESCRIPTION:
19# Directory where scrollkeeper-update should do its work 32# Directory where scrollkeeper-update should do its work
20: ${SCROLLKEEPER_DIR:="${ROOT}var/lib/scrollkeeper"} 33: ${SCROLLKEEPER_DIR:="/var/lib/scrollkeeper"}
21 34
35# @ECLASS-VARIABLE: SCROLLKEEPER_UPDATE_BIN
36# @INTERNAL
37# @DESCRIPTION:
22# Path to scrollkeeper-update 38# Path to scrollkeeper-update
23: ${SCROLLKEEPER_UPDATE_BIN:="${ROOT}usr/bin/scrollkeeper-update"} 39: ${SCROLLKEEPER_UPDATE_BIN:="/usr/bin/scrollkeeper-update"}
24 40
41# @ECLASS-VARIABLE: GTK_UPDATE_ICON_CACHE
42# @INTERNAL
43# @DESCRIPTION:
25# Path to gtk-update-icon-cache 44# Path to gtk-update-icon-cache
26: ${GTK_UPDATE_ICON_CACHE:="/usr/bin/gtk-update-icon-cache"} 45: ${GTK_UPDATE_ICON_CACHE:="/usr/bin/gtk-update-icon-cache"}
27 46
47# @ECLASS-VARIABLE: GLIB_COMPILE_SCHEMAS
48# @INTERNAL
49# @DESCRIPTION:
28# Path to glib-compile-schemas 50# Path to glib-compile-schemas
29: ${GLIB_COMPILE_SCHEMAS:="/usr/bin/glib-compile-schemas"} 51: ${GLIB_COMPILE_SCHEMAS:="/usr/bin/glib-compile-schemas"}
30 52
53# @ECLASS-VARIABLE: GNOME2_ECLASS_SCHEMAS
54# @INTERNAL
55# @DEFAULT_UNSET
56# @DESCRIPTION:
57# List of GConf schemas provided by the package
31 58
59# @ECLASS-VARIABLE: GNOME2_ECLASS_ICONS
60# @INTERNAL
61# @DEFAULT_UNSET
62# @DESCRIPTION:
63# List of icons provided by the package
64
65# @ECLASS-VARIABLE: GNOME2_ECLASS_SCROLLS
66# @INTERNAL
67# @DEFAULT_UNSET
68# @DESCRIPTION:
69# List of scrolls (documentation files) provided by the package
70
71# @ECLASS-VARIABLE: GNOME2_ECLASS_GLIB_SCHEMAS
72# @INTERNAL
73# @DEFAULT_UNSET
74# @DESCRIPTION:
75# List of GSettings schemas provided by the package
32 76
33DEPEND=">=sys-apps/sed-4" 77DEPEND=">=sys-apps/sed-4"
34 78
35 79
80# @FUNCTION: gnome2_environment_reset
81# @DESCRIPTION:
82# Reset various variables inherited from root's evironment to a reasonable
83# default for ebuilds to help avoid access violations and test failures.
84gnome2_environment_reset() {
85 # Respected by >=glib-2.30.1-r1
86 export G_HOME="${T}"
36 87
88 # GST_REGISTRY is to work around gst utilities trying to read/write /root
89 export GST_REGISTRY="${T}/registry.xml"
90
91 # XXX: code for resetting XDG_* directories should probably be moved into
92 # a separate function in a non-gnome eclass
93 export XDG_DATA_HOME="${T}/.local/share"
94 export XDG_CONFIG_HOME="${T}/.config"
95 export XDG_CACHE_HOME="${T}/.cache"
96 export XDG_RUNTIME_DIR="${T}/run"
97 mkdir -p "${XDG_DATA_HOME}" "${XDG_CONFIG_HOME}" "${XDG_CACHE_HOME}" \
98 "${XDG_RUNTIME_DIR}"
99 # This directory needs to be owned by the user, and chmod 0700
100 # http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
101 chmod 0700 "${XDG_RUNTIME_DIR}"
102}
103
104# @FUNCTION: gnome2_gconf_savelist
105# @DESCRIPTION:
37# Find the GConf schemas that are about to be installed and save their location 106# Find the GConf schemas that are about to be installed and save their location
38# in the GNOME2_ECLASS_SCHEMAS environment variable 107# in the GNOME2_ECLASS_SCHEMAS environment variable.
108# This function should be called from pkg_preinst.
39gnome2_gconf_savelist() { 109gnome2_gconf_savelist() {
110 has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}"
40 pushd "${D}" &> /dev/null 111 pushd "${ED}" &> /dev/null
41 export GNOME2_ECLASS_SCHEMAS=$(find 'etc/gconf/schemas/' -name '*.schemas' 2> /dev/null) 112 export GNOME2_ECLASS_SCHEMAS=$(find 'etc/gconf/schemas/' -name '*.schemas' 2> /dev/null)
42 popd &> /dev/null 113 popd &> /dev/null
43} 114}
44 115
45 116# @FUNCTION: gnome2_gconf_install
117# @DESCRIPTION:
46# Applies any schema files installed by the current ebuild to Gconf's database 118# Applies any schema files installed by the current ebuild to Gconf's database
47# using gconftool-2 119# using gconftool-2.
120# This function should be called from pkg_postinst.
48gnome2_gconf_install() { 121gnome2_gconf_install() {
49 local F 122 has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}"
123 local updater="${EROOT}${GCONFTOOL_BIN}"
50 124
51 if [[ ! -x "${GCONFTOOL_BIN}" ]]; then 125 if [[ ! -x "${updater}" ]]; then
126 debug-print "${updater} is not executable"
52 return 127 return
53 fi 128 fi
54 129
55 if [[ -z "${GNOME2_ECLASS_SCHEMAS}" ]]; then 130 if [[ -z "${GNOME2_ECLASS_SCHEMAS}" ]]; then
56 einfo "No GNOME 2 GConf schemas found" 131 debug-print "No GNOME 2 GConf schemas found"
57 return 132 return
58 fi 133 fi
59 134
60 # We are ready to install the GCONF Scheme now 135 # We are ready to install the GCONF Scheme now
61 unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL 136 unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL
62 export GCONF_CONFIG_SOURCE="$("${GCONFTOOL_BIN}" --get-default-source | sed "s;:/;:${ROOT};")" 137 export GCONF_CONFIG_SOURCE="$("${updater}" --get-default-source | sed "s;:/;:${ROOT};")"
63 138
64 einfo "Installing GNOME 2 GConf schemas" 139 einfo "Installing GNOME 2 GConf schemas"
65 140
141 local F
66 for F in ${GNOME2_ECLASS_SCHEMAS}; do 142 for F in ${GNOME2_ECLASS_SCHEMAS}; do
67 if [[ -e "${ROOT}${F}" ]]; then 143 if [[ -e "${EROOT}${F}" ]]; then
68 # echo "DEBUG::gconf install ${F}" 144 debug-print "Installing schema: ${F}"
69 "${GCONFTOOL_BIN}" --makefile-install-rule "${ROOT}${F}" 1>/dev/null 145 "${updater}" --makefile-install-rule "${EROOT}${F}" 1>/dev/null
70 fi 146 fi
71 done 147 done
72 148
73 # have gconf reload the new schemas 149 # have gconf reload the new schemas
74 pids=$(pgrep -x gconfd-2) 150 pids=$(pgrep -x gconfd-2)
77 kill -HUP ${pids} 153 kill -HUP ${pids}
78 eend $? 154 eend $?
79 fi 155 fi
80} 156}
81 157
82 158# @FUNCTION: gnome2_gconf_uninstall
159# @DESCRIPTION:
83# Removes schema files previously installed by the current ebuild from Gconf's 160# Removes schema files previously installed by the current ebuild from Gconf's
84# database. 161# database.
85gnome2_gconf_uninstall() { 162gnome2_gconf_uninstall() {
163 has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}"
164 local updater="${EROOT}${GCONFTOOL_BIN}"
165
166 if [[ ! -x "${updater}" ]]; then
167 debug-print "${updater} is not executable"
168 return
169 fi
170
171 if [[ -z "${GNOME2_ECLASS_SCHEMAS}" ]]; then
172 debug-print "No GNOME 2 GConf schemas found"
173 return
174 fi
175
176 unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL
177 export GCONF_CONFIG_SOURCE="$("${updater}" --get-default-source | sed "s;:/;:${ROOT};")"
178
179 einfo "Uninstalling GNOME 2 GConf schemas"
180
86 local F 181 local F
87
88 if [[ ! -x "${GCONFTOOL_BIN}" ]]; then
89 return
90 fi
91
92 if [[ -z "${GNOME2_ECLASS_SCHEMAS}" ]]; then
93 einfo "No GNOME 2 GConf schemas found"
94 return
95 fi
96
97 unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL
98 export GCONF_CONFIG_SOURCE="$("${GCONFTOOL_BIN}" --get-default-source | sed "s;:/;:${ROOT};")"
99
100 einfo "Uninstalling GNOME 2 GConf schemas"
101
102 for F in ${GNOME2_ECLASS_SCHEMAS}; do 182 for F in ${GNOME2_ECLASS_SCHEMAS}; do
103 if [[ -e "${ROOT}${F}" ]]; then 183 if [[ -e "${EROOT}${F}" ]]; then
104 # echo "DEBUG::gconf uninstall ${F}" 184 debug-print "Uninstalling gconf schema: ${F}"
105 "${GCONFTOOL_BIN}" --makefile-uninstall-rule "${ROOT}${F}" 1>/dev/null 185 "${updater}" --makefile-uninstall-rule "${EROOT}${F}" 1>/dev/null
106 fi 186 fi
107 done 187 done
108 188
109 # have gconf reload the new schemas 189 # have gconf reload the new schemas
110 pids=$(pgrep -x gconfd-2) 190 pids=$(pgrep -x gconfd-2)
113 kill -HUP ${pids} 193 kill -HUP ${pids}
114 eend $? 194 eend $?
115 fi 195 fi
116} 196}
117 197
118 198# @FUNCTION: gnome2_icon_savelist
199# @DESCRIPTION:
119# Find the icons that are about to be installed and save their location 200# Find the icons that are about to be installed and save their location
120# in the GNOME2_ECLASS_ICONS environment variable 201# in the GNOME2_ECLASS_ICONS environment variable.
121# That function should be called from pkg_preinst 202# This function should be called from pkg_preinst.
122gnome2_icon_savelist() { 203gnome2_icon_savelist() {
204 has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}"
123 pushd "${D}" &> /dev/null 205 pushd "${ED}" &> /dev/null
124 export GNOME2_ECLASS_ICONS=$(find 'usr/share/icons' -maxdepth 1 -mindepth 1 -type d 2> /dev/null) 206 export GNOME2_ECLASS_ICONS=$(find 'usr/share/icons' -maxdepth 1 -mindepth 1 -type d 2> /dev/null)
125 popd &> /dev/null 207 popd &> /dev/null
126} 208}
127 209
128 210# @FUNCTION: gnome2_icon_cache_update
211# @DESCRIPTION:
129# Updates Gtk+ icon cache files under /usr/share/icons if the current ebuild 212# Updates Gtk+ icon cache files under /usr/share/icons if the current ebuild
130# have installed anything under that location. 213# have installed anything under that location.
214# This function should be called from pkg_postinst and pkg_postrm.
131gnome2_icon_cache_update() { 215gnome2_icon_cache_update() {
216 has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}"
132 local updater="${ROOT}${GTK_UPDATE_ICON_CACHE}" 217 local updater="${EROOT}${GTK_UPDATE_ICON_CACHE}"
133 218
134 if [[ ! -x "${updater}" ]] ; then 219 if [[ ! -x "${updater}" ]] ; then
135 debug-print "${updater} is not executable" 220 debug-print "${updater} is not executable"
136 return 221 return
137 fi 222 fi
138 223
139 if [[ -z "${GNOME2_ECLASS_ICONS}" ]]; then 224 if [[ -z "${GNOME2_ECLASS_ICONS}" ]]; then
225 debug-print "No icon cache to update"
140 return 226 return
141 fi 227 fi
142
143 228
144 ebegin "Updating icons cache" 229 ebegin "Updating icons cache"
145 230
146 local retval=0 231 local retval=0
147 local fails=( ) 232 local fails=( )
148 233
149 for dir in ${GNOME2_ECLASS_ICONS} 234 for dir in ${GNOME2_ECLASS_ICONS}
150 do 235 do
151 if [[ -f "${ROOT}${dir}/index.theme" ]] ; then 236 if [[ -f "${EROOT}${dir}/index.theme" ]] ; then
152 local rv=0 237 local rv=0
153 238
154 "${updater}" -qf "${ROOT}${dir}" 239 "${updater}" -qf "${EROOT}${dir}"
155 rv=$? 240 rv=$?
156 241
157 if [[ ! $rv -eq 0 ]] ; then 242 if [[ ! $rv -eq 0 ]] ; then
158 debug-print "Updating cache failed on ${ROOT}${dir}" 243 debug-print "Updating cache failed on ${EROOT}${dir}"
159 244
160 # Add to the list of failures 245 # Add to the list of failures
161 fails[$(( ${#fails[@]} + 1 ))]="${ROOT}${dir}" 246 fails[$(( ${#fails[@]} + 1 ))]="${EROOT}${dir}"
162 247
163 retval=2 248 retval=2
164 fi 249 fi
250 elif [[ $(ls "${EROOT}${dir}") = "icon-theme.cache" ]]; then
251 # Clear stale cache files after theme uninstallation
252 rm "${EROOT}${dir}/icon-theme.cache"
253 fi
254
255 if [[ -z $(ls "${EROOT}${dir}") ]]; then
256 # Clear empty theme directories after theme uninstallation
257 rmdir "${EROOT}${dir}"
165 fi 258 fi
166 done 259 done
167 260
168 eend ${retval} 261 eend ${retval}
169 262
170 for f in "${fails[@]}" ; do 263 for f in "${fails[@]}" ; do
171 eerror "Failed to update cache with icon $f" 264 eerror "Failed to update cache with icon $f"
172 done 265 done
173} 266}
174 267
175 268# @FUNCTION: gnome2_omf_fix
269# @DESCRIPTION:
176# Workaround applied to Makefile rules in order to remove redundant 270# Workaround applied to Makefile rules in order to remove redundant
177# calls to scrollkeeper-update and sandbox violations. 271# calls to scrollkeeper-update and sandbox violations.
272# This function should be called from src_prepare.
178gnome2_omf_fix() { 273gnome2_omf_fix() {
179 local omf_makefiles filename 274 local omf_makefiles filename
180 275
181 omf_makefiles="$@" 276 omf_makefiles="$@"
182 277
183 if [[ -f ${S}/omf.make ]] ; then 278 if [[ -f ${S}/omf.make ]] ; then
184 omf_makefiles="${omf_makefiles} ${S}/omf.make" 279 omf_makefiles="${omf_makefiles} ${S}/omf.make"
280 fi
281
282 if [[ -f ${S}/gnome-doc-utils.make ]] ; then
283 omf_makefiles="${omf_makefiles} ${S}/gnome-doc-utils.make"
185 fi 284 fi
186 285
187 # testing fixing of all makefiles found 286 # testing fixing of all makefiles found
188 # The sort is important to ensure .am is listed before the respective .in for 287 # The sort is important to ensure .am is listed before the respective .in for
189 # maintainer mode regeneration not kicking in due to .am being newer than .in 288 # maintainer mode regeneration not kicking in due to .am being newer than .in
190 for filename in $(find ./ -name "Makefile.in" -o -name "Makefile.am" |sort) ; do 289 for filename in $(find "${S}" -name "Makefile.in" -o -name "Makefile.am" |sort) ; do
191 omf_makefiles="${omf_makefiles} ${filename}" 290 omf_makefiles="${omf_makefiles} ${filename}"
192 done 291 done
193 292
194 ebegin "Fixing OMF Makefiles" 293 ebegin "Fixing OMF Makefiles"
195 294
196 local retval=0 295 local retval=0
197 local fails=( ) 296 local fails=( )
198 297
199 for omf in ${omf_makefiles} ; do 298 for omf in ${omf_makefiles} ; do
200 local rv=0
201
202 sed -i -e 's:scrollkeeper-update:true:' "${omf}" 299 sed -i -e 's:scrollkeeper-update:true:' "${omf}"
203 retval=$? 300 retval=$?
204 301
205 if [[ ! $rv -eq 0 ]] ; then 302 if [[ $retval -ne 0 ]] ; then
206 debug-print "updating of ${omf} failed" 303 debug-print "updating of ${omf} failed"
207 304
208 # Add to the list of failures 305 # Add to the list of failures
209 fails[$(( ${#fails[@]} + 1 ))]=$omf 306 fails[$(( ${#fails[@]} + 1 ))]=$omf
210 307
217 for f in "${fails[@]}" ; do 314 for f in "${fails[@]}" ; do
218 eerror "Failed to update OMF Makefile $f" 315 eerror "Failed to update OMF Makefile $f"
219 done 316 done
220} 317}
221 318
319# @FUNCTION: gnome2_scrollkeeper_savelist
320# @DESCRIPTION:
321# Find the scrolls that are about to be installed and save their location
322# in the GNOME2_ECLASS_SCROLLS environment variable.
323# This function should be called from pkg_preinst.
324gnome2_scrollkeeper_savelist() {
325 has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}"
326 pushd "${ED}" &> /dev/null
327 export GNOME2_ECLASS_SCROLLS=$(find 'usr/share/omf' -type f -name "*.omf" 2> /dev/null)
328 popd &> /dev/null
329}
222 330
331# @FUNCTION: gnome2_scrollkeeper_update
332# @DESCRIPTION:
223# Updates the global scrollkeeper database. 333# Updates the global scrollkeeper database.
334# This function should be called from pkg_postinst and pkg_postrm.
224gnome2_scrollkeeper_update() { 335gnome2_scrollkeeper_update() {
225 if [[ -x "${SCROLLKEEPER_UPDATE_BIN}" ]]; then 336 has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}"
337 local updater="${EROOT}${SCROLLKEEPER_UPDATE_BIN}"
338
339 if [[ ! -x "${updater}" ]] ; then
340 debug-print "${updater} is not executable"
341 return
342 fi
343
344 if [[ -z "${GNOME2_ECLASS_SCROLLS}" ]]; then
345 debug-print "No scroll cache to update"
346 return
347 fi
348
226 einfo "Updating scrollkeeper database ..." 349 ebegin "Updating scrollkeeper database ..."
227 "${SCROLLKEEPER_UPDATE_BIN}" -q -p "${SCROLLKEEPER_DIR}" 350 "${updater}" -q -p "${EROOT}${SCROLLKEEPER_DIR}"
228 fi 351 eend $?
229} 352}
230 353
354# @FUNCTION: gnome2_schemas_savelist
355# @DESCRIPTION:
356# Find if there is any GSettings schema to install and save the list in
357# GNOME2_ECLASS_GLIB_SCHEMAS variable.
358# This function should be called from pkg_preinst.
231gnome2_schemas_savelist() { 359gnome2_schemas_savelist() {
360 has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}"
232 pushd "${D}" &>/dev/null 361 pushd "${ED}" &>/dev/null
233 export GNOME2_ECLASS_GLIB_SCHEMAS=$(find 'usr/share/glib-2.0/schemas' -name '*.gschema.xml' 2>/dev/null) 362 export GNOME2_ECLASS_GLIB_SCHEMAS=$(find 'usr/share/glib-2.0/schemas' -name '*.gschema.xml' 2>/dev/null)
234 popd &>/dev/null 363 popd &>/dev/null
235} 364}
236 365
366# @FUNCTION: gnome2_schemas_update
367# @USAGE: gnome2_schemas_update
368# @DESCRIPTION:
369# Updates GSettings schemas if GNOME2_ECLASS_GLIB_SCHEMAS has some.
370# This function should be called from pkg_postinst and pkg_postrm.
237gnome2_schemas_update() { 371gnome2_schemas_update() {
372 has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}"
238 local updater="${ROOT}${GLIB_COMPILE_SCHEMAS}" 373 local updater="${EROOT}${GLIB_COMPILE_SCHEMAS}"
239 374
240 if [[ ! -x ${updater} ]]; then 375 if [[ ! -x ${updater} ]]; then
241 debug-print "${updater} is not executable" 376 debug-print "${updater} is not executable"
242 return 377 return
243 fi 378 fi
244 379
245 if [[ -z ${GNOME2_ECLASS_GLIB_SCHEMAS} ]]; then 380 if [[ -z ${GNOME2_ECLASS_GLIB_SCHEMAS} ]]; then
246 debug-print "no schemas to update" 381 debug-print "No GSettings schemas to update"
247 return 382 return
248 fi 383 fi
249 384
250 ebegin "Updating GSettings schemas" 385 ebegin "Updating GSettings schemas"
251 ${updater} --allow-any-name "$@" "${ROOT%/}/usr/share/glib-2.0/schemas" &>/dev/null 386 ${updater} --allow-any-name "$@" "${EROOT%/}/usr/share/glib-2.0/schemas" &>/dev/null
252 eend $? 387 eend $?
253} 388}

Legend:
Removed from v.1.15  
changed lines
  Added in v.1.27

  ViewVC Help
Powered by ViewVC 1.1.20