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

Contents of /eclass/gnome2-utils.eclass

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.11 - (show annotations) (download)
Sat Sep 27 09:16:32 2008 UTC (6 years ago) by leio
Branch: MAIN
Changes since 1.10: +4 -2 lines
Sort the list of Makefile.am and Makefile.in files used in gnome2_omf_fix(), so that
it is ensured the .am one is listed before the respective .in for maintainer mode
regeneration to not kick in due to modtime of .am being newer than .in and the listed files
being possibly patched with sed for a scrollkeeper fix.
This maintainer mode build file regeneration is reliably reproducable only if PORTAGE_TMPDIR
is on a filesystem with jiffies-granularity timestamps - tmpfs in particular. In the common
case (ext3 and reiserfs) it is only second-granularity and GNU make rule dependency for
am--refresh doesn't trigger almost never because the timestamp is equal unless it hits a
second boundary pretty exactly in the middle. This should fix bug 236649 and all the few dozen
INVALID bugs Diego Pettenò has filed against GNOME packages that claim the maintainer mode
rebuild is caused by patches in $FILESDIR, while it must have been simply the omf_fix combined
with tmpfs usage.

1 # Copyright 1999-2006 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3 # $Header: /var/cvsroot/gentoo-x86/eclass/gnome2-utils.eclass,v 1.10 2008/03/22 17:30:11 remi Exp $
4
5 #
6 # gnome2-utils.eclass
7 #
8 # Set of auxiliary functions used to perform actions commonly needed by packages
9 # using the GNOME framework.
10 #
11 # Maintained by Gentoo's GNOME herd <gnome@gentoo.org>
12 #
13
14
15
16 # Path to gconftool-2
17 : ${GCONFTOOL_BIN:="${ROOT}usr/bin/gconftool-2"}
18
19 # Directory where scrollkeeper-update should do its work
20 : ${SCROLLKEEPER_DIR:="${ROOT}var/lib/scrollkeeper"}
21
22 # Path to scrollkeeper-update
23 : ${SCROLLKEEPER_UPDATE_BIN:="${ROOT}usr/bin/scrollkeeper-update"}
24
25
26
27 DEPEND=">=sys-apps/sed-4"
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
33 gnome2_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 }
38
39
40 # Applies any schema files installed by the current ebuild to Gconf's database
41 # using gconftool-2
42 gnome2_gconf_install() {
43 local F
44
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"
51 return
52 fi
53
54 # We are ready to install the GCONF Scheme now
55 unset GCONF_DISABLE_MAKEFILE_SCHEMA_INSTALL
56 export GCONF_CONFIG_SOURCE="$("${GCONFTOOL_BIN}" --get-default-source)"
57
58 einfo "Installing GNOME 2 GConf schemas"
59
60 for F in ${GNOME2_ECLASS_SCHEMAS}; do
61 if [[ -e "${ROOT}${F}" ]]; then
62 # echo "DEBUG::gconf install ${F}"
63 "${GCONFTOOL_BIN}" --makefile-install-rule "${ROOT}${F}" 1>/dev/null
64 fi
65 done
66
67 # have gconf reload the new schemas
68 pids=$(pgrep -x gconfd-2)
69 if [[ $? == 0 ]] ; then
70 ebegin "Reloading GConf schemas"
71 kill -HUP ${pids}
72 eend $?
73 fi
74 }
75
76
77 # Removes schema files previously installed by the current ebuild from Gconf's
78 # database.
79 gnome2_gconf_uninstall() {
80 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
97 if [[ -e "${ROOT}${F}" ]]; then
98 # echo "DEBUG::gconf uninstall ${F}"
99 "${GCONFTOOL_BIN}" --makefile-uninstall-rule "${ROOT}${F}" 1>/dev/null
100 fi
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
116 gnome2_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
120 }
121
122
123 # Updates Gtk+ icon cache files under /usr/share/icons if the current ebuild
124 # have installed anything under that location.
125 gnome2_icon_cache_update() {
126 local updater="$(type -p gtk-update-icon-cache 2> /dev/null)"
127
128 if [[ ! -x "${updater}" ]] ; then
129 debug-print "${updater} is not executable"
130 return
131 fi
132
133 if [[ -z "${GNOME2_ECLASS_ICONS}" ]]; then
134 return
135 fi
136
137
138 ebegin "Updating icons cache"
139
140 local retval=0
141 local fails=( )
142
143 for dir in ${GNOME2_ECLASS_ICONS}
144 do
145 if [[ -f "${ROOT}${dir}/index.theme" ]] ; then
146 local rv=0
147
148 "${updater}" -qf "${ROOT}${dir}"
149 rv=$?
150
151 if [[ ! $rv -eq 0 ]] ; then
152 debug-print "Updating cache failed on ${ROOT}${dir}"
153
154 # Add to the list of failures
155 fails[$(( ${#fails[@]} + 1 ))]="${ROOT}${dir}"
156
157 retval=2
158 fi
159 fi
160 done
161
162 eend ${retval}
163
164 for f in "${fails[@]}" ; do
165 eerror "Failed to update cache with icon $f"
166 done
167 }
168
169
170 # Workaround applied to Makefile rules in order to remove redundant
171 # calls to scrollkeeper-update and sandbox violations.
172 gnome2_omf_fix() {
173 local omf_makefiles filename
174
175 omf_makefiles="$@"
176
177 if [[ -f ${S}/omf.make ]] ; then
178 omf_makefiles="${omf_makefiles} ${S}/omf.make"
179 fi
180
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
184 for filename in $(find ./ -name "Makefile.in" -o -name "Makefile.am" |sort) ; do
185 omf_makefiles="${omf_makefiles} ${filename}"
186 done
187
188 ebegin "Fixing OMF Makefiles"
189
190 local retval=0
191 local fails=( )
192
193 for omf in ${omf_makefiles} ; do
194 local rv=0
195
196 sed -i -e 's:scrollkeeper-update:true:' "${omf}"
197 retval=$?
198
199 if [[ ! $rv -eq 0 ]] ; then
200 debug-print "updating of ${omf} failed"
201
202 # Add to the list of failures
203 fails[$(( ${#fails[@]} + 1 ))]=$omf
204
205 retval=2
206 fi
207 done
208
209 eend $retval
210
211 for f in "${fails[@]}" ; do
212 eerror "Failed to update OMF Makefile $f"
213 done
214 }
215
216
217 # Updates the global scrollkeeper database.
218 gnome2_scrollkeeper_update() {
219 if [[ -x "${SCROLLKEEPER_UPDATE_BIN}" ]]; then
220 einfo "Updating scrollkeeper database ..."
221 "${SCROLLKEEPER_UPDATE_BIN}" -q -p "${SCROLLKEEPER_DIR}"
222 fi
223 }

  ViewVC Help
Powered by ViewVC 1.1.20