/[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.8 Revision 1.25
1# Copyright 1999-2006 Gentoo Foundation 1# Copyright 1999-2011 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.8 2008/03/22 09:37:44 remi Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/gnome2-utils.eclass,v 1.25 2011/12/14 19:47:54 tetromino 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:
44# Path to gtk-update-icon-cache
45: ${GTK_UPDATE_ICON_CACHE:="/usr/bin/gtk-update-icon-cache"}
46
47# @ECLASS-VARIABLE: GLIB_COMPILE_SCHEMAS
48# @INTERNAL
49# @DESCRIPTION:
50# Path to glib-compile-schemas
51: ${GLIB_COMPILE_SCHEMAS:="/usr/bin/glib-compile-schemas"}
52
53# @ECLASS-VARIABLE: GNOME2_ECLASS_SCHEMAS
54# @INTERNAL
55# @DEFAULT_UNSET
56# @DESCRIPTION:
57# List of GConf schemas provided by the package
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_GLIB_SCHEMAS
66# @INTERNAL
67# @DEFAULT_UNSET
68# @DESCRIPTION:
69# List of GSettings schemas provided by the package
25 70
26 71
27DEPEND=">=sys-apps/sed-4" 72DEPEND=">=sys-apps/sed-4"
28 73
29 74
75# @FUNCTION: gnome2_environment_reset
76# @DESCRIPTION:
77# Reset various variables inherited from root's evironment to a reasonable
78# default for ebuilds to help avoid access violations and test failures.
79gnome2_environment_reset() {
80 # Respected by >=glib-2.30.1-r1
81 export G_HOME="${T}"
30 82
83 # GST_REGISTRY is to work around gst utilities trying to read/write /root
84 export GST_REGISTRY="${T}/registry.xml"
85
86 # XXX: code for resetting XDG_* directories should probably be moved into
87 # a separate function in a non-gnome eclass
88 export XDG_DATA_HOME="${T}/.local/share"
89 export XDG_CONFIG_HOME="${T}/.config"
90 export XDG_CACHE_HOME="${T}/.cache"
91 export XDG_RUNTIME_DIR="${T}/run"
92 mkdir -p "${XDG_DATA_HOME}" "${XDG_CONFIG_HOME}" "${XDG_CACHE_HOME}" \
93 "${XDG_RUNTIME_DIR}"
94 # This directory needs to be owned by the user, and chmod 0700
95 # http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
96 chmod 0700 "${XDG_RUNTIME_DIR}"
97}
98
99# @FUNCTION: gnome2_gconf_savelist
100# @DESCRIPTION:
31# Find the GConf schemas that are about to be installed and save their location 101# Find the GConf schemas that are about to be installed and save their location
32# in the GNOME2_ECLASS_SCHEMAS environment variable 102# in the GNOME2_ECLASS_SCHEMAS environment variable.
103# This function should be called from pkg_preinst.
33gnome2_gconf_savelist() { 104gnome2_gconf_savelist() {
105 has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}"
34 pushd "${D}" &> /dev/null 106 pushd "${ED}" &> /dev/null
35 export GNOME2_ECLASS_SCHEMAS=$(find 'etc/gconf/schemas/' -name '*.schemas') 107 export GNOME2_ECLASS_SCHEMAS=$(find 'etc/gconf/schemas/' -name '*.schemas' 2> /dev/null)
36 popd &> /dev/null 108 popd &> /dev/null
37} 109}
38 110
39 111# @FUNCTION: gnome2_gconf_install
112# @DESCRIPTION:
40# Applies any schema files installed by the current ebuild to Gconf's database 113# Applies any schema files installed by the current ebuild to Gconf's database
41# using gconftool-2 114# using gconftool-2.
115# This function should be called from pkg_postinst.
42gnome2_gconf_install() { 116gnome2_gconf_install() {
43 local F 117 has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}"
118 local updater="${EROOT}${GCONFTOOL_BIN}"
44 119
45 if [[ ! -x "${GCONFTOOL_BIN}" ]]; then 120 if [[ ! -x "${updater}" ]]; then
121 debug-print "${updater} is not executable"
46 return 122 return
47 fi 123 fi
48 124
49 if [[ -z "${GNOME2_ECLASS_SCHEMAS}" ]]; then 125 if [[ -z "${GNOME2_ECLASS_SCHEMAS}" ]]; then
50 einfo "No GNOME 2 GConf schemas found" 126 debug-print "No GNOME 2 GConf schemas found"
51 return 127 return
52 fi 128 fi
53 129
54 # We are ready to install the GCONF Scheme now 130 # We are ready to install the GCONF Scheme now
55 unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL 131 unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL
56 export GCONF_CONFIG_SOURCE="$("${GCONFTOOL_BIN}" --get-default-source)" 132 export GCONF_CONFIG_SOURCE="$("${updater}" --get-default-source | sed "s;:/;:${ROOT};")"
57 133
58 einfo "Installing GNOME 2 GConf schemas" 134 einfo "Installing GNOME 2 GConf schemas"
59 135
136 local F
60 for F in ${GNOME2_ECLASS_SCHEMAS}; do 137 for F in ${GNOME2_ECLASS_SCHEMAS}; do
61 if [[ -e "${ROOT}${F}" ]]; then 138 if [[ -e "${EROOT}${F}" ]]; then
62 # echo "DEBUG::gconf install ${F}" 139 debug-print "Installing schema: ${F}"
63 "${GCONFTOOL_BIN}" --makefile-install-rule "${ROOT}${F}" 1>/dev/null 140 "${updater}" --makefile-install-rule "${EROOT}${F}" 1>/dev/null
64 fi 141 fi
65 done 142 done
66 143
67 # have gconf reload the new schemas 144 # have gconf reload the new schemas
68 pids=$(pgrep -x gconfd-2) 145 pids=$(pgrep -x gconfd-2)
71 kill -HUP ${pids} 148 kill -HUP ${pids}
72 eend $? 149 eend $?
73 fi 150 fi
74} 151}
75 152
76 153# @FUNCTION: gnome2_gconf_uninstall
154# @DESCRIPTION:
77# Removes schema files previously installed by the current ebuild from Gconf's 155# Removes schema files previously installed by the current ebuild from Gconf's
78# database. 156# database.
79gnome2_gconf_uninstall() { 157gnome2_gconf_uninstall() {
158 has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}"
159 local updater="${EROOT}${GCONFTOOL_BIN}"
160
161 if [[ ! -x "${updater}" ]]; then
162 debug-print "${updater} is not executable"
163 return
164 fi
165
166 if [[ -z "${GNOME2_ECLASS_SCHEMAS}" ]]; then
167 debug-print "No GNOME 2 GConf schemas found"
168 return
169 fi
170
171 unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL
172 export GCONF_CONFIG_SOURCE="$("${updater}" --get-default-source | sed "s;:/;:${ROOT};")"
173
174 einfo "Uninstalling GNOME 2 GConf schemas"
175
80 local F 176 local F
81
82 if [[ ! -x "${GCONFTOOL_BIN}" ]]; then
83 return
84 fi
85
86 if [[ -z "${GNOME2_ECLASS_SCHEMAS}" ]]; then
87 einfo "No GNOME 2 GConf schemas found"
88 return
89 fi
90
91 unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL
92 export GCONF_CONFIG_SOURCE=$("${GCONFTOOL_BIN}" --get-default-source)
93
94 einfo "Uninstalling GNOME 2 GConf schemas"
95
96 for F in ${GNOME2_ECLASS_SCHEMAS}; do 177 for F in ${GNOME2_ECLASS_SCHEMAS}; do
97 if [[ -e "${ROOT}${F}" ]]; then 178 if [[ -e "${EROOT}${F}" ]]; then
98 # echo "DEBUG::gconf uninstall ${F}" 179 debug-print "Uninstalling gconf schema: ${F}"
99 "${GCONFTOOL_BIN}" --makefile-uninstall-rule "${ROOT}${F}" 1>/dev/null 180 "${updater}" --makefile-uninstall-rule "${EROOT}${F}" 1>/dev/null
100 fi 181 fi
101 done 182 done
102 183
103 # have gconf reload the new schemas 184 # have gconf reload the new schemas
104 pids=$(pgrep -x gconfd-2) 185 pids=$(pgrep -x gconfd-2)
107 kill -HUP ${pids} 188 kill -HUP ${pids}
108 eend $? 189 eend $?
109 fi 190 fi
110} 191}
111 192
112 193# @FUNCTION: gnome2_icon_savelist
194# @DESCRIPTION:
113# Find the icons that are about to be installed and save their location 195# Find the icons that are about to be installed and save their location
114# in the GNOME2_ECLASS_ICONS environment variable 196# in the GNOME2_ECLASS_ICONS environment variable.
197# This function should be called from pkg_preinst.
115gnome2_icons_savelist() { 198gnome2_icon_savelist() {
199 has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}"
116 pushd "${D}" &> /dev/null 200 pushd "${ED}" &> /dev/null
117 export GNOME2_ECLASS_ICONS=$(find 'usr/share/icons' -maxdepth 1 -mindepth 1 -type d) 201 export GNOME2_ECLASS_ICONS=$(find 'usr/share/icons' -maxdepth 1 -mindepth 1 -type d 2> /dev/null)
118 popd &> /dev/null 202 popd &> /dev/null
119} 203}
120 204
121 205# @FUNCTION: gnome2_icon_cache_update
206# @DESCRIPTION:
122# Updates Gtk+ icon cache files under /usr/share/icons if the current ebuild 207# Updates Gtk+ icon cache files under /usr/share/icons if the current ebuild
123# have installed anything under that location. 208# have installed anything under that location.
209# This function should be called from pkg_postinst and pkg_postrm.
124gnome2_icon_cache_update() { 210gnome2_icon_cache_update() {
125 local updater="$(type -p gtk-update-icon-cache 2> /dev/null)" 211 has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}"
212 local updater="${EROOT}${GTK_UPDATE_ICON_CACHE}"
126 213
127 if [[ ! -x "${updater}" ]] ; then 214 if [[ ! -x "${updater}" ]] ; then
128 debug-print "${updater} is not executable" 215 debug-print "${updater} is not executable"
129 return 216 return
130 fi 217 fi
131 218
132 if [[ -z "${GNOME2_ECLASS_ICONS}" ]]; then 219 if [[ -z "${GNOME2_ECLASS_ICONS}" ]]; then
220 debug-print "No icon cache to update"
133 return 221 return
134 fi 222 fi
135
136 223
137 ebegin "Updating icons cache" 224 ebegin "Updating icons cache"
138 225
139 local retval=0 226 local retval=0
140 local fails=( ) 227 local fails=( )
141 228
142 for dir in ${GNOME2_ECLASS_ICONS} 229 for dir in ${GNOME2_ECLASS_ICONS}
143 do 230 do
144 if [[ -f "${ROOT}${dir}/index.theme" ]] ; then 231 if [[ -f "${EROOT}${dir}/index.theme" ]] ; then
145 local rv=0 232 local rv=0
146 233
147 "${updater}" -qf "${ROOT}${dir}" 234 "${updater}" -qf "${EROOT}${dir}"
148 rv=$? 235 rv=$?
149 236
150 if [[ ! $rv -eq 0 ]] ; then 237 if [[ ! $rv -eq 0 ]] ; then
151 debug-print "Updating cache failed on ${ROOT}${dir}" 238 debug-print "Updating cache failed on ${EROOT}${dir}"
152 239
153 # Add to the list of failures 240 # Add to the list of failures
154 fails[$(( ${#fails[@]} + 1 ))]="${ROOT}${dir}" 241 fails[$(( ${#fails[@]} + 1 ))]="${EROOT}${dir}"
155 242
156 retval=2 243 retval=2
157 fi 244 fi
158 fi 245 fi
159 done 246 done
163 for f in "${fails[@]}" ; do 250 for f in "${fails[@]}" ; do
164 eerror "Failed to update cache with icon $f" 251 eerror "Failed to update cache with icon $f"
165 done 252 done
166} 253}
167 254
168 255# @FUNCTION: gnome2_omf_fix
256# @DESCRIPTION:
169# Workaround applied to Makefile rules in order to remove redundant 257# Workaround applied to Makefile rules in order to remove redundant
170# calls to scrollkeeper-update and sandbox violations. 258# calls to scrollkeeper-update and sandbox violations.
259# This function should be called from src_prepare.
171gnome2_omf_fix() { 260gnome2_omf_fix() {
172 local omf_makefiles filename 261 local omf_makefiles filename
173 262
174 omf_makefiles="$@" 263 omf_makefiles="$@"
175 264
176 if [[ -f ${S}/omf.make ]] ; then 265 if [[ -f ${S}/omf.make ]] ; then
177 omf_makefiles="${omf_makefiles} ${S}/omf.make" 266 omf_makefiles="${omf_makefiles} ${S}/omf.make"
178 fi 267 fi
179 268
180 # testing fixing of all makefiles found 269 # testing fixing of all makefiles found
270 # The sort is important to ensure .am is listed before the respective .in for
271 # maintainer mode regeneration not kicking in due to .am being newer than .in
181 for filename in $(find ./ -name "Makefile.in" -o -name "Makefile.am") ; do 272 for filename in $(find ./ -name "Makefile.in" -o -name "Makefile.am" |sort) ; do
182 omf_makefiles="${omf_makefiles} ${filename}" 273 omf_makefiles="${omf_makefiles} ${filename}"
183 done 274 done
184 275
185 ebegin "Fixing OMF Makefiles" 276 ebegin "Fixing OMF Makefiles"
186 277
203 fi 294 fi
204 done 295 done
205 296
206 eend $retval 297 eend $retval
207 298
208 for (( i = 0 ; i < ${#fails[@]} ; i++ )) ; do 299 for f in "${fails[@]}" ; do
209 ### HACK!! This is needed until bash 3.1 is unmasked.
210 ## The current stable version of bash lists the sizeof fails to be 1
211 ## when there are no elements in the list because it is declared local.
212 ## In order to prevent the declaration from being in global scope, we
213 ## this hack to prevent an empty error message being printed for stable
214 ## users. -- compnerd && allanonjl
215 if [[ "${fails[i]}" != "" && "${fails[i]}" != "()" ]] ; then
216 eerror "Failed to update OMF Makefile ${fails[i]}" 300 eerror "Failed to update OMF Makefile $f"
217 fi
218 done 301 done
219} 302}
220 303
221 304# @FUNCTION: gnome2_scrollkeeper_update
305# @DESCRIPTION:
222# Updates the global scrollkeeper database. 306# Updates the global scrollkeeper database.
307# This function should be called from pkg_postinst and pkg_postrm.
223gnome2_scrollkeeper_update() { 308gnome2_scrollkeeper_update() {
309 has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}"
224 if [[ -x "${SCROLLKEEPER_UPDATE_BIN}" ]]; then 310 if [[ -x "${EROOT}${SCROLLKEEPER_UPDATE_BIN}" ]]; then
225 einfo "Updating scrollkeeper database ..." 311 einfo "Updating scrollkeeper database ..."
226 "${SCROLLKEEPER_UPDATE_BIN}" -q -p "${SCROLLKEEPER_DIR}" 312 "${EROOT}${SCROLLKEEPER_UPDATE_BIN}" -q -p "${EROOT}${SCROLLKEEPER_DIR}"
227 fi 313 fi
228} 314}
315
316# @FUNCTION: gnome2_schemas_savelist
317# @DESCRIPTION:
318# Find if there is any GSettings schema to install and save the list in
319# GNOME2_ECLASS_GLIB_SCHEMAS variable.
320# This function should be called from pkg_preinst.
321gnome2_schemas_savelist() {
322 has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}"
323 pushd "${ED}" &>/dev/null
324 export GNOME2_ECLASS_GLIB_SCHEMAS=$(find 'usr/share/glib-2.0/schemas' -name '*.gschema.xml' 2>/dev/null)
325 popd &>/dev/null
326}
327
328# @FUNCTION: gnome2_schemas_update
329# @USAGE: gnome2_schemas_update
330# @DESCRIPTION:
331# Updates GSettings schemas if GNOME2_ECLASS_GLIB_SCHEMAS has some.
332# This function should be called from pkg_postinst and pkg_postrm.
333gnome2_schemas_update() {
334 has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}"
335 local updater="${EROOT}${GLIB_COMPILE_SCHEMAS}"
336
337 if [[ ! -x ${updater} ]]; then
338 debug-print "${updater} is not executable"
339 return
340 fi
341
342 if [[ -z ${GNOME2_ECLASS_GLIB_SCHEMAS} ]]; then
343 debug-print "No GSettings schemas to update"
344 return
345 fi
346
347 ebegin "Updating GSettings schemas"
348 ${updater} --allow-any-name "$@" "${EROOT%/}/usr/share/glib-2.0/schemas" &>/dev/null
349 eend $?
350}

Legend:
Removed from v.1.8  
changed lines
  Added in v.1.25

  ViewVC Help
Powered by ViewVC 1.1.20