On 2/1/22 10:28, Morten Linderud wrote:
From: Morten Linderud <morten@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@linderud.pw> ---
I'm really happy this was split into a separate project! The original plan was to use debugedit, but it could not be build without (from memory) depending on librpm, which did not seem appropriate! Add a check for debugedit in scripts/libmakepkg/executable/strip.sh.in
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")"
I really do not like making temporary files. Particularly not in ${startdir}, which can be readonly provided BUILDDIR, SRCDIR, etc are set. I may accept using $srcdir if writing this to a file is *essential*.
+ 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