copy-firmware: Handle links to uncompressed files

If copy-firwmware is told to compress files, it blindly assumes that
the target is indeed compressed (unless it's a directory) and creates
any symlinks accordingly.

This leads to broken symlinks for links that point at RawFiles:
adspr.jsn.zst -> ../qcm6490/adspr.jsn.zst
adsps.jsn.zst -> ../qcm6490/adsps.jsn.zst

That should be:
adspr.jsn -> ../qcm6490/adspr.jsn
adsps.jsn -> ../qcm6490/adsps.jsn

Fix that by checking if the target (directory or file) exists. And while
at it, add a check for broken symlinks at the end.

Fixes: 541f96c0fa ("qcom: qcm6490: add ADSP and CDSP firmware")
Signed-off-by: Juerg Haefliger <juerg.haefliger@canonical.com>
This commit is contained in:
Juerg Haefliger 2024-09-13 08:15:18 +02:00
parent 590d8aa4e3
commit 121e467fde
1 changed files with 8 additions and 1 deletions

View File

@ -133,7 +133,7 @@ grep -E '^Link:' WHENCE | sed -e 's/^Link: *//g;s/-> //g' | while read f d; do
directory="$destdir/$(dirname "$f")" directory="$destdir/$(dirname "$f")"
install -d "$directory" install -d "$directory"
target="$(cd "$directory" && realpath -m -s "$d")" target="$(cd "$directory" && realpath -m -s "$d")"
if test -d "$target"; then if test -e "$target"; then
$verbose "creating link $f -> $d" $verbose "creating link $f -> $d"
ln -s "$d" "$destdir/$f" ln -s "$d" "$destdir/$f"
else else
@ -143,6 +143,13 @@ grep -E '^Link:' WHENCE | sed -e 's/^Link: *//g;s/-> //g' | while read f d; do
fi fi
done done
# Verify no broken symlinks
if test "$(find "$destdir" -xtype l | wc -l)" -ne 0 ; then
echo "ERROR: Broken symlinks found:"
find "$destdir" -xtype l
exit 1
fi
exit 0 exit 0
# vim: et sw=4 sts=4 ts=4 # vim: et sw=4 sts=4 ts=4