/[gentoo-x86]/eclass/kde4-functions.eclass
Gentoo

Diff of /eclass/kde4-functions.eclass

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 1.24 Revision 1.54
1# Copyright 1999-2008 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/kde4-functions.eclass,v 1.24 2009/09/01 09:32:08 scarabeus Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/kde4-functions.eclass,v 1.54 2011/06/15 22:03:13 abcd Exp $
4 4
5# Prefix compat: 5inherit versionator
6: ${EROOT:=${ROOT}}
7# Append missing trailing slash character
8[[ ${EROOT} = */ ]] || EROOT+="/"
9 6
10# @ECLASS: kde4-functions.eclass 7# @ECLASS: kde4-functions.eclass
11# @MAINTAINER: 8# @MAINTAINER:
12# kde@gentoo.org 9# kde@gentoo.org
13# @BLURB: Common ebuild functions for KDE 4 packages 10# @BLURB: Common ebuild functions for KDE 4 packages
15# This eclass contains all functions shared by the different eclasses, 12# This eclass contains all functions shared by the different eclasses,
16# for KDE 4 ebuilds. 13# for KDE 4 ebuilds.
17 14
18# @ECLASS-VARIABLE: EAPI 15# @ECLASS-VARIABLE: EAPI
19# @DESCRIPTION: 16# @DESCRIPTION:
20# By default kde4 eclasses want EAPI 2 which might be redefinable to newer 17# Currently kde4 eclasses support EAPI 3 and 4.
21# versions.
22case ${EAPI:-0} in 18case ${EAPI:-0} in
23 2) : ;; 19 4|3) : ;;
24 *) DEPEND="EAPI-TOO-OLD" ;; 20 *) die "EAPI=${EAPI} is not supported" ;;
25esac 21esac
22
23# @ECLASS-VARIABLE: KDE_OVERRIDE_MINIMAL
24# @DESCRIPTION:
25# For use only in very few well-defined cases; normally it should be unset.
26# If this variable is set, all calls to add_kdebase_dep return a dependency on
27# at least this version, independent of the version of the package itself.
28# If you know exactly that one specific NEW KDE component builds and runs fine
29# with all the rest of KDE at an OLDER version, you can set this old version here.
30# Warning- may lead to general instability and kill your pet targh.
26 31
27# @ECLASS-VARIABLE: KDEBASE 32# @ECLASS-VARIABLE: KDEBASE
28# @DESCRIPTION: 33# @DESCRIPTION:
29# This gets set to a non-zero value when a package is considered a kde or 34# This gets set to a non-zero value when a package is considered a kde or
30# koffice ebuild. 35# koffice ebuild.
31
32if [[ ${CATEGORY} = kde-base ]]; then 36if [[ ${CATEGORY} = kde-base ]]; then
33 debug-print "${ECLASS}: KDEBASE ebuild recognized" 37 debug-print "${ECLASS}: KDEBASE ebuild recognized"
34 KDEBASE=kde-base 38 KDEBASE=kde-base
35fi 39elif [[ ${KMNAME-${PN}} = koffice ]]; then
36
37# is this a koffice ebuild?
38if [[ ${KMNAME} = koffice || ${PN} = koffice ]]; then
39 debug-print "${ECLASS}: KOFFICE ebuild recognized" 40 debug-print "${ECLASS}: KOFFICE ebuild recognized"
40 KDEBASE=koffice 41 KDEBASE=koffice
42elif [[ ${KMNAME-${PN}} = kdevelop ]]; then
43 debug-print "${ECLASS}: KDEVELOP ebuild recognized"
44 KDEBASE=kdevelop
41fi 45fi
42 46
47# determine the build type
48if [[ ${PV} = *9999* ]]; then
49 BUILD_TYPE="live"
50else
51 BUILD_TYPE="release"
52fi
53export BUILD_TYPE
54
55# Set reponame and SCM for moduleses that have fully migrated to git
56# (hack - it's here because it needs to be before SCM inherits from kde4-base)
57if [[ ${BUILD_TYPE} == live ]]; then
58 case "${KMNAME}" in
59 kdebase-workspace)
60 KDE_SCM="git"
61 EGIT_REPONAME=${EGIT_REPONAME:=kde-workspace}
62 ;;
63 kdebase-runtime)
64 KDE_SCM="git"
65 EGIT_REPONAME=${EGIT_REPONAME:=kde-runtime}
66 ;;
67 kdebase-apps)
68 KDE_SCM="git"
69 EGIT_REPONAME=${EGIT_REPONAME:=kde-baseapps}
70 ;;
71 kde-workspace|kde-runtime|kde-baseapps)
72 KDE_SCM="git"
73 ;;
74 esac
75fi
76
43# @ECLASS-VARIABLE: KDE_SLOTS 77# @ECLASS-VARIABLE: KDE_SCM
44# @DESCRIPTION: 78# @DESCRIPTION:
45# The slots used by all KDE versions later than 4.0. The live KDE releases use 79# If this is a live package which scm does it use
46# KDE_LIVE_SLOTS instead. Values should be ordered. 80# Everything else uses svn by default
47KDE_SLOTS=( "4.1" "4.2" "4.3" "4.4" ) 81KDE_SCM="${KDE_SCM:-svn}"
82case ${KDE_SCM} in
83 svn|git) ;;
84 *) die "KDE_SCM: ${KDE_SCM} is not supported" ;;
85esac
48 86
49# @ECLASS-VARIABLE: KDE_LIVE_SLOTS 87# @ECLASS-VARIABLE: KDE_LINGUAS
50# @DESCRIPTION: 88# @DESCRIPTION:
51# The slots used by KDE live versions. Values should be ordered. 89# This is a whitespace-separated list of translations this ebuild supports.
52KDE_LIVE_SLOTS=( "live" ) 90# These translations are automatically added to IUSE. Therefore ebuilds must set
53 91# this variable before inheriting any eclasses. To enable only selected
54# @FUNCTION: slot_is_at_least 92# translations, ebuilds must call enable_selected_linguas(). kde4-{base,meta}.eclass does
55# @USAGE: <want> <have> 93# this for you.
56# @DESCRIPTION: 94#
57# Version aware slot comparator. 95# Example: KDE_LINGUAS="en_GB de nl"
58# Current implementation relies on the fact, that slots can be compared like 96if [[ ${BUILD_TYPE} != live || -n ${KDE_LINGUAS_LIVE_OVERRIDE} ]]; then
59# string literals (and let's keep it this way). 97 for _lingua in ${KDE_LINGUAS}; do
60slot_is_at_least() { 98 IUSE="${IUSE} linguas_${_lingua}"
61 [[ "${2}" > "${1}" || "${2}" = "${1}" ]] 99 done
62} 100fi
63 101
64# @FUNCTION: buildsycoca 102# @FUNCTION: buildsycoca
65# @DESCRIPTION: 103# @DESCRIPTION:
66# Function to rebuild the KDE System Configuration Cache. 104# Function to rebuild the KDE System Configuration Cache.
67# All KDE ebuilds should run this in pkg_postinst and pkg_postrm. 105# All KDE ebuilds should run this in pkg_postinst and pkg_postrm.
68buildsycoca() { 106buildsycoca() {
69 debug-print-function ${FUNCNAME} "$@" 107 debug-print-function ${FUNCNAME} "$@"
70 108
71 local KDE3DIR="${EROOT}usr/kde/3.5" 109 # We no longer need to run kbuildsycoca4, as kded does that automatically, as needed
72 if [[ -z ${EROOT%%/} && -x "${KDE3DIR}"/bin/kbuildsycoca ]]; then
73 # Since KDE3 is aware of shortcuts in /usr, rebuild database
74 # for KDE3 as well.
75 touch "${KDE3DIR}"/share/services/ksycoca
76 chmod 644 "${KDE3DIR}"/share/services/ksycoca
77
78 ebegin "Running kbuildsycoca to build global database"
79 XDG_DATA_DIRS="${EROOT}usr/local/share:${KDE3DIR}/share:${EROOT}usr/share" \
80 DISPLAY="" \
81 "${KDE3DIR}"/bin/kbuildsycoca --global --noincremental &> /dev/null
82 eend $?
83 fi
84
85 if [[ -z ${EROOT%%/} && -x "${KDEDIR}"/bin/kbuildsycoca4 ]]; then
86 # Make sure tha cache file exists, writable by root and readable by
87 # others. Otherwise kbuildsycoca4 will fail.
88 touch "${KDEDIR}/share/kde4/services/ksycoca4"
89 chmod 644 "${KDEDIR}/share/kde4/services/ksycoca4"
90
91 # We have to unset DISPLAY and DBUS_SESSION_BUS_ADDRESS, the ones
92 # in the user's environment (through su [without '-']) may cause
93 # kbuildsycoca4 to hang.
94
95 ebegin "Running kbuildsycoca4 to build global database"
96 # This is needed because we support multiple kde versions installed together.
97 # Lookup in order - local, KDEDIR, /usr, do not duplicate entries btw.
98 local KDEDIRS="${EROOT}usr/share"
99 [[ ${KDEDIR} != "${EROOT}usr" ]] && KDEDIRS="${KDEDIR}/share:${KDEDIRS}"
100 XDG_DATA_DIRS="${EROOT}usr/local/share:${KDEDIRS}" \
101 DISPLAY="" DBUS_SESSION_BUS_ADDRESS="" \
102 "${KDEDIR}"/bin/kbuildsycoca4 --global --noincremental &> /dev/null
103 eend $?
104 fi
105 110
106 # fix permission for some directories 111 # fix permission for some directories
107 for x in share/{config,kde4}; do 112 for x in usr/share/{config,kde4}; do
108 [[ ${KDEDIR} = ${EROOT}usr ]] && DIRS=${EROOT}usr || DIRS="${EROOT}usr ${KDEDIR}" 113 DIRS=${EROOT}usr
109 for y in ${DIRS}; do
110 [[ -d "${y}/${x}" ]] || break # nothing to do if directory does not exist 114 [[ -d "${EROOT}${x}" ]] || break # nothing to do if directory does not exist
115 # fixes Bug 318237
116 if use userland_BSD ; then
117 [[ $(stat -f %p "${EROOT}${x}") != 40755 ]]
118 local stat_rtn="$?"
119 else
111 if [[ $(stat --format=%a "${y}/${x}") != 755 ]]; then 120 [[ $(stat --format=%a "${EROOT}${x}") != 755 ]]
121 local stat_rtn=$?
122 fi
123 if [[ $stat_rtn != 1 ]] ; then
112 ewarn "QA Notice:" 124 ewarn "QA Notice:"
113 ewarn "Package ${PN} is breaking ${y}/${x} permissions." 125 ewarn "Package ${PN} is breaking ${EROOT}${x} permissions."
114 ewarn "Please report this issue to gentoo bugzilla." 126 ewarn "Please report this issue to gentoo bugzilla."
115 einfo "Permissions will get adjusted automatically now." 127 einfo "Permissions will get adjusted automatically now."
116 find "${y}/${x}" -type d -print0 | xargs -0 chmod 755 128 find "${EROOT}${x}" -type d -print0 | xargs -0 chmod 755
117 fi 129 fi
118 done
119 done 130 done
120} 131}
121 132
122# @FUNCTION: comment_all_add_subdirectory 133# @FUNCTION: comment_all_add_subdirectory
123# @USAGE: [list of directory names] 134# @USAGE: [list of directory names]
132 -e '/^[[:space:]]*macro_optional_add_subdirectory/s/^/#DONOTCOMPILE /' \ 143 -e '/^[[:space:]]*macro_optional_add_subdirectory/s/^/#DONOTCOMPILE /' \
133 -e '/^[[:space:]]*MACRO_OPTIONAL_ADD_SUBDIRECTORY/s/^/#DONOTCOMPILE /' \ 144 -e '/^[[:space:]]*MACRO_OPTIONAL_ADD_SUBDIRECTORY/s/^/#DONOTCOMPILE /' \
134 || die "${LINENO}: Initial sed died" 145 || die "${LINENO}: Initial sed died"
135} 146}
136 147
137# @ECLASS-VARIABLE: KDE_LINGUAS
138# @DESCRIPTION:
139# This is a whitespace-separated list of translations this ebuild supports.
140# These translations are automatically added to IUSE. Therefore ebuilds must set
141# this variable before inheriting any eclasses. To enable only selected
142# translations, ebuilds must call enable_selected_linguas(). kde4-{base,meta}.eclass does
143# this for you.
144#
145# Example: KDE_LINGUAS="en_GB de nl"
146for _lingua in ${KDE_LINGUAS}; do
147 IUSE="${IUSE} linguas_${_lingua}"
148done
149
150# @FUNCTION: enable_selected_linguas 148# @FUNCTION: enable_selected_linguas
151# @DESCRIPTION: 149# @DESCRIPTION:
152# Enable translations based on LINGUAS settings and translations supported by 150# Enable translations based on LINGUAS settings and translations supported by
153# the package (see KDE_LINGUAS). By default, translations are found in "${S}"/po 151# the package (see KDE_LINGUAS). By default, translations are found in "${S}"/po
154# but this default can be overridden by defining KDE_LINGUAS_DIR. 152# but this default can be overridden by defining KDE_LINGUAS_DIR.
155enable_selected_linguas() { 153enable_selected_linguas() {
156 debug-print-function ${FUNCNAME} "$@" 154 debug-print-function ${FUNCNAME} "$@"
157 155
158 local lingua linguas sr_mess wp 156 local x
159 157
160 # if there is no linguas defined we enable everything 158 # if there is no linguas defined we enable everything
161 if ! $(env | grep -q "^LINGUAS="); then 159 if ! $(env | grep -q "^LINGUAS="); then
162 return 0 160 return 0
163 fi 161 fi
164 162
165 # @ECLASS-VARIABLE: KDE_LINGUAS_DIR 163 # @ECLASS-VARIABLE: KDE_LINGUAS_DIR
166 # @DESCRIPTION: 164 # @DESCRIPTION:
167 # Specified folder where application translations are located. 165 # Specified folder where application translations are located.
166 # Can be defined as array of folders where translations are located.
167 # Note that space separated list of dirs is not supported.
168 # Default value is set to "po".
169 if [[ "$(declare -p KDE_LINGUAS_DIR 2>/dev/null 2>&1)" == "declare -a"* ]]; then
170 debug-print "$FUNCNAME: we have these subfolders defined: ${KDE_LINGUAS_DIR}"
171 for x in ${KDE_LINGUAS_DIR[@]}; do
172 _enable_selected_linguas_dir ${x}
173 done
174 else
168 KDE_LINGUAS_DIR=${KDE_LINGUAS_DIR:="po"} 175 KDE_LINGUAS_DIR=${KDE_LINGUAS_DIR:="po"}
169 [[ -d "${KDE_LINGUAS_DIR}" ]] || die "wrong linguas dir specified" 176 _enable_selected_linguas_dir ${KDE_LINGUAS_DIR}
170 comment_all_add_subdirectory "${KDE_LINGUAS_DIR}"
171 pushd "${KDE_LINGUAS_DIR}" > /dev/null
172
173 # fix all various crazy sr@Latn variations
174 # this part is only ease for ebuilds, so there wont be any die when this
175 # fail at any point
176 sr_mess="sr@latn sr@latin sr@Latin"
177 for wp in ${sr_mess}; do
178 [[ -e "${wp}.po" ]] && mv "${wp}.po" "sr@Latn.po"
179 if [[ -d "${wp}" ]]; then
180 # move dir and fix cmakelists
181 mv "${wp}" "sr@Latn"
182 sed -i \
183 -e "s:${wp}:sr@Latin:g" \
184 CMakeLists.txt
185 fi 177 fi
186 done
187
188 for lingua in ${KDE_LINGUAS}; do
189 if [[ -e "${lingua}.po" ]]; then
190 mv "${lingua}.po" "${lingua}.po.old"
191 fi
192 done
193
194 for lingua in ${KDE_LINGUAS}; do
195 if use linguas_${lingua} ; then
196 if [[ -d "${lingua}" ]]; then
197 linguas="${linguas} ${lingua}"
198 sed -e "/add_subdirectory([[:space:]]*${lingua}[[:space:]]*)[[:space:]]*$/ s/^#DONOTCOMPILE //" \
199 -e "/ADD_SUBDIRECTORY([[:space:]]*${lingua}[[:space:]]*)[[:space:]]*$/ s/^#DONOTCOMPILE //" \
200 -i CMakeLists.txt || die "Sed to uncomment linguas_${lingua} failed."
201 fi
202 if [[ -e "${lingua}.po.old" ]]; then
203 linguas="${linguas} ${lingua}"
204 mv "${lingua}.po.old" "${lingua}.po"
205 fi
206 fi
207 done
208 [[ -n "${linguas}" ]] && einfo "Enabling languages: ${linguas}"
209
210 popd > /dev/null
211} 178}
212 179
213# @FUNCTION: enable_selected_doc_linguas 180# @FUNCTION: enable_selected_doc_linguas
214# @DESCRIPTION: 181# @DESCRIPTION:
215# Enable only selected linguas enabled doc folders. 182# Enable only selected linguas enabled doc folders.
230 for pattern in ${KDE_DOC_DIRS}; do 197 for pattern in ${KDE_DOC_DIRS}; do
231 198
232 local handbookdir=`dirname ${pattern}` 199 local handbookdir=`dirname ${pattern}`
233 local translationdir=`basename ${pattern}` 200 local translationdir=`basename ${pattern}`
234 # Do filename pattern supplied, treat as directory 201 # Do filename pattern supplied, treat as directory
235 [[ "${handbookdir}" = '.' ]] && handbookdir=${translationdir} && translationdir= 202 [[ ${handbookdir} = '.' ]] && handbookdir=${translationdir} && translationdir=
236 [[ -d "${handbookdir}" ]] || die 'wrong doc dir specified' 203 [[ -d ${handbookdir} ]] || die 'wrong doc dir specified'
237 204
238 if ! use handbook; then 205 if ! use handbook; then
239 # Disable whole directory 206 # Disable whole directory
240 sed -e "/add_subdirectory[[:space:]]*([[:space:]]*${handbookdir}[[:space:]]*)/s/^/#DONOTCOMPILE /" \ 207 sed -e "/add_subdirectory[[:space:]]*([[:space:]]*${handbookdir}[[:space:]]*)/s/^/#DONOTCOMPILE /" \
241 -e "/ADD_SUBDIRECTORY[[:space:]]*([[:space:]]*${handbookdir}[[:space:]]*)/s/^/#DONOTCOMPILE /" \ 208 -e "/ADD_SUBDIRECTORY[[:space:]]*([[:space:]]*${handbookdir}[[:space:]]*)/s/^/#DONOTCOMPILE /" \
244 # Disable subdirectories recursively 211 # Disable subdirectories recursively
245 comment_all_add_subdirectory "${handbookdir}" 212 comment_all_add_subdirectory "${handbookdir}"
246 # Add requested translations 213 # Add requested translations
247 local lingua 214 local lingua
248 for lingua in en ${KDE_LINGUAS}; do 215 for lingua in en ${KDE_LINGUAS}; do
249 if [[ ${lingua} = 'en' ]] || use linguas_${lingua}; then 216 if [[ ${lingua} = en ]] || use linguas_${lingua}; then
250 if [[ -d "${handbookdir}/${translationdir//%lingua/${lingua}}" ]]; then 217 if [[ -d ${handbookdir}/${translationdir//%lingua/${lingua}} ]]; then
251 sed -e "/add_subdirectory[[:space:]]*([[:space:]]*${translationdir//%lingua/${lingua}}/s/^#DONOTCOMPILE //" \ 218 sed -e "/add_subdirectory[[:space:]]*([[:space:]]*${translationdir//%lingua/${lingua}}/s/^#DONOTCOMPILE //" \
252 -e "/ADD_SUBDIRECTORY[[:space:]]*([[:space:]]*${translationdir//%lingua/${lingua}}/s/^#DONOTCOMPILE //" \ 219 -e "/ADD_SUBDIRECTORY[[:space:]]*([[:space:]]*${translationdir//%lingua/${lingua}}/s/^#DONOTCOMPILE //" \
253 -i "${handbookdir}"/CMakeLists.txt && ! has ${lingua} ${linguas} && linguas="${linguas} ${lingua}" 220 -i "${handbookdir}"/CMakeLists.txt && ! has ${lingua} ${linguas} && linguas="${linguas} ${lingua}"
254 fi 221 fi
255 fi 222 fi
258 225
259 done 226 done
260 [[ -n "${linguas}" ]] && einfo "Enabling handbook translations:${linguas}" 227 [[ -n "${linguas}" ]] && einfo "Enabling handbook translations:${linguas}"
261} 228}
262 229
263# @FUNCTION: get_build_type
264# @DESCRIPTION:
265# Determine whether we are using live ebuild or tbzs.
266get_build_type() {
267 if [[ ${SLOT} = live || ${PV} = *9999* ]]; then
268 BUILD_TYPE="live"
269 else
270 BUILD_TYPE="release"
271 fi
272 export BUILD_TYPE
273}
274
275# @FUNCTION: migrate_store_dir 230# @FUNCTION: migrate_store_dir
276# @DESCRIPTION: 231# @DESCRIPTION:
277# Universal store dir migration 232# Universal store dir migration
278# * performs split of kdebase to kdebase-apps when needed 233# * performs split of kdebase to kdebase-apps when needed
279# * moves playground/extragear kde4-base-style to toplevel dir 234# * moves playground/extragear kde4-base-style to toplevel dir
280migrate_store_dir() { 235migrate_store_dir() {
236 if [[ ${KDE_SCM} != svn ]]; then
237 die "migrate_store_dir() only makes sense for subversion"
238 fi
239
281 local cleandir="${ESVN_STORE_DIR}/KDE" 240 local cleandir="${ESVN_STORE_DIR}/KDE"
241
282 if [[ -d "${cleandir}" ]]; then 242 if [[ -d ${cleandir} ]]; then
283 ewarn "'${cleandir}' has been found. Moving contents to new location." 243 ewarn "'${cleandir}' has been found. Moving contents to new location."
284 addwrite "${ESVN_STORE_DIR}" 244 addwrite "${ESVN_STORE_DIR}"
285 # Split kdebase 245 # Split kdebase
286 local module 246 local module
287 if pushd "${cleandir}"/kdebase/kdebase > /dev/null; then 247 if pushd "${cleandir}"/kdebase/kdebase > /dev/null; then
297 # Move the rest 257 # Move the rest
298 local pkg 258 local pkg
299 for pkg in "${cleandir}"/*; do 259 for pkg in "${cleandir}"/*; do
300 mv -f "${pkg}" "${ESVN_STORE_DIR}"/ || eerror "Failed to move '${pkg}'" 260 mv -f "${pkg}" "${ESVN_STORE_DIR}"/ || eerror "Failed to move '${pkg}'"
301 done 261 done
302 rmdir "${cleandir}" || die "Could not move obsolete KDE store dir. Please move '${cleandir}' contents to appropriate location (possibly ${ESVN_STORE_DIR}) and manually remove '${cleandir}' in order to continue." 262 rmdir "${cleandir}" || die "Could not move obsolete KDE store dir. Please move '${cleandir}' contents to appropriate location (possibly ${ESVN_STORE_DIR}) and manually remove '${cleandir}' in order to continue."
303 fi 263 fi
304 264
305 if ! hasq kde4-meta ${INHERITED}; then 265 if ! hasq kde4-meta ${INHERITED}; then
306 case ${KMNAME} in 266 case ${KMNAME} in
307 extragear*|playground*) 267 extragear*|playground*)
308 local svnlocalpath="${ESVN_STORE_DIR}"/"${KMNAME}"/"${PN}" 268 local scmlocalpath="${ESVN_STORE_DIR}"/"${KMNAME}"/"${PN}"
309 if [[ -d "${svnlocalpath}" ]]; then 269 if [[ -d "${scmlocalpath}" ]]; then
310 local destdir="${ESVN_STORE_DIR}"/"${ESVN_PROJECT}"/"`basename "${ESVN_REPO_URI}"`" 270 local destdir="${ESVN_STORE_DIR}"/"${ESVN_PROJECT}"/"`basename "${ESVN_REPO_URI}"`"
311 ewarn "'${svnlocalpath}' has been found." 271 ewarn "'${scmlocalpath}' has been found."
312 ewarn "Moving contents to new location: ${destdir}" 272 ewarn "Moving contents to new location: ${destdir}"
313 addwrite "${ESVN_STORE_DIR}" 273 addwrite "${ESVN_STORE_DIR}"
314 mkdir -p "${ESVN_STORE_DIR}"/"${ESVN_PROJECT}" && mv -f "${svnlocalpath}" "${destdir}" \ 274 mkdir -p "${ESVN_STORE_DIR}"/"${ESVN_PROJECT}" && mv -f "${scmlocalpath}" "${destdir}" \
315 || die "Failed to move to '${svnlocalpath}'" 275 || die "Failed to move to '${scmlocalpath}'"
316 # Try cleaning empty directories 276 # Try cleaning empty directories
317 rmdir "`dirname "${svnlocalpath}"`" 2> /dev/null 277 rmdir "`dirname "${scmlocalpath}"`" 2> /dev/null
318 fi 278 fi
319 ;; 279 ;;
320 esac 280 esac
321 fi 281 fi
322} 282}
325 285
326# @FUNCTION: save_library_dependencies 286# @FUNCTION: save_library_dependencies
327# @DESCRIPTION: 287# @DESCRIPTION:
328# Add exporting CMake dependencies for current package 288# Add exporting CMake dependencies for current package
329save_library_dependencies() { 289save_library_dependencies() {
330 local depsfile="${T}/${PN}:${SLOT}" 290 local depsfile="${T}/${PN}"
331 291
332 ebegin "Saving library dependencies in ${depsfile##*/}" 292 ebegin "Saving library dependencies in ${depsfile##*/}"
333 echo "EXPORT_LIBRARY_DEPENDENCIES(\"${depsfile}\")" >> "${S}/CMakeLists.txt" || \ 293 echo "EXPORT_LIBRARY_DEPENDENCIES(\"${depsfile}\")" >> "${S}/CMakeLists.txt" || \
334 die "Failed to save the library dependencies." 294 die "Failed to save the library dependencies."
335 eend $? 295 eend $?
337 297
338# @FUNCTION: install_library_dependencies 298# @FUNCTION: install_library_dependencies
339# @DESCRIPTION: 299# @DESCRIPTION:
340# Install generated CMake library dependencies to /var/lib/kde 300# Install generated CMake library dependencies to /var/lib/kde
341install_library_dependencies() { 301install_library_dependencies() {
342 local depsfile="${T}/${PN}:${SLOT}" 302 local depsfile="${T}/${PN}"
343 303
344 ebegin "Installing library dependencies as ${depsfile##*/}" 304 ebegin "Installing library dependencies as ${depsfile##*/}"
345 insinto ${EROOT}var/lib/kde 305 insinto /var/lib/kde
346 doins "${depsfile}" || die "Failed to install library dependencies." 306 doins "${depsfile}" || die "Failed to install library dependencies."
347 eend $? 307 eend $?
348} 308}
349 309
350# @FUNCTION: load_library_dependencies 310# @FUNCTION: load_library_dependencies
355 ebegin "Injecting library dependencies from '${KMLOADLIBS}'" 315 ebegin "Injecting library dependencies from '${KMLOADLIBS}'"
356 316
357 i=0 317 i=0
358 for pn in ${KMLOADLIBS} ; do 318 for pn in ${KMLOADLIBS} ; do
359 ((i++)) 319 ((i++))
360 depsfile="${EROOT}var/lib/kde/${pn}:${SLOT}" 320 depsfile="${EPREFIX}/var/lib/kde/${pn}"
321 [[ -r ${depsfile} ]] || depsfile="${EPREFIX}/var/lib/kde/${pn}:$(get_kde_version)"
361 [[ -r "${depsfile}" ]] || die "Depsfile '${depsfile}' not accessible. You probably need to reinstall ${pn}." 322 [[ -r ${depsfile} ]] || die "Depsfile '${depsfile}' not accessible. You probably need to reinstall ${pn}."
362 sed -i -e "${i}iINCLUDE(\"${depsfile}\")" "${S}/CMakeLists.txt" || \ 323 sed -i -e "${i}iINCLUDE(\"${depsfile}\")" "${S}/CMakeLists.txt" || \
363 die "Failed to include library dependencies for ${pn}" 324 die "Failed to include library dependencies for ${pn}"
364 done 325 done
365 eend $? 326 eend $?
366} 327}
367 328
368# @FUNCTION: block_other_slots
369# @DESCRIPTION:
370# Create blocks for the current package in other slots when
371# installed with USE=-kdeprefix
372block_other_slots() {
373 debug-print-function ${FUNCNAME} "$@"
374
375 local slot
376 for slot in ${KDE_SLOTS[@]} ${KDE_LIVE_SLOTS[@]}; do
377 # Block non kdeprefix ${PN} on other slots
378 if [[ ${SLOT} != ${slot} ]]; then
379 echo "!kdeprefix? ( !kde-base/${PN}:${slot}[-kdeprefix] )"
380 fi
381 done
382}
383
384# @FUNCTION: add_blocker 329# @FUNCTION: add_blocker
385# @DESCRIPTION: 330# @DESCRIPTION:
386# Create correct RDEPEND value for blocking correct package. 331# Create correct RDEPEND value for blocking correct package.
387# Usefull for file-collision blocks. 332# Useful for file-collision blocks.
388# Parameters are package and version to block. 333# Parameters are package and version(s) to block.
389# add_blocker kde-base/kdelibs 4.2.4 334# add_blocker kdelibs 4.2.4
335# If no version is specified, then all versions will be blocked.
336# If the version is 0, then no versions will be blocked.
337# If a second version ending in ":3.5" is passed, then the version listed for
338# that slot will be blocked as well.
339#
340# Examples:
341# # Block all versions of kdelibs
342# add_blocker kdelibs
343#
344# # Block all versions of kdelibs older than 4.3.50
345# add_blocker kdelibs 4.3.50
346#
347# # Block kdelibs 3.5.10 and older, but not any version of
348# # kdelibs from KDE 4
349# add_blocker kdelibs 0 3.5.10:3.5
390add_blocker() { 350add_blocker() {
391 debug-print-function ${FUNCNAME} "$@" 351 debug-print-function ${FUNCNAME} "$@"
392 352
393 [[ ${1} = "" || ${2} = "" ]] && die "Missing parameter" 353 [[ -z ${1} ]] && die "Missing parameter"
394 local slot 354 local pkg=kde-base/$1 atom old_ver="unset" use
395 for slot in ${KDE_SLOTS[@]} ${KDE_LIVE_SLOTS[@]}; do 355 if [[ $pkg == *\[*\] ]]; then
396 # on -kdeprefix we block every slot 356 use=${pkg/#*\[/[}
397 RDEPEND+=" !kdeprefix? ( !<=${1}-${2}:${slot}[-kdeprefix] )" 357 pkg=${pkg%\[*\]}
398 done 358 fi
399 # on kdeprefix we block only our slot 359
400 RDEPEND+=" kdeprefix? ( !<=${1}-${2}:${SLOT}[kdeprefix] )" 360 [[ "$3" == *:3.5 ]] && old_ver=${3%:3.5}
361
362 # If the version passed is "0", do nothing
363 if [[ ${2} != 0 ]]; then
364 # If no version was passed, block all versions in this slot
365 if [[ -z ${2} ]]; then
366 atom=${pkg}
367 # If the version passed begins with a "<", then use "<" instead of "<="
368 elif [[ ${2::1} == "<" ]]; then
369 # this also removes the first character of the version, which is a "<"
370 atom="<${pkg}-${2:1}"
371 else
372 atom="<=${pkg}-${2}"
373 fi
374 RDEPEND+=" !${atom}:4${use}"
375 fi
376
377 # Do the same thing as above for :3.5, except that we don't want any
378 # output if no parameter was passed.
379 if [[ ${old_ver} != "unset" ]]; then
380 if [[ -z ${old_ver} ]]; then
381 atom=${pkg}
382 elif [[ ${old_ver::1} == "<" ]]; then
383 atom="<${pkg}-${old_ver:1}"
384 else
385 atom="<=${pkg}-${old_ver}"
386 fi
387 RDEPEND+=" !${atom}:3.5${use}"
388 fi
401} 389}
390
391# @FUNCTION: add_kdebase_dep
392# @DESCRIPTION:
393# Create proper dependency for kde-base/ dependencies.
394# This takes 1 to 3 arguments. The first being the package name, the optional
395# second is additional USE flags to append, and the optional third is the
396# version to use instead of the automatic version (use sparingly).
397# The output of this should be added directly to DEPEND/RDEPEND, and may be
398# wrapped in a USE conditional (but not an || conditional without an extra set
399# of parentheses).
400add_kdebase_dep() {
401 debug-print-function ${FUNCNAME} "$@"
402
403 local ver
404
405 if [[ -n ${3} ]]; then
406 ver=${3}
407 elif [[ -n ${KDE_OVERRIDE_MINIMAL} ]]; then
408 ver=${KDE_OVERRIDE_MINIMAL}
409 elif [[ ${KDEBASE} != kde-base ]]; then
410 ver=${KDE_MINIMAL}
411 # if building stable-live version depend just on the raw KDE version
412 # to allow merging packages against more stable basic stuff
413 elif [[ ${PV} == *.9999 ]]; then
414 ver=$(get_kde_version)
415 else
416 ver=${PV}
417 fi
418
419 [[ -z ${1} ]] && die "Missing parameter"
420
421 echo " >=kde-base/${1}-${ver}:4[aqua=${2:+,${2}}]"
422}
423
424# local function to enable specified translations for specified directory
425# used from kde4-functions_enable_selected_linguas function
426_enable_selected_linguas_dir() {
427 local lingua linguas sr_mess wp
428 local dir=${1}
429
430 [[ -d ${dir} ]] || die "linguas dir \"${dir}\" does not exist"
431 comment_all_add_subdirectory "${dir}"
432 pushd "${dir}" > /dev/null
433
434 # fix all various crazy sr@Latn variations
435 # this part is only ease for ebuilds, so there wont be any die when this
436 # fail at any point
437 sr_mess="sr@latn sr@latin sr@Latin"
438 for wp in ${sr_mess}; do
439 [[ -e ${wp}.po ]] && mv "${wp}.po" "sr@Latn.po"
440 if [[ -d ${wp} ]]; then
441 # move dir and fix cmakelists
442 mv "${wp}" "sr@Latn"
443 sed -i \
444 -e "s:${wp}:sr@Latn:g" \
445 CMakeLists.txt
446 fi
447 done
448
449 for lingua in ${KDE_LINGUAS}; do
450 if [[ -e ${lingua}.po ]]; then
451 mv "${lingua}.po" "${lingua}.po.old"
452 fi
453 done
454
455 for lingua in ${KDE_LINGUAS}; do
456 if use linguas_${lingua} ; then
457 if [[ -d ${lingua} ]]; then
458 linguas="${linguas} ${lingua}"
459 sed -e "/add_subdirectory([[:space:]]*${lingua}[[:space:]]*)[[:space:]]*$/ s/^#DONOTCOMPILE //" \
460 -e "/ADD_SUBDIRECTORY([[:space:]]*${lingua}[[:space:]]*)[[:space:]]*$/ s/^#DONOTCOMPILE //" \
461 -i CMakeLists.txt || die "Sed to uncomment linguas_${lingua} failed."
462 fi
463 if [[ -e ${lingua}.po.old ]]; then
464 linguas="${linguas} ${lingua}"
465 mv "${lingua}.po.old" "${lingua}.po"
466 fi
467 fi
468 done
469 [[ -n ${linguas} ]] && echo ">>> Enabling languages: ${linguas}"
470
471 popd > /dev/null
472}
473
474# @FUNCTION: get_kde_version
475# Translates an ebuild version into a major.minor KDE SC
476# release version. If no version is specified, ${PV} is used.
477get_kde_version() {
478 local ver=${1:-${PV}}
479 local major=$(get_major_version ${ver})
480 local minor=$(get_version_component_range 2 ${ver})
481 local micro=$(get_version_component_range 3 ${ver})
482 if [[ ${ver} == 9999 ]]; then
483 echo live
484 else
485 (( micro < 50 )) && echo ${major}.${minor} || echo ${major}.$((minor + 1))
486 fi
487}

Legend:
Removed from v.1.24  
changed lines
  Added in v.1.54

  ViewVC Help
Powered by ViewVC 1.1.20