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

  ViewVC Help
Powered by ViewVC 1.1.20