makepkg: strip debugging symbols into separate folder
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@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 " "$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 > |
makepkg: strip debugging symbols into separate folder
On Mon, Sep 24, 2012 at 12:44:33AM +1000, 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@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 " "$id" > +} This whole function should just be the readelf|sed: build_id() { LANG=C readelf -n $1 | sed -n '/Build ID/ { s/.*: //p; q; }' } > + > 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 quoting > + > + # 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 quoting > + return > + 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} quoting > + > + target="../../../../../${binary#./}" > + target=${target/../../usr/lib/} > + target=${target/../usr/} Ew. > + ln -s $target $pkgdir-debug/usr/lib/debug/.build_id/${bid:0:2}/${bid:2} quoting > + > + target="../../${binary#./}.debug" > + ln -s $target $pkgdir-debug/usr/lib/debug/.build_id/${bid:0:2}/${bid:2}.debug quoting > + 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 "$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 > -- > 1.7.12.1 > > |
makepkg: strip debugging symbols into separate folder
On 24/09/12 02:05, Dave Reisner wrote:
>> + target="../../../../../${binary#./}" >> > + target=${target/../../usr/lib/} >> > + target=${target/../usr/} > Ew. Yes... but any suggestions on how to improve it? That was the best I could come up with. |
| All times are GMT. The time now is 04:33 AM. |
VBulletin, Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.