#!/bin/sh -efu # # find-debuginfo-files - make %files list for debuginfo package # # Written by Alexey Tourbin . # 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 /' # Filter out directories from debugedit src list file. grep -v '/$' < .tmp/src > .tmp/src-files ||: sort .tmp/files .tmp/links .tmp/src-files