/[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.2 Revision 1.12
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.2 2007/01/01 22:27:01 swegener Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/gnome2-utils.eclass,v 1.12 2008/10/19 10:35:58 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:="${ROOT}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:="${ROOT}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:="${ROOT}usr/bin/scrollkeeper-update"}
24 24
25 25
26 26
27DEPEND=">=sys-apps/sed-4" 27DEPEND=">=sys-apps/sed-4"
28 28
29
30
31# Find the GConf schemas that are about to be installed and save their location
32# in the GNOME2_ECLASS_SCHEMAS environment variable
33gnome2_gconf_savelist() {
34 pushd "${D}" &> /dev/null
35 export GNOME2_ECLASS_SCHEMAS=$(find 'etc/gconf/schemas/' -name '*.schemas' 2> /dev/null)
36 popd &> /dev/null
37}
29 38
30 39
31# Applies any schema files installed by the current ebuild to Gconf's database 40# Applies any schema files installed by the current ebuild to Gconf's database
32# using gconftool-2 41# using gconftool-2
33gnome2_gconf_install() { 42gnome2_gconf_install() {
43 local F
44
34 if [[ ! -x ${GCONFTOOL_BIN} ]]; then 45 if [[ ! -x "${GCONFTOOL_BIN}" ]]; then
46 return
47 fi
48
49 if [[ -z "${GNOME2_ECLASS_SCHEMAS}" ]]; then
50 einfo "No GNOME 2 GConf schemas found"
35 return 51 return
36 fi 52 fi
37 53
38 # We are ready to install the GCONF Scheme now 54 # We are ready to install the GCONF Scheme now
39 unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL 55 unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL
40 export GCONF_CONFIG_SOURCE=$(${GCONFTOOL_BIN} --get-default-source) 56 export GCONF_CONFIG_SOURCE="$("${GCONFTOOL_BIN}" --get-default-source | sed "s;:/;:${ROOT};")"
41 57
42 einfo "Installing GNOME 2 GConf schemas" 58 einfo "Installing GNOME 2 GConf schemas"
43 59
44 local contents="${ROOT}var/db/pkg/*/${PN}-${PVR}/CONTENTS" 60 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 61 if [[ -e "${ROOT}${F}" ]]; then
49 # echo "DEBUG::gconf install ${F}" 62 # echo "DEBUG::gconf install ${F}"
50 ${GCONFTOOL_BIN} --makefile-install-rule ${F} 1>/dev/null 63 "${GCONFTOOL_BIN}" --makefile-install-rule "${ROOT}${F}" 1>/dev/null
51 fi 64 fi
52 done 65 done
53 66
54 # have gconf reload the new schemas 67 # have gconf reload the new schemas
68 pids=$(pgrep -x gconfd-2)
69 if [[ $? == 0 ]] ; then
55 ebegin "Reloading GConf schemas" 70 ebegin "Reloading GConf schemas"
56 killall -HUP gconfd-2 71 kill -HUP ${pids}
57 eend $? 72 eend $?
73 fi
58} 74}
59 75
60 76
61# Removes schema files previously installed by the current ebuild from Gconf's 77# Removes schema files previously installed by the current ebuild from Gconf's
62# database. 78# database.
63gnome2_gconf_uninstall() { 79gnome2_gconf_uninstall() {
80 local F
81
64 if [[ ! -x ${GCONFTOOL_BIN} ]]; then 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"
65 return 88 return
66 fi 89 fi
67 90
68 unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL 91 unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL
69 export GCONF_CONFIG_SOURCE=$(${GCONFTOOL_BIN} --get-default-source) 92 export GCONF_CONFIG_SOURCE=$("${GCONFTOOL_BIN}" --get-default-source | sed "s;:/;:${ROOT};")
70 93
71 einfo "Uninstalling GNOME 2 GConf schemas" 94 einfo "Uninstalling GNOME 2 GConf schemas"
72 95
73 local contents="${ROOT}/var/db/pkg/*/${PN}-${PVR}/CONTENTS" 96 for F in ${GNOME2_ECLASS_SCHEMAS}; do
74 local F 97 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}" 98 # echo "DEBUG::gconf uninstall ${F}"
78 ${GCONFTOOL_BIN} --makefile-uninstall-rule ${F} 1>/dev/null 99 "${GCONFTOOL_BIN}" --makefile-uninstall-rule "${ROOT}${F}" 1>/dev/null
100 fi
79 done 101 done
102
103 # have gconf reload the new schemas
104 pids=$(pgrep -x gconfd-2)
105 if [[ $? == 0 ]] ; then
106 ebegin "Reloading GConf schemas"
107 kill -HUP ${pids}
108 eend $?
109 fi
110}
111
112
113# Find the icons that are about to be installed and save their location
114# in the GNOME2_ECLASS_ICONS environment variable
115# That function should be called from pkg_preinst
116gnome2_icon_savelist() {
117 pushd "${D}" &> /dev/null
118 export GNOME2_ECLASS_ICONS=$(find 'usr/share/icons' -maxdepth 1 -mindepth 1 -type d 2> /dev/null)
119 popd &> /dev/null
80} 120}
81 121
82 122
83# Updates Gtk+ icon cache files under /usr/share/icons if the current ebuild 123# Updates Gtk+ icon cache files under /usr/share/icons if the current ebuild
84# have installed anything under that location. 124# have installed anything under that location.
85gnome2_icon_cache_update() { 125gnome2_icon_cache_update() {
86 local updater=$(type -p gtk-update-icon-cache 2> /dev/null) 126 local updater="$(type -p gtk-update-icon-cache 2> /dev/null)"
87 127
88 if [[ ! -x ${updater} ]] ; then 128 if [[ ! -x "${updater}" ]] ; then
89 debug-print "${updater} is not executable" 129 debug-print "${updater} is not executable"
90
91 return 130 return
92 fi 131 fi
93 132
94 if ! grep -q "obj /usr/share/icons" ${ROOT}var/db/pkg/*/${PF}/CONTENTS 133 if [[ -z "${GNOME2_ECLASS_ICONS}" ]]; then
95 then
96 debug-print "No items to update"
97
98 return 134 return
99 fi 135 fi
136
100 137
101 ebegin "Updating icons cache" 138 ebegin "Updating icons cache"
102 139
103 local retval=0 140 local retval=0
104 local fails=( ) 141 local fails=( )
105 142
106 for dir in $(find ${ROOT}/usr/share/icons -maxdepth 1 -mindepth 1 -type d) 143 for dir in ${GNOME2_ECLASS_ICONS}
107 do 144 do
108 if [[ -f "${dir}/index.theme" ]] ; then 145 if [[ -f "${ROOT}${dir}/index.theme" ]] ; then
109 local rv=0 146 local rv=0
110 147
111 ${updater} -qf ${dir} 148 "${updater}" -qf "${ROOT}${dir}"
112 rv=$? 149 rv=$?
113 150
114 if [[ ! $rv -eq 0 ]] ; then 151 if [[ ! $rv -eq 0 ]] ; then
115 debug-print "Updating cache failed on ${dir}" 152 debug-print "Updating cache failed on ${ROOT}${dir}"
116 153
117 # Add to the list of failures 154 # Add to the list of failures
118 fails[$(( ${#fails[@]} + 1 ))]=$dir 155 fails[$(( ${#fails[@]} + 1 ))]="${ROOT}${dir}"
119 156
120 retval=2 157 retval=2
121 fi 158 fi
122 fi 159 fi
123 done 160 done
124 161
125 eend ${retval} 162 eend ${retval}
126 163
127 for (( i = 0 ; i < ${#fails[@]} ; i++ )) ; do 164 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]}" 165 eerror "Failed to update cache with icon $f"
136 fi
137 done 166 done
138} 167}
139 168
140 169
141# Workaround applied to Makefile rules in order to remove redundant 170# Workaround applied to Makefile rules in order to remove redundant
148 if [[ -f ${S}/omf.make ]] ; then 177 if [[ -f ${S}/omf.make ]] ; then
149 omf_makefiles="${omf_makefiles} ${S}/omf.make" 178 omf_makefiles="${omf_makefiles} ${S}/omf.make"
150 fi 179 fi
151 180
152 # testing fixing of all makefiles found 181 # testing fixing of all makefiles found
182 # The sort is important to ensure .am is listed before the respective .in for
183 # 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 184 for filename in $(find ./ -name "Makefile.in" -o -name "Makefile.am" |sort) ; do
154 omf_makefiles="${omf_makefiles} ${filename}" 185 omf_makefiles="${omf_makefiles} ${filename}"
155 done 186 done
156 187
157 ebegin "Fixing OMF Makefiles" 188 ebegin "Fixing OMF Makefiles"
158 189
160 local fails=( ) 191 local fails=( )
161 192
162 for omf in ${omf_makefiles} ; do 193 for omf in ${omf_makefiles} ; do
163 local rv=0 194 local rv=0
164 195
165 sed -i -e 's:scrollkeeper-update:true:' ${omf} 196 sed -i -e 's:scrollkeeper-update:true:' "${omf}"
166 retval=$? 197 retval=$?
167 198
168 if [[ ! $rv -eq 0 ]] ; then 199 if [[ ! $rv -eq 0 ]] ; then
169 debug-print "updating of ${omf} failed" 200 debug-print "updating of ${omf} failed"
170 201
175 fi 206 fi
176 done 207 done
177 208
178 eend $retval 209 eend $retval
179 210
180 for (( i = 0 ; i < ${#fails[@]} ; i++ )) ; do 211 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]}" 212 eerror "Failed to update OMF Makefile $f"
189 fi
190 done 213 done
191} 214}
192 215
193 216
194# Updates the global scrollkeeper database. 217# Updates the global scrollkeeper database.
195gnome2_scrollkeeper_update() { 218gnome2_scrollkeeper_update() {
196 if [[ -x ${SCROLLKEEPER_UPDATE_BIN} ]]; then 219 if [[ -x "${SCROLLKEEPER_UPDATE_BIN}" ]]; then
197 einfo "Updating scrollkeeper database ..." 220 einfo "Updating scrollkeeper database ..."
198 ${SCROLLKEEPER_UPDATE_BIN} -q -p ${SCROLLKEEPER_DIR} 221 "${SCROLLKEEPER_UPDATE_BIN}" -q -p "${SCROLLKEEPER_DIR}"
199 fi 222 fi
200} 223}
201

Legend:
Removed from v.1.2  
changed lines
  Added in v.1.12

  ViewVC Help
Powered by ViewVC 1.1.20