Vitaly Chikunov
b9ea232966
Do not add (uncompressed) module (or vmlinux) into debuginfo package if
it does not actually exists.
Due to other bugs there could be compressed kernel module, (which
implies adding uncompressed module into debuginfo), but, uncompressed
version (which brp-debuginfo should create) does not exist, making
build errors such as:
error: No such file or directory: /usr/src/tmp/kernel-image-std-def-buildroot/usr/lib/debug/lib/modules/5.8.0-std-def-alt1/kernel/fs/nfs/flexfilelayout/nfs_layout_flexfiles.ko
Reported-by: Anton V. Boyarshinov <boyarsh@altlinux.org>
Fixes: 7aa048df
("Generate debuginfo for kernel packages")
117 lines
2.6 KiB
Bash
Executable File
117 lines
2.6 KiB
Bash
Executable File
#!/bin/sh -efu
|
|
#
|
|
# find-debuginfo-files - make %files list for debuginfo package
|
|
#
|
|
# Written by Alexey Tourbin <at@altlinux.org>.
|
|
# License: GPLv2+.
|
|
|
|
. @RPMCONFIGDIR@/functions
|
|
ValidateBuildRoot
|
|
|
|
cd "$RPM_BUILD_ROOT"
|
|
|
|
rm -rf .tmp
|
|
mkdir .tmp
|
|
|
|
>.tmp/files
|
|
>.tmp/files-can
|
|
>.tmp/links
|
|
>.tmp/links-in
|
|
>.tmp/src
|
|
|
|
while read -r f; do
|
|
f=${f#$RPM_BUILD_ROOT}
|
|
|
|
[ -n "$f" ] || continue
|
|
|
|
if [ -z "${f##/boot/vmlinuz-*}" ]; then
|
|
# Redirect to vmlinux saved by debuginfo.brp into debug tree's
|
|
# %modules_dir.
|
|
kver=${f#/boot/vmlinuz-}
|
|
f=/usr/lib/debug/lib/modules/$kver/vmlinux
|
|
if [ -e ".$f" ]; then
|
|
printf '%s\n' "$f" >> .tmp/files
|
|
else
|
|
Warning "Expected $f not found."
|
|
fi
|
|
fi
|
|
fbin=$f # Actual binary for linking
|
|
|
|
if [ -z "${f#/lib/modules/*.ko.[gx]z}" ]; then
|
|
# For gzipped modules actual binary is kept in debug tree
|
|
# (placed by debuginfo.brp) and goes into -debuginfo package.
|
|
f=${f%.[gx]z}
|
|
fbin=/usr/lib/debug$f
|
|
if [ -e ".$fbin" ]; then
|
|
printf '%s\n' "$fbin" >> .tmp/files
|
|
else
|
|
Warning "Expected $fbin not found."
|
|
fi
|
|
fi
|
|
|
|
if [ -f .debuginfo/src/"$f" ]; then
|
|
LC_ALL=C sort -m -u -o .tmp/src .tmp/src .debuginfo/src/"$f"
|
|
fi
|
|
|
|
debugf=./usr/lib/debug$f.debug
|
|
[ -f "$debugf" ] || continue
|
|
if [ -L "$debugf" ]; then
|
|
# Save symlink for later filtering.
|
|
printf '%s\n' "$debugf" >> .tmp/links-in
|
|
continue
|
|
fi
|
|
printf '%s\n' "${debugf#.}" >> .tmp/files
|
|
|
|
# Save canonical file name for later symlinks filtering.
|
|
readlink -ve "$debugf" >> .tmp/files-can
|
|
|
|
id=$(@RPMCONFIGDIR@/debugedit -n -i "$debugf")
|
|
[ -n "$id" ] || continue
|
|
|
|
link=./usr/lib/debug/.build-id/${id:0:2}/${id:2}
|
|
if [ ! -L "$link" ]; then
|
|
mkdir -p "${link%/*}"
|
|
ln -snf "$(relative "$fbin" "${link#.}")" "$link"
|
|
ln -snf "$(relative "${debugf#.}" "${link#.}".debug)" "$link".debug
|
|
fi
|
|
to=$(readlink -vm "$link")
|
|
if [ "$to" = "$RPM_BUILD_ROOT$fbin" ]; then
|
|
printf '%s\n' "${link#.}" >> .tmp/links
|
|
printf '%s\n' "${link#.}".debug >> .tmp/links
|
|
fi
|
|
done
|
|
|
|
# Filter out symlinks pointing out of the package.
|
|
sort -u .tmp/links-in |
|
|
while read -r link; do
|
|
to=$(readlink -vm "$link")
|
|
if grep -Fqsxe "$to" .tmp/files-can; then
|
|
printf '%s\n' "${link#.}" >> .tmp/links
|
|
fi
|
|
done
|
|
|
|
sed 's|\(.*\)/.*|\1|' .tmp/files .tmp/links .tmp/src |sort -u |
|
|
while read -r dir; do
|
|
while [ -n "$dir" ]; do
|
|
case $dir in
|
|
/usr/lib/debug/usr/*/*)
|
|
printf '%s\n' "$dir" ;;
|
|
/usr/lib/debug/usr/*)
|
|
break ;;
|
|
/usr/lib/debug/*/*)
|
|
printf '%s\n' "$dir" ;;
|
|
/usr/lib/debug/*)
|
|
break ;;
|
|
/usr/src/debug/*)
|
|
printf '%s\n' "$dir" ;;
|
|
*)
|
|
break ;;
|
|
esac
|
|
dir=${dir%/*}
|
|
done
|
|
done |
|
|
sort -u |
|
|
sed 's/^/%dir /'
|
|
|
|
sort .tmp/files .tmp/links .tmp/src
|