9f1093218244cb7bbf70d37c7b8c59e88ea0e515
[gentoo.git] / eclass / xdg.eclass
1 # Copyright 1999-2015 Gentoo Foundation
2 # Distributed under the terms of the GNU General Public License v2
3 # $Id$
4
5 # @ECLASS: xdg.eclass
6 # @MAINTAINER:
7 # freedesktop-bugs@gentoo.org
8 # @AUTHOR:
9 # Original author: Gilles Dartiguelongue <eva@gentoo.org>
10 # @BLURB: Provides phases for XDG compliant packages.
11 # @DESCRIPTION:
12 # Utility eclass to update the desktop and shared mime info as laid
13 # out in the freedesktop specs & implementations
14
15 inherit xdg-utils
16
17 case "${EAPI:-0}" in
18         4|5|6)
19                 EXPORT_FUNCTIONS src_prepare pkg_preinst pkg_postinst pkg_postrm
20                 ;;
21         *) die "EAPI=${EAPI} is not supported" ;;
22 esac
23
24 # Avoid dependency loop as both depend on glib-2
25 if [[ ${CATEGORY}/${P} != dev-libs/glib-2.* ]] ; then
26 DEPEND="
27         dev-util/desktop-file-utils
28         x11-misc/shared-mime-info
29 "
30 fi
31
32 # @FUNCTION: xdg_src_prepare
33 # @DESCRIPTION:
34 # Prepare sources to work with XDG standards.
35 xdg_src_prepare() {
36         xdg_environment_reset
37
38         has ${EAPI:-0} 6 && default
39 }
40
41 # @FUNCTION: xdg_pkg_preinst
42 # @DESCRIPTION:
43 # Finds .desktop and mime info files for later handling in pkg_postinst.
44 # Locations are stored in XDG_ECLASS_DESKTOPFILES and XDG_ECLASS_MIMEINFOFILES
45 # respectively.
46 xdg_pkg_preinst() {
47         local f
48
49         XDG_ECLASS_DESKTOPFILES=()
50         while IFS= read -r -d '' f; do
51                 XDG_ECLASS_DESKTOPFILES+=( ${f} )
52         done < <(cd "${D}" && find 'usr/share/applications' -type f -print0 2>/dev/null)
53
54         XDG_ECLASS_MIMEINFOFILES=()
55         while IFS= read -r -d '' f; do
56                 XDG_ECLASS_MIMEINFOFILES+=( ${f} )
57         done < <(cd "${D}" && find 'usr/share/mime' -type f -print0 2>/dev/null)
58
59         export XDG_ECLASS_DESKTOPFILES XDG_ECLASS_MIMEINFOFILES
60 }
61
62 # @FUNCTION: xdg_pkg_postinst
63 # @DESCRIPTION:
64 # Handle desktop and mime info database updates.
65 xdg_pkg_postinst() {
66         if [[ ${#XDG_ECLASS_DESKTOPFILES[@]} -gt 0 ]]; then
67                 xdg_desktop_database_update
68         else
69                 debug-print "No .desktop files to add to database"
70         fi
71
72         if [[ ${#XDG_ECLASS_MIMEINFOFILES[@]} -gt 0 ]]; then
73                 xdg_mimeinfo_database_update
74         else
75                 debug-print "No mime info files to add to database"
76         fi
77 }
78
79 # @FUNCTION: xdg_pkg_postrm
80 # @DESCRIPTION:
81 # Handle desktop and mime info database updates.
82 xdg_pkg_postrm() {
83         if [[ ${#XDG_ECLASS_DESKTOPFILES[@]} -gt 0 ]]; then
84                 xdg_desktop_database_update
85         else
86                 debug-print "No .desktop files to add to database"
87         fi
88
89         if [[ ${#XDG_ECLASS_MIMEINFOFILES[@]} -gt 0 ]]; then
90                 xdg_mimeinfo_database_update
91         else
92                 debug-print "No mime info files to add to database"
93         fi
94 }
95