135 lines
4 KiB
Bash
135 lines
4 KiB
Bash
# Copyright 2004-2023 Gentoo Authors
|
|
# Distributed under the terms of the GNU General Public License v2
|
|
|
|
# @ECLASS: xdg-utils.eclass
|
|
# @MAINTAINER:
|
|
# gnome@gentoo.org
|
|
# freedesktop-bugs@gentoo.org
|
|
# @AUTHOR:
|
|
# Original author: Gilles Dartiguelongue <eva@gentoo.org>
|
|
# @SUPPORTED_EAPIS: 5 6 7 8
|
|
# @BLURB: Auxiliary functions commonly used by XDG compliant packages.
|
|
# @DESCRIPTION:
|
|
# This eclass provides a set of auxiliary functions needed by most XDG
|
|
# compliant packages.
|
|
# It provides XDG stack related functions such as:
|
|
# * GTK/Qt5 icon theme cache management
|
|
# * XDG .desktop files cache management
|
|
# * XDG mime information database management
|
|
|
|
case ${EAPI} in
|
|
5|6|7|8) ;;
|
|
*) die "${ECLASS}: EAPI ${EAPI:-0} not supported" ;;
|
|
esac
|
|
|
|
# @ECLASS_VARIABLE: DESKTOP_DATABASE_DIR
|
|
# @INTERNAL
|
|
# @DESCRIPTION:
|
|
# Directory where .desktop files database is stored
|
|
: "${DESKTOP_DATABASE_DIR="/usr/share/applications"}"
|
|
|
|
# @ECLASS_VARIABLE: MIMEINFO_DATABASE_DIR
|
|
# @INTERNAL
|
|
# @DESCRIPTION:
|
|
# Directory where .desktop files database is stored
|
|
: "${MIMEINFO_DATABASE_DIR:="/usr/share/mime"}"
|
|
|
|
# @FUNCTION: xdg_environment_reset
|
|
# @DESCRIPTION:
|
|
# Clean up environment for clean builds.
|
|
xdg_environment_reset() {
|
|
# Prepare XDG base directories
|
|
export XDG_DATA_HOME="${HOME}/.local/share"
|
|
export XDG_CONFIG_HOME="${HOME}/.config"
|
|
export XDG_CACHE_HOME="${HOME}/.cache"
|
|
export XDG_STATE_HOME="${HOME}/.local/state"
|
|
export XDG_RUNTIME_DIR="${T}/run"
|
|
mkdir -p "${XDG_DATA_HOME}" "${XDG_CONFIG_HOME}" "${XDG_CACHE_HOME}" \
|
|
"${XDG_STATE_HOME}" "${XDG_RUNTIME_DIR}" || die
|
|
# This directory needs to be owned by the user, and chmod 0700
|
|
# https://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html
|
|
chmod 0700 "${XDG_RUNTIME_DIR}" || die
|
|
|
|
unset DBUS_SESSION_BUS_ADDRESS
|
|
}
|
|
|
|
# @FUNCTION: xdg_desktop_database_update
|
|
# @DESCRIPTION:
|
|
# Updates the .desktop files database.
|
|
# Generates a list of mimetypes linked to applications that can handle them
|
|
xdg_desktop_database_update() {
|
|
if [[ ${EBUILD_PHASE} != post* ]]; then
|
|
die "xdg_desktop_database_update must be used in pkg_post* phases."
|
|
fi
|
|
|
|
if ! type update-desktop-database &>/dev/null; then
|
|
debug-print "update-desktop-database is not found"
|
|
return
|
|
fi
|
|
|
|
ebegin "Updating .desktop files database"
|
|
update-desktop-database -q "${EROOT%/}${DESKTOP_DATABASE_DIR}"
|
|
eend $?
|
|
}
|
|
|
|
# @FUNCTION: xdg_icon_cache_update
|
|
# @DESCRIPTION:
|
|
# Updates icon theme 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 dir retval=0
|
|
local fails=()
|
|
for dir in "${EROOT%/}"/usr/share/icons/*; do
|
|
if [[ -f ${dir}/index.theme ]]; then
|
|
if ! gtk-update-icon-cache -qf "${dir}"; 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 dir in "${fails[@]}"; do
|
|
eerror "Failed to update cache with icon ${dir}"
|
|
done
|
|
}
|
|
|
|
# @FUNCTION: xdg_mimeinfo_database_update
|
|
# @DESCRIPTION:
|
|
# Update the mime database.
|
|
# Creates a general list of mime types from several sources
|
|
xdg_mimeinfo_database_update() {
|
|
if [[ ${EBUILD_PHASE} != post* ]]; then
|
|
die "xdg_mimeinfo_database_update must be used in pkg_post* phases."
|
|
fi
|
|
|
|
if ! type update-mime-database &>/dev/null; then
|
|
debug-print "update-mime-database is not found"
|
|
return
|
|
fi
|
|
|
|
# https://bugs.gentoo.org/819783
|
|
local -x PKGSYSTEM_ENABLE_FSYNC=0
|
|
|
|
ebegin "Updating shared mime info database"
|
|
update-mime-database "${EROOT%/}${MIMEINFO_DATABASE_DIR}"
|
|
eend $?
|
|
}
|