/[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.3 Revision 1.23
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.3 2007/01/24 18:20:01 compnerd Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/gnome2-utils.eclass,v 1.23 2011/08/22 04:46:31 vapier 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
17GCONFTOOL_BIN=${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
20SCROLLKEEPER_DIR=${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
23SCROLLKEEPER_UPDATE_BIN=${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_gconf_savelist
76# @DESCRIPTION:
77# Find the GConf schemas that are about to be installed and save their location
78# in the GNOME2_ECLASS_SCHEMAS environment variable.
79# This function should be called from pkg_preinst.
80gnome2_gconf_savelist() {
81 has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}"
82 pushd "${ED}" &> /dev/null
83 export GNOME2_ECLASS_SCHEMAS=$(find 'etc/gconf/schemas/' -name '*.schemas' 2> /dev/null)
84 popd &> /dev/null
85}
30 86
87# @FUNCTION: gnome2_gconf_install
88# @DESCRIPTION:
31# Applies any schema files installed by the current ebuild to Gconf's database 89# Applies any schema files installed by the current ebuild to Gconf's database
32# using gconftool-2 90# using gconftool-2.
91# This function should be called from pkg_postinst.
33gnome2_gconf_install() { 92gnome2_gconf_install() {
34 if [[ ! -x ${GCONFTOOL_BIN} ]]; then 93 has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}"
94 local updater="${EROOT}${GCONFTOOL_BIN}"
95
96 if [[ ! -x "${updater}" ]]; then
97 debug-print "${updater} is not executable"
98 return
99 fi
100
101 if [[ -z "${GNOME2_ECLASS_SCHEMAS}" ]]; then
102 debug-print "No GNOME 2 GConf schemas found"
35 return 103 return
36 fi 104 fi
37 105
38 # We are ready to install the GCONF Scheme now 106 # We are ready to install the GCONF Scheme now
39 unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL 107 unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL
40 export GCONF_CONFIG_SOURCE=$(${GCONFTOOL_BIN} --get-default-source) 108 export GCONF_CONFIG_SOURCE="$("${updater}" --get-default-source | sed "s;:/;:${ROOT};")"
41 109
42 einfo "Installing GNOME 2 GConf schemas" 110 einfo "Installing GNOME 2 GConf schemas"
43 111
44 local contents="${ROOT}var/db/pkg/*/${PN}-${PVR}/CONTENTS"
45 local F 112 local F
46 113 for F in ${GNOME2_ECLASS_SCHEMAS}; do
47 for F in $(grep "^obj /etc/gconf/schemas/.\+\.schemas\b" ${contents} | gawk '{print $2}' ); do
48 if [[ -e "${F}" ]]; then 114 if [[ -e "${EROOT}${F}" ]]; then
49 # echo "DEBUG::gconf install ${F}" 115 debug-print "Installing schema: ${F}"
50 ${GCONFTOOL_BIN} --makefile-install-rule ${F} 1>/dev/null 116 "${updater}" --makefile-install-rule "${EROOT}${F}" 1>/dev/null
51 fi 117 fi
52 done 118 done
53 119
54 # have gconf reload the new schemas 120 # have gconf reload the new schemas
55 pids=$(pidof gconfd-2) 121 pids=$(pgrep -x gconfd-2)
56 if [[ $? == 0 ]] ; then 122 if [[ $? == 0 ]] ; then
57 ebegin "Reloading GConf schemas" 123 ebegin "Reloading GConf schemas"
58 kill -HUP ${pids} 124 kill -HUP ${pids}
59 eend $? 125 eend $?
60 fi 126 fi
61} 127}
62 128
63 129# @FUNCTION: gnome2_gconf_uninstall
130# @DESCRIPTION:
64# Removes schema files previously installed by the current ebuild from Gconf's 131# Removes schema files previously installed by the current ebuild from Gconf's
65# database. 132# database.
66gnome2_gconf_uninstall() { 133gnome2_gconf_uninstall() {
67 if [[ ! -x ${GCONFTOOL_BIN} ]]; then 134 has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}"
135 local updater="${EROOT}${GCONFTOOL_BIN}"
136
137 if [[ ! -x "${updater}" ]]; then
138 debug-print "${updater} is not executable"
139 return
140 fi
141
142 if [[ -z "${GNOME2_ECLASS_SCHEMAS}" ]]; then
143 debug-print "No GNOME 2 GConf schemas found"
68 return 144 return
69 fi 145 fi
70 146
71 unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL 147 unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL
72 export GCONF_CONFIG_SOURCE=$(${GCONFTOOL_BIN} --get-default-source) 148 export GCONF_CONFIG_SOURCE="$("${updater}" --get-default-source | sed "s;:/;:${ROOT};")"
73 149
74 einfo "Uninstalling GNOME 2 GConf schemas" 150 einfo "Uninstalling GNOME 2 GConf schemas"
75 151
76 local contents="${ROOT}/var/db/pkg/*/${PN}-${PVR}/CONTENTS"
77 local F 152 local F
78 153 for F in ${GNOME2_ECLASS_SCHEMAS}; do
79 for F in $(grep "obj /etc/gconf/schemas" ${contents} | sed 's:obj \([^ ]*\) .*:\1:' ); do 154 if [[ -e "${EROOT}${F}" ]]; then
80 # echo "DEBUG::gconf install ${F}" 155 debug-print "Uninstalling gconf schema: ${F}"
81 ${GCONFTOOL_BIN} --makefile-uninstall-rule ${F} 1>/dev/null 156 "${updater}" --makefile-uninstall-rule "${EROOT}${F}" 1>/dev/null
157 fi
82 done 158 done
83}
84 159
160 # have gconf reload the new schemas
161 pids=$(pgrep -x gconfd-2)
162 if [[ $? == 0 ]] ; then
163 ebegin "Reloading GConf schemas"
164 kill -HUP ${pids}
165 eend $?
166 fi
167}
85 168
169# @FUNCTION: gnome2_icon_savelist
170# @DESCRIPTION:
171# Find the icons that are about to be installed and save their location
172# in the GNOME2_ECLASS_ICONS environment variable.
173# This function should be called from pkg_preinst.
174gnome2_icon_savelist() {
175 has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}"
176 pushd "${ED}" &> /dev/null
177 export GNOME2_ECLASS_ICONS=$(find 'usr/share/icons' -maxdepth 1 -mindepth 1 -type d 2> /dev/null)
178 popd &> /dev/null
179}
180
181# @FUNCTION: gnome2_icon_cache_update
182# @DESCRIPTION:
86# Updates Gtk+ icon cache files under /usr/share/icons if the current ebuild 183# Updates Gtk+ icon cache files under /usr/share/icons if the current ebuild
87# have installed anything under that location. 184# have installed anything under that location.
185# This function should be called from pkg_postinst and pkg_postrm.
88gnome2_icon_cache_update() { 186gnome2_icon_cache_update() {
89 local updater=$(type -p gtk-update-icon-cache 2> /dev/null) 187 has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}"
188 local updater="${EROOT}${GTK_UPDATE_ICON_CACHE}"
90 189
91 if [[ ! -x ${updater} ]] ; then 190 if [[ ! -x "${updater}" ]] ; then
92 debug-print "${updater} is not executable" 191 debug-print "${updater} is not executable"
93
94 return 192 return
95 fi 193 fi
96 194
97 if ! grep -q "obj /usr/share/icons" ${ROOT}var/db/pkg/*/${PF}/CONTENTS 195 if [[ -z "${GNOME2_ECLASS_ICONS}" ]]; then
98 then
99 debug-print "No items to update" 196 debug-print "No icon cache to update"
100
101 return 197 return
102 fi 198 fi
103 199
104 ebegin "Updating icons cache" 200 ebegin "Updating icons cache"
105 201
106 local retval=0 202 local retval=0
107 local fails=( ) 203 local fails=( )
108 204
109 for dir in $(find ${ROOT}/usr/share/icons -maxdepth 1 -mindepth 1 -type d) 205 for dir in ${GNOME2_ECLASS_ICONS}
110 do 206 do
111 if [[ -f "${dir}/index.theme" ]] ; then 207 if [[ -f "${EROOT}${dir}/index.theme" ]] ; then
112 local rv=0 208 local rv=0
113 209
114 ${updater} -qf ${dir} 210 "${updater}" -qf "${EROOT}${dir}"
115 rv=$? 211 rv=$?
116 212
117 if [[ ! $rv -eq 0 ]] ; then 213 if [[ ! $rv -eq 0 ]] ; then
118 debug-print "Updating cache failed on ${dir}" 214 debug-print "Updating cache failed on ${EROOT}${dir}"
119 215
120 # Add to the list of failures 216 # Add to the list of failures
121 fails[$(( ${#fails[@]} + 1 ))]=$dir 217 fails[$(( ${#fails[@]} + 1 ))]="${EROOT}${dir}"
122 218
123 retval=2 219 retval=2
124 fi 220 fi
125 fi 221 fi
126 done 222 done
127 223
128 eend ${retval} 224 eend ${retval}
129 225
130 for (( i = 0 ; i < ${#fails[@]} ; i++ )) ; do 226 for f in "${fails[@]}" ; do
131 ### HACK!! This is needed until bash 3.1 is unmasked.
132 ## The current stable version of bash lists the sizeof fails to be 1
133 ## when there are no elements in the list because it is declared local.
134 ## In order to prevent the declaration from being in global scope, we
135 ## this hack to prevent an empty error message being printed for stable
136 ## users. -- compnerd && allanonjl
137 if [[ "${fails[i]}" != "" && "${fails[i]}" != "()" ]] ; then
138 eerror "Failed to update cache with icon ${fails[i]}" 227 eerror "Failed to update cache with icon $f"
139 fi
140 done 228 done
141} 229}
142 230
143 231# @FUNCTION: gnome2_omf_fix
232# @DESCRIPTION:
144# Workaround applied to Makefile rules in order to remove redundant 233# Workaround applied to Makefile rules in order to remove redundant
145# calls to scrollkeeper-update and sandbox violations. 234# calls to scrollkeeper-update and sandbox violations.
235# This function should be called from src_prepare.
146gnome2_omf_fix() { 236gnome2_omf_fix() {
147 local omf_makefiles filename 237 local omf_makefiles filename
148 238
149 omf_makefiles="$@" 239 omf_makefiles="$@"
150 240
151 if [[ -f ${S}/omf.make ]] ; then 241 if [[ -f ${S}/omf.make ]] ; then
152 omf_makefiles="${omf_makefiles} ${S}/omf.make" 242 omf_makefiles="${omf_makefiles} ${S}/omf.make"
153 fi 243 fi
154 244
155 # testing fixing of all makefiles found 245 # testing fixing of all makefiles found
246 # The sort is important to ensure .am is listed before the respective .in for
247 # maintainer mode regeneration not kicking in due to .am being newer than .in
156 for filename in $(find ./ -name "Makefile.in" -o -name "Makefile.am") ; do 248 for filename in $(find ./ -name "Makefile.in" -o -name "Makefile.am" |sort) ; do
157 omf_makefiles="${omf_makefiles} ${filename}" 249 omf_makefiles="${omf_makefiles} ${filename}"
158 done 250 done
159 251
160 ebegin "Fixing OMF Makefiles" 252 ebegin "Fixing OMF Makefiles"
161 253
163 local fails=( ) 255 local fails=( )
164 256
165 for omf in ${omf_makefiles} ; do 257 for omf in ${omf_makefiles} ; do
166 local rv=0 258 local rv=0
167 259
168 sed -i -e 's:scrollkeeper-update:true:' ${omf} 260 sed -i -e 's:scrollkeeper-update:true:' "${omf}"
169 retval=$? 261 retval=$?
170 262
171 if [[ ! $rv -eq 0 ]] ; then 263 if [[ ! $rv -eq 0 ]] ; then
172 debug-print "updating of ${omf} failed" 264 debug-print "updating of ${omf} failed"
173 265
178 fi 270 fi
179 done 271 done
180 272
181 eend $retval 273 eend $retval
182 274
183 for (( i = 0 ; i < ${#fails[@]} ; i++ )) ; do 275 for f in "${fails[@]}" ; do
184 ### HACK!! This is needed until bash 3.1 is unmasked.
185 ## The current stable version of bash lists the sizeof fails to be 1
186 ## when there are no elements in the list because it is declared local.
187 ## In order to prevent the declaration from being in global scope, we
188 ## this hack to prevent an empty error message being printed for stable
189 ## users. -- compnerd && allanonjl
190 if [[ "${fails[i]}" != "" && "${fails[i]}" != "()" ]] ; then
191 eerror "Failed to update OMF Makefile ${fails[i]}" 276 eerror "Failed to update OMF Makefile $f"
192 fi
193 done 277 done
194} 278}
195 279
196 280# @FUNCTION: gnome2_scrollkeeper_update
281# @DESCRIPTION:
197# Updates the global scrollkeeper database. 282# Updates the global scrollkeeper database.
283# This function should be called from pkg_postinst and pkg_postrm.
198gnome2_scrollkeeper_update() { 284gnome2_scrollkeeper_update() {
285 has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}"
199 if [[ -x ${SCROLLKEEPER_UPDATE_BIN} ]]; then 286 if [[ -x "${EROOT}${SCROLLKEEPER_UPDATE_BIN}" ]]; then
200 einfo "Updating scrollkeeper database ..." 287 einfo "Updating scrollkeeper database ..."
201 ${SCROLLKEEPER_UPDATE_BIN} -q -p ${SCROLLKEEPER_DIR} 288 "${EROOT}${SCROLLKEEPER_UPDATE_BIN}" -q -p "${EROOT}${SCROLLKEEPER_DIR}"
202 fi 289 fi
203} 290}
204 291
292# @FUNCTION: gnome2_schemas_savelist
293# @DESCRIPTION:
294# Find if there is any GSettings schema to install and save the list in
295# GNOME2_ECLASS_GLIB_SCHEMAS variable.
296# This function should be called from pkg_preinst.
297gnome2_schemas_savelist() {
298 has ${EAPI:-0} 0 1 2 && ! use prefix && ED="${D}"
299 pushd "${ED}" &>/dev/null
300 export GNOME2_ECLASS_GLIB_SCHEMAS=$(find 'usr/share/glib-2.0/schemas' -name '*.gschema.xml' 2>/dev/null)
301 popd &>/dev/null
302}
303
304# @FUNCTION: gnome2_schemas_update
305# @USAGE: gnome2_schemas_update [--uninstall]
306# @DESCRIPTION:
307# Updates GSettings schemas if GNOME2_ECLASS_GLIB_SCHEMAS has some.
308# This function should be called from pkg_postinst and pkg_postrm with --uninstall.
309gnome2_schemas_update() {
310 has ${EAPI:-0} 0 1 2 && ! use prefix && EROOT="${ROOT}"
311 local updater="${EROOT}${GLIB_COMPILE_SCHEMAS}"
312
313 if [[ ! -x ${updater} ]]; then
314 debug-print "${updater} is not executable"
315 return
316 fi
317
318 if [[ -z ${GNOME2_ECLASS_GLIB_SCHEMAS} ]]; then
319 debug-print "No GSettings schemas to update"
320 return
321 fi
322
323 ebegin "Updating GSettings schemas"
324 ${updater} --allow-any-name "$@" "${EROOT%/}/usr/share/glib-2.0/schemas" &>/dev/null
325 eend $?
326}

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.23

  ViewVC Help
Powered by ViewVC 1.1.20