| # |
| # Copyright OpenEmbedded Contributors |
| # |
| # SPDX-License-Identifier: MIT |
| # |
| # This class creates mime <-> application associations based on entry |
| # 'MimeType' in *.desktop files |
| # |
| |
| DEPENDS += "desktop-file-utils" |
| PACKAGE_WRITE_DEPS += "desktop-file-utils-native" |
| DESKTOPDIR = "${datadir}/applications" |
| |
| # There are recipes out there installing their .desktop files as absolute |
| # symlinks. For us these are dangling and cannot be introspected for "MimeType" |
| # easily. By addding package-names to MIME_XDG_PACKAGES, packager can force |
| # proper update-desktop-database handling. Note that all introspection is |
| # skipped for MIME_XDG_PACKAGES not empty |
| MIME_XDG_PACKAGES ?= "" |
| |
| mime_xdg_postinst() { |
| if [ "x$D" != "x" ]; then |
| $INTERCEPT_DIR/postinst_intercept update_desktop_database ${PKG} \ |
| mlprefix=${MLPREFIX} \ |
| desktop_dir=${DESKTOPDIR} |
| else |
| update-desktop-database $D${DESKTOPDIR} |
| fi |
| } |
| |
| mime_xdg_postrm() { |
| if [ "x$D" != "x" ]; then |
| $INTERCEPT_DIR/postinst_intercept update_desktop_database ${PKG} \ |
| mlprefix=${MLPREFIX} \ |
| desktop_dir=${DESKTOPDIR} |
| else |
| update-desktop-database $D${DESKTOPDIR} |
| fi |
| } |
| |
| python populate_packages:append () { |
| packages = d.getVar('PACKAGES').split() |
| pkgdest = d.getVar('PKGDEST') |
| desktop_base = d.getVar('DESKTOPDIR') |
| forced_mime_xdg_pkgs = (d.getVar('MIME_XDG_PACKAGES') or '').split() |
| |
| for pkg in packages: |
| desktops_with_mime_found = pkg in forced_mime_xdg_pkgs |
| if d.getVar('MIME_XDG_PACKAGES') == '': |
| desktop_dir = '%s/%s%s' % (pkgdest, pkg, desktop_base) |
| if os.path.exists(desktop_dir): |
| for df in os.listdir(desktop_dir): |
| if df.endswith('.desktop'): |
| try: |
| with open(desktop_dir + '/'+ df, 'r') as f: |
| for line in f.read().split('\n'): |
| if 'MimeType' in line: |
| desktops_with_mime_found = True |
| break; |
| except: |
| bb.warn('Could not open %s. Set MIME_XDG_PACKAGES in recipe or add mime-xdg to INSANE_SKIP.' % desktop_dir + '/'+ df) |
| if desktops_with_mime_found: |
| break |
| if desktops_with_mime_found: |
| bb.note("adding mime-xdg postinst and postrm scripts to %s" % pkg) |
| postinst = d.getVar('pkg_postinst:%s' % pkg) |
| if not postinst: |
| postinst = '#!/bin/sh\n' |
| postinst += d.getVar('mime_xdg_postinst') |
| d.setVar('pkg_postinst:%s' % pkg, postinst) |
| postrm = d.getVar('pkg_postrm:%s' % pkg) |
| if not postrm: |
| postrm = '#!/bin/sh\n' |
| postrm += d.getVar('mime_xdg_postrm') |
| d.setVar('pkg_postrm:%s' % pkg, postrm) |
| bb.note("adding desktop-file-utils dependency to %s" % pkg) |
| d.appendVar('RDEPENDS:' + pkg, " " + d.getVar('MLPREFIX')+"desktop-file-utils") |
| } |