96 lines
2.2 KiB
Bash
96 lines
2.2 KiB
Bash
|
#!/bin/bash
|
||
|
#
|
||
|
# shim-find-debuginfo.sh
|
||
|
# Copyright (C) 2017 Peter Jones <Peter Jones@random>
|
||
|
#
|
||
|
# Distributed under terms of the GPLv3 license.
|
||
|
#
|
||
|
set -e
|
||
|
set -u
|
||
|
|
||
|
mainarch=$1 && shift
|
||
|
if [ $# == 1 ]; then
|
||
|
altarch=$1 && shift
|
||
|
fi
|
||
|
if ! [ -v RPM_BUILD_ROOT ]; then
|
||
|
echo "RPM_BUILD_ROOT must be set" 1>&2
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
findsource()
|
||
|
{
|
||
|
(
|
||
|
cd "${RPM_BUILD_ROOT}"
|
||
|
find usr/src/debug/ -type d | sed -e "s,^,%dir /," | sort -u | tac
|
||
|
find usr/src/debug/ -type f | sed -e "s,^,/," | sort -u | tac
|
||
|
)
|
||
|
}
|
||
|
|
||
|
finddebug()
|
||
|
{
|
||
|
arch=$1 && shift
|
||
|
declare -a dirs=()
|
||
|
declare -a files=()
|
||
|
declare -a excludes=()
|
||
|
declare -a tmp=()
|
||
|
|
||
|
pushd "${RPM_BUILD_ROOT}" >/dev/null 2>&1
|
||
|
|
||
|
mapfile -t tmp < <(find usr/lib/debug/ -type f -iname "*.efi.debug")
|
||
|
for x in "${tmp[@]}" ; do
|
||
|
if ! [ -e "${x}" ]; then
|
||
|
break
|
||
|
fi
|
||
|
if [[ ${x} =~ ${arch}\.efi\.debug$ ]]; then
|
||
|
files[${#files[@]}]=${x}
|
||
|
else
|
||
|
excludes[${#excludes[@]}]=${x}
|
||
|
fi
|
||
|
done
|
||
|
for x in usr/lib/debug/.build-id/*/*.debug ; do
|
||
|
if ! [ -e "${x}" ]; then
|
||
|
break
|
||
|
fi
|
||
|
link=$(readlink "${x}")
|
||
|
if [[ ${link} =~ ${arch}\.efi\.debug$ ]]; then
|
||
|
files[${#files[@]}]=${x}
|
||
|
files[${#files[@]}]=${x%%.debug}
|
||
|
else
|
||
|
excludes[${#excludes[@]}]=${x}
|
||
|
excludes[${#excludes[@]}]=${x%%.debug}
|
||
|
fi
|
||
|
done
|
||
|
for x in "${files[@]}" ; do
|
||
|
declare name
|
||
|
|
||
|
name=$(dirname "/${x}")
|
||
|
while [ "${name}" != "/" ]; do
|
||
|
case "${name}" in
|
||
|
"/usr/lib/debug"|"/usr/lib"|"/usr")
|
||
|
;;
|
||
|
*)
|
||
|
dirs[${#dirs[@]}]=${name}
|
||
|
;;
|
||
|
esac
|
||
|
name=$(dirname "${name}")
|
||
|
done
|
||
|
done
|
||
|
|
||
|
popd >/dev/null 2>&1
|
||
|
for x in "${dirs[@]}" ; do
|
||
|
echo "%dir ${x}"
|
||
|
done | sort | uniq
|
||
|
for x in "${files[@]}" ; do
|
||
|
echo "/${x}"
|
||
|
done | sort | uniq
|
||
|
for x in "${excludes[@]}" ; do
|
||
|
echo "%exclude /${x}"
|
||
|
done
|
||
|
}
|
||
|
|
||
|
findsource > "build-${mainarch}/debugsource.list"
|
||
|
finddebug "${mainarch}" > "build-${mainarch}/debugfiles.list"
|
||
|
if [ -v altarch ]; then
|
||
|
finddebug "${altarch}" > "build-${altarch}/debugfiles.list"
|
||
|
fi
|