Dmitry V. Levin
9e73931c30
Package only those /usr/lib/debug/* symlinks that complement the package being processed and point to debuginfo regular files which are going to be packaged along with these symlinks. The most obvious consequence of this change is that library symlinks for use of ld(1) will not result to their /usr/lib/debug/usr/lib*/libNAME.so.debug counterparts to be packaged.
89 lines
1.9 KiB
Bash
Executable File
89 lines
1.9 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}
|
|
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 -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 "$f" "${link#.}")" "$link"
|
|
ln -snf "$(relative "${debugf#.}" "${link#.}".debug)" "$link".debug
|
|
fi
|
|
to=$(readlink -vm "$link")
|
|
if [ "$to" = "$RPM_BUILD_ROOT$f" ]; 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
|