binman fixes for bintool support

-----BEGIN PGP SIGNATURE-----
 
 iQFFBAABCgAvFiEEslwAIq+Gp8wWVbYnfxc6PpAIreYFAmMYjgoRHHNqZ0BjaHJv
 bWl1bS5vcmcACgkQfxc6PpAIrea87Af9H605i3fkhZEmQUoGLgYVHnL6HTnWqVOk
 1H7ysnSGkErwZKx+jQXG6dbW0Rkx4yPDYUMRkXQOdJPpgHZXlcp7FtOin3jT00Z/
 M0+Se4NF4pUBqBdaNWtsSAicS+2snfbcHErI60XU2bu/E86Es+rqFstUZfd/Hcw9
 HxFOf9pT8dbokg1K3hYh1tBco0NC4+iHfWheDWV9qLOQxG5LdzCWlBKkt9pegljH
 NHKrjMYvpU68e80I8rPIppJxyHipZgXorr9JKFLqS6cNgolbPF+cy9K10zEObno5
 DCY7IuBv2BmY5ghwW2oN90gXkT0jqatSBbYBlu8oG0ioyRY2MDv6Yw==
 =i2Ik
 -----END PGP SIGNATURE-----

Merge tag 'dm-pull-7sep22' of https://source.denx.de/u-boot/custodians/u-boot-dm

binman fixes for bintool support
This commit is contained in:
Tom Rini 2022-09-07 08:38:44 -04:00
commit fc2f4085d3
7 changed files with 27 additions and 79 deletions

View file

