xref: /OK3568_Linux_fs/yocto/poky/meta/classes/mime-xdg.bbclass (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1#
2# This class creates mime <-> application associations based on entry
3# 'MimeType' in *.desktop files
4#
5
6DEPENDS += "desktop-file-utils"
7PACKAGE_WRITE_DEPS += "desktop-file-utils-native"
8DESKTOPDIR = "${datadir}/applications"
9
10# There are recipes out there installing their .desktop files as absolute
11# symlinks. For us these are dangling and cannot be introspected for "MimeType"
12# easily. By addding package-names to MIME_XDG_PACKAGES, packager can force
13# proper update-desktop-database handling. Note that all introspection is
14# skipped for MIME_XDG_PACKAGES not empty
15MIME_XDG_PACKAGES ?= ""
16
17mime_xdg_postinst() {
18if [ "x$D" != "x" ]; then
19	$INTERCEPT_DIR/postinst_intercept update_desktop_database ${PKG} \
20		mlprefix=${MLPREFIX} \
21		desktop_dir=${DESKTOPDIR}
22else
23	update-desktop-database $D${DESKTOPDIR}
24fi
25}
26
27mime_xdg_postrm() {
28if [ "x$D" != "x" ]; then
29	$INTERCEPT_DIR/postinst_intercept update_desktop_database ${PKG} \
30		mlprefix=${MLPREFIX} \
31		desktop_dir=${DESKTOPDIR}
32else
33	update-desktop-database $D${DESKTOPDIR}
34fi
35}
36
37python populate_packages:append () {
38    packages = d.getVar('PACKAGES').split()
39    pkgdest =  d.getVar('PKGDEST')
40    desktop_base = d.getVar('DESKTOPDIR')
41    forced_mime_xdg_pkgs = (d.getVar('MIME_XDG_PACKAGES') or '').split()
42
43    for pkg in packages:
44        desktops_with_mime_found = pkg in forced_mime_xdg_pkgs
45        if d.getVar('MIME_XDG_PACKAGES') == '':
46            desktop_dir = '%s/%s%s' % (pkgdest, pkg, desktop_base)
47            if os.path.exists(desktop_dir):
48                for df in os.listdir(desktop_dir):
49                    if df.endswith('.desktop'):
50                        try:
51                            with open(desktop_dir + '/'+ df, 'r') as f:
52                                for line in f.read().split('\n'):
53                                    if 'MimeType' in line:
54                                        desktops_with_mime_found = True
55                                        break;
56                        except:
57                            bb.warn('Could not open %s. Set MIME_XDG_PACKAGES in recipe or add mime-xdg to INSANE_SKIP.' % desktop_dir + '/'+ df)
58                    if desktops_with_mime_found:
59                        break
60        if desktops_with_mime_found:
61            bb.note("adding mime-xdg postinst and postrm scripts to %s" % pkg)
62            postinst = d.getVar('pkg_postinst:%s' % pkg)
63            if not postinst:
64                postinst = '#!/bin/sh\n'
65            postinst += d.getVar('mime_xdg_postinst')
66            d.setVar('pkg_postinst:%s' % pkg, postinst)
67            postrm = d.getVar('pkg_postrm:%s' % pkg)
68            if not postrm:
69                postrm = '#!/bin/sh\n'
70            postrm += d.getVar('mime_xdg_postrm')
71            d.setVar('pkg_postrm:%s' % pkg, postrm)
72            bb.note("adding desktop-file-utils dependency to %s" % pkg)
73            d.appendVar('RDEPENDS:' + pkg, " " + d.getVar('MLPREFIX')+"desktop-file-utils")
74}
75