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

  ViewVC Help
Powered by ViewVC 1.1.20