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 # List of bintools to regard as missing
missing_list = [] missing_list = []
def __init__(self, name, desc): def __init__(self, name, desc, version_regex=None, version_args='-V'):
self.name = name self.name = name
self.desc = desc self.desc = desc
self.version_regex = version_regex
self.version_args = version_args
@staticmethod @staticmethod
def find_bintool_class(btype): def find_bintool_class(btype):
@ -464,16 +466,27 @@ 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}'") print(f"No method to fetch bintool '{self.name}'")
return False return False
# pylint: disable=R0201
def version(self): def version(self):
"""Version handler for a bintool """Version handler for a bintool
This should be implemented by the base class
Returns: Returns:
str: Version string for this bintool str: Version string for this bintool
""" """
return 'unknown' 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): class BintoolPacker(Bintool):
"""Tool which compression / decompression entry contents """Tool which compression / decompression entry contents
@ -495,9 +508,9 @@ class BintoolPacker(Bintool):
""" """
def __init__(self, name, compression=None, compress_args=None, def __init__(self, name, compression=None, compress_args=None,
decompress_args=None, fetch_package=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) 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: if compress_args is None:
compress_args = ['--compress'] compress_args = ['--compress']
self.compress_args = compress_args self.compress_args = compress_args
@ -507,7 +520,6 @@ class BintoolPacker(Bintool):
if fetch_package is None: if fetch_package is None:
fetch_package = name fetch_package = name
self.fetch_package = fetch_package self.fetch_package = fetch_package
self.version_regex = version_regex
def compress(self, indata): def compress(self, indata):
"""Compress data """Compress data
@ -557,21 +569,3 @@ class BintoolPacker(Bintool):
if method != FETCH_BIN: if method != FETCH_BIN:
return None return None
return self.apt_install(self.fetch_package) 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 man gzip
""" """
def __init__(self, name): def __init__(self, name):
super().__init__(name, compress_args=[], super().__init__("gzip", compress_args=[],
version_regex=r'gzip ([0-9.]+)') version_regex=r'gzip ([0-9.]+)')

View file

@ -27,4 +27,4 @@ class Bintoolbzip2(bintool.BintoolPacker):
man bzip2 man bzip2
""" """
def __init__(self, name): 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 https://trustedfirmware-a.readthedocs.io/en/latest/getting_started/tools-build.html?highlight=fiptool#building-and-using-the-fip-tool
""" """
def __init__(self, name): def __init__(self, name):
super().__init__(name, 'Manipulate ATF FIP files') super().__init__(name, 'Manipulate ATF FIP files', r'^(.*)$', 'version')
def info(self, fname): def info(self, fname):
"""Get info on a FIP image """Get info on a FIP image
@ -112,12 +112,3 @@ class Bintoolfiptool(bintool.Bintool):
'fiptool', 'fiptool',
'tools/fiptool/fiptool') 'tools/fiptool/fiptool')
return result 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 https://chromium.googlesource.com/chromiumos/platform/vboot/+/refs/heads/main/_vboot_reference/README
""" """
def __init__(self, name): 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): def gbb_create(self, fname, sizes):
"""Create a new Google Binary Block """Create a new Google Binary Block
@ -165,14 +165,3 @@ class Bintoolfutility(bintool.Bintool):
fname, tmpdir = self.fetch_from_drive( fname, tmpdir = self.fetch_from_drive(
'1hdsInzsE4aJbmBeJ663kYgjOQyW1I-E0') '1hdsInzsE4aJbmBeJ663kYgjOQyW1I-E0')
return fname, tmpdir 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 man lz4
""" """
def __init__(self, name): def __init__(self, name):
super().__init__(name, 'lz4 compression') super().__init__(name, 'lz4 compression', r'.* (v[0-9.]*),.*')
def compress(self, indata): def compress(self, indata):
"""Compress data with lz4 """Compress data with lz4
@ -126,15 +126,3 @@ class Bintoollz4(bintool.Bintool):
if method != bintool.FETCH_BIN: if method != bintool.FETCH_BIN:
return None return None
return self.apt_install('lz4') 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. Support is provided for fetching this on Debian-like systems, using apt.
""" """
def __init__(self, name): 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 # pylint: disable=R0913
def run(self, reset_timestamp=False, output_fname=None, external=False, def run(self, reset_timestamp=False, output_fname=None, external=False,
pad=None, version=False): pad=None):
"""Run mkimage """Run mkimage
Args: Args:
@ -44,8 +44,6 @@ class Bintoolmkimage(bintool.Bintool):
args.append('-t') args.append('-t')
if output_fname: if output_fname:
args += ['-F', output_fname] args += ['-F', output_fname]
if version:
args.append('-V')
return self.run_cmd(*args) return self.run_cmd(*args)
def fetch(self, method): def fetch(self, method):
@ -66,15 +64,3 @@ class Bintoolmkimage(bintool.Bintool):
if method != bintool.FETCH_BIN: if method != bintool.FETCH_BIN:
return None return None
return self.apt_install('u-boot-tools') 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