wic: add globbing support in IMAGE_BOOT_FILES entries

Adding glob support for entries in IMAGE_BOOT_FILES. Files picked up by
glob are by default installed under their basename, as this is likely
most common use case. Target name for globbed entries specifies the
name of directory in which files will be installed withing the partition.

(From OE-Core rev: 2c9635bdb97ddc80750c11d356e153a99d61cf09)

Signed-off-by: Maciej Borzecki <maciej.borzecki@open-rnd.pl>
Signed-off-by: Maciek Borzecki <maciek.borzecki@gmail.com>
Signed-off-by: Ross Burton <ross.burton@intel.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Maciej Borzecki 2014-12-10 12:45:57 +01:00 committed by Richard Purdie
parent 90487dfbbb
commit cff6c481aa
1 changed files with 31 additions and 8 deletions

View File

@ -29,6 +29,7 @@ import re
from wic import msger
from wic.pluginbase import SourcePlugin
from wic.utils.oe.misc import *
from glob import glob
class BootimgPartitionPlugin(SourcePlugin):
name = 'bootimg-partition'
@ -87,7 +88,7 @@ class BootimgPartitionPlugin(SourcePlugin):
# list of tuples (src_name, dst_name)
deploy_files = []
for src_entry in re.findall(r'[\w;\-\./]+', boot_files):
for src_entry in re.findall(r'[\w;\-\./\*]+', boot_files):
if ';' in src_entry:
dst_entry = tuple(src_entry.split(';'))
if not dst_entry[0] or not dst_entry[1]:
@ -100,14 +101,36 @@ class BootimgPartitionPlugin(SourcePlugin):
for deploy_entry in deploy_files:
src, dst = deploy_entry
src_path = os.path.join(bootimg_dir, src)
dst_path = os.path.join(hdddir, dst)
install_task = []
if '*' in src:
# by default install files under their basename
entry_name_fn = os.path.basename
if dst != src:
# unless a target name was given, then treat name
# as a directory and append a basename
entry_name_fn = lambda name: \
os.path.join(dst,
os.path.basename(name))
msger.debug('Install %s as %s' % (os.path.basename(src_path),
dst_path))
install_cmd = "install -m 0644 -D %s %s" \
% (src_path, dst_path)
exec_cmd(install_cmd)
srcs = glob(os.path.join(bootimg_dir, src))
msger.debug('Globbed sources: %s' % (', '.join(srcs)))
for entry in srcs:
entry_dst_name = entry_name_fn(entry)
install_task.append((entry,
os.path.join(hdddir,
entry_dst_name)))
else:
install_task = [(os.path.join(bootimg_dir, src),
os.path.join(hdddir, dst))]
for task in install_task:
src_path, dst_path = task
msger.debug('Install %s as %s' % (os.path.basename(src_path),
dst_path))
install_cmd = "install -m 0644 -D %s %s" \
% (src_path, dst_path)
exec_cmd(install_cmd)
msger.debug('Prepare boot partition using rootfs in %s' % (hdddir))
part.prepare_rootfs(cr_workdir, oe_builddir, hdddir,