diff options
author | Tomas Chvatal <scarabeus@gentoo.org> | 2009-04-13 00:02:45 +0000 |
---|---|---|
committer | Tomas Chvatal <scarabeus@gentoo.org> | 2009-04-13 00:02:45 +0000 |
commit | 14672ad826d195c5d1f969c9a303d6fc2f14de2d (patch) | |
tree | 0bc9f3245990376feb98d0d886294b438b14a249 /eclass/kde4-functions.eclass | |
parent | Update mask for kde4. Block for change older than 4.2.2 due to eclass update ... (diff) | |
download | gentoo-2-14672ad826d195c5d1f969c9a303d6fc2f14de2d.tar.gz gentoo-2-14672ad826d195c5d1f969c9a303d6fc2f14de2d.tar.bz2 gentoo-2-14672ad826d195c5d1f969c9a303d6fc2f14de2d.zip |
Update kde4 eclasses
Add back support for doc handling (now via doc useflag)
Force kdeprefix only for kde-base things (others are going unprefixed to /usr) ->
Note for this: if user find that some application is pulling [-kdeprefix] kde uninstall/install of that app should help.
Rewritten slot handling with simpler code.
Added detection and alert system for finding what aplication break sth for /usr/share/config and /usr/share/kde4 and screw up perms.
Left for next time: "Support for stable live (live packages from stable branch [shiny huh]). :]"
Diffstat (limited to 'eclass/kde4-functions.eclass')
-rw-r--r-- | eclass/kde4-functions.eclass | 153 |
1 files changed, 67 insertions, 86 deletions
diff --git a/eclass/kde4-functions.eclass b/eclass/kde4-functions.eclass index 528b57fb5614..79083950b4fd 100644 --- a/eclass/kde4-functions.eclass +++ b/eclass/kde4-functions.eclass @@ -1,6 +1,6 @@ # Copyright 1999-2008 Gentoo Foundation # Distributed under the terms of the GNU General Public License v2 -# $Header: /var/cvsroot/gentoo-x86/eclass/kde4-functions.eclass,v 1.14 2009/03/09 19:41:26 scarabeus Exp $ +# $Header: /var/cvsroot/gentoo-x86/eclass/kde4-functions.eclass,v 1.15 2009/04/13 00:02:45 scarabeus Exp $ # @ECLASS: kde4-functions.eclass # @MAINTAINER: @@ -24,40 +24,40 @@ esac # This gets set to a non-zero value when a package is considered a kde or # koffice ebuild. -if [[ $CATEGORY = kde-base ]]; then +if [[ ${CATEGORY} = kde-base ]]; then debug-print "${ECLASS}: KDEBASE ebuild recognized" KDEBASE=kde-base fi # is this a koffice ebuild? -if [[ $KMNAME = koffice || $PN = koffice ]]; then +if [[ ${KMNAME} = koffice || ${PN} = koffice ]]; then debug-print "${ECLASS}: KOFFICE ebuild recognized" KDEBASE=koffice fi # @ECLASS-VARIABLE: KDE_SLOTS # @DESCRIPTION: -# The slots used by all KDE versions later than 4.0. The live-ebuilds use -# KDE_LIVE_SLOTS instead. -KDE_SLOTS=( kde-4 4.1 4.2 4.3 ) +# The slots used by all KDE versions later than 4.0. The live KDE releases use +# KDE_LIVE_SLOTS instead. Values should be ordered. +KDE_SLOTS=( "kde-4" "4.1" "4.2" "4.3" ) # @ECLASS-VARIABLE: KDE_LIVE_SLOTS # @DESCRIPTION: -# The slots used by all KDE live versions. -KDE_LIVE_SLOTS=( live ) +# The slots used by KDE live versions. Values should be ordered. +KDE_LIVE_SLOTS=( "live" ) # @FUNCTION: buildsycoca # @DESCRIPTION: # Function to rebuild the KDE System Configuration Cache. # All KDE ebuilds should run this in pkg_postinst and pkg_postrm. -# -# Note that kde4-base.eclass already does this. buildsycoca() { debug-print-function ${FUNCNAME} "$@" - + if [[ -z ${ROOT%%/} && -x ${KDEDIR}/bin/kbuildsycoca4 ]]; then - # Make sure tha cache file exists, or kbuildsycoca4 will fail + # Make sure tha cache file exists, writable by root and readable by + # others. Otherwise kbuildsycoca4 will fail. touch "${KDEDIR}/share/kde4/services/ksycoca4" + chmod 644 "${KDEDIR}/share/kde4/services/ksycoca4" # We have to unset DISPLAY and DBUS_SESSION_BUS_ADDRESS, the ones # in the user's environment (through su [without '-']) may cause @@ -65,11 +65,25 @@ buildsycoca() { ebegin "Running kbuildsycoca4 to build global database" # This is needed because we support multiple kde versions installed together. - XDG_DATA_DIRS="/usr/share:${KDEDIR}/share:/usr/local/share" \ + # Lookup in order - local, KDEDIR, /usr, do not duplicate entries btw. + local KDEDIRS="/usr/share" + [[ ${KDEDIR} != "/usr" ]] && KDEDIRS="${KDEDIR}/share:${KDEDIRS}" + XDG_DATA_DIRS="/usr/local/share:${KDEDIRS}" \ DISPLAY="" DBUS_SESSION_BUS_ADDRESS="" \ ${KDEDIR}/bin/kbuildsycoca4 --global --noincremental &> /dev/null eend $? fi + + # fix permission for some directories + for x in share/config share/kde4; do + if [[ $(stat --format=%a /usr/${x}) != 755 || $(stat --format=%a ${KDEDIR}/${x}) != 755 ]]; then + ewarn "Package ${PN} is breaking ${KDEDIR}/${x} permissions." + ewarn "Please report this issue to gentoo bugzilla." + einfo "Permissions will get adjusted automatically now." + find /usr/${x} -type d -print0 | xargs -0 chmod 755 + [[ ${KDEDIR} = /usr ]] || find ${KDEDIR}/${x} -type d -print0 | xargs -0 chmod 755 + fi + done } # @FUNCTION: comment_all_add_subdirectory @@ -105,39 +119,39 @@ enable_selected_linguas() { local lingua sr_mess wp # ebuild overridable linguas directory definition - KDE_LINGUAS_DIR=${KDE_LINGUAS_DIR:=${S}/po} - cd "$KDE_LINGUAS_DIR" || die "wrong linguas dir specified" + KDE_LINGUAS_DIR=${KDE_LINGUAS_DIR:="${S}/po"} + cd "${KDE_LINGUAS_DIR}" || die "wrong linguas dir specified" # fix all various crazy sr@Latn variations # this part is only ease for ebuilds, so there wont be any die when this # fail at any point sr_mess="sr@latn sr@latin sr@Latin" for wp in ${sr_mess}; do - [[ -e "$wp.po" ]] && mv "$wp.po" "sr@Latn.po" - if [[ -d "$wp" ]]; then + [[ -e "${wp}.po" ]] && mv "${wp}.po" "sr@Latn.po" + if [[ -d "${wp}" ]]; then # move dir and fix cmakelists - mv "$wp" "sr@Latn" + mv "${wp}" "sr@Latn" sed -i \ - -e "s:$wp:sr@Latin:g" \ + -e "s:${wp}:sr@Latin:g" \ CMakeLists.txt fi done for lingua in ${KDE_LINGUAS}; do - if [[ -e "$lingua.po" ]]; then - mv "$lingua.po" "$lingua.po.old" + if [[ -e "${lingua}.po" ]]; then + mv "${lingua}.po" "${lingua}.po.old" fi done comment_all_add_subdirectory "${KDE_LINGUAS_DIR}" for lingua in ${LINGUAS}; do ebegin "Enabling LANGUAGE: ${lingua}" - if [[ -d "$lingua" ]]; then + if [[ -d "${lingua}" ]]; then sed -e "/add_subdirectory([[:space:]]*${lingua}[[:space:]]*)[[:space:]]*$/ s/^#DONOTCOMPILE //" \ -e "/ADD_SUBDIRECTORY([[:space:]]*${lingua}[[:space:]]*)[[:space:]]*$/ s/^#DONOTCOMPILE //" \ -i CMakeLists.txt || die "Sed to uncomment linguas_${lingua} failed." fi - if [[ -e "$lingua.po.old" ]]; then - mv "$lingua.po.old" "$lingua.po" + if [[ -e "${lingua}.po.old" ]]; then + mv "${lingua}.po.old" "${lingua}.po" fi eend $? done @@ -147,7 +161,7 @@ enable_selected_linguas() { # @DESCRIPTION: # Determine whether we are using live ebuild or tbzs. get_build_type() { - if [[ $SLOT = live || $PV = 9999* ]]; then + if [[ ${SLOT} = live || ${PV} = 9999* ]]; then BUILD_TYPE="live" else BUILD_TYPE="release" @@ -155,65 +169,13 @@ get_build_type() { export BUILD_TYPE } -# @FUNCTION: get_latest_kdedir -# @DESCRIPTION: -# We set up KDEDIR according to the latest KDE version installed; installing our -# package for all available installs is just insane. -# We can check for kdelibs because it is the most basic package; no KDE package -# working without it. This might be changed in future. -get_latest_kdedir() { - case ${KDE_WANTED} in - # note this will need to be updated as stable moves and so on - live) - _versions="9999 4.2.61 4.2.0 4.1.0" - ;; - snapshot) - _versions="4.2.61 4.2.0 4.1.0 9999" - ;; - testing) - _versions="4.2.0 4.1.0 4.2.61 9999" - ;; - stable) - _versions="4.2.0 4.1.0 4.1.61 9999" - ;; - *) die "KDE_WANTED=${KDE_WANTED} not supported here." ;; - esac - # check if exists and fallback as we go - for X in ${_versions}; do - if has_version ">=kde-base/kdelibs-${X}"; then - # figure out which X we are in and set it into _kdedir - case ${X} in - # also keep track here same for kde_wanted - 9999) - _kdedir="live" - break - ;; - 4.3.0 | 4.2.61) - _kdedir="4.3" - break - ;; - 4.2.0 | 4.1.61) - _kdedir="4.2" - break - ;; - 4.1.0) - _kdedir="4.1" - break - ;; - esac - fi - done - - debug-print-function ${FUNCNAME} "$@" "KDE_WANTED=${KDE_WANTED} -> _kdedir=${_kdedir}" -} - # @FUNCTION: migrate_store_dir # @DESCRIPTION: -# Migrate the remnants of ${ESVN_STORE_DIR}/KDE/ to ${ESVN_STORE_DIR}/. -# Perform experimental split of kdebase to kdebase-apps. +# Universal store dir migration +# * performs split of kdebase to kdebase-apps when needed +# * moves playground/extragear kde4-base-style to toplevel dir migrate_store_dir() { - local cleandir - cleandir="${ESVN_STORE_DIR}/KDE" + local cleandir="${ESVN_STORE_DIR}/KDE" if [[ -d "${cleandir}" ]]; then ewarn "'${cleandir}' has been found. Moving contents to new location." addwrite "${ESVN_STORE_DIR}" @@ -232,10 +194,28 @@ migrate_store_dir() { # Move the rest local pkg for pkg in "${cleandir}"/*; do - mv -f "${pkg}" "${ESVN_STORE_DIR}"/ || eerror "failed to move ${pkg}" + mv -f "${pkg}" "${ESVN_STORE_DIR}"/ || eerror "Failed to move '${pkg}'" done 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." fi + + if ! hasq kde4-meta ${INHERITED}; then + case ${KMNAME} in + extragear*|playground*) + local svnlocalpath="${ESVN_STORE_DIR}"/"${KMNAME}"/"${PN}" + if [[ -d "${svnlocalpath}" ]]; then + local destdir="${ESVN_STORE_DIR}"/"${ESVN_PROJECT}"/"`basename "${ESVN_REPO_URI}"`" + ewarn "'${svnlocalpath}' has been found." + ewarn "Moving contents to new location: ${destdir}" + addwrite "${ESVN_STORE_DIR}" + mkdir -p "${ESVN_STORE_DIR}"/"${ESVN_PROJECT}" && mv -f "${svnlocalpath}" "${destdir}" \ + || die "Failed to move to '${svnlocalpath}'" + # Try cleaning empty directories + rmdir "`dirname "${svnlocalpath}"`" 2> /dev/null + fi + ;; + esac + fi } # Functions handling KMLOADLIBS and KMSAVELIBS @@ -246,7 +226,7 @@ migrate_store_dir() { save_library_dependencies() { local depsfile="${T}/${PN}:${SLOT}" - ebegin "Saving library dependendencies in ${depsfile##*/}" + ebegin "Saving library dependencies in ${depsfile##*/}" echo "EXPORT_LIBRARY_DEPENDENCIES(\"${depsfile}\")" >> "${S}/CMakeLists.txt" || \ die "Failed to save the library dependencies." eend $? @@ -256,8 +236,9 @@ save_library_dependencies() { # @DESCRIPTION: # Install generated CMake library dependencies to /var/lib/kde install_library_dependencies() { - local depsfile="$T/$PN:$SLOT" - ebegin "Installing library dependendencies as ${depsfile##*/}" + local depsfile="${T}/${PN}:${SLOT}" + + ebegin "Installing library dependencies as ${depsfile##*/}" insinto /var/lib/kde doins "${depsfile}" || die "Failed to install library dependencies." eend $? @@ -268,7 +249,7 @@ install_library_dependencies() { # Inject specified library dependencies in current package load_library_dependencies() { local pn i depsfile - ebegin "Injecting library dependendencies from '${KMLOADLIBS}'" + ebegin "Injecting library dependencies from '${KMLOADLIBS}'" i=0 for pn in ${KMLOADLIBS} ; do |