#
# Copyright OpenEmbedded Contributors
#
# SPDX-License-Identifier: MIT
#

# A bbclass to handle installed GSettings (glib) schemas, updated the compiled
# form on package install and remove.
#
# The compiled schemas are platform-agnostic, so we can depend on
# glib-2.0-native for the native tool and run the postinst script when the
# rootfs builds to save a little time on first boot.

# TODO use a trigger so that this runs once per package operation run

GSETTINGS_PACKAGE ?= "${PN}"

python __anonymous() {
    pkg = d.getVar("GSETTINGS_PACKAGE")
    if pkg:
        d.appendVar("PACKAGE_WRITE_DEPS", " glib-2.0-native")
        d.appendVar("RDEPENDS:" + pkg, " ${MLPREFIX}glib-2.0-utils")
        d.appendVar("FILES:" + pkg, " ${datadir}/glib-2.0/schemas")
}

gsettings_postinstrm () {
	glib-compile-schemas $D${datadir}/glib-2.0/schemas
}

python populate_packages:append () {
    pkg = d.getVar('GSETTINGS_PACKAGE')
    if pkg:
        bb.note("adding gsettings postinst scripts to %s" % pkg)

        postinst = d.getVar('pkg_postinst:%s' % pkg) or d.getVar('pkg_postinst')
        if not postinst:
            postinst = '#!/bin/sh\n'
        postinst += d.getVar('gsettings_postinstrm')
        d.setVar('pkg_postinst:%s' % pkg, postinst)

        bb.note("adding gsettings postrm scripts to %s" % pkg)

        postrm = d.getVar('pkg_postrm:%s' % pkg) or d.getVar('pkg_postrm')
        if not postrm:
            postrm = '#!/bin/sh\n'
        postrm += d.getVar('gsettings_postinstrm')
        d.setVar('pkg_postrm:%s' % pkg, postrm)
}
