[pacman-dev] [PATCH 5/7] makepkg: strip debugging symbols into separate folder
Allan McRae
allan at archlinux.org
Sun Sep 23 11:16:36 EDT 2012
On 24/09/12 00:44, Allan McRae wrote:
> When using the "debug" option in combination with "strip", move the
> debugging symbols into a separate directory ($pkgdir-debug/usr/lib/debug)
> suitable for creating a package from.
>
> Create hardlinks between debugging symbols of hardlinked files and add
> symlinks in the .build_id directory if the binary has a build ID.
>
> Signed-off-by: Allan McRae <allan at archlinux.org>
> ---
> scripts/makepkg.sh.in | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 52 insertions(+)
>
> diff --git a/scripts/makepkg.sh.in b/scripts/makepkg.sh.in
> index c857060..df1823d 100644
> --- a/scripts/makepkg.sh.in
> +++ b/scripts/makepkg.sh.in
> @@ -1421,8 +1421,55 @@ run_package() {
> run_function_safe "$pkgfunc"
> }
>
> +build_id() {
> + local id
> + id=$(LANG=C readelf -n $1 | sed -n '/Build ID/ { s/.*: //p; q; }')
> + printf "%s\n" "$id"
> +}
> +
> strip_file() {
> local binary=$1; shift
> +
> + if check_option "debug" "y"; then
> + local bid=$(build_id $binary)
> +
> + # has this file already been stripped
> + if [[ -n "$bid" ]]; then
> + if [[ -f $pkgdir-debug/usr/lib/debug/.build_id/${bid:0:2}/${bid:2}.debug ]]; then
> + return
> + fi
> + elif [[ -f $pkgdir-debug/usr/lib/debug/$binary.debug ]]; then
> + return
> + fi
> +
> + mkdir -p $pkgdir-debug/usr/lib/debug/${binary%/*}
> + objcopy --only-keep-debug $binary $pkgdir-debug/usr/lib/debug/$binary.debug
> +
> + # create any needed hardlinks
> + while read -d '' file ; do
> + if [[ "${binary}" -ef "${file}" &&
> + ! -f $pkgdir-debug/usr/lib/debug/${file}.debug ]]; then
> + mkdir -p $pkgdir-debug/usr/lib/debug/${file%/*}
> + ln $pkgdir-debug/usr/lib/debug/${binary}.debug \
> + $pkgdir-debug/usr/lib/debug/${file}.debug
> + return
delete...
> + fi
> + done < <(find . -type f -perm -u+w -print0 2>/dev/null)
> +
> + if [[ -n "$bid" ]]; then
> + local target
> + mkdir -p $pkgdir-debug/usr/lib/debug/.build_id/${bid:0:2}
> +
> + target="../../../../../${binary#./}"
> + target=${target/..\/..\/usr\/lib\/}
> + target=${target/..\/usr\/}
> + ln -s $target $pkgdir-debug/usr/lib/debug/.build_id/${bid:0:2}/${bid:2}
> +
> + target="../../${binary#./}.debug"
> + ln -s $target $pkgdir-debug/usr/lib/debug/.build_id/${bid:0:2}/${bid:2}.debug
> + fi
> + fi
> +
> strip $@ $binary
> }
>
> @@ -1480,6 +1527,11 @@ tidy_install() {
> # make sure library stripping variables are defined to prevent excess stripping
> [[ -z ${STRIP_SHARED+x} ]] && STRIP_SHARED="-S"
> [[ -z ${STRIP_STATIC+x} ]] && STRIP_STATIC="-S"
> +
> + if check_option "debug" "y"; then
> + mkdir -p $pkgdir-debug/usr/lib/debug
> + fi
> +
> local binary strip_flags
> find . -type f -perm -u+w -print0 2>/dev/null | while read -d '' binary ; do
> case "$(file -bi "$binary")" in
>
More information about the pacman-dev
mailing list