/[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.51 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.51 2011/06/07 20:11:04 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:
41 KDEBASE=koffice 41 KDEBASE=koffice
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
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" "4.7" )
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 46
58# determine the build type 47# determine the build type
59if [[ ${PV} = *9999* ]]; then 48if [[ ${PV} = *9999* ]]; then
60 BUILD_TYPE="live" 49 BUILD_TYPE="live"
61else 50else
118 debug-print-function ${FUNCNAME} "$@" 107 debug-print-function ${FUNCNAME} "$@"
119 108
120 # 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
121 110
122 # fix permission for some directories 111 # fix permission for some directories
123 for x in share/{config,kde4}; do 112 for x in usr/share/{config,kde4}; do
124 [[ ${KDEDIR} == /usr ]] && DIRS=${EROOT}usr || DIRS="${EROOT}usr ${EROOT}${KDEDIR}" 113 DIRS=${EROOT}usr
125 for y in ${DIRS}; do
126 [[ -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
127 # fixes Bug 318237 115 # fixes Bug 318237
128 if use userland_BSD ; then 116 if use userland_BSD ; then
129 [[ $(stat -f %p "${y}/${x}") != 40755 ]] 117 [[ $(stat -f %p "${EROOT}${x}") != 40755 ]]
130 local stat_rtn="$?" 118 local stat_rtn="$?"
131 else 119 else
132 [[ $(stat --format=%a "${y}/${x}") != 755 ]] 120 [[ $(stat --format=%a "${EROOT}${x}") != 755 ]]
133 local stat_rtn=$? 121 local stat_rtn=$?
134 fi 122 fi
135 if [[ $stat_rtn != 1 ]] ; then 123 if [[ $stat_rtn != 1 ]] ; then
136 ewarn "QA Notice:" 124 ewarn "QA Notice:"
137 ewarn "Package ${PN} is breaking ${y}/${x} permissions." 125 ewarn "Package ${PN} is breaking ${EROOT}${x} permissions."
138 ewarn "Please report this issue to gentoo bugzilla." 126 ewarn "Please report this issue to gentoo bugzilla."
139 einfo "Permissions will get adjusted automatically now." 127 einfo "Permissions will get adjusted automatically now."
140 find "${y}/${x}" -type d -print0 | xargs -0 chmod 755 128 find "${EROOT}${x}" -type d -print0 | xargs -0 chmod 755
141 fi 129 fi
142 done
143 done 130 done
144} 131}
145 132
146# @FUNCTION: comment_all_add_subdirectory 133# @FUNCTION: comment_all_add_subdirectory
147# @USAGE: [list of directory names] 134# @USAGE: [list of directory names]
337 die "Failed to include library dependencies for ${pn}" 324 die "Failed to include library dependencies for ${pn}"
338 done 325 done
339 eend $? 326 eend $?
340} 327}
341 328
342# @FUNCTION: block_other_slots
343# @DESCRIPTION:
344# Create blocks for the current package in other slots
345block_other_slots() {
346 debug-print-function ${FUNCNAME} "$@"
347
348 _do_blocker ${PN} 0:${SLOT}
349}
350
351# @FUNCTION: add_blocker 329# @FUNCTION: add_blocker
352# @DESCRIPTION: 330# @DESCRIPTION:
353# Create correct RDEPEND value for blocking correct package. 331# Create correct RDEPEND value for blocking correct package.
354# Useful for file-collision blocks. 332# Useful for file-collision blocks.
355# Parameters are package and version(s) to block. 333# Parameters are package and version(s) to block.
356# add_blocker kdelibs 4.2.4 334# add_blocker kdelibs 4.2.4
357# If no version is specified, then all versions will be blocked 335# If no version is specified, then all versions will be blocked.
358# If any arguments (from 2 on) contain a ":", then different versions 336# If the version is 0, then no versions will be blocked.
359# 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
360# a ":", if none, then all versions are blocked). The parameter is then of 338# that slot will be blocked as well.
361# the form VERSION:SLOT. Any VERSION of 0 means that no blocker will be
362# added for that slot (or, if no slot, then for any unlisted slot).
363# A parameter of the form :SLOT means to block all versions from that slot.
364# If VERSION begins with "<", then "!<foo" will be used instead of "!<=foo".
365# As a special case, if a parameter with slot "3.5" is passed, then that slot
366# may also be blocked.
367# 339#
368# Versions that match "4.x.50" are equivalent to all slots up to (and including) 340# Examples:
369# "4.x", but nothing following slot "4.x" 341# # Block all versions of kdelibs
342# add_blocker kdelibs
370# 343#
371# As an example, if SLOT=live, then 344# # Block all versions of kdelibs older than 4.3.50
372# add_blocker kdelibs 0 :4.3 '<4.3.96:4.4' 9999:live 345# add_blocker kdelibs 4.3.50
373# will add the following to RDEPEND: 346#
374# !kde-base/kdelibs:4.3 347# # Block kdelibs 3.5.10 and older, but not any version of
375# !<kde-base/kdelibs-4.3.96:4.4 348# # kdelibs from KDE 4
376# !<=kde-base/kdelibs-9999:live 349# add_blocker kdelibs 0 3.5.10:3.5
377add_blocker() { 350add_blocker() {
378 debug-print-function ${FUNCNAME} "$@" 351 debug-print-function ${FUNCNAME} "$@"
379 352
380 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
381} 389}
382 390
383# @FUNCTION: add_kdebase_dep 391# @FUNCTION: add_kdebase_dep
384# @DESCRIPTION: 392# @DESCRIPTION:
385# Create proper dependency for kde-base/ dependencies, adding SLOT when needed 393# Create proper dependency for kde-base/ dependencies.
386# (and *only* when needed).
387# 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
388# 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
389# version to use instead of the automatic version (use sparingly). 396# version to use instead of the automatic version (use sparingly).
390# 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
391# 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
399 ver=${3} 406 ver=${3}
400 elif [[ -n ${KDE_OVERRIDE_MINIMAL} ]]; then 407 elif [[ -n ${KDE_OVERRIDE_MINIMAL} ]]; then
401 ver=${KDE_OVERRIDE_MINIMAL} 408 ver=${KDE_OVERRIDE_MINIMAL}
402 elif [[ ${KDEBASE} != kde-base ]]; then 409 elif [[ ${KDEBASE} != kde-base ]]; then
403 ver=${KDE_MINIMAL} 410 ver=${KDE_MINIMAL}
404 # FIXME remove hack when kdepim-4.4.* is gone
405 elif [[ ( ${KMNAME} == kdepim || ${PN} == kdepim-runtime ) && $(get_kde_version) == 4.4 && ${1} =~ ^(kde(pim)?libs|oxygen-icons)$ ]]; then
406 ver=4.4.5
407 # FIXME remove hack when kdepim-4.6beta is gone
408 elif [[ ( ${KMNAME} == kdepim || ${PN} == kdepim-runtime ) && ${PV} == 4.5.98 && ${1} =~ ^(kde(pim)?libs|oxygen-icons)$ ]]; then
409 ver=4.5.90
410 # if building stable-live version depend just on slot 411 # if building stable-live version depend just on the raw KDE version
411 # to allow merging packages against more stable basic stuff 412 # to allow merging packages against more stable basic stuff
412 elif [[ ${PV} == *.9999 ]]; then 413 elif [[ ${PV} == *.9999 ]]; then
413 ver=$(get_kde_version) 414 ver=$(get_kde_version)
414 else 415 else
415 ver=${PV} 416 ver=${PV}
416 fi 417 fi
417 418
418 [[ -z ${1} ]] && die "Missing parameter" 419 [[ -z ${1} ]] && die "Missing parameter"
419 420
420 local use=${2:+,${2}}
421
422 if [[ ${ver} == live ]]; then
423 echo " kde-base/${1}:live[aqua=${use}]"
424 else
425 echo " >=kde-base/${1}-${ver}[aqua=${use}]" 421 echo " >=kde-base/${1}-${ver}:4[aqua=${2:+,${2}}]"
426 fi
427}
428
429# _greater_max_in_slot ver slot
430# slot must be 4.x or live
431# returns true if ver is >= the maximum possibile version in slot
432_greater_max_in_slot() {
433 local ver=$1
434 local slot=$2
435 # If slot is live, then return false
436 # (nothing is greater than the maximum live version)
437 [[ $slot == live ]] && return 1
438 # Otherwise, for slot X.Y, test against X.Y.50
439 local test=${slot}.50
440 version_compare $1 ${test}
441 # 1 = '<', 2 = '=', 3 = '>'
442 (( $? != 1 ))
443}
444
445# _less_min_in_slot ver slot
446# slot must be 4.x or live
447# returns true if ver is <= the minimum possibile version in slot
448_less_min_in_slot() {
449 local ver=$1
450 local slot=$2
451 # If slot == live, then test with "9999_pre", so that 9999 tests false
452 local test=9999_pre
453 # If slot == X.Y, then test with X.(Y-1).50
454 [[ $slot != live ]] && test=${slot%.*}.$((${slot#*.} - 1)).50
455 version_compare $1 ${test}
456 # 1 = '<', 2 = '=', 3 = '>'
457 (( $? != 3 ))
458}
459
460# Internal function used for add_blocker and block_other_slots
461# This takes the same parameters as add_blocker, but echos to
462# stdout instead of updating a variable.
463_do_blocker() {
464 debug-print-function ${FUNCNAME} "$@"
465
466 [[ -z ${1} ]] && die "Missing parameter"
467 local pkg=kde-base/$1 use
468 shift
469 if [[ $pkg == *\[*\] ]]; then
470 use=${pkg#*\[}
471 use=${use%\]}
472 pkg=${pkg%\[*\]}
473 fi
474
475 local param slot def="unset" var atom
476 # The following variables will hold parameters that contain ":"
477 # - block_3_5
478 # - block_4_1
479 # - block_4_2
480 # - block_4_3
481 # - block_4_4
482 # - block_live
483 for slot in 3.5 ${KDE_SLOTS[@]} ${KDE_LIVE_SLOTS[@]}; do
484 local block_${slot//./_}="unset"
485 done
486
487 # This construct goes through each parameter passed, and sets
488 # either def or block_* to the version passed
489 for param; do
490 # If the parameter does not have a ":" in it...
491 if [[ ${param/:} == ${param} ]]; then
492 def=${param}
493 else # the parameter *does* have a ":" in it
494 # so everything after the : is the slot...
495 slot=${param#*:}
496 # ...and everything before the : is the version
497 local block_${slot//./_}=${param%:*}
498 fi
499 done
500
501 for slot in ${KDE_SLOTS[@]} ${KDE_LIVE_SLOTS[@]}; do
502 # ${var} contains the name of the variable we care about for this slot
503 # ${!var} is it's value
504 var=block_${slot//./_}
505 # if we didn't pass *:${slot}, then use the unsloted value
506 [[ ${!var} == "unset" ]] && var=def
507
508 # If no version was passed, or the version is greater than the maximum
509 # possible version in this slot, block all versions in this slot
510 if [[ ${!var} == "unset" ]] || [[ -z ${!var} ]] || _greater_max_in_slot ${!var#<} ${slot}; then
511 atom=${pkg}
512 # If the version is "0" or less than the minimum possible version in
513 # this slot, do nothing
514 elif [[ ${!var} == "0" ]] || _less_min_in_slot ${!var#<} ${slot}; then
515 continue
516 # If the version passed begins with a "<", then use "<" instead of "<="
517 elif [[ ${!var:0:1} == "<" ]]; then
518 # this also removes the first character of the version, which is a "<"
519 atom="<${pkg}-${!var:1}"
520 else
521 atom="<=${pkg}-${!var}"
522 fi
523 echo " !${atom}:${slot}${use:+[${use}]}"
524 done
525
526 # This is a special case block for :3.5; it does not use the
527 # default version passed, and no blocker is output *unless* a version
528 # is passed, or ":3.5" is passed to explicitly request a block on all
529 # 3.5 versions.
530 if [[ ${block_3_5} != "unset" && ${block_3_5} != "0" ]]; then
531 if [[ -z ${block_3_5} ]]; then
532 atom=${pkg}
533 elif [[ ${block_3_5:0:1} == "<" ]]; then
534 atom="<${pkg}-${block_3_5:1}"
535 else
536 atom="<=${pkg}-${block_3_5}"
537 fi
538 echo " !${atom}:3.5${use:+[${use}]}"
539 fi
540} 422}
541 423
542# local function to enable specified translations for specified directory 424# local function to enable specified translations for specified directory
543# used from kde4-functions_enable_selected_linguas function 425# used from kde4-functions_enable_selected_linguas function
544_enable_selected_linguas_dir() { 426_enable_selected_linguas_dir() {
595get_kde_version() { 477get_kde_version() {
596 local ver=${1:-${PV}} 478 local ver=${1:-${PV}}
597 local major=$(get_major_version ${ver}) 479 local major=$(get_major_version ${ver})
598 local minor=$(get_version_component_range 2 ${ver}) 480 local minor=$(get_version_component_range 2 ${ver})
599 local micro=$(get_version_component_range 3 ${ver}) 481 local micro=$(get_version_component_range 3 ${ver})
600 [[ ${ver} == 9999 ]] && echo live 482 if [[ ${ver} == 9999 ]]; then
601 (( major == 4 && micro == 9999 )) && echo ${major}.${minor} 483 echo live
602 if (( major == 4 && micro != 9999 )); then 484 else
603 (( micro < 50 )) && echo ${major}.${minor} || echo ${major}.$((minor + 1)) 485 (( micro < 50 )) && echo ${major}.${minor} || echo ${major}.$((minor + 1))
604 fi 486 fi
605} 487}

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

  ViewVC Help
Powered by ViewVC 1.1.20