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

  ViewVC Help
Powered by ViewVC 1.1.20