Archive:PackagingDrafts/Icon Cache

Icon Cache
If an application installs icons into one of the subdirectories in  (such as   in the following examples), icon caches must be updated so that the installed icons show up in menus right after package installation. This consists of updating the timestamp of the top-level icon directory where the icons were installed, and running. 'touch'ing the top-level dir is done so that environments compatible with the Icon theme specification can refresh their caches, and  which is additionally required for GNOME also does its work based on the dir timestamp.

Note that no dependencies should be added for this. If gtk-update-icon-cache is not available, there's nothing that would be needing the cache update, ditto if "touch" is not available, there's nothing that would benefit from icon cache updates installed yet either. Not adding the dependency on gtk-update-icon-cache (ie. gtk2 >= 2.6.0) or "touch" makes it easier to use the package (or the same specfile) on systems where it's not available nor needed, such as older distro versions or (very) trimmed down installations, and generally results in less entries in specfiles, rpmdb, and repo metadatas.

%post touch --no-create %{_datadir}/icons/hicolor &>/dev/null || :

%postun if [ $1 -eq 0 ] ; then touch --no-create %{_datadir}/icons/hicolor &>/dev/null gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : fi

%posttrans gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :