binman: Overwrite symlink if it already exists

Without this re-building will fail with an error when trying to create
the symlink for the second time with an already exists error.

Signed-off-by: Andrew Davis <afd@ti.com>
[n-francis@ti.com: Added support for test output dir and testcase]
Signed-off-by: Neha Malcom Francis <n-francis@ti.com>
This commit is contained in:
Andrew Davis 2023-07-22 00:14:44 +05:30 committed by Tom Rini
parent 1ee652ab2f
commit 15432ea611
2 changed files with 18 additions and 2 deletions

View file

@ -353,7 +353,7 @@ class TestFunctional(unittest.TestCase):
use_expanded=False, verbosity=None, allow_missing=False,
allow_fake_blobs=False, extra_indirs=None, threads=None,
test_section_timeout=False, update_fdt_in_elf=None,
force_missing_bintools='', ignore_missing=False):
force_missing_bintools='', ignore_missing=False, output_dir=None):
"""Run binman with a given test file
Args:
@ -384,6 +384,7 @@ class TestFunctional(unittest.TestCase):
update_fdt_in_elf: Value to pass with --update-fdt-in-elf=xxx
force_missing_tools (str): comma-separated list of bintools to
regard as missing
output_dir: Specific output directory to use for image using -O
Returns:
int return code, 0 on success
@ -430,6 +431,8 @@ class TestFunctional(unittest.TestCase):
if extra_indirs:
for indir in extra_indirs:
args += ['-I', indir]
if output_dir:
args += ['-O', output_dir]
return self._DoBinman(*args)
def _SetupDtb(self, fname, outfile='u-boot.dtb'):
@ -6174,7 +6177,7 @@ fdt fdtmap Extract the devicetree blob from the fdtmap
str(e.exception))
def testSymlink(self):
"""Test that image files can be named"""
"""Test that image files can be symlinked"""
retcode = self._DoTestFile('259_symlink.dts', debug=True, map=True)
self.assertEqual(0, retcode)
image = control.images['test_image']
@ -6183,6 +6186,17 @@ fdt fdtmap Extract the devicetree blob from the fdtmap
self.assertTrue(os.path.islink(sname))
self.assertEqual(os.readlink(sname), fname)
def testSymlinkOverwrite(self):
"""Test that symlinked images can be overwritten"""
testdir = TestFunctional._MakeInputDir('symlinktest')
self._DoTestFile('259_symlink.dts', debug=True, map=True, output_dir=testdir)
# build the same image again in the same directory so that existing symlink is present
self._DoTestFile('259_symlink.dts', debug=True, map=True, output_dir=testdir)
fname = tools.get_output_filename('test_image.bin')
sname = tools.get_output_filename('symlink_to_test.bin')
self.assertTrue(os.path.islink(sname))
self.assertEqual(os.readlink(sname), fname)
def testSymbolsElf(self):
"""Test binman can assign symbols embedded in an ELF file"""
if not elf.ELF_TOOLS:

View file

@ -182,6 +182,8 @@ class Image(section.Entry_section):
# Create symlink to file if symlink given
if self._symlink is not None:
sname = tools.get_output_filename(self._symlink)
if os.path.islink(sname):
os.remove(sname)
os.symlink(fname, sname)
def WriteMap(self):