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

# Extract UUID from ${ROOTFS}, which must have been built
# by the time that this function gets called. Only works
# on ext file systems and depends on tune2fs.
def get_rootfs_uuid(d):
    import subprocess
    rootfs = d.getVar('ROOTFS')
    output = subprocess.check_output(['tune2fs', '-l', rootfs], text=True)
    for line in output.split('\n'):
        if line.startswith('Filesystem UUID:'):
            uuid = line.split()[-1]
            bb.note('UUID of %s: %s' % (rootfs, uuid))
            return uuid
    bb.fatal('Could not determine filesystem UUID of %s' % rootfs)

# Replace the special <<uuid-of-rootfs>> inside a string (like the
# root= APPEND string in a syslinux.cfg or systemd-boot entry) with the
# actual UUID of the rootfs. Does nothing if the special string
# is not used.
def replace_rootfs_uuid(d, string):
    UUID_PLACEHOLDER = '<<uuid-of-rootfs>>'
    if UUID_PLACEHOLDER in string:
        uuid = get_rootfs_uuid(d)
        string = string.replace(UUID_PLACEHOLDER, uuid)
    return string
