From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id 8D42E138CD2 for ; Mon, 25 May 2015 16:08:28 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 2B77EE086E; Mon, 25 May 2015 16:08:28 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id A0299E086E for ; Mon, 25 May 2015 16:08:27 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id B6ED0340B74 for ; Mon, 25 May 2015 16:08:26 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 6D1D79DF for ; Mon, 25 May 2015 16:08:16 +0000 (UTC) From: "Gilles Dartiguelongue" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Gilles Dartiguelongue" Message-ID: <1432568959.6f14db878539ac475c7edd9a05d9f55cc21d8778.eva@gentoo> Subject: [gentoo-commits] proj/gnome:master commit in: eclass/ X-VCS-Repository: proj/gnome X-VCS-Files: eclass/xdg-utils.eclass eclass/xdg.eclass X-VCS-Directories: eclass/ X-VCS-Committer: eva X-VCS-Committer-Name: Gilles Dartiguelongue X-VCS-Revision: 6f14db878539ac475c7edd9a05d9f55cc21d8778 X-VCS-Branch: master Date: Mon, 25 May 2015 16:08:16 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: b7065285-9835-467d-a205-188452f19ad6 X-Archives-Hash: adfa80f2c7c75914247806969f98638e commit: 6f14db878539ac475c7edd9a05d9f55cc21d8778 Author: Gilles Dartiguelongue gentoo org> AuthorDate: Mon May 25 15:49:19 2015 +0000 Commit: Gilles Dartiguelongue gentoo org> CommitDate: Mon May 25 15:49:19 2015 +0000 URL: https://gitweb.gentoo.org/proj/gnome.git/commit/?id=6f14db87 eclass: add XDG eclass to replace fdo-mime fdo-mime eclass is just a collection of helpers that is most often forgotten and/or not properly used in ebuilds having .desktop files or shared mime infos. On top of that, most packages where missing the implicit dependency on the tools used as can be seen in bug #208047. Finally, most packages complying with XDG specifications nowadays expect base directories to be present at various stages of package build as can be seen in the many eclasses implementing handling for this (cmake, gnome2, gstreamer, kde4-base, mono and qt4) so provide it through a simple phase function. eclass/xdg-utils.eclass | 111 ++++++++++++++++++++++++++++++++++++++++++++++++ eclass/xdg.eclass | 68 +++++++++++++++++++++++++++++ 2 files changed, 179 insertions(+) diff --git a/eclass/xdg-utils.eclass b/eclass/xdg-utils.eclass new file mode 100644 index 0000000..6dfe66f --- /dev/null +++ b/eclass/xdg-utils.eclass @@ -0,0 +1,111 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +# @ECLASS: xdg-utils.eclass +# @MAINTAINER: +# gnome@gentoo.org +# @AUTHOR: +# Original author: Gilles Dartiguelongue +# @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: +# * XDG .desktop files cache management +# * XDG mime information database management + +case "${EAPI:-0}" in + 4|5) ;; + *) die "EAPI=${EAPI} is not supported" ;; +esac + +# @ECLASS-VARIABLE: DESKTOP_DATABASE_UPDATE_BIN +# @INTERNAL +# @DESCRIPTION: +# Path to update-desktop-database +: ${DESKTOP_DATABASE_UPDATE_BIN:="/usr/bin/update-desktop-database"} + +# @ECLASS-VARIABLE: DESKTOP_DATABASE_DIR +# @INTERNAL +# @DESCRIPTION: +# Directory where .desktop files database is stored +: ${DESKTOP_DATABASE_DIR="/usr/share/applications"} + +# @ECLASS-VARIABLE: MIMEINFO_DATABASE_UPDATE_BIN +# @INTERNAL +# @DESCRIPTION: +# Path to update-desktop-database +: ${MIMEINFO_DATABASE_UPDATE_BIN:="/usr/bin/update-mime-database"} + +# @ECLASS-VARIABLE: MIMEINFO_DATABASE_DIR +# @INTERNAL +# @DESCRIPTION: +# Directory where .desktop files database is stored +: ${MIMEINFO_DATABASE_DIR:="/usr/share/mime"} + +# @FUNCTION: xdg_desktopfiles_savelist +# @DESCRIPTION: +# Find the .desktop files about to be installed and save their location +# in the XDG_ECLASS_DESKTOPFILES environment variable. +# This function should be called from pkg_preinst. +xdg_desktopfiles_savelist() { + pushd "${D}" &> /dev/null + export XDG_ECLASS_DESKTOPFILES=$(find 'usr/share/applications' -type f 2> /dev/null) + popd &> /dev/null +} + +# @FUNCTION: fdo-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() { + local updater="${EROOT}${DESKTOP_DATABASE_UPDATE_BIN}" + + if [[ ! -x "${updater}" ]] ; then + debug-print "${updater} is not executable" + return + fi + + if [[ -z "${XDG_ECLASS_DESKTOPFILES}" ]]; then + debug-print "No .desktop files to add to database" + return + fi + + ebegin "Updating .desktop files database ..." + "${updater}" -q "${EROOT}${DESKTOP_DATABASE_DIR}" + eend $? +} + +# @FUNCTION: xdg_mimeinfo_savelist +# @DESCRIPTION: +# Find the mime information files about to be installed and save their location +# in the XDG_ECLASS_MIMEINFOFILES environment variable. +# This function should be called from pkg_preinst. +xdg_mimeinfo_savelist() { + pushd "${D}" &> /dev/null + export XDG_ECLASS_MIMEINFOFILES=$(find 'usr/share/mime' -type f 2> /dev/null) + popd &> /dev/null +} + +# @FUNCTION: xdg_mimeinfo_database_update +# @DESCRIPTION: +# Update the mime database. +# Creates a general list of mime types from several sources +xdg_mimeinfo_database_update() { + local updater="${EROOT}${MIMEINFO_DATABASE_UPDATE_BIN}" + + if [[ ! -x "${updater}" ]] ; then + debug-print "${updater} is not executable" + return + fi + + if [[ -z "${XDG_ECLASS_MIMEINFOFILES}" ]]; then + debug-print "No mime info files to add to database" + return + fi + + ebegin "Updating shared mime info database ..." + "${updater}" "${EROOT}${MIMEINFO_DATABASE_DIR}" + eend $? +} diff --git a/eclass/xdg.eclass b/eclass/xdg.eclass new file mode 100644 index 0000000..af5fa8a --- /dev/null +++ b/eclass/xdg.eclass @@ -0,0 +1,68 @@ +# Copyright 1999-2015 Gentoo Foundation +# Distributed under the terms of the GNU General Public License v2 +# $Header: $ + +# @ECLASS: xdg.eclass +# @MAINTAINER: +# freedesktop-bugs@gentoo.org +# @AUTHOR: +# Original author: Gilles Dartiguelongue +# @BLURB: Provides phases for XDG compliant packages. +# @DESCRIPTION: +# Utility eclass to update the desktop and shared mime info as laid +# out in the freedesktop specs & implementations + +inherit xdg-utils + +case "${EAPI:-0}" in + 4|5) + EXPORT_FUNCTIONS src_prepare pkg_preinst pkg_postinst pkg_postrm + ;; + *) die "EAPI=${EAPI} is not supported" ;; +esac + +DEPEND=" + dev-util/desktop-file-utils + x11-misc/shared-mime-info +" + +# @FUNCTION: xdg_src_prepare +# @DESCRIPTION: +# Prepare sources to work with XDG standards. +xdg_src_prepare() { + # Prepare XDG base directories + export XDG_DATA_HOME="${T}/.local/share" + export XDG_CONFIG_HOME="${T}/.config" + export XDG_CACHE_HOME="${T}/.cache" + export XDG_RUNTIME_DIR="${T}/run" + mkdir -p "${XDG_DATA_HOME}" "${XDG_CONFIG_HOME}" "${XDG_CACHE_HOME}" \ + "${XDG_RUNTIME_DIR}" + # This directory needs to be owned by the user, and chmod 0700 + # http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html + chmod 0700 "${XDG_RUNTIME_DIR}" +} + +# @FUNCTION: xdg_pkg_preinst +# @DESCRIPTION: +# Finds .desktop and mime info files for later handling in pkg_postinst +xdg_pkg_preinst() { + xdg_desktopfiles_savelist + xdg_mimeinfo_savelist +} + +# @FUNCTION: xdg_pkg_postinst +# @DESCRIPTION: +# Handle desktop and mime info database updates. +xdg_pkg_postinst() { + xdg_desktop_database_update + xdg_mimeinfo_database_update +} + +# @FUNCTION: xdg_pkg_postrm +# @DESCRIPTION: +# Handle desktop and mime info database updates. +xdg_pkg_postrm() { + xdg_desktop_database_update + xdg_mimeinfo_database_update +} +