[PATCH 1/1] strip: Use debugedit instead of AWK to parse source files
Allan McRae
allan at archlinux.org
Sun Jan 2 05:08:19 UTC 2022
On 2/1/22 10:28, Morten Linderud wrote:
> 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>
> ---
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
More information about the pacman-dev
mailing list