From: "Gilles Dartiguelongue" <eva@gentoo.org>
To: gentoo-commits@lists.gentoo.org
Subject: [gentoo-commits] proj/gnome:master commit in: eclass/
Date: Mon, 25 May 2015 16:08:16 +0000 (UTC) [thread overview]
Message-ID: <1432568959.6f14db878539ac475c7edd9a05d9f55cc21d8778.eva@gentoo> (raw)
commit: 6f14db878539ac475c7edd9a05d9f55cc21d8778
Author: Gilles Dartiguelongue <eva <AT> gentoo <DOT> org>
AuthorDate: Mon May 25 15:49:19 2015 +0000
Commit: Gilles Dartiguelongue <eva <AT> gentoo <DOT> 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 <eva@gentoo.org>
+# @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 <eva@gentoo.org>
+# @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
+}
+
next reply other threads:[~2015-05-25 16:08 UTC|newest]
Thread overview: 94+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-05-25 16:08 Gilles Dartiguelongue [this message]
-- strict thread matches above, loose matches on Subject: below --
2022-08-16 14:16 [gentoo-commits] proj/gnome:master commit in: eclass/ Matt Turner
2021-01-30 20:02 Mart Raudsepp
2021-01-30 20:02 Mart Raudsepp
2019-02-24 8:40 Mart Raudsepp
2019-02-23 20:37 Mart Raudsepp
2018-02-16 16:12 Sobhan Mohammadpour
2018-02-01 10:37 Sobhan Mohammadpour
2018-01-29 7:50 Gilles Dartiguelongue
2018-01-29 7:50 Gilles Dartiguelongue
2017-12-26 12:20 Mart Raudsepp
2017-12-10 18:37 Sobhan Mohammadpour
2017-12-10 4:04 Sobhan Mohammadpour
2017-09-13 22:19 Gilles Dartiguelongue
2016-10-30 11:44 Gilles Dartiguelongue
2016-10-30 11:44 Gilles Dartiguelongue
2016-10-30 11:44 Gilles Dartiguelongue
2016-09-05 22:05 Gilles Dartiguelongue
2015-12-24 1:18 Gilles Dartiguelongue
2015-12-24 1:18 Gilles Dartiguelongue
2015-11-26 22:46 Gilles Dartiguelongue
2015-05-25 16:08 Gilles Dartiguelongue
2015-05-24 16:33 Gilles Dartiguelongue
2015-05-24 16:33 Gilles Dartiguelongue
2015-05-10 21:27 Gilles Dartiguelongue
2014-11-23 22:35 Remi Cardona
2014-11-03 23:24 Gilles Dartiguelongue
2014-11-03 23:24 Gilles Dartiguelongue
2014-11-03 23:24 Gilles Dartiguelongue
2014-11-03 23:24 Gilles Dartiguelongue
2014-11-03 23:24 Gilles Dartiguelongue
2014-11-03 23:24 Gilles Dartiguelongue
2014-11-02 15:58 Gilles Dartiguelongue
2014-04-20 23:44 Gilles Dartiguelongue
2014-04-20 22:57 Gilles Dartiguelongue
2013-12-11 23:44 Gilles Dartiguelongue
2013-01-16 22:56 Gilles Dartiguelongue
2012-12-29 20:21 Gilles Dartiguelongue
2012-12-27 22:54 Gilles Dartiguelongue
2012-12-27 22:51 Gilles Dartiguelongue
2012-12-27 22:51 Gilles Dartiguelongue
2012-12-27 22:19 Gilles Dartiguelongue
2012-12-27 22:19 Gilles Dartiguelongue
2012-12-16 14:16 Gilles Dartiguelongue
2012-12-16 14:16 Gilles Dartiguelongue
2012-12-05 21:59 Alexandre Rostovtsev
2012-12-03 23:43 Gilles Dartiguelongue
2012-12-02 16:02 Gilles Dartiguelongue
2012-12-02 14:50 Gilles Dartiguelongue
2012-12-02 14:50 Gilles Dartiguelongue
2012-12-02 14:50 Gilles Dartiguelongue
2012-12-02 14:50 Gilles Dartiguelongue
2012-11-26 21:35 Gilles Dartiguelongue
2012-11-25 22:38 Gilles Dartiguelongue
2012-11-18 19:11 Gilles Dartiguelongue
2012-11-18 18:50 Gilles Dartiguelongue
2012-11-18 18:50 Gilles Dartiguelongue
2012-11-18 18:25 Gilles Dartiguelongue
2012-10-27 8:42 Gilles Dartiguelongue
2012-09-12 20:23 Alexandre Rostovtsev
2012-09-10 2:17 Alexandre Rostovtsev
2012-05-03 0:03 Alexandre Restovtsev
2012-04-24 3:36 Alexandre Restovtsev
2012-02-26 21:53 Alexandre Restovtsev
2012-02-12 15:32 Gilles Dartiguelongue
2012-01-03 11:56 Priit Laes
2011-12-18 5:26 Alexandre Restovtsev
2011-12-14 19:46 Alexandre Restovtsev
2011-11-15 1:31 Nirbheek Chauhan
2011-11-14 7:01 Alexandre Restovtsev
2011-11-04 20:35 Alexandre Restovtsev
2011-09-27 13:36 Nirbheek Chauhan
2011-09-26 4:46 Alexandre Restovtsev
2011-09-25 20:37 Alexandre Restovtsev
2011-09-20 2:17 Alexandre Restovtsev
2011-09-20 0:12 Alexandre Restovtsev
2011-08-28 18:46 Alexandre Restovtsev
2011-08-24 7:04 Arun Raghavan
2011-08-21 7:06 Alexandre Restovtsev
2011-07-19 0:22 Alexandre Restovtsev
2011-05-08 18:54 Gilles Dartiguelongue
2011-05-08 18:54 Gilles Dartiguelongue
2011-05-08 18:54 Gilles Dartiguelongue
2011-04-21 22:09 Gilles Dartiguelongue
2011-04-20 20:39 Nirbheek Chauhan
2011-04-20 18:58 Nirbheek Chauhan
2011-04-05 0:57 Nirbheek Chauhan
2011-04-05 0:57 Nirbheek Chauhan
2011-03-26 2:17 Nirbheek Chauhan
2011-03-20 22:15 Nirbheek Chauhan
2011-03-20 21:46 Nirbheek Chauhan
2011-03-16 20:20 Nirbheek Chauhan
2011-02-28 10:19 Nirbheek Chauhan
2011-02-25 23:34 Nirbheek Chauhan
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1432568959.6f14db878539ac475c7edd9a05d9f55cc21d8778.eva@gentoo \
--to=eva@gentoo.org \
--cc=gentoo-commits@lists.gentoo.org \
--cc=gentoo-dev@lists.gentoo.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox