#!/bin/bash # # shim-find-debuginfo.sh # Copyright (C) 2017 Peter Jones # # 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