forked from kiss-community/kiss
kiss: Drop readelf dependency.
This commit is contained in:
parent
18c304951d
commit
c1b98b4f3b
29
kiss
29
kiss
@ -441,13 +441,30 @@ pkg_strip() {
|
|||||||
|
|
||||||
log "$1" "Stripping binaries and libraries"
|
log "$1" "Stripping binaries and libraries"
|
||||||
|
|
||||||
# Strip only files matching the below ELF types.
|
# Strip only files matching the below ELF types. This uses 'od' to print
|
||||||
|
# the 2 bytes starting from an offset of 16 bytes (bytes 17 and 18). This
|
||||||
|
# is the location of the ELF type inside of the ELF headers.
|
||||||
|
#
|
||||||
|
# Static libraries (.a) are in reality AR archives which contain ELF
|
||||||
|
# objects. Our handling of static libraries is simply the assumption that
|
||||||
|
# the same byte area contains '020040'.
|
||||||
|
#
|
||||||
|
# Tools like 'readelf' will seamlessly read '.a' files as if they were
|
||||||
|
# of ELF format (effectively hiding this fact).
|
||||||
|
#
|
||||||
|
# 000001,020040: REL (static libraries (.a))
|
||||||
|
# 000002: EXEC (binaries)
|
||||||
|
# 000003: DYN (shared libraries (.so), sometimes binaries)
|
||||||
find "$pkg_dir/$1" -type f | while read -r file; do
|
find "$pkg_dir/$1" -type f | while read -r file; do
|
||||||
case $(readelf -h "$file" 2>/dev/null) in
|
case $(od -j 16 -N 2 "$file") in
|
||||||
*" DYN "*) strip --strip-nneeded "$file" ;;
|
*' 000001'*|*' 020040'*) strip_flag=debug ;;
|
||||||
*" EXEC "*) strip --strip-all "$file" ;;
|
*' 000002'*) strip_flag=all ;;
|
||||||
*" REL "*) strip --strip-debug "$file" ;;
|
*' 000003'*) strip_flag=unneeded ;;
|
||||||
esac 2>/dev/null
|
*) continue
|
||||||
|
esac
|
||||||
|
|
||||||
|
strip "--strip-$strip_flag" -R .comment -R .note "$file" &&
|
||||||
|
printf 'stripped %10s %s\n' "($strip_flag)" "${file##*/}"
|
||||||
done 2>/dev/null ||:
|
done 2>/dev/null ||:
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user