binman: Allow use of help and entry-docs without libfdt
authorSimon Glass <sjg@chromium.org>
Sat, 24 Aug 2019 13:22:44 +0000 (07:22 -0600)
committerSimon Glass <sjg@chromium.org>
Tue, 15 Oct 2019 14:40:02 +0000 (08:40 -0600)
At present if libfdt is not available binman can't do anything much.
Improve the situation a little.

Ideally there should be a test to cover this, but I'm not quite sure how
to fake this.

Signed-off-by: Simon Glass <sjg@chromium.org>
(fixed up missing ReadChildData() enty test)

tools/binman/control.py
tools/binman/entry.py
tools/binman/entry_test.py
tools/binman/etype/blob.py
tools/binman/etype/blob_dtb.py
tools/binman/etype/cbfs.py
tools/binman/etype/fdtmap.py
tools/binman/etype/files.py
tools/binman/etype/u_boot_dtb_with_ucode.py

index cb51bc2dd4663683d9df1915aab2cb263a09c808..8268eda37eae5c2f50997287dca26e8bb6ba7be8 100644 (file)
@@ -15,8 +15,6 @@ import tools
 import cbfs_util
 import command
 import elf
-from image import Image
-import state
 import tout
 
 # List of images we plan to create
@@ -113,6 +111,9 @@ def ReadEntry(image_fname, entry_path, decomp=True):
     Returns:
         data extracted from the entry
     """
+    global Image
+    from image import Image
+
     image = Image.FromFile(image_fname)
     entry = image.FindEntryPath(entry_path)
     return entry.ReadData(decomp)
@@ -459,6 +460,9 @@ def Binman(args):
     Args:
         args: Command line arguments Namespace object
     """
+    global Image
+    global state
+
     if args.full_help:
         pager = os.getenv('PAGER')
         if not pager:
@@ -468,6 +472,10 @@ def Binman(args):
         command.Run(pager, fname)
         return 0
 
+    # Put these here so that we can import this module without libfdt
+    from image import Image
+    import state
+
     if args.cmd in ['ls', 'extract', 'replace']:
         try:
             tout.Init(args.verbosity)
index fe8e1dd8a579c09db40e3bcb53b27403add97d5f..409c0dca9345df5898b0dc31214a88a0149286d1 100644 (file)
@@ -21,7 +21,6 @@ import os
 import sys
 
 import fdt_util
-import state
 import tools
 from tools import ToHex, ToHexSize
 import tout
@@ -71,6 +70,10 @@ class Entry(object):
         orig_size: Original size value read from node
     """
     def __init__(self, section, etype, node, name_prefix=''):
+        # Put this here to allow entry-docs and help to work without libfdt
+        global state
+        import state
+
         self.section = section
         self.etype = etype
         self._node = node
index cc1fb795da575e71b09e364d0dd6cd78e405a409..13f58645168e26d87088453add64454ff404e601 100644 (file)
@@ -97,6 +97,11 @@ class TestEntry(unittest.TestCase):
         base = entry.Entry.Create(None, self.GetNode(), 'blob-dtb')
         self.assertTrue(base.WriteChildData(base))
 
+    def testReadChildData(self):
+        """Test the ReadChildData() method of the base class"""
+        base = entry.Entry.Create(None, self.GetNode(), 'blob-dtb')
+        self.assertIsNone(base.ReadChildData(base))
+
 
 if __name__ == "__main__":
     unittest.main()
index d15d0789e5292b6d437ac9da4eb058eebe03f299..d34c7b51bffb589b47931686a322ee740992ae13 100644 (file)
@@ -7,7 +7,6 @@
 
 from entry import Entry
 import fdt_util
-import state
 import tools
 import tout
 
index 5b559967d785568a6d8e8dc21c680a9725978aa2..b2afa064c1130a741ee4a2150e3cdd14ec1cac8e 100644 (file)
@@ -5,8 +5,6 @@
 # Entry-type module for U-Boot device tree files
 #
 
-import state
-
 from entry import Entry
 from blob import Entry_blob
 
@@ -18,6 +16,10 @@ class Entry_blob_dtb(Entry_blob):
     'state' module.
     """
     def __init__(self, section, etype, node):
+        # Put this here to allow entry-docs and help to work without libfdt
+        global state
+        import state
+
         Entry_blob.__init__(self, section, etype, node)
 
     def ObtainContents(self):
index 28a9c81a8ad74511b0bbdebd328061522af3d5a2..35b78370b2efce29809dc3de05570b67bfe15f55 100644 (file)
@@ -11,7 +11,6 @@ import cbfs_util
 from cbfs_util import CbfsWriter
 from entry import Entry
 import fdt_util
-import state
 
 class Entry_cbfs(Entry):
     """Entry containing a Coreboot Filesystem (CBFS)
@@ -164,6 +163,10 @@ class Entry_cbfs(Entry):
     both of size 1MB.
     """
     def __init__(self, section, etype, node):
+        # Put this here to allow entry-docs and help to work without libfdt
+        global state
+        import state
+
         Entry.__init__(self, section, etype, node)
         self._cbfs_arg = fdt_util.GetString(node, 'cbfs-arch', 'x86')
         self._cbfs_entries = OrderedDict()
index b1810b9ddb1152a54fa91723bd712d7745fb27b4..5dc08b8289a0c7f382b8c46e1c31051e235b1429 100644 (file)
@@ -8,11 +8,7 @@ This handles putting an FDT into the image with just the information about the
 image.
 """
 
-import libfdt
-
 from entry import Entry
-from fdt import Fdt
-import state
 import tools
 import tout
 
@@ -80,6 +76,15 @@ class Entry_fdtmap(Entry):
     added as necessary. See the binman README.
     """
     def __init__(self, section, etype, node):
+        # Put these here to allow entry-docs and help to work without libfdt
+        global libfdt
+        global state
+        global Fdt
+
+        import libfdt
+        import state
+        from fdt import Fdt
+
         Entry.__init__(self, section, etype, node)
 
     def _GetFdtmap(self):
index 0068b305f759854281d6ef47e873b279d1756bf3..3473a2b1efdb1697ad25154bea91fce403cc5a96 100644 (file)
@@ -11,7 +11,6 @@ import os
 
 from section import Entry_section
 import fdt_util
-import state
 import tools
 
 
@@ -29,6 +28,10 @@ class Entry_files(Entry_section):
     at run-time so you can obtain the file positions.
     """
     def __init__(self, section, etype, node):
+        # Put this here to allow entry-docs and help to work without libfdt
+        global state
+        import state
+
         Entry_section.__init__(self, section, etype, node)
         self._pattern = fdt_util.GetString(self._node, 'pattern')
         if not self._pattern:
index cb6c3730d79e457e1b646d85b1d2c7c076b50304..6efd24a9b33a13d8f9a4ec71cd8e75095fdace98 100644 (file)
@@ -7,7 +7,6 @@
 
 from entry import Entry
 from blob_dtb import Entry_blob_dtb
-import state
 import tools
 
 class Entry_u_boot_dtb_with_ucode(Entry_blob_dtb):
@@ -25,6 +24,10 @@ class Entry_u_boot_dtb_with_ucode(Entry_blob_dtb):
     it available to u_boot_ucode.
     """
     def __init__(self, section, etype, node):
+        # Put this here to allow entry-docs and help to work without libfdt
+        global state
+        import state
+
         Entry_blob_dtb.__init__(self, section, etype, node)
         self.ucode_data = b''
         self.collate = False