]> git.dujemihanovic.xyz Git - u-boot.git/commitdiff
binman: Write fake blobs to the output directory
authorSimon Glass <sjg@chromium.org>
Wed, 12 Jan 2022 20:10:36 +0000 (13:10 -0700)
committerTom Rini <trini@konsulko.com>
Thu, 13 Jan 2022 02:26:59 +0000 (21:26 -0500)
At present binman writes fake blobs to the current directory. This is not
very helpful, since the files serve no useful purpose once binman has
finished. They clutter up the source directory and affect future runs,
since the files in the current directory are often used in preference to
those in the board directory.

To avoid these problems, write them to the output directory instead.

Move the file-creation code to the Entry base class, so it can be used by
any entry type that needs it. This is required since some entry types,
such as Entry_blob_ext_list, are not subclasses of Entry_blob.

Signed-off-by: Simon Glass <sjg@chromium.org>
tools/binman/control.py
tools/binman/entry.py
tools/binman/etype/blob.py
tools/binman/ftest.py

index 4b3ce23fb4c4e6726bc0a948e9bc339d268767bf..f4c1fd0156875db35963dd206045b39d04fad1cb 100644 (file)
@@ -577,9 +577,11 @@ def ProcessImage(image, update_fdt, write_map, get_contents=True,
     faked_list = []
     image.CheckFakedBlobs(faked_list)
     if faked_list:
-        tout.Warning("Image '%s:%s' has faked external blobs and is non-functional: %s" %
-                     (image.name, image.image_name,
-                      ' '.join([e.GetDefaultFilename() for e in faked_list])))
+        tout.Warning(
+            "Image '%s:%s' has faked external blobs and is non-functional: %s" %
+            (image.name, image.image_name,
+             ' '.join([os.path.basename(e.GetDefaultFilename())
+                       for e in faked_list])))
     return bool(missing_list) or bool(faked_list)
 
 
index 54cc3726b9d9e19004fc9570250f4ba06440e52a..bac90bbbcde25794ca3d75657e7a7d3100ea7f95 100644 (file)
@@ -7,6 +7,7 @@
 from collections import namedtuple
 import importlib
 import os
+import pathlib
 import sys
 
 from dtoc import fdt_util
@@ -972,6 +973,25 @@ features to produce new behaviours.
         if self.missing:
             missing_list.append(self)
 
+    def check_fake_fname(self, fname):
+        """If the file is missing and the entry allows fake blobs, fake it
+
+        Sets self.faked to True if faked
+
+        Args:
+            fname (str): Filename to check
+
+        Returns:
+            fname (str): Filename of faked file
+        """
+        if self.allow_fake and not pathlib.Path(fname).is_file():
+            outfname = tools.GetOutputFilename(os.path.basename(fname))
+            with open(outfname, "wb") as out:
+                out.truncate(1024)
+            self.faked = True
+            return outfname
+        return fname
+
     def CheckFakedBlobs(self, faked_blobs_list):
         """Check if any entries in this section have faked external blobs
 
index 65ebb2ecf4d83490691ca1e431d13f993732c5b2..59728f368ec74f93ed1fc605b73c8fd9d764d87e 100644 (file)
@@ -5,8 +5,6 @@
 # Entry-type module for blobs, which are binary objects read from files
 #
 
-import pathlib
-
 from binman.entry import Entry
 from binman import state
 from dtoc import fdt_util
@@ -38,16 +36,12 @@ class Entry_blob(Entry):
         self._filename = fdt_util.GetString(self._node, 'filename', self.etype)
 
     def ObtainContents(self):
-        if self.allow_fake and not pathlib.Path(self._filename).is_file():
-            with open(self._filename, "wb") as out:
-                out.truncate(1024)
-            self.faked = True
-
         self._filename = self.GetDefaultFilename()
         self._pathname = tools.GetInputFilename(self._filename,
             self.external and self.section.GetAllowMissing())
         # Allow the file to be missing
         if not self._pathname:
+            self._pathname = self.check_fake_fname(self._filename)
             self.SetContents(b'')
             self.missing = True
             return True
index a9d9160967c521dfab415a899aaacd5d1eb0d825..f4ff7b65831a99a902245f4dbfb6e8a2a4b60f36 100644 (file)
@@ -4964,7 +4964,6 @@ fdt         fdtmap                Extract the devicetree blob from the fdtmap
         self.assertRegex(
             err,
             "Image '.*' has faked external blobs and is non-functional: .*")
-        os.remove('binman_faking_test_blob')
 
 
 if __name__ == "__main__":