/[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.25 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.25 2009/10/06 18:02:12 alexxy Exp $ 3# $Header: /var/cvsroot/gentoo-x86/eclass/kde4-functions.eclass,v 1.48 2011/05/24 20:54:58 abcd Exp $
4 4
5inherit versionator 5inherit versionator
6
7# Prefix compat:
8: ${EROOT:=${ROOT}}
9# Append missing trailing slash character
10[[ ${EROOT} = */ ]] || EROOT+="/"
11 6
12# @ECLASS: kde4-functions.eclass 7# @ECLASS: kde4-functions.eclass
13# @MAINTAINER: 8# @MAINTAINER:
14# kde@gentoo.org 9# kde@gentoo.org
15# @BLURB: Common ebuild functions for KDE 4 packages 10# @BLURB: Common ebuild functions for KDE 4 packages
17# This eclass contains all functions shared by the different eclasses, 12# This eclass contains all functions shared by the different eclasses,
18# for KDE 4 ebuilds. 13# for KDE 4 ebuilds.
19 14
20# @ECLASS-VARIABLE: EAPI 15# @ECLASS-VARIABLE: EAPI
21# @DESCRIPTION: 16# @DESCRIPTION:
22# By default kde4 eclasses want EAPI 2 which might be redefinable to newer 17# Currently kde4 eclasses support EAPI 3 and 4.
23# versions.
24case ${EAPI:-0} in 18case ${EAPI:-0} in
25 2) : ;; 19 4|3) : ;;
26 *) DEPEND="EAPI-TOO-OLD" ;; 20 *) die "EAPI=${EAPI} is not supported" ;;
27esac 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.
28 31
29# @ECLASS-VARIABLE: KDEBASE 32# @ECLASS-VARIABLE: KDEBASE
30# @DESCRIPTION: 33# @DESCRIPTION:
31# 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
32# koffice ebuild. 35# koffice ebuild.
33
34if [[ ${CATEGORY} = kde-base ]]; then 36if [[ ${CATEGORY} = kde-base ]]; then
35 debug-print "${ECLASS}: KDEBASE ebuild recognized" 37 debug-print "${ECLASS}: KDEBASE ebuild recognized"
36 KDEBASE=kde-base 38 KDEBASE=kde-base
37fi 39elif [[ ${KMNAME-${PN}} = koffice ]]; then
38
39# is this a koffice ebuild?
40if [[ ${KMNAME} = koffice || ${PN} = koffice ]]; then
41 debug-print "${ECLASS}: KOFFICE ebuild recognized" 40 debug-print "${ECLASS}: KOFFICE ebuild recognized"
42 KDEBASE=koffice 41 KDEBASE=koffice
42elif [[ ${KMNAME-${PN}} = kdevelop ]]; then
43 debug-print "${ECLASS}: KDEVELOP ebuild recognized"
44 KDEBASE=kdevelop
43fi 45fi
44 46
45# @ECLASS-VARIABLE: KDE_SLOTS 47# @ECLASS-VARIABLE: KDE_SLOTS
46# @DESCRIPTION: 48# @DESCRIPTION:
47# 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
48# KDE_LIVE_SLOTS instead. Values should be ordered. 50# KDE_LIVE_SLOTS instead. Values should be ordered.
49KDE_SLOTS=( "4.1" "4.2" "4.3" "4.4" ) 51KDE_SLOTS=( "4.1" "4.2" "4.3" "4.4" "4.5" "4.6" "4.7" )
50 52
51# @ECLASS-VARIABLE: KDE_LIVE_SLOTS 53# @ECLASS-VARIABLE: KDE_LIVE_SLOTS
52# @DESCRIPTION: 54# @DESCRIPTION:
53# The slots used by KDE live versions. Values should be ordered. 55# The slots used by KDE live versions. Values should be ordered.
54KDE_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
55 109
56# @FUNCTION: slot_is_at_least 110# @FUNCTION: slot_is_at_least
57# @USAGE: <want> <have> 111# @USAGE: <want> <have>
58# @DESCRIPTION: 112# @DESCRIPTION:
59# Version aware slot comparator. 113# Version aware slot comparator.
68# Function to rebuild the KDE System Configuration Cache. 122# Function to rebuild the KDE System Configuration Cache.
69# 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.
70buildsycoca() { 124buildsycoca() {
71 debug-print-function ${FUNCNAME} "$@" 125 debug-print-function ${FUNCNAME} "$@"
72 126
73 local KDE3DIR="${EROOT}usr/kde/3.5"
74 if [[ -z ${EROOT%%/} && -x "${KDE3DIR}"/bin/kbuildsycoca ]]; then
75 # Since KDE3 is aware of shortcuts in /usr, rebuild database
76 # for KDE3 as well.
77 touch "${KDE3DIR}"/share/services/ksycoca
78 chmod 644 "${KDE3DIR}"/share/services/ksycoca
79
80 ebegin "Running kbuildsycoca to build global database"
81 XDG_DATA_DIRS="${EROOT}usr/local/share:${KDE3DIR}/share:${EROOT}usr/share" \
82 DISPLAY="" \
83 "${KDE3DIR}"/bin/kbuildsycoca --global --noincremental &> /dev/null
84 eend $?
85 fi
86
87 # We no longer need to run kbuildsycoca4, as kded does that automatically, as needed 127 # We no longer need to run kbuildsycoca4, as kded does that automatically, as needed
88 128
89 # fix permission for some directories 129 # fix permission for some directories
90 for x in share/{config,kde4}; do 130 for x in share/{config,kde4}; do
91 [[ ${KDEDIR} = ${EROOT}usr ]] && DIRS=${EROOT}usr || DIRS="${EROOT}usr ${KDEDIR}" 131 [[ ${KDEDIR} == /usr ]] && DIRS=${EROOT}usr || DIRS="${EROOT}usr ${EROOT}${KDEDIR}"
92 for y in ${DIRS}; do 132 for y in ${DIRS}; do
93 [[ -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
94 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
95 ewarn "QA Notice:" 143 ewarn "QA Notice:"
96 ewarn "Package ${PN} is breaking ${y}/${x} permissions." 144 ewarn "Package ${PN} is breaking ${y}/${x} permissions."
97 ewarn "Please report this issue to gentoo bugzilla." 145 ewarn "Please report this issue to gentoo bugzilla."
98 einfo "Permissions will get adjusted automatically now." 146 einfo "Permissions will get adjusted automatically now."
99 find "${y}/${x}" -type d -print0 | xargs -0 chmod 755 147 find "${y}/${x}" -type d -print0 | xargs -0 chmod 755
115 -e '/^[[:space:]]*macro_optional_add_subdirectory/s/^/#DONOTCOMPILE /' \ 163 -e '/^[[:space:]]*macro_optional_add_subdirectory/s/^/#DONOTCOMPILE /' \
116 -e '/^[[:space:]]*MACRO_OPTIONAL_ADD_SUBDIRECTORY/s/^/#DONOTCOMPILE /' \ 164 -e '/^[[:space:]]*MACRO_OPTIONAL_ADD_SUBDIRECTORY/s/^/#DONOTCOMPILE /' \
117 || die "${LINENO}: Initial sed died" 165 || die "${LINENO}: Initial sed died"
118} 166}
119 167
120# @ECLASS-VARIABLE: KDE_LINGUAS
121# @DESCRIPTION:
122# This is a whitespace-separated list of translations this ebuild supports.
123# These translations are automatically added to IUSE. Therefore ebuilds must set
124# this variable before inheriting any eclasses. To enable only selected
125# translations, ebuilds must call enable_selected_linguas(). kde4-{base,meta}.eclass does
126# this for you.
127#
128# Example: KDE_LINGUAS="en_GB de nl"
129for _lingua in ${KDE_LINGUAS}; do
130 IUSE="${IUSE} linguas_${_lingua}"
131done
132
133# @FUNCTION: enable_selected_linguas 168# @FUNCTION: enable_selected_linguas
134# @DESCRIPTION: 169# @DESCRIPTION:
135# Enable translations based on LINGUAS settings and translations supported by 170# Enable translations based on LINGUAS settings and translations supported by
136# 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
137# but this default can be overridden by defining KDE_LINGUAS_DIR. 172# but this default can be overridden by defining KDE_LINGUAS_DIR.
138enable_selected_linguas() { 173enable_selected_linguas() {
139 debug-print-function ${FUNCNAME} "$@" 174 debug-print-function ${FUNCNAME} "$@"
140 175
141 local lingua linguas sr_mess wp 176 local x
142 177
143 # if there is no linguas defined we enable everything 178 # if there is no linguas defined we enable everything
144 if ! $(env | grep -q "^LINGUAS="); then 179 if ! $(env | grep -q "^LINGUAS="); then
145 return 0 180 return 0
146 fi 181 fi
147 182
148 # @ECLASS-VARIABLE: KDE_LINGUAS_DIR 183 # @ECLASS-VARIABLE: KDE_LINGUAS_DIR
149 # @DESCRIPTION: 184 # @DESCRIPTION:
150 # 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
151 KDE_LINGUAS_DIR=${KDE_LINGUAS_DIR:="po"} 195 KDE_LINGUAS_DIR=${KDE_LINGUAS_DIR:="po"}
152 [[ -d "${KDE_LINGUAS_DIR}" ]] || die "wrong linguas dir specified" 196 _enable_selected_linguas_dir ${KDE_LINGUAS_DIR}
153 comment_all_add_subdirectory "${KDE_LINGUAS_DIR}"
154 pushd "${KDE_LINGUAS_DIR}" > /dev/null
155
156 # fix all various crazy sr@Latn variations
157 # this part is only ease for ebuilds, so there wont be any die when this
158 # fail at any point
159 sr_mess="sr@latn sr@latin sr@Latin"
160 for wp in ${sr_mess}; do
161 [[ -e "${wp}.po" ]] && mv "${wp}.po" "sr@Latn.po"
162 if [[ -d "${wp}" ]]; then
163 # move dir and fix cmakelists
164 mv "${wp}" "sr@Latn"
165 sed -i \
166 -e "s:${wp}:sr@Latin:g" \
167 CMakeLists.txt
168 fi 197 fi
169 done
170
171 for lingua in ${KDE_LINGUAS}; do
172 if [[ -e "${lingua}.po" ]]; then
173 mv "${lingua}.po" "${lingua}.po.old"
174 fi
175 done
176
177 for lingua in ${KDE_LINGUAS}; do
178 if use linguas_${lingua} ; then
179 if [[ -d "${lingua}" ]]; then
180 linguas="${linguas} ${lingua}"
181 sed -e "/add_subdirectory([[:space:]]*${lingua}[[:space:]]*)[[:space:]]*$/ s/^#DONOTCOMPILE //" \
182 -e "/ADD_SUBDIRECTORY([[:space:]]*${lingua}[[:space:]]*)[[:space:]]*$/ s/^#DONOTCOMPILE //" \
183 -i CMakeLists.txt || die "Sed to uncomment linguas_${lingua} failed."
184 fi
185 if [[ -e "${lingua}.po.old" ]]; then
186 linguas="${linguas} ${lingua}"
187 mv "${lingua}.po.old" "${lingua}.po"
188 fi
189 fi
190 done
191 [[ -n "${linguas}" ]] && einfo "Enabling languages: ${linguas}"
192
193 popd > /dev/null
194} 198}
195 199
196# @FUNCTION: enable_selected_doc_linguas 200# @FUNCTION: enable_selected_doc_linguas
197# @DESCRIPTION: 201# @DESCRIPTION:
198# Enable only selected linguas enabled doc folders. 202# Enable only selected linguas enabled doc folders.
213 for pattern in ${KDE_DOC_DIRS}; do 217 for pattern in ${KDE_DOC_DIRS}; do
214 218
215 local handbookdir=`dirname ${pattern}` 219 local handbookdir=`dirname ${pattern}`
216 local translationdir=`basename ${pattern}` 220 local translationdir=`basename ${pattern}`
217 # Do filename pattern supplied, treat as directory 221 # Do filename pattern supplied, treat as directory
218 [[ "${handbookdir}" = '.' ]] && handbookdir=${translationdir} && translationdir= 222 [[ ${handbookdir} = '.' ]] && handbookdir=${translationdir} && translationdir=
219 [[ -d "${handbookdir}" ]] || die 'wrong doc dir specified' 223 [[ -d ${handbookdir} ]] || die 'wrong doc dir specified'
220 224
221 if ! use handbook; then 225 if ! use handbook; then
222 # Disable whole directory 226 # Disable whole directory
223 sed -e "/add_subdirectory[[:space:]]*([[:space:]]*${handbookdir}[[:space:]]*)/s/^/#DONOTCOMPILE /" \ 227 sed -e "/add_subdirectory[[:space:]]*([[:space:]]*${handbookdir}[[:space:]]*)/s/^/#DONOTCOMPILE /" \
224 -e "/ADD_SUBDIRECTORY[[:space:]]*([[:space:]]*${handbookdir}[[:space:]]*)/s/^/#DONOTCOMPILE /" \ 228 -e "/ADD_SUBDIRECTORY[[:space:]]*([[:space:]]*${handbookdir}[[:space:]]*)/s/^/#DONOTCOMPILE /" \
227 # Disable subdirectories recursively 231 # Disable subdirectories recursively
228 comment_all_add_subdirectory "${handbookdir}" 232 comment_all_add_subdirectory "${handbookdir}"
229 # Add requested translations 233 # Add requested translations
230 local lingua 234 local lingua
231 for lingua in en ${KDE_LINGUAS}; do 235 for lingua in en ${KDE_LINGUAS}; do
232 if [[ ${lingua} = 'en' ]] || use linguas_${lingua}; then 236 if [[ ${lingua} = en ]] || use linguas_${lingua}; then
233 if [[ -d "${handbookdir}/${translationdir//%lingua/${lingua}}" ]]; then 237 if [[ -d ${handbookdir}/${translationdir//%lingua/${lingua}} ]]; then
234 sed -e "/add_subdirectory[[:space:]]*([[:space:]]*${translationdir//%lingua/${lingua}}/s/^#DONOTCOMPILE //" \ 238 sed -e "/add_subdirectory[[:space:]]*([[:space:]]*${translationdir//%lingua/${lingua}}/s/^#DONOTCOMPILE //" \
235 -e "/ADD_SUBDIRECTORY[[:space:]]*([[:space:]]*${translationdir//%lingua/${lingua}}/s/^#DONOTCOMPILE //" \ 239 -e "/ADD_SUBDIRECTORY[[:space:]]*([[:space:]]*${translationdir//%lingua/${lingua}}/s/^#DONOTCOMPILE //" \
236 -i "${handbookdir}"/CMakeLists.txt && ! has ${lingua} ${linguas} && linguas="${linguas} ${lingua}" 240 -i "${handbookdir}"/CMakeLists.txt && ! has ${lingua} ${linguas} && linguas="${linguas} ${lingua}"
237 fi 241 fi
238 fi 242 fi
241 245
242 done 246 done
243 [[ -n "${linguas}" ]] && einfo "Enabling handbook translations:${linguas}" 247 [[ -n "${linguas}" ]] && einfo "Enabling handbook translations:${linguas}"
244} 248}
245 249
246# @FUNCTION: get_build_type
247# @DESCRIPTION:
248# Determine whether we are using live ebuild or tbzs.
249get_build_type() {
250 if [[ ${SLOT} = live || ${PV} = *9999* ]]; then
251 BUILD_TYPE="live"
252 else
253 BUILD_TYPE="release"
254 fi
255 export BUILD_TYPE
256}
257
258# @FUNCTION: migrate_store_dir 250# @FUNCTION: migrate_store_dir
259# @DESCRIPTION: 251# @DESCRIPTION:
260# Universal store dir migration 252# Universal store dir migration
261# * performs split of kdebase to kdebase-apps when needed 253# * performs split of kdebase to kdebase-apps when needed
262# * moves playground/extragear kde4-base-style to toplevel dir 254# * moves playground/extragear kde4-base-style to toplevel dir
263migrate_store_dir() { 255migrate_store_dir() {
256 if [[ ${KDE_SCM} != svn ]]; then
257 die "migrate_store_dir() only makes sense for subversion"
258 fi
259
264 local cleandir="${ESVN_STORE_DIR}/KDE" 260 local cleandir="${ESVN_STORE_DIR}/KDE"
261
265 if [[ -d "${cleandir}" ]]; then 262 if [[ -d ${cleandir} ]]; then
266 ewarn "'${cleandir}' has been found. Moving contents to new location." 263 ewarn "'${cleandir}' has been found. Moving contents to new location."
267 addwrite "${ESVN_STORE_DIR}" 264 addwrite "${ESVN_STORE_DIR}"
268 # Split kdebase 265 # Split kdebase
269 local module 266 local module
270 if pushd "${cleandir}"/kdebase/kdebase > /dev/null; then 267 if pushd "${cleandir}"/kdebase/kdebase > /dev/null; then
280 # Move the rest 277 # Move the rest
281 local pkg 278 local pkg
282 for pkg in "${cleandir}"/*; do 279 for pkg in "${cleandir}"/*; do
283 mv -f "${pkg}" "${ESVN_STORE_DIR}"/ || eerror "Failed to move '${pkg}'" 280 mv -f "${pkg}" "${ESVN_STORE_DIR}"/ || eerror "Failed to move '${pkg}'"
284 done 281 done
285 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."
286 fi 283 fi
287 284
288 if ! hasq kde4-meta ${INHERITED}; then 285 if ! hasq kde4-meta ${INHERITED}; then
289 case ${KMNAME} in 286 case ${KMNAME} in
290 extragear*|playground*) 287 extragear*|playground*)
291 local svnlocalpath="${ESVN_STORE_DIR}"/"${KMNAME}"/"${PN}" 288 local scmlocalpath="${ESVN_STORE_DIR}"/"${KMNAME}"/"${PN}"
292 if [[ -d "${svnlocalpath}" ]]; then 289 if [[ -d "${scmlocalpath}" ]]; then
293 local destdir="${ESVN_STORE_DIR}"/"${ESVN_PROJECT}"/"`basename "${ESVN_REPO_URI}"`" 290 local destdir="${ESVN_STORE_DIR}"/"${ESVN_PROJECT}"/"`basename "${ESVN_REPO_URI}"`"
294 ewarn "'${svnlocalpath}' has been found." 291 ewarn "'${scmlocalpath}' has been found."
295 ewarn "Moving contents to new location: ${destdir}" 292 ewarn "Moving contents to new location: ${destdir}"
296 addwrite "${ESVN_STORE_DIR}" 293 addwrite "${ESVN_STORE_DIR}"
297 mkdir -p "${ESVN_STORE_DIR}"/"${ESVN_PROJECT}" && mv -f "${svnlocalpath}" "${destdir}" \ 294 mkdir -p "${ESVN_STORE_DIR}"/"${ESVN_PROJECT}" && mv -f "${scmlocalpath}" "${destdir}" \
298 || die "Failed to move to '${svnlocalpath}'" 295 || die "Failed to move to '${scmlocalpath}'"
299 # Try cleaning empty directories 296 # Try cleaning empty directories
300 rmdir "`dirname "${svnlocalpath}"`" 2> /dev/null 297 rmdir "`dirname "${scmlocalpath}"`" 2> /dev/null
301 fi 298 fi
302 ;; 299 ;;
303 esac 300 esac
304 fi 301 fi
305} 302}
323# Install generated CMake library dependencies to /var/lib/kde 320# Install generated CMake library dependencies to /var/lib/kde
324install_library_dependencies() { 321install_library_dependencies() {
325 local depsfile="${T}/${PN}:${SLOT}" 322 local depsfile="${T}/${PN}:${SLOT}"
326 323
327 ebegin "Installing library dependencies as ${depsfile##*/}" 324 ebegin "Installing library dependencies as ${depsfile##*/}"
328 insinto ${EROOT}var/lib/kde 325 insinto /var/lib/kde
329 doins "${depsfile}" || die "Failed to install library dependencies." 326 doins "${depsfile}" || die "Failed to install library dependencies."
330 eend $? 327 eend $?
331} 328}
332 329
333# @FUNCTION: load_library_dependencies 330# @FUNCTION: load_library_dependencies
338 ebegin "Injecting library dependencies from '${KMLOADLIBS}'" 335 ebegin "Injecting library dependencies from '${KMLOADLIBS}'"
339 336
340 i=0 337 i=0
341 for pn in ${KMLOADLIBS} ; do 338 for pn in ${KMLOADLIBS} ; do
342 ((i++)) 339 ((i++))
343 depsfile="${EROOT}var/lib/kde/${pn}:${SLOT}" 340 depsfile="${EPREFIX}/var/lib/kde/${pn}:${SLOT}"
344 [[ -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}."
345 sed -i -e "${i}iINCLUDE(\"${depsfile}\")" "${S}/CMakeLists.txt" || \ 342 sed -i -e "${i}iINCLUDE(\"${depsfile}\")" "${S}/CMakeLists.txt" || \
346 die "Failed to include library dependencies for ${pn}" 343 die "Failed to include library dependencies for ${pn}"
347 done 344 done
348 eend $? 345 eend $?
349} 346}
381# As an example, if SLOT=live, then 378# As an example, if SLOT=live, then
382# add_blocker kdelibs 0 :4.3 '<4.3.96:4.4' 9999:live 379# add_blocker kdelibs 0 :4.3 '<4.3.96:4.4' 9999:live
383# will add the following to RDEPEND: 380# will add the following to RDEPEND:
384# !kdeprefix? ( !kde-base/kdelibs:4.3[-kdeprefix] ) 381# !kdeprefix? ( !kde-base/kdelibs:4.3[-kdeprefix] )
385# !kdeprefix? ( !<kde-base/kdelibs-4.3.96:4.4[-kdeprefix] ) 382# !kdeprefix? ( !<kde-base/kdelibs-4.3.96:4.4[-kdeprefix] )
386# !kdeprefix? ( !<=kde-base/kdelibs-9999:live[-kdeprefix] ) 383# !<=kde-base/kdelibs-9999:live
387# kdeprefix? ( !<=kde-base/kdelibs-9999:live[kdeprefix] )
388add_blocker() { 384add_blocker() {
389 debug-print-function ${FUNCNAME} "$@" 385 debug-print-function ${FUNCNAME} "$@"
390 386
391 RDEPEND+=" $(_do_blocker "$@")" 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
392} 439}
393 440
394# _greater_max_in_slot ver slot 441# _greater_max_in_slot ver slot
395# slot must be 4.x or live 442# slot must be 4.x or live
396# returns true if ver is >= the maximum possibile version in slot 443# returns true if ver is >= the maximum possibile version in slot
402 [[ $slot == live ]] && return 1 449 [[ $slot == live ]] && return 1
403 # Otherwise, for slot X.Y, test against X.Y.50 450 # Otherwise, for slot X.Y, test against X.Y.50
404 local test=${slot}.50 451 local test=${slot}.50
405 version_compare $1 ${test} 452 version_compare $1 ${test}
406 # 1 = '<', 2 = '=', 3 = '>' 453 # 1 = '<', 2 = '=', 3 = '>'
407 [[ $? -ne 1 ]] 454 (( $? != 1 ))
408} 455}
409 456
410# _less_min_in_slot ver slot 457# _less_min_in_slot ver slot
411# slot must be 4.x or live 458# slot must be 4.x or live
412# returns true if ver is <= the minimum possibile version in slot 459# returns true if ver is <= the minimum possibile version in slot
414 local ver=$1 461 local ver=$1
415 local slot=$2 462 local slot=$2
416 # If slot == live, then test with "9999_pre", so that 9999 tests false 463 # If slot == live, then test with "9999_pre", so that 9999 tests false
417 local test=9999_pre 464 local test=9999_pre
418 # If slot == X.Y, then test with X.(Y-1).50 465 # If slot == X.Y, then test with X.(Y-1).50
419 [[ $slot == live ]] || test=${slot%.*}.$((${slot#*.} - 1)).50 466 [[ $slot != live ]] && test=${slot%.*}.$((${slot#*.} - 1)).50
420 version_compare $1 ${test} 467 version_compare $1 ${test}
421 # 1 = '<', 2 = '=', 3 = '>' 468 # 1 = '<', 2 = '=', 3 = '>'
422 [[ $? -ne 3 ]] 469 (( $? != 3 ))
423} 470}
424 471
425# Internal function used for add_blocker and block_other_slots 472# Internal function used for add_blocker and block_other_slots
426# This takes the same parameters as add_blocker, but echos to 473# This takes the same parameters as add_blocker, but echos to
427# stdout instead of updating a variable. 474# stdout instead of updating a variable.
428_do_blocker() { 475_do_blocker() {
429 debug-print-function ${FUNCNAME} "$@" 476 debug-print-function ${FUNCNAME} "$@"
430 477
431 [[ -z ${1} ]] && die "Missing parameter" 478 [[ -z ${1} ]] && die "Missing parameter"
432 local pkg=kde-base/$1 479 local pkg=kde-base/$1 use
433 shift 480 shift
481 if [[ $pkg == *\[*\] ]]; then
482 use=${pkg#*\[}
483 use=${use%\]}
484 pkg=${pkg%\[*\]}
485 fi
486
434 local param slot def="unset" var atom 487 local param slot def="unset" var atom
435 # The following variables will hold parameters that contain ":" 488 # The following variables will hold parameters that contain ":"
436 # - block_3_5 489 # - block_3_5
437 # - block_4_1 490 # - block_4_1
438 # - block_4_2 491 # - block_4_2
448 for param; do 501 for param; do
449 # If the parameter does not have a ":" in it... 502 # If the parameter does not have a ":" in it...
450 if [[ ${param/:} == ${param} ]]; then 503 if [[ ${param/:} == ${param} ]]; then
451 def=${param} 504 def=${param}
452 else # the parameter *does* have a ":" in it 505 else # the parameter *does* have a ":" in it
453 # so everythin after the : is the slot... 506 # so everything after the : is the slot...
454 slot=${param#*:} 507 slot=${param#*:}
455 # ...and everything before the : is the version 508 # ...and everything before the : is the version
456 local block_${slot//./_}=${param%:*} 509 local block_${slot//./_}=${param%:*}
457 fi 510 fi
458 done 511 done
462 # ${!var} is it's value 515 # ${!var} is it's value
463 var=block_${slot//./_} 516 var=block_${slot//./_}
464 # if we didn't pass *:${slot}, then use the unsloted value 517 # if we didn't pass *:${slot}, then use the unsloted value
465 [[ ${!var} == "unset" ]] && var=def 518 [[ ${!var} == "unset" ]] && var=def
466 519
467 # If the no version was passed, or the version is greater than the 520 # If no version was passed, or the version is greater than the maximum
468 # maximum possible version in this slot, block all versions in this 521 # possible version in this slot, block all versions in this slot
469 # slot
470 if [[ ${!var} == "unset" ]] || _greater_max_in_slot ${!var#<} ${slot}; then 522 if [[ ${!var} == "unset" ]] || [[ -z ${!var} ]] || _greater_max_in_slot ${!var#<} ${slot}; then
471 atom=${pkg} 523 atom=${pkg}
472 # If the version is "0" or less than the minimum possible version in 524 # If the version is "0" or less than the minimum possible version in
473 # this slot, do nothing 525 # this slot, do nothing
474 elif [[ ${!var} == "0" ]] || _less_min_in_slot ${!var#<} ${slot}; then 526 elif [[ ${!var} == "0" ]] || _less_min_in_slot ${!var#<} ${slot}; then
475 continue 527 continue
478 # this also removes the first character of the version, which is a "<" 530 # this also removes the first character of the version, which is a "<"
479 atom="<${pkg}-${!var:1}" 531 atom="<${pkg}-${!var:1}"
480 else 532 else
481 atom="<=${pkg}-${!var}" 533 atom="<=${pkg}-${!var}"
482 fi 534 fi
483 # on -kdeprefix we block every slot 535 # we always block our own slot, ignoring kdeprefix
484 echo " !kdeprefix? ( !${atom}:${slot}[-kdeprefix] )"
485 # on kdeprefix we block only our slot
486 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
487 echo " kdeprefix? ( !${atom}:${SLOT}[kdeprefix] )" 540 echo " !kdeprefix? ( !${atom}:${slot}[-kdeprefix${use:+,${use}}] )"
488 fi 541 fi
489 done 542 done
490 543
491 # This is a special case block for :3.5; it does not use the 544 # This is a special case block for :3.5; it does not use the
492 # default version passed, and no blocker is output *unless* a version 545 # default version passed, and no blocker is output *unless* a version
498 elif [[ ${block_3_5:0:1} == "<" ]]; then 551 elif [[ ${block_3_5:0:1} == "<" ]]; then
499 atom="<${pkg}-${block_3_5:1}" 552 atom="<${pkg}-${block_3_5:1}"
500 else 553 else
501 atom="<=${pkg}-${block_3_5}" 554 atom="<=${pkg}-${block_3_5}"
502 fi 555 fi
503 echo " !${atom}:3.5" 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
504 fi 582 fi
505} 583 done
506 584
507# @FUNCTION: add_kdebase_dep 585 for lingua in ${KDE_LINGUAS}; do
508# @DESCRIPTION: 586 if [[ -e ${lingua}.po ]]; then
509# Create proper dependency for kde-base/ dependencies, 587 mv "${lingua}.po" "${lingua}.po.old"
510# adding SLOT when needed (and *only* when needed). 588 fi
511# This takes 1 or 2 arguments. The first being the package 589 done
512# name, the optional second, is additional USE flags to append.
513# The output of this should be added directly to DEPEND/RDEPEND, and
514# may be wrapped in a USE conditional (but not an || conditional
515# without an extra set of parentheses.
516add_kdebase_dep() {
517 debug-print-function ${FUNCNAME} "$@"
518 590
519 [[ -z ${1} ]] && die "Missing parameter" 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."
598 fi
599 if [[ -e ${lingua}.po.old ]]; then
600 linguas="${linguas} ${lingua}"
601 mv "${lingua}.po.old" "${lingua}.po"
602 fi
603 fi
604 done
605 [[ -n ${linguas} ]] && echo ">>> Enabling languages: ${linguas}"
520 606
521 local use=${2:+,${2}} 607 popd > /dev/null
522
523 echo "!kdeprefix? ( >=kde-base/${1}-${PV}[-kdeprefix${use}] )"
524 echo "kdeprefix? ( >=kde-base/${1}-${PV}:${SLOT}[kdeprefix${use}] )"
525} 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.25  
changed lines
  Added in v.1.48

  ViewVC Help
Powered by ViewVC 1.1.20