From f281d20f8a4e9a458f196143f4a1099369b1b47a Mon Sep 17 00:00:00 2001 From: Andreas Sturmlechner Date: Tue, 5 Feb 2019 19:33:50 +0100 Subject: kde5.eclass: Fork needed xdg.eclass functions pending EAPI-7 porting Signed-off-by: Andreas Sturmlechner --- eclass/kde5.eclass | 128 ++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 123 insertions(+), 5 deletions(-) diff --git a/eclass/kde5.eclass b/eclass/kde5.eclass index e3c4bc9c9231..82655acabcc0 100644 --- a/eclass/kde5.eclass +++ b/eclass/kde5.eclass @@ -31,10 +31,11 @@ _KDE5_ECLASS=1 # for tests you should proceed with setting VIRTUALX_REQUIRED=test. : ${VIRTUALX_REQUIRED:=manual} -inherit cmake-utils flag-o-matic kde5-functions virtualx xdg +inherit cmake-utils flag-o-matic kde5-functions virtualx case ${EAPI} in - 6) inherit eapi7-ver eutils gnome2-utils ;; + 6) inherit eapi7-ver eutils gnome2-utils xdg ;; + 7) inherit xdg-utils ;; esac if [[ ${KDE_BUILD_TYPE} = live ]]; then @@ -716,6 +717,120 @@ kde5_src_install() { fi } +# @FUNCTION: _xdg_icon_cache_update +# @DESCRIPTION: Forked from future xdg-utils.eclass. REMOVEME! +# Updates Gtk+ icon cache files under /usr/share/icons. +# This function should be called from pkg_postinst and pkg_postrm. +_xdg_icon_cache_update() { + if [[ ${EBUILD_PHASE} != post* ]] ; then + die "xdg_icon_cache_update must be used in pkg_post* phases." + fi + + if ! type gtk-update-icon-cache &>/dev/null; then + debug-print "gtk-update-icon-cache is not found" + return + fi + + ebegin "Updating icons cache" + local retval=0 + local fails=( ) + for dir in "${EROOT%/}"/usr/share/icons/* + do + if [[ -f "${dir}/index.theme" ]] ; then + local rv=0 + gtk-update-icon-cache -qf "${dir}" + rv=$? + if [[ ! $rv -eq 0 ]] ; then + debug-print "Updating cache failed on ${dir}" + # Add to the list of failures + fails+=( "${dir}" ) + retval=2 + fi + elif [[ $(ls "${dir}") = "icon-theme.cache" ]]; then + # Clear stale cache files after theme uninstallation + rm "${dir}/icon-theme.cache" + fi + if [[ -z $(ls "${dir}") ]]; then + # Clear empty theme directories after theme uninstallation + rmdir "${dir}" + fi + done + eend ${retval} + for f in "${fails[@]}" ; do + eerror "Failed to update cache with icon $f" + done +} + +# @FUNCTION: _xdg_pkg_preinst +# @DESCRIPTION: Forked from future xdg.eclass. REMOVEME! +# Finds .desktop, icon and mime info files for later handling in pkg_postinst. +# Locations are stored in XDG_ECLASS_DESKTOPFILES, XDG_ECLASS_ICONFILES +# and XDG_ECLASS_MIMEINFOFILES respectively. +_xdg_pkg_preinst() { + local f + + XDG_ECLASS_DESKTOPFILES=() + while IFS= read -r -d '' f; do + XDG_ECLASS_DESKTOPFILES+=( ${f} ) + done < <(cd "${ED}" && find 'usr/share/applications' -type f -print0 2>/dev/null) + + XDG_ECLASS_ICONFILES=() + while IFS= read -r -d '' f; do + XDG_ECLASS_ICONFILES+=( ${f} ) + done < <(cd "${ED}" && find 'usr/share/icons' -type f -print0 2>/dev/null) + + XDG_ECLASS_MIMEINFOFILES=() + while IFS= read -r -d '' f; do + XDG_ECLASS_MIMEINFOFILES+=( ${f} ) + done < <(cd "${ED}" && find 'usr/share/mime' -type f -print0 2>/dev/null) +} + +# @FUNCTION: _xdg_pkg_postinst +# @DESCRIPTION: Forked from future xdg.eclass. REMOVEME! +# Handle desktop, icon and mime info database updates. +_xdg_pkg_postinst() { + if [[ ${#XDG_ECLASS_DESKTOPFILES[@]} -gt 0 ]]; then + xdg_desktop_database_update + else + debug-print "No .desktop files to add to database" + fi + + if [[ ${#XDG_ECLASS_ICONFILES[@]} -gt 0 ]]; then + _xdg_icon_cache_update + else + debug-print "No icon files to add to cache" + fi + + if [[ ${#XDG_ECLASS_MIMEINFOFILES[@]} -gt 0 ]]; then + xdg_mimeinfo_database_update + else + debug-print "No mime info files to add to database" + fi +} + +# @FUNCTION: _xdg_pkg_postrm +# @DESCRIPTION: Forked from future xdg.eclass. REMOVEME! +# Handle desktop, icon and mime info database updates. +_xdg_pkg_postrm() { + if [[ ${#XDG_ECLASS_DESKTOPFILES[@]} -gt 0 ]]; then + xdg_desktop_database_update + else + debug-print "No .desktop files to add to database" + fi + + if [[ ${#XDG_ECLASS_ICONFILES[@]} -gt 0 ]]; then + _xdg_icon_cache_update + else + debug-print "No icon files to add to cache" + fi + + if [[ ${#XDG_ECLASS_MIMEINFOFILES[@]} -gt 0 ]]; then + xdg_mimeinfo_database_update + else + debug-print "No mime info files to add to database" + fi +} + # @FUNCTION: kde5_pkg_preinst # @DESCRIPTION: # Sets up environment variables required in kde5_pkg_postinst. @@ -723,7 +838,8 @@ kde5_pkg_preinst() { debug-print-function ${FUNCNAME} "$@" [[ ${EAPI} == 6 ]] && gnome2_icon_savelist - xdg_pkg_preinst + [[ ${EAPI} == 6 ]] && xdg_pkg_preinst + [[ ${EAPI} == 7 ]] && _xdg_pkg_preinst } # @FUNCTION: kde5_pkg_postinst @@ -735,7 +851,8 @@ kde5_pkg_postinst() { if [[ ${EAPI} == 6 && -n ${GNOME2_ECLASS_ICONS} ]]; then gnome2_icon_cache_update fi - xdg_pkg_postinst + [[ ${EAPI} == 6 ]] && xdg_pkg_postinst + [[ ${EAPI} == 7 ]] && _xdg_pkg_postinst if [[ -z ${I_KNOW_WHAT_I_AM_DOING} ]]; then if [[ ${KDE_BUILD_TYPE} = live ]]; then @@ -756,7 +873,8 @@ kde5_pkg_postrm() { if [[ ${EAPI} == 6 && -n ${GNOME2_ECLASS_ICONS} ]]; then gnome2_icon_cache_update fi - xdg_pkg_postrm + [[ ${EAPI} == 6 ]] && xdg_pkg_postrm + [[ ${EAPI} == 7 ]] && _xdg_pkg_postrm } fi -- cgit v1.2.3-65-gdbad