/[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.1 Revision 1.16
1# Copyright 1999-2006 Gentoo Foundation 1# Copyright 1999-2006 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.1 2006/12/13 02:25:02 leonardop Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/gnome2-utils.eclass,v 1.16 2010/12/07 06:23:34 eva Exp $
4 4
5# 5#
6# gnome2-utils.eclass 6# gnome2-utils.eclass
7# 7#
8# Set of auxiliary functions used to perform actions commonly needed by packages 8# Set of auxiliary functions used to perform actions commonly needed by packages
12# 12#
13 13
14 14
15 15
16# Path to gconftool-2 16# Path to gconftool-2
17GCONFTOOL_BIN=${GCONFTOOL_BIN:="${ROOT}usr/bin/gconftool-2"} 17: ${GCONFTOOL_BIN:="/usr/bin/gconftool-2"}
18 18
19# Directory where scrollkeeper-update should do its work 19# Directory where scrollkeeper-update should do its work
20SCROLLKEEPER_DIR=${SCROLLKEEPER_DIR:="${ROOT}var/lib/scrollkeeper"} 20: ${SCROLLKEEPER_DIR:="/var/lib/scrollkeeper"}
21 21
22# Path to scrollkeeper-update 22# Path to scrollkeeper-update
23SCROLLKEEPER_UPDATE_BIN=${SCROLLKEEPER_UPDATE_BIN:="${ROOT}usr/bin/scrollkeeper-update"} 23: ${SCROLLKEEPER_UPDATE_BIN:="/usr/bin/scrollkeeper-update"}
24
25# Path to gtk-update-icon-cache
26: ${GTK_UPDATE_ICON_CACHE:="/usr/bin/gtk-update-icon-cache"}
27
28# Path to glib-compile-schemas
29: ${GLIB_COMPILE_SCHEMAS:="/usr/bin/glib-compile-schemas"}
24 30
25 31
26 32
27DEPEND=">=sys-apps/sed-4" 33DEPEND=">=sys-apps/sed-4"
28 34
29 35
30 36
37# Find the GConf schemas that are about to be installed and save their location
38# in the GNOME2_ECLASS_SCHEMAS environment variable
39gnome2_gconf_savelist() {
40 pushd "${D}" &> /dev/null
41 export GNOME2_ECLASS_SCHEMAS=$(find 'etc/gconf/schemas/' -name '*.schemas' 2> /dev/null)
42 popd &> /dev/null
43}
44
45
31# Applies any schema files installed by the current ebuild to Gconf's database 46# Applies any schema files installed by the current ebuild to Gconf's database
32# using gconftool-2 47# using gconftool-2
33gnome2_gconf_install() { 48gnome2_gconf_install() {
34 if [[ ! -x ${GCONFTOOL_BIN} ]]; then 49 local updater="${ROOT}${GCONFTOOL_BIN}"
50 local F
51
52 if [[ ! -x "${updater}" ]]; then
53 return
54 fi
55
56 if [[ -z "${GNOME2_ECLASS_SCHEMAS}" ]]; then
57 einfo "No GNOME 2 GConf schemas found"
35 return 58 return
36 fi 59 fi
37 60
38 # We are ready to install the GCONF Scheme now 61 # We are ready to install the GCONF Scheme now
39 unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL 62 unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL
40 export GCONF_CONFIG_SOURCE=$(${GCONFTOOL_BIN} --get-default-source) 63 export GCONF_CONFIG_SOURCE="$("${updater}" --get-default-source | sed "s;:/;:${ROOT};")"
41 64
42 einfo "Installing GNOME 2 GConf schemas" 65 einfo "Installing GNOME 2 GConf schemas"
43 66
44 local contents="${ROOT}var/db/pkg/*/${PN}-${PVR}/CONTENTS" 67 for F in ${GNOME2_ECLASS_SCHEMAS}; do
45 local F
46
47 for F in $(grep "^obj /etc/gconf/schemas/.\+\.schemas\b" ${contents} | gawk '{print $2}' ); do
48 if [[ -e "${F}" ]]; then 68 if [[ -e "${ROOT}${F}" ]]; then
49 # echo "DEBUG::gconf install ${F}" 69 # echo "DEBUG::gconf install ${F}"
50 ${GCONFTOOL_BIN} --makefile-install-rule ${F} 1>/dev/null 70 "${updater}" --makefile-install-rule "${ROOT}${F}" 1>/dev/null
51 fi 71 fi
52 done 72 done
53 73
54 # have gconf reload the new schemas 74 # have gconf reload the new schemas
75 pids=$(pgrep -x gconfd-2)
76 if [[ $? == 0 ]] ; then
55 ebegin "Reloading GConf schemas" 77 ebegin "Reloading GConf schemas"
56 killall -HUP gconfd-2 78 kill -HUP ${pids}
57 eend $? 79 eend $?
80 fi
58} 81}
59 82
60 83
61# Removes schema files previously installed by the current ebuild from Gconf's 84# Removes schema files previously installed by the current ebuild from Gconf's
62# database. 85# database.
63gnome2_gconf_uninstall() { 86gnome2_gconf_uninstall() {
64 if [[ ! -x ${GCONFTOOL_BIN} ]]; then 87 local updater="${ROOT}${GCONFTOOL_BIN}"
88 local F
89
90 if [[ ! -x "${updater}" ]]; then
91 return
92 fi
93
94 if [[ -z "${GNOME2_ECLASS_SCHEMAS}" ]]; then
95 einfo "No GNOME 2 GConf schemas found"
65 return 96 return
66 fi 97 fi
67 98
68 unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL 99 unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL
69 export GCONF_CONFIG_SOURCE=$(${GCONFTOOL_BIN} --get-default-source) 100 export GCONF_CONFIG_SOURCE="$("${updater}" --get-default-source | sed "s;:/;:${ROOT};")"
70 101
71 einfo "Uninstalling GNOME 2 GConf schemas" 102 einfo "Uninstalling GNOME 2 GConf schemas"
72 103
73 local contents="${ROOT}/var/db/pkg/*/${PN}-${PVR}/CONTENTS" 104 for F in ${GNOME2_ECLASS_SCHEMAS}; do
74 local F 105 if [[ -e "${ROOT}${F}" ]]; then
75
76 for F in $(grep "obj /etc/gconf/schemas" ${contents} | sed 's:obj \([^ ]*\) .*:\1:' ); do
77 # echo "DEBUG::gconf install ${F}" 106 # echo "DEBUG::gconf uninstall ${F}"
78 ${GCONFTOOL_BIN} --makefile-uninstall-rule ${F} 1>/dev/null 107 "${updater}" --makefile-uninstall-rule "${ROOT}${F}" 1>/dev/null
108 fi
79 done 109 done
110
111 # have gconf reload the new schemas
112 pids=$(pgrep -x gconfd-2)
113 if [[ $? == 0 ]] ; then
114 ebegin "Reloading GConf schemas"
115 kill -HUP ${pids}
116 eend $?
117 fi
118}
119
120
121# Find the icons that are about to be installed and save their location
122# in the GNOME2_ECLASS_ICONS environment variable
123# That function should be called from pkg_preinst
124gnome2_icon_savelist() {
125 pushd "${D}" &> /dev/null
126 export GNOME2_ECLASS_ICONS=$(find 'usr/share/icons' -maxdepth 1 -mindepth 1 -type d 2> /dev/null)
127 popd &> /dev/null
80} 128}
81 129
82 130
83# Updates Gtk+ icon cache files under /usr/share/icons if the current ebuild 131# Updates Gtk+ icon cache files under /usr/share/icons if the current ebuild
84# have installed anything under that location. 132# have installed anything under that location.
85gnome2_icon_cache_update() { 133gnome2_icon_cache_update() {
86 local updater=$(type -p gtk-update-icon-cache 2> /dev/null) 134 local updater="${ROOT}${GTK_UPDATE_ICON_CACHE}"
87 135
88 if [[ ! -x ${updater} ]] ; then 136 if [[ ! -x "${updater}" ]] ; then
89 debug-print "${updater} is not executable" 137 debug-print "${updater} is not executable"
90
91 return 138 return
92 fi 139 fi
93 140
94 if ! grep -q "obj /usr/share/icons" ${ROOT}var/db/pkg/*/${PF}/CONTENTS 141 if [[ -z "${GNOME2_ECLASS_ICONS}" ]]; then
95 then
96 debug-print "No items to update"
97
98 return 142 return
99 fi 143 fi
144
100 145
101 ebegin "Updating icons cache" 146 ebegin "Updating icons cache"
102 147
103 local retval=0 148 local retval=0
104 local fails=( ) 149 local fails=( )
105 150
106 for dir in $(find ${ROOT}/usr/share/icons -maxdepth 1 -mindepth 1 -type d) 151 for dir in ${GNOME2_ECLASS_ICONS}
107 do 152 do
108 if [[ -f "${dir}/index.theme" ]] ; then 153 if [[ -f "${ROOT}${dir}/index.theme" ]] ; then
109 local rv=0 154 local rv=0
110 155
111 ${updater} -qf ${dir} 156 "${updater}" -qf "${ROOT}${dir}"
112 rv=$? 157 rv=$?
113 158
114 if [[ ! $rv -eq 0 ]] ; then 159 if [[ ! $rv -eq 0 ]] ; then
115 debug-print "Updating cache failed on ${dir}" 160 debug-print "Updating cache failed on ${ROOT}${dir}"
116 161
117 # Add to the list of failures 162 # Add to the list of failures
118 fails[$(( ${#fails[@]} + 1 ))]=$dir 163 fails[$(( ${#fails[@]} + 1 ))]="${ROOT}${dir}"
119 164
120 retval=2 165 retval=2
121 fi 166 fi
122 fi 167 fi
123 done 168 done
124 169
125 eend ${retval} 170 eend ${retval}
126 171
127 for (( i = 0 ; i < ${#fails[@]} ; i++ )) ; do 172 for f in "${fails[@]}" ; do
128 ### HACK!! This is needed until bash 3.1 is unmasked.
129 ## The current stable version of bash lists the sizeof fails to be 1
130 ## when there are no elements in the list because it is declared local.
131 ## In order to prevent the declaration from being in global scope, we
132 ## this hack to prevent an empty error message being printed for stable
133 ## users. -- compnerd && allanonjl
134 if [[ "${fails[i]}" != "" && "${fails[i]}" != "()" ]] ; then
135 eerror "Failed to update cache with icon ${fails[i]}" 173 eerror "Failed to update cache with icon $f"
136 fi
137 done 174 done
138} 175}
139 176
140 177
141# Workaround applied to Makefile rules in order to remove redundant 178# Workaround applied to Makefile rules in order to remove redundant
148 if [[ -f ${S}/omf.make ]] ; then 185 if [[ -f ${S}/omf.make ]] ; then
149 omf_makefiles="${omf_makefiles} ${S}/omf.make" 186 omf_makefiles="${omf_makefiles} ${S}/omf.make"
150 fi 187 fi
151 188
152 # testing fixing of all makefiles found 189 # testing fixing of all makefiles found
190 # The sort is important to ensure .am is listed before the respective .in for
191 # maintainer mode regeneration not kicking in due to .am being newer than .in
153 for filename in $(find ./ -name "Makefile.in" -o -name "Makefile.am") ; do 192 for filename in $(find ./ -name "Makefile.in" -o -name "Makefile.am" |sort) ; do
154 omf_makefiles="${omf_makefiles} ${filename}" 193 omf_makefiles="${omf_makefiles} ${filename}"
155 done 194 done
156 195
157 ebegin "Fixing OMF Makefiles" 196 ebegin "Fixing OMF Makefiles"
158 197
160 local fails=( ) 199 local fails=( )
161 200
162 for omf in ${omf_makefiles} ; do 201 for omf in ${omf_makefiles} ; do
163 local rv=0 202 local rv=0
164 203
165 sed -i -e 's:scrollkeeper-update:true:' ${omf} 204 sed -i -e 's:scrollkeeper-update:true:' "${omf}"
166 retval=$? 205 retval=$?
167 206
168 if [[ ! $rv -eq 0 ]] ; then 207 if [[ ! $rv -eq 0 ]] ; then
169 debug-print "updating of ${omf} failed" 208 debug-print "updating of ${omf} failed"
170 209
175 fi 214 fi
176 done 215 done
177 216
178 eend $retval 217 eend $retval
179 218
180 for (( i = 0 ; i < ${#fails[@]} ; i++ )) ; do 219 for f in "${fails[@]}" ; do
181 ### HACK!! This is needed until bash 3.1 is unmasked.
182 ## The current stable version of bash lists the sizeof fails to be 1
183 ## when there are no elements in the list because it is declared local.
184 ## In order to prevent the declaration from being in global scope, we
185 ## this hack to prevent an empty error message being printed for stable
186 ## users. -- compnerd && allanonjl
187 if [[ "${fails[i]}" != "" && "${fails[i]}" != "()" ]] ; then
188 eerror "Failed to update OMF Makefile ${fails[i]}" 220 eerror "Failed to update OMF Makefile $f"
189 fi
190 done 221 done
191} 222}
192 223
193 224
194# Updates the global scrollkeeper database. 225# Updates the global scrollkeeper database.
195gnome2_scrollkeeper_update() { 226gnome2_scrollkeeper_update() {
196 if [[ -x ${SCROLLKEEPER_UPDATE_BIN} ]]; then 227 if [[ -x "${ROOT}${SCROLLKEEPER_UPDATE_BIN}" ]]; then
197 einfo "Updating scrollkeeper database ..." 228 einfo "Updating scrollkeeper database ..."
198 ${SCROLLKEEPER_UPDATE_BIN} -q -p ${SCROLLKEEPER_DIR} 229 "${ROOT}${SCROLLKEEPER_UPDATE_BIN}" -q -p "${ROOT}${SCROLLKEEPER_DIR}"
199 fi 230 fi
200} 231}
201 232
233gnome2_schemas_savelist() {
234 pushd "${D}" &>/dev/null
235 export GNOME2_ECLASS_GLIB_SCHEMAS=$(find 'usr/share/glib-2.0/schemas' -name '*.gschema.xml' 2>/dev/null)
236 popd &>/dev/null
237}
238
239gnome2_schemas_update() {
240 local updater="${ROOT}${GLIB_COMPILE_SCHEMAS}"
241
242 if [[ ! -x ${updater} ]]; then
243 debug-print "${updater} is not executable"
244 return
245 fi
246
247 if [[ -z ${GNOME2_ECLASS_GLIB_SCHEMAS} ]]; then
248 debug-print "no schemas to update"
249 return
250 fi
251
252 ebegin "Updating GSettings schemas"
253 ${updater} --allow-any-name "$@" "${ROOT%/}/usr/share/glib-2.0/schemas" &>/dev/null
254 eend $?
255}

Legend:
Removed from v.1.1  
changed lines
  Added in v.1.16

  ViewVC Help
Powered by ViewVC 1.1.20