common/hooks: speed up generate-runtime-deps.

Instead of using file(1) to check for ELF files, just read bytes
directly from the file and check if they are the ELF magic bytes.

Should probably be factored out into a common function that can be used
in other places, if necessary.

Also use awk instead of "grep|awk" for some minor speedup.
This commit is contained in:
Érico Nogueira 2021-06-08 11:43:00 -03:00 committed by Érico Nogueira Rolim
parent e18333cb8f
commit 6303c2e6ce

View file

@ -47,7 +47,7 @@ store_pkgdestdir_rundeps() {
}
hook() {
local depsftmp f lf j mapshlibs sorequires _curdep
local depsftmp f lf j mapshlibs sorequires _curdep elfmagic
# Disable trap on ERR, xbps-uhelper cmd might return error... but not something
# to be worried about because if there are broken shlibs this hook returns
@ -72,18 +72,17 @@ hook() {
msg_normal "Skipping dependency scan for ${lf}\n"
continue
fi
case "$(file -bi "$f")" in
application/x-*executable*|application/x-sharedlib*)
for nlib in $($OBJDUMP -p "$f"|grep NEEDED|awk '{print $2}'); do
[ -z "$verify_deps" ] && verify_deps="$nlib" && continue
found=0
for j in ${verify_deps}; do
[[ $j == $nlib ]] && found=1 && break
done
[[ $found -eq 0 ]] && verify_deps="$verify_deps $nlib"
read -n4 elfmagic < "$f"
if [ "$elfmagic" = $'\177ELF' ]; then
for nlib in $($OBJDUMP -p "$f"|awk '/NEEDED/{print $2}'); do
[ -z "$verify_deps" ] && verify_deps="$nlib" && continue
found=0
for j in ${verify_deps}; do
[[ $j == $nlib ]] && found=1 && break
done
;;
esac
[[ $found -eq 0 ]] && verify_deps="$verify_deps $nlib"
done
fi
done
exec 0<&3 # restore stdin
rm -f $depsftmp