/[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.45 Revision 1.54
1# Copyright 1999-2011 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.45 2011/04/06 14:22:14 scarabeus 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:
42elif [[ ${KMNAME-${PN}} = kdevelop ]]; then 42elif [[ ${KMNAME-${PN}} = kdevelop ]]; then
43 debug-print "${ECLASS}: KDEVELOP ebuild recognized" 43 debug-print "${ECLASS}: KDEVELOP ebuild recognized"
44 KDEBASE=kdevelop 44 KDEBASE=kdevelop
45fi 45fi
46 46
47# @ECLASS-VARIABLE: KDE_SLOTS
48# @DESCRIPTION:
49# The slots used by all KDE versions later than 4.0. The live KDE releases use
50# KDE_LIVE_SLOTS instead. Values should be ordered.
51KDE_SLOTS=( "4.1" "4.2" "4.3" "4.4" "4.5" "4.6" )
52
53# @ECLASS-VARIABLE: KDE_LIVE_SLOTS
54# @DESCRIPTION:
55# The slots used by KDE live versions. Values should be ordered.
56KDE_LIVE_SLOTS=( "live" )
57
58# determine the build type 47# determine the build type
59if [[ ${SLOT} = live || ${PV} = *9999* ]]; then 48if [[ ${PV} = *9999* ]]; then
60 BUILD_TYPE="live" 49 BUILD_TYPE="live"
61else 50else
62 BUILD_TYPE="release" 51 BUILD_TYPE="release"
63fi 52fi
64export BUILD_TYPE 53export BUILD_TYPE
77 ;; 66 ;;
78 kdebase-apps) 67 kdebase-apps)
79 KDE_SCM="git" 68 KDE_SCM="git"
80 EGIT_REPONAME=${EGIT_REPONAME:=kde-baseapps} 69 EGIT_REPONAME=${EGIT_REPONAME:=kde-baseapps}
81 ;; 70 ;;
71 kde-workspace|kde-runtime|kde-baseapps)
72 KDE_SCM="git"
73 ;;
82 esac 74 esac
83fi 75fi
84 76
85# @ECLASS-VARIABLE: KDE_SCM 77# @ECLASS-VARIABLE: KDE_SCM
86# @DESCRIPTION: 78# @DESCRIPTION:
105 for _lingua in ${KDE_LINGUAS}; do 97 for _lingua in ${KDE_LINGUAS}; do
106 IUSE="${IUSE} linguas_${_lingua}" 98 IUSE="${IUSE} linguas_${_lingua}"
107 done 99 done
108fi 100fi
109 101
110# @FUNCTION: slot_is_at_least
111# @USAGE: <want> <have>
112# @DESCRIPTION:
113# Version aware slot comparator.
114# Current implementation relies on the fact, that slots can be compared like
115# string literals (and let's keep it this way).
116slot_is_at_least() {
117 [[ "${2}" > "${1}" || "${2}" = "${1}" ]]
118}
119
120# @FUNCTION: buildsycoca 102# @FUNCTION: buildsycoca
121# @DESCRIPTION: 103# @DESCRIPTION:
122# Function to rebuild the KDE System Configuration Cache. 104# Function to rebuild the KDE System Configuration Cache.
123# 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.
124buildsycoca() { 106buildsycoca() {
125 debug-print-function ${FUNCNAME} "$@" 107 debug-print-function ${FUNCNAME} "$@"
126 108
127 # 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
128 110
129 # fix permission for some directories 111 # fix permission for some directories
130 for x in share/{config,kde4}; do 112 for x in usr/share/{config,kde4}; do
131 [[ ${KDEDIR} == /usr ]] && DIRS=${EROOT}usr || DIRS="${EROOT}usr ${EROOT}${KDEDIR}" 113 DIRS=${EROOT}usr
132 for y in ${DIRS}; do
133 [[ -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
134 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
135 ewarn "QA Notice:" 124 ewarn "QA Notice:"
136 ewarn "Package ${PN} is breaking ${y}/${x} permissions." 125 ewarn "Package ${PN} is breaking ${EROOT}${x} permissions."
137 ewarn "Please report this issue to gentoo bugzilla." 126 ewarn "Please report this issue to gentoo bugzilla."
138 einfo "Permissions will get adjusted automatically now." 127 einfo "Permissions will get adjusted automatically now."
139 find "${y}/${x}" -type d -print0 | xargs -0 chmod 755 128 find "${EROOT}${x}" -type d -print0 | xargs -0 chmod 755
140 fi 129 fi
141 done
142 done 130 done
143} 131}
144 132
145# @FUNCTION: comment_all_add_subdirectory 133# @FUNCTION: comment_all_add_subdirectory
146# @USAGE: [list of directory names] 134# @USAGE: [list of directory names]
297 285
298# @FUNCTION: save_library_dependencies 286# @FUNCTION: save_library_dependencies
299# @DESCRIPTION: 287# @DESCRIPTION:
300# Add exporting CMake dependencies for current package 288# Add exporting CMake dependencies for current package
301save_library_dependencies() { 289save_library_dependencies() {
302 local depsfile="${T}/${PN}:${SLOT}" 290 local depsfile="${T}/${PN}"
303 291
304 ebegin "Saving library dependencies in ${depsfile##*/}" 292 ebegin "Saving library dependencies in ${depsfile##*/}"
305 echo "EXPORT_LIBRARY_DEPENDENCIES(\"${depsfile}\")" >> "${S}/CMakeLists.txt" || \ 293 echo "EXPORT_LIBRARY_DEPENDENCIES(\"${depsfile}\")" >> "${S}/CMakeLists.txt" || \
306 die "Failed to save the library dependencies." 294 die "Failed to save the library dependencies."
307 eend $? 295 eend $?
309 297
310# @FUNCTION: install_library_dependencies 298# @FUNCTION: install_library_dependencies
311# @DESCRIPTION: 299# @DESCRIPTION:
312# Install generated CMake library dependencies to /var/lib/kde 300# Install generated CMake library dependencies to /var/lib/kde
313install_library_dependencies() { 301install_library_dependencies() {
314 local depsfile="${T}/${PN}:${SLOT}" 302 local depsfile="${T}/${PN}"
315 303
316 ebegin "Installing library dependencies as ${depsfile##*/}" 304 ebegin "Installing library dependencies as ${depsfile##*/}"
317 insinto /var/lib/kde 305 insinto /var/lib/kde
318 doins "${depsfile}" || die "Failed to install library dependencies." 306 doins "${depsfile}" || die "Failed to install library dependencies."
319 eend $? 307 eend $?
327 ebegin "Injecting library dependencies from '${KMLOADLIBS}'" 315 ebegin "Injecting library dependencies from '${KMLOADLIBS}'"
328 316
329 i=0 317 i=0
330 for pn in ${KMLOADLIBS} ; do 318 for pn in ${KMLOADLIBS} ; do
331 ((i++)) 319 ((i++))
332 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)"
333 [[ -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}."
334 sed -i -e "${i}iINCLUDE(\"${depsfile}\")" "${S}/CMakeLists.txt" || \ 323 sed -i -e "${i}iINCLUDE(\"${depsfile}\")" "${S}/CMakeLists.txt" || \
335 die "Failed to include library dependencies for ${pn}" 324 die "Failed to include library dependencies for ${pn}"
336 done 325 done
337 eend $? 326 eend $?
338}
339
340# @FUNCTION: block_other_slots
341# @DESCRIPTION:
342# Create blocks for the current package in other slots when
343# installed with USE=-kdeprefix
344block_other_slots() {
345 debug-print-function ${FUNCNAME} "$@"
346
347 _do_blocker ${PN} 0:${SLOT}
348} 327}
349 328
350# @FUNCTION: add_blocker 329# @FUNCTION: add_blocker
351# @DESCRIPTION: 330# @DESCRIPTION:
352# Create correct RDEPEND value for blocking correct package. 331# Create correct RDEPEND value for blocking correct package.
353# Useful for file-collision blocks. 332# Useful for file-collision blocks.
354# Parameters are package and version(s) to block. 333# Parameters are package and version(s) to block.
355# add_blocker kdelibs 4.2.4 334# add_blocker kdelibs 4.2.4
356# If no version is specified, then all versions will be blocked 335# If no version is specified, then all versions will be blocked.
357# If any arguments (from 2 on) contain a ":", then different versions 336# If the version is 0, then no versions will be blocked.
358# 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
359# a ":", if none, then all versions are blocked). The parameter is then of 338# that slot will be blocked as well.
360# the form VERSION:SLOT. Any VERSION of 0 means that no blocker will be
361# added for that slot (or, if no slot, then for any unlisted slot).
362# A parameter of the form :SLOT means to block all versions from that slot.
363# If VERSION begins with "<", then "!<foo" will be used instead of "!<=foo".
364# As a special case, if a parameter with slot "3.5" is passed, then that slot
365# may also be blocked.
366# 339#
367# Versions that match "4.x.50" are equivalent to all slots up to (and including) 340# Examples:
368# "4.x", but nothing following slot "4.x" 341# # Block all versions of kdelibs
342# add_blocker kdelibs
369# 343#
370# As an example, if SLOT=live, then 344# # Block all versions of kdelibs older than 4.3.50
371# add_blocker kdelibs 0 :4.3 '<4.3.96:4.4' 9999:live 345# add_blocker kdelibs 4.3.50
372# will add the following to RDEPEND: 346#
373# !kdeprefix? ( !kde-base/kdelibs:4.3[-kdeprefix] ) 347# # Block kdelibs 3.5.10 and older, but not any version of
374# !kdeprefix? ( !<kde-base/kdelibs-4.3.96:4.4[-kdeprefix] ) 348# # kdelibs from KDE 4
375# !<=kde-base/kdelibs-9999:live 349# add_blocker kdelibs 0 3.5.10:3.5
376add_blocker() { 350add_blocker() {
377 debug-print-function ${FUNCNAME} "$@" 351 debug-print-function ${FUNCNAME} "$@"
378 352
379 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
380} 389}
381 390
382# @FUNCTION: add_kdebase_dep 391# @FUNCTION: add_kdebase_dep
383# @DESCRIPTION: 392# @DESCRIPTION:
384# Create proper dependency for kde-base/ dependencies, adding SLOT when needed 393# Create proper dependency for kde-base/ dependencies.
385# (and *only* when needed).
386# This takes 1 to 3 arguments. The first being the package name, the optional 394# This takes 1 to 3 arguments. The first being the package name, the optional
387# second is additional USE flags to append, and the optional third is the 395# second is additional USE flags to append, and the optional third is the
388# version to use instead of the automatic version (use sparingly). 396# version to use instead of the automatic version (use sparingly).
389# The output of this should be added directly to DEPEND/RDEPEND, and may be 397# The output of this should be added directly to DEPEND/RDEPEND, and may be
390# wrapped in a USE conditional (but not an || conditional without an extra set 398# wrapped in a USE conditional (but not an || conditional without an extra set
398 ver=${3} 406 ver=${3}
399 elif [[ -n ${KDE_OVERRIDE_MINIMAL} ]]; then 407 elif [[ -n ${KDE_OVERRIDE_MINIMAL} ]]; then
400 ver=${KDE_OVERRIDE_MINIMAL} 408 ver=${KDE_OVERRIDE_MINIMAL}
401 elif [[ ${KDEBASE} != kde-base ]]; then 409 elif [[ ${KDEBASE} != kde-base ]]; then
402 ver=${KDE_MINIMAL} 410 ver=${KDE_MINIMAL}
403 # FIXME remove hack when kdepim-4.4.* is gone
404 elif [[ ( ${KMNAME} == kdepim || ${PN} == kdepim-runtime ) && ${SLOT} == 4.4 && ${1} =~ ^(kde(pim)?libs|oxygen-icons)$ ]]; then
405 ver=4.4.5
406 # FIXME remove hack when kdepim-4.6beta is gone
407 elif [[ ( ${KMNAME} == kdepim || ${PN} == kdepim-runtime ) && ${PV} == 4.5.98 && ${1} =~ ^(kde(pim)?libs|oxygen-icons)$ ]]; then
408 ver=4.5.90
409 # if building stable-live version depend just on slot 411 # if building stable-live version depend just on the raw KDE version
410 # to allow merging packages against more stable basic stuff 412 # to allow merging packages against more stable basic stuff
411 elif [[ ${PV} == *.9999 ]]; then 413 elif [[ ${PV} == *.9999 ]]; then
412 ver=${SLOT} 414 ver=$(get_kde_version)
413 else 415 else
414 ver=${PV} 416 ver=${PV}
415 fi 417 fi
416 418
417 [[ -z ${1} ]] && die "Missing parameter" 419 [[ -z ${1} ]] && die "Missing parameter"
418 420
419 local use=${2:+,${2}}
420
421 if [[ ${KDEBASE} = kde-base ]]; then
422 echo " !kdeprefix? ( >=kde-base/${1}-${ver}[aqua=,-kdeprefix${use}] )"
423 echo " kdeprefix? ( >=kde-base/${1}-${ver}:${SLOT}[aqua=,kdeprefix${use}] )"
424 elif [[ ${ver} == live ]]; then
425 echo " kde-base/${1}:live[aqua=${use}]"
426 else
427 echo " >=kde-base/${1}-${ver}[aqua=${use}]" 421 echo " >=kde-base/${1}-${ver}:4[aqua=${2:+,${2}}]"
428 fi
429}
430
431# _greater_max_in_slot ver slot
432# slot must be 4.x or live
433# returns true if ver is >= the maximum possibile version in slot
434_greater_max_in_slot() {
435 local ver=$1
436 local slot=$2
437 # If slot is live, then return false
438 # (nothing is greater than the maximum live version)
439 [[ $slot == live ]] && return 1
440 # Otherwise, for slot X.Y, test against X.Y.50
441 local test=${slot}.50
442 version_compare $1 ${test}
443 # 1 = '<', 2 = '=', 3 = '>'
444 (( $? != 1 ))
445}
446
447# _less_min_in_slot ver slot
448# slot must be 4.x or live
449# returns true if ver is <= the minimum possibile version in slot
450_less_min_in_slot() {
451 local ver=$1
452 local slot=$2
453 # If slot == live, then test with "9999_pre", so that 9999 tests false
454 local test=9999_pre
455 # If slot == X.Y, then test with X.(Y-1).50
456 [[ $slot != live ]] && test=${slot%.*}.$((${slot#*.} - 1)).50
457 version_compare $1 ${test}
458 # 1 = '<', 2 = '=', 3 = '>'
459 (( $? != 3 ))
460}
461
462# Internal function used for add_blocker and block_other_slots
463# This takes the same parameters as add_blocker, but echos to
464# stdout instead of updating a variable.
465_do_blocker() {
466 debug-print-function ${FUNCNAME} "$@"
467
468 [[ -z ${1} ]] && die "Missing parameter"
469 local pkg=kde-base/$1 use
470 shift
471 if [[ $pkg == *\[*\] ]]; then
472 use=${pkg#*\[}
473 use=${use%\]}
474 pkg=${pkg%\[*\]}
475 fi
476
477 local param slot def="unset" var atom
478 # The following variables will hold parameters that contain ":"
479 # - block_3_5
480 # - block_4_1
481 # - block_4_2
482 # - block_4_3
483 # - block_4_4
484 # - block_live
485 for slot in 3.5 ${KDE_SLOTS[@]} ${KDE_LIVE_SLOTS[@]}; do
486 local block_${slot//./_}="unset"
487 done
488
489 # This construct goes through each parameter passed, and sets
490 # either def or block_* to the version passed
491 for param; do
492 # If the parameter does not have a ":" in it...
493 if [[ ${param/:} == ${param} ]]; then
494 def=${param}
495 else # the parameter *does* have a ":" in it
496 # so everything after the : is the slot...
497 slot=${param#*:}
498 # ...and everything before the : is the version
499 local block_${slot//./_}=${param%:*}
500 fi
501 done
502
503 for slot in ${KDE_SLOTS[@]} ${KDE_LIVE_SLOTS[@]}; do
504 # ${var} contains the name of the variable we care about for this slot
505 # ${!var} is it's value
506 var=block_${slot//./_}
507 # if we didn't pass *:${slot}, then use the unsloted value
508 [[ ${!var} == "unset" ]] && var=def
509
510 # If no version was passed, or the version is greater than the maximum
511 # possible version in this slot, block all versions in this slot
512 if [[ ${!var} == "unset" ]] || [[ -z ${!var} ]] || _greater_max_in_slot ${!var#<} ${slot}; then
513 atom=${pkg}
514 # If the version is "0" or less than the minimum possible version in
515 # this slot, do nothing
516 elif [[ ${!var} == "0" ]] || _less_min_in_slot ${!var#<} ${slot}; then
517 continue
518 # If the version passed begins with a "<", then use "<" instead of "<="
519 elif [[ ${!var:0:1} == "<" ]]; then
520 # this also removes the first character of the version, which is a "<"
521 atom="<${pkg}-${!var:1}"
522 else
523 atom="<=${pkg}-${!var}"
524 fi
525 # we always block our own slot, ignoring kdeprefix
526 if [[ ${SLOT} == ${slot} ]]; then
527 echo " !${atom}:${slot}${use:+[${use}]}"
528 else
529 # we only block other slots on -kdeprefix
530 echo " !kdeprefix? ( !${atom}:${slot}[-kdeprefix${use:+,${use}}] )"
531 fi
532 done
533
534 # This is a special case block for :3.5; it does not use the
535 # default version passed, and no blocker is output *unless* a version
536 # is passed, or ":3.5" is passed to explicitly request a block on all
537 # 3.5 versions.
538 if [[ ${block_3_5} != "unset" && ${block_3_5} != "0" ]]; then
539 if [[ -z ${block_3_5} ]]; then
540 atom=${pkg}
541 elif [[ ${block_3_5:0:1} == "<" ]]; then
542 atom="<${pkg}-${block_3_5:1}"
543 else
544 atom="<=${pkg}-${block_3_5}"
545 fi
546 echo " !${atom}:3.5${use:+[${use}]}"
547 fi
548} 422}
549 423
550# local function to enable specified translations for specified directory 424# local function to enable specified translations for specified directory
551# used from kde4-functions_enable_selected_linguas function 425# used from kde4-functions_enable_selected_linguas function
552_enable_selected_linguas_dir() { 426_enable_selected_linguas_dir() {
595 [[ -n ${linguas} ]] && echo ">>> Enabling languages: ${linguas}" 469 [[ -n ${linguas} ]] && echo ">>> Enabling languages: ${linguas}"
596 470
597 popd > /dev/null 471 popd > /dev/null
598} 472}
599 473
600_calculate_kde_slot() { 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() {
601 local ver=${1:-${PV}} 478 local ver=${1:-${PV}}
602 local major=$(get_major_version ${ver}) 479 local major=$(get_major_version ${ver})
603 local minor=$(get_version_component_range 2 ${ver}) 480 local minor=$(get_version_component_range 2 ${ver})
604 local micro=$(get_version_component_range 3 ${ver}) 481 local micro=$(get_version_component_range 3 ${ver})
605 [[ ${ver} == 9999 ]] && echo live 482 if [[ ${ver} == 9999 ]]; then
606 (( major == 4 && micro == 9999 )) && echo ${major}.${minor} 483 echo live
607 if (( major == 4 && micro != 9999 )); then 484 else
608 (( micro < 50 )) && echo ${major}.${minor} || echo ${major}.$((minor + 1)) 485 (( micro < 50 )) && echo ${major}.${minor} || echo ${major}.$((minor + 1))
609 fi 486 fi
610} 487}

Legend:
Removed from v.1.45  
changed lines
  Added in v.1.54

  ViewVC Help
Powered by ViewVC 1.1.20