@ -53,9 +53,11 @@ class Bintool:
# List of bintools to regard as missing
missing_list = []
def __init__(self, name, desc):
def __init__(self, name, desc, version_regex=None, version_args='-V'):
self.name = name
self.desc = desc
self.version_regex = version_regex
self.version_args = version_args
@staticmethod
def find_bintool_class(btype):
@ -464,17 +466,28 @@ binaries. It is fairly easy to create new bintools. Just add a new file to the
print(f"No method to fetch bintool '{self.name}'")
return False
# pylint: disable=R0201
def version(self):
"""Version handler for a bintool
This should be implemented by the base class
Returns:
str: Version string for this bintool
"""
if self.version_regex is None:
return 'unknown'
import re
result = self.run_cmd_result(self.version_args)
out = result.stdout.strip()
if not out:
out = result.stderr.strip()
if not out:
return 'unknown'
m_version = re.search(self.version_regex, out)
return m_version.group(1) if m_version else out
class BintoolPacker(Bintool):
"""Tool which compression / decompression entry contents
@ -495,9 +508,9 @@ class BintoolPacker(Bintool):
"""
def __init__(self, name, compression=None, compress_args=None,
decompress_args=None, fetch_package=None,
version_regex=r'(v[0-9.]+)'):
version_regex=r'(v[0-9.]+)', version_args='-V'):
desc = '%s compression' % (compression if compression else name)
super().__init__(name, desc)
super().__init__(name, desc, version_regex, version_args)
if compress_args is None:
compress_args = ['--compress']
self.compress_args = compress_args
@ -507,7 +520,6 @@ class BintoolPacker(Bintool):
if fetch_package is None:
fetch_package = name
self.fetch_package = fetch_package
self.version_regex = version_regex
def compress(self, indata):
"""Compress data
@ -557,21 +569,3 @@ class BintoolPacker(Bintool):
if method != FETCH_BIN:
return None
return self.apt_install(self.fetch_package)
def version(self):
"""Version handler
Returns:
str: Version number
"""
import re
result = self.run_cmd_result('-V')
out = result.stdout.strip()
if not out:
out = result.stderr.strip()
if not out:
return super().version()
m_version = re.search(self.version_regex, out)
return m_version.group(1) if m_version else out

View file

@ -27,5 +27,5 @@ class Bintoolbtool_gzip(bintool.BintoolPacker):
man gzip
"""
def __init__(self, name):
super().__init__(name, compress_args=[],
super().__init__("gzip", compress_args=[],
version_regex=r'gzip ([0-9.]+)')

View file

@ -27,4 +27,4 @@ class Bintoolbzip2(bintool.BintoolPacker):
man bzip2
"""
def __init__(self, name):
super().__init__(name, version_regex=r'bzip2.*Version ([0-9.]+)')
super().__init__(name, version_regex=r'bzip2.*Version ([0-9.]+)', version_args='--help')

View file

@ -49,7 +49,7 @@ class Bintoolfiptool(bintool.Bintool):
https://trustedfirmware-a.readthedocs.io/en/latest/getting_started/tools-build.html?highlight=fiptool#building-and-using-the-fip-tool
"""
def __init__(self, name):
super().__init__(name, 'Manipulate ATF FIP files')
super().__init__(name, 'Manipulate ATF FIP files', r'^(.*)$', 'version')
def info(self, fname):
"""Get info on a FIP image
@ -112,12 +112,3 @@ class Bintoolfiptool(bintool.Bintool):
'fiptool',
'tools/fiptool/fiptool')
return result
def version(self):
"""Version handler for fiptool
Returns:
str: Version number of fiptool
"""
out = self.run_cmd('version').strip()
return out or super().version()

View file

@ -69,7 +69,7 @@ class Bintoolfutility(bintool.Bintool):
https://chromium.googlesource.com/chromiumos/platform/vboot/+/refs/heads/main/_vboot_reference/README
"""
def __init__(self, name):
super().__init__(name, 'Chromium OS firmware utility')
super().__init__(name, 'Chromium OS firmware utility', r'^(.*)$', 'version')
def gbb_create(self, fname, sizes):
"""Create a new Google Binary Block
@ -165,14 +165,3 @@ class Bintoolfutility(bintool.Bintool):
fname, tmpdir = self.fetch_from_drive(
'1hdsInzsE4aJbmBeJ663kYgjOQyW1I-E0')
return fname, tmpdir
def version(self):
"""Version handler for futility
Returns:
str: Version string for futility
"""
out = self.run_cmd('version').strip()
if not out:
return super().version()
return out

View file

@ -76,7 +76,7 @@ class Bintoollz4(bintool.Bintool):
man lz4
"""
def __init__(self, name):
super().__init__(name, 'lz4 compression')
super().__init__(name, 'lz4 compression', r'.* (v[0-9.]*),.*')
def compress(self, indata):
"""Compress data with lz4
@ -126,15 +126,3 @@ class Bintoollz4(bintool.Bintool):
if method != bintool.FETCH_BIN:
return None
return self.apt_install('lz4')
def version(self):
"""Version handler
Returns:
str: Version number of lz4
"""
out = self.run_cmd('-V').strip()
if not out:
return super().version()
m_version = re.match(r'.* (v[0-9.]*),.*', out)
return m_version.group(1) if m_version else out

View file

@ -18,11 +18,11 @@ class Bintoolmkimage(bintool.Bintool):
Support is provided for fetching this on Debian-like systems, using apt.
"""
def __init__(self, name):
super().__init__(name, 'Generate image for U-Boot')
super().__init__(name, 'Generate image for U-Boot', r'mkimage version (.*)')
# pylint: disable=R0913
def run(self, reset_timestamp=False, output_fname=None, external=False,
pad=None, version=False):
pad=None):
"""Run mkimage
Args:
@ -44,8 +44,6 @@ class Bintoolmkimage(bintool.Bintool):
args.append('-t')
if output_fname:
args += ['-F', output_fname]
if version:
args.append('-V')
return self.run_cmd(*args)
def fetch(self, method):
@ -66,15 +64,3 @@ class Bintoolmkimage(bintool.Bintool):
if method != bintool.FETCH_BIN:
return None
return self.apt_install('u-boot-tools')
def version(self):
"""Version handler for mkimage
Returns:
str: Version string for mkimage
"""
out = self.run(version=True).strip()
if not out:
return super().version()
m_version = re.match(r'mkimage version (.*)', out)
return m_version.group(1) if m_version else out