[PATCH 1/1] strip: Use debugedit instead of AWK to parse source files

Morten Linderud foxboron at archlinux.org
Sun Jan 2 00:28:43 UTC 2022


From: Morten Linderud <morten at linderud.pw>

This moves us from the fairly ugly AWK parsing line to debugedit which
originally comes out of the rpm project.

The original code has issues parsing anything that was not straight
C/C++ and languages like Rust or Go would return invalid source code
files. debugedit handles all these cases better.

Signed-off-by: Morten Linderud <morten at linderud.pw>
---
 scripts/libmakepkg/tidy/strip.sh.in | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)

diff --git a/scripts/libmakepkg/tidy/strip.sh.in b/scripts/libmakepkg/tidy/strip.sh.in
index 92a6fb15..c1d8ee3c 100644
--- a/scripts/libmakepkg/tidy/strip.sh.in
+++ b/scripts/libmakepkg/tidy/strip.sh.in
@@ -36,8 +36,11 @@ build_id() {
 }
 
 source_files() {
-	LANG=C readelf "$1" --debug-dump 2>/dev/null | \
-		awk '/DW_AT_name +:/{name=$NF}/DW_AT_comp_dir +:/{{if (name == "<artificial>") next}{if (name !~ /^[<\/]/) {printf "%s/", $NF}}{print name}}'
+	dbgsrcdir="${DBGSRCDIR:-/usr/src/debug}"
+	local dbgsrclist="$(mktemp  "${startdir}/dbgsrclist.${binary##*/}.XXXXXXXXX")"
+	LANG=C debugedit -n -b "${srcdir}" -d "${dbgsrcdir}" -l "${dbgsrclist}" "$1" > /dev/null
+	sort -zu "${dbgsrclist}" | tr '\0' '\n'
+	rm -f "$dbgsrclist"
 }
 
 strip_file() {
@@ -58,9 +61,9 @@ strip_file() {
 		# copy source files to debug directory
 		local file dest t
 		while IFS= read -r t; do
-			file=${t/${dbgsrcdir}/"$srcdir"}
-			dest="${dbgsrc/"$dbgsrcdir"/}$t"
-			if ! [[ -f $dest ]]; then
+			file="${srcdir}/${t}"
+			dest="${dbgsrc}/${t}"
+			if [[ -f "$file" ]] && ! [[ -f $dest ]]; then
 				mkdir -p "${dest%/*}"
 				cp -- "$file" "$dest"
 			fi
-- 
2.34.1



More information about the pacman-dev mailing list