/[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.23 Revision 1.48
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.23 2009/08/20 09:18:01 scarabeus Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/kde4-functions.eclass,v 1.48 2011/05/24 20:54:58 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
43# @ECLASS-VARIABLE: KDE_SLOTS 47# @ECLASS-VARIABLE: KDE_SLOTS
44# @DESCRIPTION: 48# @DESCRIPTION:
45# The slots used by all KDE versions later than 4.0. The live KDE releases use 49# The slots used by all KDE versions later than 4.0. The live KDE releases use
46# KDE_LIVE_SLOTS instead. Values should be ordered. 50# KDE_LIVE_SLOTS instead. Values should be ordered.
47KDE_SLOTS=( "kde-4" "4.1" "4.2" "4.3" "4.4" ) 51KDE_SLOTS=( "4.1" "4.2" "4.3" "4.4" "4.5" "4.6" "4.7" )
48 52
49# @ECLASS-VARIABLE: KDE_LIVE_SLOTS 53# @ECLASS-VARIABLE: KDE_LIVE_SLOTS
50# @DESCRIPTION: 54# @DESCRIPTION:
51# The slots used by KDE live versions. Values should be ordered. 55# The slots used by KDE live versions. Values should be ordered.
52KDE_LIVE_SLOTS=( "live" ) 56KDE_LIVE_SLOTS=( "live" )
57
58# determine the build type
59if [[ ${SLOT} = live || ${PV} = *9999* ]]; then
60 BUILD_TYPE="live"
61else
62 BUILD_TYPE="release"
63fi
64export BUILD_TYPE
65
66# Set reponame and SCM for moduleses that have fully migrated to git
67# (hack - it's here because it needs to be before SCM inherits from kde4-base)
68if [[ ${BUILD_TYPE} == live ]]; then
69 case "${KMNAME}" in
70 kdebase-workspace)
71 KDE_SCM="git"
72 EGIT_REPONAME=${EGIT_REPONAME:=kde-workspace}
73 ;;
74 kdebase-runtime)
75 KDE_SCM="git"
76 EGIT_REPONAME=${EGIT_REPONAME:=kde-runtime}
77 ;;
78 kdebase-apps)
79 KDE_SCM="git"
80 EGIT_REPONAME=${EGIT_REPONAME:=kde-baseapps}
81 ;;
82 esac
83fi
84
85# @ECLASS-VARIABLE: KDE_SCM
86# @DESCRIPTION:
87# If this is a live package which scm does it use
88# Everything else uses svn by default
89KDE_SCM="${KDE_SCM:-svn}"
90case ${KDE_SCM} in
91 svn|git) ;;
92 *) die "KDE_SCM: ${KDE_SCM} is not supported" ;;
93esac
94
95# @ECLASS-VARIABLE: KDE_LINGUAS
96# @DESCRIPTION:
97# This is a whitespace-separated list of translations this ebuild supports.
98# These translations are automatically added to IUSE. Therefore ebuilds must set
99# this variable before inheriting any eclasses. To enable only selected
100# translations, ebuilds must call enable_selected_linguas(). kde4-{base,meta}.eclass does
101# this for you.
102#
103# Example: KDE_LINGUAS="en_GB de nl"
104if [[ ${BUILD_TYPE} != live || -n ${KDE_LINGUAS_LIVE_OVERRIDE} ]]; then
105 for _lingua in ${KDE_LINGUAS}; do
106 IUSE="${IUSE} linguas_${_lingua}"
107 done
108fi
109
110# @FUNCTION: slot_is_at_least
111# @USAGE: <want> <have>
112# @DESCRIPTION:
113# Version aware slot comparator.
114# Current implementation relies on the fact, that slots can be compared like
115# string literals (and let's keep it this way).
116slot_is_at_least() {
117 [[ "${2}" > "${1}" || "${2}" = "${1}" ]]
118}
53 119
54# @FUNCTION: buildsycoca 120# @FUNCTION: buildsycoca
55# @DESCRIPTION: 121# @DESCRIPTION:
56# Function to rebuild the KDE System Configuration Cache. 122# Function to rebuild the KDE System Configuration Cache.
57# All KDE ebuilds should run this in pkg_postinst and pkg_postrm. 123# All KDE ebuilds should run this in pkg_postinst and pkg_postrm.
58buildsycoca() { 124buildsycoca() {
59 debug-print-function ${FUNCNAME} "$@" 125 debug-print-function ${FUNCNAME} "$@"
60 126
61 local KDE3DIR="${EROOT}usr/kde/3.5" 127 # We no longer need to run kbuildsycoca4, as kded does that automatically, as needed
62 if [[ -z ${EROOT%%/} && -x "${KDE3DIR}"/bin/kbuildsycoca ]]; then
63 # Since KDE3 is aware of shortcuts in /usr, rebuild database
64 # for KDE3 as well.
65 touch "${KDE3DIR}"/share/services/ksycoca
66 chmod 644 "${KDE3DIR}"/share/services/ksycoca
67
68 ebegin "Running kbuildsycoca to build global database"
69 XDG_DATA_DIRS="${EROOT}usr/local/share:${KDE3DIR}/share:${EROOT}usr/share" \
70 DISPLAY="" \
71 "${KDE3DIR}"/bin/kbuildsycoca --global --noincremental &> /dev/null
72 eend $?
73 fi
74
75 if [[ -z ${EROOT%%/} && -x "${KDEDIR}"/bin/kbuildsycoca4 ]]; then
76 # Make sure tha cache file exists, writable by root and readable by
77 # others. Otherwise kbuildsycoca4 will fail.
78 touch "${KDEDIR}/share/kde4/services/ksycoca4"
79 chmod 644 "${KDEDIR}/share/kde4/services/ksycoca4"
80
81 # We have to unset DISPLAY and DBUS_SESSION_BUS_ADDRESS, the ones
82 # in the user's environment (through su [without '-']) may cause
83 # kbuildsycoca4 to hang.
84
85 ebegin "Running kbuildsycoca4 to build global database"
86 # This is needed because we support multiple kde versions installed together.
87 # Lookup in order - local, KDEDIR, /usr, do not duplicate entries btw.
88 local KDEDIRS="${EROOT}usr/share"
89 [[ ${KDEDIR} != "${EROOT}usr" ]] && KDEDIRS="${KDEDIR}/share:${KDEDIRS}"
90 XDG_DATA_DIRS="${EROOT}usr/local/share:${KDEDIRS}" \
91 DISPLAY="" DBUS_SESSION_BUS_ADDRESS="" \
92 "${KDEDIR}"/bin/kbuildsycoca4 --global --noincremental &> /dev/null
93 eend $?
94 fi
95 128
96 # fix permission for some directories 129 # fix permission for some directories
97 for x in share/{config,kde4}; do 130 for x in share/{config,kde4}; do
98 [[ ${KDEDIR} = ${EROOT}usr ]] && DIRS=${EROOT}usr || DIRS="${EROOT}usr ${KDEDIR}" 131 [[ ${KDEDIR} == /usr ]] && DIRS=${EROOT}usr || DIRS="${EROOT}usr ${EROOT}${KDEDIR}"
99 for y in ${DIRS}; do 132 for y in ${DIRS}; do
100 [[ -d "${y}/${x}" ]] || break # nothing to do if directory does not exist 133 [[ -d "${y}/${x}" ]] || break # nothing to do if directory does not exist
134 # fixes Bug 318237
135 if use userland_BSD ; then
136 [[ $(stat -f %p "${y}/${x}") != 40755 ]]
137 local stat_rtn="$?"
138 else
101 if [[ $(stat --format=%a "${y}/${x}") != 755 ]]; then 139 [[ $(stat --format=%a "${y}/${x}") != 755 ]]
140 local stat_rtn=$?
141 fi
142 if [[ $stat_rtn != 1 ]] ; then
102 ewarn "QA Notice:" 143 ewarn "QA Notice:"
103 ewarn "Package ${PN} is breaking ${y}/${x} permissions." 144 ewarn "Package ${PN} is breaking ${y}/${x} permissions."
104 ewarn "Please report this issue to gentoo bugzilla." 145 ewarn "Please report this issue to gentoo bugzilla."
105 einfo "Permissions will get adjusted automatically now." 146 einfo "Permissions will get adjusted automatically now."
106 find "${y}/${x}" -type d -print0 | xargs -0 chmod 755 147 find "${y}/${x}" -type d -print0 | xargs -0 chmod 755
122 -e '/^[[:space:]]*macro_optional_add_subdirectory/s/^/#DONOTCOMPILE /' \ 163 -e '/^[[:space:]]*macro_optional_add_subdirectory/s/^/#DONOTCOMPILE /' \
123 -e '/^[[:space:]]*MACRO_OPTIONAL_ADD_SUBDIRECTORY/s/^/#DONOTCOMPILE /' \ 164 -e '/^[[:space:]]*MACRO_OPTIONAL_ADD_SUBDIRECTORY/s/^/#DONOTCOMPILE /' \
124 || die "${LINENO}: Initial sed died" 165 || die "${LINENO}: Initial sed died"
125} 166}
126 167
127# @ECLASS-VARIABLE: KDE_LINGUAS
128# @DESCRIPTION:
129# This is a whitespace-separated list of translations this ebuild supports.
130# These translations are automatically added to IUSE. Therefore ebuilds must set
131# this variable before inheriting any eclasses. To enable only selected
132# translations, ebuilds must call enable_selected_linguas(). kde4-{base,meta}.eclass does
133# this for you.
134#
135# Example: KDE_LINGUAS="en_GB de nl"
136for _lingua in ${KDE_LINGUAS}; do
137 IUSE="${IUSE} linguas_${_lingua}"
138done
139
140# @FUNCTION: enable_selected_linguas 168# @FUNCTION: enable_selected_linguas
141# @DESCRIPTION: 169# @DESCRIPTION:
142# Enable translations based on LINGUAS settings and translations supported by 170# Enable translations based on LINGUAS settings and translations supported by
143# the package (see KDE_LINGUAS). By default, translations are found in "${S}"/po 171# the package (see KDE_LINGUAS). By default, translations are found in "${S}"/po
144# but this default can be overridden by defining KDE_LINGUAS_DIR. 172# but this default can be overridden by defining KDE_LINGUAS_DIR.
145enable_selected_linguas() { 173enable_selected_linguas() {
146 debug-print-function ${FUNCNAME} "$@" 174 debug-print-function ${FUNCNAME} "$@"
147 175
148 local lingua linguas sr_mess wp 176 local x
149 177
150 # if there is no linguas defined we enable everything 178 # if there is no linguas defined we enable everything
151 if ! $(env | grep -q "^LINGUAS="); then 179 if ! $(env | grep -q "^LINGUAS="); then
152 return 0 180 return 0
153 fi 181 fi
154 182
155 # @ECLASS-VARIABLE: KDE_LINGUAS_DIR 183 # @ECLASS-VARIABLE: KDE_LINGUAS_DIR
156 # @DESCRIPTION: 184 # @DESCRIPTION:
157 # Specified folder where application translations are located. 185 # Specified folder where application translations are located.
186 # Can be defined as array of folders where translations are located.
187 # Note that space separated list of dirs is not supported.
188 # Default value is set to "po".
189 if [[ "$(declare -p KDE_LINGUAS_DIR 2>/dev/null 2>&1)" == "declare -a"* ]]; then
190 debug-print "$FUNCNAME: we have these subfolders defined: ${KDE_LINGUAS_DIR}"
191 for x in ${KDE_LINGUAS_DIR[@]}; do
192 _enable_selected_linguas_dir ${x}
193 done
194 else
158 KDE_LINGUAS_DIR=${KDE_LINGUAS_DIR:="po"} 195 KDE_LINGUAS_DIR=${KDE_LINGUAS_DIR:="po"}
159 [[ -d "${KDE_LINGUAS_DIR}" ]] || die "wrong linguas dir specified" 196 _enable_selected_linguas_dir ${KDE_LINGUAS_DIR}
160 comment_all_add_subdirectory "${KDE_LINGUAS_DIR}"
161 pushd "${KDE_LINGUAS_DIR}" > /dev/null
162
163 # fix all various crazy sr@Latn variations
164 # this part is only ease for ebuilds, so there wont be any die when this
165 # fail at any point
166 sr_mess="sr@latn sr@latin sr@Latin"
167 for wp in ${sr_mess}; do
168 [[ -e "${wp}.po" ]] && mv "${wp}.po" "sr@Latn.po"
169 if [[ -d "${wp}" ]]; then
170 # move dir and fix cmakelists
171 mv "${wp}" "sr@Latn"
172 sed -i \
173 -e "s:${wp}:sr@Latin:g" \
174 CMakeLists.txt
175 fi 197 fi
176 done
177
178 for lingua in ${KDE_LINGUAS}; do
179 if [[ -e "${lingua}.po" ]]; then
180 mv "${lingua}.po" "${lingua}.po.old"
181 fi
182 done
183
184 for lingua in ${KDE_LINGUAS}; do
185 if use linguas_${lingua} ; then
186 if [[ -d "${lingua}" ]]; then
187 linguas="${linguas} ${lingua}"
188 sed -e "/add_subdirectory([[:space:]]*${lingua}[[:space:]]*)[[:space:]]*$/ s/^#DONOTCOMPILE //" \
189 -e "/ADD_SUBDIRECTORY([[:space:]]*${lingua}[[:space:]]*)[[:space:]]*$/ s/^#DONOTCOMPILE //" \
190 -i CMakeLists.txt || die "Sed to uncomment linguas_${lingua} failed."
191 fi
192 if [[ -e "${lingua}.po.old" ]]; then
193 linguas="${linguas} ${lingua}"
194 mv "${lingua}.po.old" "${lingua}.po"
195 fi
196 fi
197 done
198 [[ -n "${linguas}" ]] && einfo "Enabling languages: ${linguas}"
199
200 popd > /dev/null
201} 198}
202 199
203# @FUNCTION: enable_selected_doc_linguas 200# @FUNCTION: enable_selected_doc_linguas
204# @DESCRIPTION: 201# @DESCRIPTION:
205# Enable only selected linguas enabled doc folders. 202# Enable only selected linguas enabled doc folders.
220 for pattern in ${KDE_DOC_DIRS}; do 217 for pattern in ${KDE_DOC_DIRS}; do
221 218
222 local handbookdir=`dirname ${pattern}` 219 local handbookdir=`dirname ${pattern}`
223 local translationdir=`basename ${pattern}` 220 local translationdir=`basename ${pattern}`
224 # Do filename pattern supplied, treat as directory 221 # Do filename pattern supplied, treat as directory
225 [[ "${handbookdir}" = '.' ]] && handbookdir=${translationdir} && translationdir= 222 [[ ${handbookdir} = '.' ]] && handbookdir=${translationdir} && translationdir=
226 [[ -d "${handbookdir}" ]] || die 'wrong doc dir specified' 223 [[ -d ${handbookdir} ]] || die 'wrong doc dir specified'
227 224
228 if ! use handbook; then 225 if ! use handbook; then
229 # Disable whole directory 226 # Disable whole directory
230 sed -e "/add_subdirectory[[:space:]]*([[:space:]]*${handbookdir}[[:space:]]*)/s/^/#DONOTCOMPILE /" \ 227 sed -e "/add_subdirectory[[:space:]]*([[:space:]]*${handbookdir}[[:space:]]*)/s/^/#DONOTCOMPILE /" \
231 -e "/ADD_SUBDIRECTORY[[:space:]]*([[:space:]]*${handbookdir}[[:space:]]*)/s/^/#DONOTCOMPILE /" \ 228 -e "/ADD_SUBDIRECTORY[[:space:]]*([[:space:]]*${handbookdir}[[:space:]]*)/s/^/#DONOTCOMPILE /" \
234 # Disable subdirectories recursively 231 # Disable subdirectories recursively
235 comment_all_add_subdirectory "${handbookdir}" 232 comment_all_add_subdirectory "${handbookdir}"
236 # Add requested translations 233 # Add requested translations
237 local lingua 234 local lingua
238 for lingua in en ${KDE_LINGUAS}; do 235 for lingua in en ${KDE_LINGUAS}; do
239 if [[ ${lingua} = 'en' ]] || use linguas_${lingua}; then 236 if [[ ${lingua} = en ]] || use linguas_${lingua}; then
240 if [[ -d "${handbookdir}/${translationdir//%lingua/${lingua}}" ]]; then 237 if [[ -d ${handbookdir}/${translationdir//%lingua/${lingua}} ]]; then
241 sed -e "/add_subdirectory[[:space:]]*([[:space:]]*${translationdir//%lingua/${lingua}}/s/^#DONOTCOMPILE //" \ 238 sed -e "/add_subdirectory[[:space:]]*([[:space:]]*${translationdir//%lingua/${lingua}}/s/^#DONOTCOMPILE //" \
242 -e "/ADD_SUBDIRECTORY[[:space:]]*([[:space:]]*${translationdir//%lingua/${lingua}}/s/^#DONOTCOMPILE //" \ 239 -e "/ADD_SUBDIRECTORY[[:space:]]*([[:space:]]*${translationdir//%lingua/${lingua}}/s/^#DONOTCOMPILE //" \
243 -i "${handbookdir}"/CMakeLists.txt && ! has ${lingua} ${linguas} && linguas="${linguas} ${lingua}" 240 -i "${handbookdir}"/CMakeLists.txt && ! has ${lingua} ${linguas} && linguas="${linguas} ${lingua}"
244 fi 241 fi
245 fi 242 fi
248 245
249 done 246 done
250 [[ -n "${linguas}" ]] && einfo "Enabling handbook translations:${linguas}" 247 [[ -n "${linguas}" ]] && einfo "Enabling handbook translations:${linguas}"
251} 248}
252 249
253# @FUNCTION: get_build_type
254# @DESCRIPTION:
255# Determine whether we are using live ebuild or tbzs.
256get_build_type() {
257 if [[ ${SLOT} = live || ${PV} = *9999* ]]; then
258 BUILD_TYPE="live"
259 else
260 BUILD_TYPE="release"
261 fi
262 export BUILD_TYPE
263}
264
265# @FUNCTION: migrate_store_dir 250# @FUNCTION: migrate_store_dir
266# @DESCRIPTION: 251# @DESCRIPTION:
267# Universal store dir migration 252# Universal store dir migration
268# * performs split of kdebase to kdebase-apps when needed 253# * performs split of kdebase to kdebase-apps when needed
269# * moves playground/extragear kde4-base-style to toplevel dir 254# * moves playground/extragear kde4-base-style to toplevel dir
270migrate_store_dir() { 255migrate_store_dir() {
256 if [[ ${KDE_SCM} != svn ]]; then
257 die "migrate_store_dir() only makes sense for subversion"
258 fi
259
271 local cleandir="${ESVN_STORE_DIR}/KDE" 260 local cleandir="${ESVN_STORE_DIR}/KDE"
261
272 if [[ -d "${cleandir}" ]]; then 262 if [[ -d ${cleandir} ]]; then
273 ewarn "'${cleandir}' has been found. Moving contents to new location." 263 ewarn "'${cleandir}' has been found. Moving contents to new location."
274 addwrite "${ESVN_STORE_DIR}" 264 addwrite "${ESVN_STORE_DIR}"
275 # Split kdebase 265 # Split kdebase
276 local module 266 local module
277 if pushd "${cleandir}"/kdebase/kdebase > /dev/null; then 267 if pushd "${cleandir}"/kdebase/kdebase > /dev/null; then
287 # Move the rest 277 # Move the rest
288 local pkg 278 local pkg
289 for pkg in "${cleandir}"/*; do 279 for pkg in "${cleandir}"/*; do
290 mv -f "${pkg}" "${ESVN_STORE_DIR}"/ || eerror "Failed to move '${pkg}'" 280 mv -f "${pkg}" "${ESVN_STORE_DIR}"/ || eerror "Failed to move '${pkg}'"
291 done 281 done
292 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." 282 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."
293 fi 283 fi
294 284
295 if ! hasq kde4-meta ${INHERITED}; then 285 if ! hasq kde4-meta ${INHERITED}; then
296 case ${KMNAME} in 286 case ${KMNAME} in
297 extragear*|playground*) 287 extragear*|playground*)
298 local svnlocalpath="${ESVN_STORE_DIR}"/"${KMNAME}"/"${PN}" 288 local scmlocalpath="${ESVN_STORE_DIR}"/"${KMNAME}"/"${PN}"
299 if [[ -d "${svnlocalpath}" ]]; then 289 if [[ -d "${scmlocalpath}" ]]; then
300 local destdir="${ESVN_STORE_DIR}"/"${ESVN_PROJECT}"/"`basename "${ESVN_REPO_URI}"`" 290 local destdir="${ESVN_STORE_DIR}"/"${ESVN_PROJECT}"/"`basename "${ESVN_REPO_URI}"`"
301 ewarn "'${svnlocalpath}' has been found." 291 ewarn "'${scmlocalpath}' has been found."
302 ewarn "Moving contents to new location: ${destdir}" 292 ewarn "Moving contents to new location: ${destdir}"
303 addwrite "${ESVN_STORE_DIR}" 293 addwrite "${ESVN_STORE_DIR}"
304 mkdir -p "${ESVN_STORE_DIR}"/"${ESVN_PROJECT}" && mv -f "${svnlocalpath}" "${destdir}" \ 294 mkdir -p "${ESVN_STORE_DIR}"/"${ESVN_PROJECT}" && mv -f "${scmlocalpath}" "${destdir}" \
305 || die "Failed to move to '${svnlocalpath}'" 295 || die "Failed to move to '${scmlocalpath}'"
306 # Try cleaning empty directories 296 # Try cleaning empty directories
307 rmdir "`dirname "${svnlocalpath}"`" 2> /dev/null 297 rmdir "`dirname "${scmlocalpath}"`" 2> /dev/null
308 fi 298 fi
309 ;; 299 ;;
310 esac 300 esac
311 fi 301 fi
312} 302}
330# Install generated CMake library dependencies to /var/lib/kde 320# Install generated CMake library dependencies to /var/lib/kde
331install_library_dependencies() { 321install_library_dependencies() {
332 local depsfile="${T}/${PN}:${SLOT}" 322 local depsfile="${T}/${PN}:${SLOT}"
333 323
334 ebegin "Installing library dependencies as ${depsfile##*/}" 324 ebegin "Installing library dependencies as ${depsfile##*/}"
335 insinto ${EROOT}var/lib/kde 325 insinto /var/lib/kde
336 doins "${depsfile}" || die "Failed to install library dependencies." 326 doins "${depsfile}" || die "Failed to install library dependencies."
337 eend $? 327 eend $?
338} 328}
339 329
340# @FUNCTION: load_library_dependencies 330# @FUNCTION: load_library_dependencies
345 ebegin "Injecting library dependencies from '${KMLOADLIBS}'" 335 ebegin "Injecting library dependencies from '${KMLOADLIBS}'"
346 336
347 i=0 337 i=0
348 for pn in ${KMLOADLIBS} ; do 338 for pn in ${KMLOADLIBS} ; do
349 ((i++)) 339 ((i++))
350 depsfile="${EROOT}var/lib/kde/${pn}:${SLOT}" 340 depsfile="${EPREFIX}/var/lib/kde/${pn}:${SLOT}"
351 [[ -r "${depsfile}" ]] || die "Depsfile '${depsfile}' not accessible. You probably need to reinstall ${pn}." 341 [[ -r ${depsfile} ]] || die "Depsfile '${depsfile}' not accessible. You probably need to reinstall ${pn}."
352 sed -i -e "${i}iINCLUDE(\"${depsfile}\")" "${S}/CMakeLists.txt" || \ 342 sed -i -e "${i}iINCLUDE(\"${depsfile}\")" "${S}/CMakeLists.txt" || \
353 die "Failed to include library dependencies for ${pn}" 343 die "Failed to include library dependencies for ${pn}"
354 done 344 done
355 eend $? 345 eend $?
356} 346}
358# @FUNCTION: block_other_slots 348# @FUNCTION: block_other_slots
359# @DESCRIPTION: 349# @DESCRIPTION:
360# Create blocks for the current package in other slots when 350# Create blocks for the current package in other slots when
361# installed with USE=-kdeprefix 351# installed with USE=-kdeprefix
362block_other_slots() { 352block_other_slots() {
363 local slot
364
365 debug-print-function ${FUNCNAME} "$@" 353 debug-print-function ${FUNCNAME} "$@"
366 354
355 _do_blocker ${PN} 0:${SLOT}
356}
357
358# @FUNCTION: add_blocker
359# @DESCRIPTION:
360# Create correct RDEPEND value for blocking correct package.
361# Useful for file-collision blocks.
362# Parameters are package and version(s) to block.
363# add_blocker kdelibs 4.2.4
364# If no version is specified, then all versions will be blocked
365# If any arguments (from 2 on) contain a ":", then different versions
366# are blocked in different slots. (Unlisted slots get the version without
367# a ":", if none, then all versions are blocked). The parameter is then of
368# the form VERSION:SLOT. Any VERSION of 0 means that no blocker will be
369# added for that slot (or, if no slot, then for any unlisted slot).
370# A parameter of the form :SLOT means to block all versions from that slot.
371# If VERSION begins with "<", then "!<foo" will be used instead of "!<=foo".
372# As a special case, if a parameter with slot "3.5" is passed, then that slot
373# may also be blocked.
374#
375# Versions that match "4.x.50" are equivalent to all slots up to (and including)
376# "4.x", but nothing following slot "4.x"
377#
378# As an example, if SLOT=live, then
379# add_blocker kdelibs 0 :4.3 '<4.3.96:4.4' 9999:live
380# will add the following to RDEPEND:
381# !kdeprefix? ( !kde-base/kdelibs:4.3[-kdeprefix] )
382# !kdeprefix? ( !<kde-base/kdelibs-4.3.96:4.4[-kdeprefix] )
383# !<=kde-base/kdelibs-9999:live
384add_blocker() {
385 debug-print-function ${FUNCNAME} "$@"
386
387 RDEPEND+=" $(_do_blocker "$@")"
388}
389
390# @FUNCTION: add_kdebase_dep
391# @DESCRIPTION:
392# Create proper dependency for kde-base/ dependencies, adding SLOT when needed
393# (and *only* when needed).
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 # FIXME remove hack when kdepim-4.4.* is gone
412 elif [[ ( ${KMNAME} == kdepim || ${PN} == kdepim-runtime ) && ${SLOT} == 4.4 && ${1} =~ ^(kde(pim)?libs|oxygen-icons)$ ]]; then
413 ver=4.4.5
414 # FIXME remove hack when kdepim-4.6beta is gone
415 elif [[ ( ${KMNAME} == kdepim || ${PN} == kdepim-runtime ) && ${PV} == 4.5.98 && ${1} =~ ^(kde(pim)?libs|oxygen-icons)$ ]]; then
416 ver=4.5.90
417 # if building stable-live version depend just on slot
418 # to allow merging packages against more stable basic stuff
419 elif [[ ${PV} == *.9999 ]]; then
420 ver=${SLOT}
421 else
422 ver=${PV}
423 fi
424
425 [[ -z ${1} ]] && die "Missing parameter"
426
427 local use=${2:+,${2}}
428
429 if [[ ${KDEBASE} = kde-base ]]; then
430 echo " !kdeprefix? ( >=kde-base/${1}-${ver}[aqua=,-kdeprefix${use}] )"
431 # kdeprefix is no-go for kdepim 4.4
432 [[ ( ${KMNAME} == kdepim || ${PN} == kdepim-runtime ) && ${SLOT} == 4.4 ]] || \
433 echo " kdeprefix? ( >=kde-base/${1}-${ver}:${SLOT}[aqua=,kdeprefix${use}] )"
434 elif [[ ${ver} == live ]]; then
435 echo " kde-base/${1}:live[aqua=${use}]"
436 else
437 echo " >=kde-base/${1}-${ver}[aqua=${use}]"
438 fi
439}
440
441# _greater_max_in_slot ver slot
442# slot must be 4.x or live
443# returns true if ver is >= the maximum possibile version in slot
444_greater_max_in_slot() {
445 local ver=$1
446 local slot=$2
447 # If slot is live, then return false
448 # (nothing is greater than the maximum live version)
449 [[ $slot == live ]] && return 1
450 # Otherwise, for slot X.Y, test against X.Y.50
451 local test=${slot}.50
452 version_compare $1 ${test}
453 # 1 = '<', 2 = '=', 3 = '>'
454 (( $? != 1 ))
455}
456
457# _less_min_in_slot ver slot
458# slot must be 4.x or live
459# returns true if ver is <= the minimum possibile version in slot
460_less_min_in_slot() {
461 local ver=$1
462 local slot=$2
463 # If slot == live, then test with "9999_pre", so that 9999 tests false
464 local test=9999_pre
465 # If slot == X.Y, then test with X.(Y-1).50
466 [[ $slot != live ]] && test=${slot%.*}.$((${slot#*.} - 1)).50
467 version_compare $1 ${test}
468 # 1 = '<', 2 = '=', 3 = '>'
469 (( $? != 3 ))
470}
471
472# Internal function used for add_blocker and block_other_slots
473# This takes the same parameters as add_blocker, but echos to
474# stdout instead of updating a variable.
475_do_blocker() {
476 debug-print-function ${FUNCNAME} "$@"
477
478 [[ -z ${1} ]] && die "Missing parameter"
479 local pkg=kde-base/$1 use
480 shift
481 if [[ $pkg == *\[*\] ]]; then
482 use=${pkg#*\[}
483 use=${use%\]}
484 pkg=${pkg%\[*\]}
485 fi
486
487 local param slot def="unset" var atom
488 # The following variables will hold parameters that contain ":"
489 # - block_3_5
490 # - block_4_1
491 # - block_4_2
492 # - block_4_3
493 # - block_4_4
494 # - block_live
495 for slot in 3.5 ${KDE_SLOTS[@]} ${KDE_LIVE_SLOTS[@]}; do
496 local block_${slot//./_}="unset"
497 done
498
499 # This construct goes through each parameter passed, and sets
500 # either def or block_* to the version passed
501 for param; do
502 # If the parameter does not have a ":" in it...
503 if [[ ${param/:} == ${param} ]]; then
504 def=${param}
505 else # the parameter *does* have a ":" in it
506 # so everything after the : is the slot...
507 slot=${param#*:}
508 # ...and everything before the : is the version
509 local block_${slot//./_}=${param%:*}
510 fi
511 done
512
367 for slot in ${KDE_SLOTS[@]} ${KDE_LIVE_SLOTS[@]}; do 513 for slot in ${KDE_SLOTS[@]} ${KDE_LIVE_SLOTS[@]}; do
368 # Block non kdeprefix ${PN} on other slots 514 # ${var} contains the name of the variable we care about for this slot
515 # ${!var} is it's value
516 var=block_${slot//./_}
517 # if we didn't pass *:${slot}, then use the unsloted value
518 [[ ${!var} == "unset" ]] && var=def
519
520 # If no version was passed, or the version is greater than the maximum
521 # possible version in this slot, block all versions in this slot
522 if [[ ${!var} == "unset" ]] || [[ -z ${!var} ]] || _greater_max_in_slot ${!var#<} ${slot}; then
523 atom=${pkg}
524 # If the version is "0" or less than the minimum possible version in
525 # this slot, do nothing
526 elif [[ ${!var} == "0" ]] || _less_min_in_slot ${!var#<} ${slot}; then
527 continue
528 # If the version passed begins with a "<", then use "<" instead of "<="
529 elif [[ ${!var:0:1} == "<" ]]; then
530 # this also removes the first character of the version, which is a "<"
531 atom="<${pkg}-${!var:1}"
532 else
533 atom="<=${pkg}-${!var}"
534 fi
535 # we always block our own slot, ignoring kdeprefix
369 if [[ ${SLOT} != ${slot} ]]; then 536 if [[ ${SLOT} == ${slot} ]]; then
537 echo " !${atom}:${slot}${use:+[${use}]}"
538 else
539 # we only block other slots on -kdeprefix
370 echo "!kdeprefix? ( !kde-base/${PN}:${slot}[-kdeprefix] )" 540 echo " !kdeprefix? ( !${atom}:${slot}[-kdeprefix${use:+,${use}}] )"
541 fi
542 done
543
544 # This is a special case block for :3.5; it does not use the
545 # default version passed, and no blocker is output *unless* a version
546 # is passed, or ":3.5" is passed to explicitly request a block on all
547 # 3.5 versions.
548 if [[ ${block_3_5} != "unset" && ${block_3_5} != "0" ]]; then
549 if [[ -z ${block_3_5} ]]; then
550 atom=${pkg}
551 elif [[ ${block_3_5:0:1} == "<" ]]; then
552 atom="<${pkg}-${block_3_5:1}"
553 else
554 atom="<=${pkg}-${block_3_5}"
555 fi
556 echo " !${atom}:3.5${use:+[${use}]}"
557 fi
558}
559
560# local function to enable specified translations for specified directory
561# used from kde4-functions_enable_selected_linguas function
562_enable_selected_linguas_dir() {
563 local lingua linguas sr_mess wp
564 local dir=${1}
565
566 [[ -d ${dir} ]] || die "linguas dir \"${dir}\" does not exist"
567 comment_all_add_subdirectory "${dir}"
568 pushd "${dir}" > /dev/null
569
570 # fix all various crazy sr@Latn variations
571 # this part is only ease for ebuilds, so there wont be any die when this
572 # fail at any point
573 sr_mess="sr@latn sr@latin sr@Latin"
574 for wp in ${sr_mess}; do
575 [[ -e ${wp}.po ]] && mv "${wp}.po" "sr@Latn.po"
576 if [[ -d ${wp} ]]; then
577 # move dir and fix cmakelists
578 mv "${wp}" "sr@Latn"
579 sed -i \
580 -e "s:${wp}:sr@Latn:g" \
581 CMakeLists.txt
582 fi
583 done
584
585 for lingua in ${KDE_LINGUAS}; do
586 if [[ -e ${lingua}.po ]]; then
587 mv "${lingua}.po" "${lingua}.po.old"
588 fi
589 done
590
591 for lingua in ${KDE_LINGUAS}; do
592 if use linguas_${lingua} ; then
593 if [[ -d ${lingua} ]]; then
594 linguas="${linguas} ${lingua}"
595 sed -e "/add_subdirectory([[:space:]]*${lingua}[[:space:]]*)[[:space:]]*$/ s/^#DONOTCOMPILE //" \
596 -e "/ADD_SUBDIRECTORY([[:space:]]*${lingua}[[:space:]]*)[[:space:]]*$/ s/^#DONOTCOMPILE //" \
597 -i CMakeLists.txt || die "Sed to uncomment linguas_${lingua} failed."
371 fi 598 fi
599 if [[ -e ${lingua}.po.old ]]; then
600 linguas="${linguas} ${lingua}"
601 mv "${lingua}.po.old" "${lingua}.po"
602 fi
603 fi
372 done 604 done
373} 605 [[ -n ${linguas} ]] && echo ">>> Enabling languages: ${linguas}"
374 606
375# @FUNCTION: add_blocker 607 popd > /dev/null
376# @DESCRIPTION:
377# Create correct RDEPEND value for blocking correct package.
378# Usefull for file-collision blocks.
379# Parameters are package and version to block.
380# add_blocker kde-base/kdelibs 4.2.4
381add_blocker() {
382 local slot
383
384 debug-print-function ${FUNCNAME} "$@"
385
386 [[ ${1} = "" || ${2} = "" ]] && die "Missing parameter"
387 for slot in ${KDE_SLOTS[@]} ${KDE_LIVE_SLOTS[@]}; do
388 # on -kdeprefix we block every slot
389 RDEPEND+=" !kdeprefix? ( !<=${1}-${2}:${slot}[-kdeprefix] )"
390 done
391 # on kdeprefix we block only our slot
392 RDEPEND+=" kdeprefix? ( !<=${1}-${2}:${SLOT}[kdeprefix] )"
393} 608}
609
610_calculate_kde_slot() {
611 local ver=${1:-${PV}}
612 local major=$(get_major_version ${ver})
613 local minor=$(get_version_component_range 2 ${ver})
614 local micro=$(get_version_component_range 3 ${ver})
615 [[ ${ver} == 9999 ]] && echo live
616 (( major == 4 && micro == 9999 )) && echo ${major}.${minor}
617 if (( major == 4 && micro != 9999 )); then
618 (( micro < 50 )) && echo ${major}.${minor} || echo ${major}.$((minor + 1))
619 fi
620}

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

  ViewVC Help
Powered by ViewVC 1.1.20