xref: /openbmc/openbmc/poky/meta/lib/oe/bootfiles.py (revision 8460358c3d24c71d9d38fd126c745854a6301564)
1#
2# SPDX-License-Identifier: MIT
3#
4# Copyright (C) 2024 Marcus Folkesson
5# Author: Marcus Folkesson <marcus.folkesson@gmail.com>
6#
7# Utility functions handling boot files
8#
9# Look into deploy_dir and search for boot_files.
10# Returns a list of tuples with (original filepath relative to
11# deploy_dir, desired filepath renaming)
12#
13# Heavily inspired of bootimg-partition.py
14#
15def get_boot_files(deploy_dir, boot_files):
16    import re
17    import os
18    from glob import glob
19
20    if boot_files is None:
21        return None
22
23    # list of tuples (src_name, dst_name)
24    deploy_files = []
25    for src_entry in re.findall(r'[\w;\-\./\*]+', boot_files):
26        if ';' in src_entry:
27            dst_entry = tuple(src_entry.split(';'))
28            if not dst_entry[0] or not dst_entry[1]:
29                raise ValueError('Malformed boot file entry: %s' % src_entry)
30        else:
31            dst_entry = (src_entry, src_entry)
32
33        deploy_files.append(dst_entry)
34
35    install_files = []
36    for deploy_entry in deploy_files:
37        src, dst = deploy_entry
38        if '*' in src:
39            # by default install files under their basename
40            entry_name_fn = os.path.basename
41            if dst != src:
42                # unless a target name was given, then treat name
43                # as a directory and append a basename
44                entry_name_fn = lambda name: \
45                                os.path.join(dst,
46                                             os.path.basename(name))
47
48            srcs = glob(os.path.join(deploy_dir, src))
49
50            for entry in srcs:
51                src = os.path.relpath(entry, deploy_dir)
52                entry_dst_name = entry_name_fn(entry)
53                install_files.append((src, entry_dst_name))
54        else:
55            install_files.append((src, dst))
56
57    return install_files
58