gtk3.setupHook: clear icon-theme.cache in preFixup

Packages often run gtk-update-icon-cache to include their icons in themes’ icon cache. However, since each package is installed to its own prefix, the files will only collide. For that reason we are removing the icon-theme.cache from applications.

Previously, we did that in hicolor-icon-theme setup hook but, since it is actually gtk3’s utility that creates the cache, we thought it would be appropriate to let its setup hook handle the clearing.
This commit is contained in:
Jan Tojnar 2019-09-12 15:02:06 +02:00
parent 0902f08e0d
commit 8f91e87ded
No known key found for this signature in database
GPG key ID: 7FAB2A15F7A607A4
2 changed files with 24 additions and 13 deletions

View file

@ -1,21 +1,13 @@
# shellcheck shell=bash
# Populate XDG_ICON_DIRS
hicolorIconThemeHook() {
# where to find icon themes
if [ -d "$1/share/icons" ]; then
addToSearchPath XDG_ICON_DIRS $1/share
addToSearchPath XDG_ICON_DIRS "$1/share"
fi
}
# I think this is meant to be a runtime dep
addEnvHooks "$hostOffset" hicolorIconThemeHook
# Remove icon cache
hicolorPreFixupPhase() {
rm -f $out/share/icons/hicolor/icon-theme.cache
rm -f $out/share/icons/HighContrast/icon-theme.cache
}
preFixupPhases="$preFixupPhases hicolorPreFixupPhase"
addEnvHooks "${hostOffset:?}" hicolorIconThemeHook

View file

@ -1,10 +1,29 @@
# shellcheck shell=bash
fixupOutputHooks+=(_gtk3CleanComments)
# Clean comments that link to generator of the file
_gtk3CleanComments() {
local f="$prefix/lib/gtk-3.0/3.0.0/immodules.cache"
local f="${prefix:?}/lib/gtk-3.0/3.0.0/immodules.cache"
if [ -f "$f" ]; then
sed 's|Created by .*bin/gtk-query-|Created by bin/gtk-query-|' -i "$f"
fi
}
# Packages often run gtk-update-icon-cache to include their icons in themes icon cache.
# However, since each package is installed to its own prefix, the files will only collide.
dropIconThemeCache() {
if [[ -z "${dontDropIconThemeCache:-}" ]]; then
local icondir="${out:?}/share/icons"
if [[ -d "${icondir}" ]]; then
# App icons are supposed to go to hicolor theme, since it is a fallback theme as per [icon-theme-spec], but some might still choose to install stylized icons to other themes.
find "${icondir}" -name 'icon-theme.cache' -print0 \
| while IFS= read -r -d '' file; do
echo "Removing ${file}"
rm -f "${file}"
done
fi
fi
}
preFixupPhases="$preFixupPhases dropIconThemeCache"