845fefb64f
This finally provides missing strip controls. Note that even with STRIP_NONE, the file will be edited with debugedit. So there is no way to bypass brp-debuginfo completely (and maybe we should tolerate debugedit failures with STRIP_NONE). But there is also an advantage: /usr/src/debug sources will be installed even for non-stripped files! This is why sources are now associated with .debuginfo/src/"$f" instead of .debuginfo/src/"$debugf".
83 lines
2.4 KiB
Bash
Executable File
83 lines
2.4 KiB
Bash
Executable File
#!/bin/sh -efu
|
|
#
|
|
# brp-debuginfo - generate /usr/lib/debug and /usr/src/debug contents
|
|
# for debuginfo packages
|
|
#
|
|
# Written by Alexey Tourbin <at@altlinux.org>. Based on find-debuginfo.sh
|
|
# by Jeff Johnson <jbj@rpm5.org> and Roland McGrath <roland@redhat.com>.
|
|
# License: GPLv2+.
|
|
|
|
. @RPMCONFIGDIR@/functions
|
|
ValidateBuildRoot
|
|
|
|
cd "$RPM_BUILD_ROOT"
|
|
|
|
rm -rf .tmp
|
|
mkdir .tmp
|
|
|
|
# Strip binaries, create .debug files under /usr/lib/debug and install sources into /usr/src/debug.
|
|
prune_paths='-path ./usr/share -o -path ./lib/firmware -o -path ./usr/lib/debug'
|
|
find . '(' -path './.*' -o $prune_paths ')' -prune -o -type f -print |
|
|
file -NF$'\t' -f - |sed -n 's/\t.* ELF .* \(executable\|shared object\), .*, not stripped.*//p' |
|
|
xargs -r --delimiter='\n' stat -c '%h %i %n' |
|
|
while read -r nlink ino f; do
|
|
debugf=./usr/lib/debug${f#.}.debug
|
|
mkdir -p "${debugf%/*}"
|
|
if [ "$nlink" -gt 1 ]; then
|
|
eval f0="\${f0_$ino-}"
|
|
if [ -n "$f0" ]; then
|
|
ln -nf "$f0" "$debugf"
|
|
mkdir -p .debuginfo/src/"${debugf%/*}"
|
|
ln -nf .debuginfo/src/"$f0" .debuginfo/src/"$debugf"
|
|
continue
|
|
else
|
|
eval f0_$ino="\$f"
|
|
fi
|
|
fi
|
|
strip='--strip-all'
|
|
for pat in ${RPM_BRP_STRIP_DEBUG-}; do
|
|
if [ -z "${f##.$pat}" ]; then
|
|
strip='--strip-debug'
|
|
break
|
|
fi
|
|
done
|
|
for pat in ${RPM_BRP_STRIP_NONE-}; do
|
|
if [ -z "${f##.$pat}" ]; then
|
|
strip=
|
|
break
|
|
fi
|
|
done
|
|
touch -r "$f" .tmp/stamp
|
|
@RPMCONFIGDIR@/debugedit -b "$RPM_BUILD_DIR" -d /usr/src/debug -l .tmp/src "$f"
|
|
if [ -n "$strip" ]; then
|
|
eu-strip $strip --remove-comment -f "$debugf" "$f"
|
|
touch -r .tmp/stamp "$debugf" "$f"
|
|
chmod 644 "$debugf"
|
|
else
|
|
touch -r .tmp/stamp "$f"
|
|
fi
|
|
mkdir -p .debuginfo/src/"${f%/*}"
|
|
awk 'BEGIN{RS="\0";ORS="\n"}{print}' .tmp/src |LC_ALL=C sort -u |
|
|
while read -r src; do
|
|
[ -f "$RPM_BUILD_DIR"/"$src" ] || continue
|
|
[ -f ./usr/src/debug/"$src" ] ||
|
|
install -pD -m644 "$RPM_BUILD_DIR"/"$src" ./usr/src/debug/"$src"
|
|
printf '%s\n' /usr/src/debug/"$src"
|
|
done >.debuginfo/src/"$f"
|
|
rm .tmp/src
|
|
done
|
|
|
|
# Make symbolic links that mimic the original tree.
|
|
find . '(' -path './.*' -o $prune_paths ')' -prune -o -type l -print |
|
|
while read -r l; do
|
|
f=$(readlink -vm "$l")
|
|
f=${f#$RPM_BUILD_ROOT}
|
|
debugf=./usr/lib/debug$f.debug
|
|
[ -f "$debugf" ] || continue
|
|
debugl=./usr/lib/debug${l#.}.debug
|
|
mkdir -p "${debugl%/*}"
|
|
ln -snf "$(relative "${debugf#.}" "${debugl#.}")" "$debugl"
|
|
mkdir -p .debuginfo/links/"${debugf%/*}"
|
|
printf '%s\n' "${debugl#.}" >>.debuginfo/links/"$debugf"
|
|
done
|