Init, adding corrade,magnum,magnum-plugins,magnum-integration,magnum-extras, and magnum-examples 2025.47_1
This commit is contained in:
148
common/hooks/post-install/06-strip-and-debug-pkgs.sh
Normal file
148
common/hooks/post-install/06-strip-and-debug-pkgs.sh
Normal file
@@ -0,0 +1,148 @@
|
||||
# This hook executes the following tasks:
|
||||
# - strips ELF binaries/libraries
|
||||
# - generates -dbg pkgs
|
||||
|
||||
make_debug() {
|
||||
local dname= fname= dbgfile=
|
||||
|
||||
[ -n "$nodebug" ] && return 0
|
||||
|
||||
dname=${1%/*}/ ; dname=${dname#$PKGDESTDIR}
|
||||
fname="${1##*/}"
|
||||
dbgfile="${dname}/${fname}"
|
||||
|
||||
mkdir -p "${PKGDESTDIR}/usr/lib/debug/${dname}"
|
||||
$OBJCOPY --only-keep-debug --compress-debug-sections \
|
||||
"$1" "${PKGDESTDIR}/usr/lib/debug/${dbgfile}"
|
||||
if [ $? -ne 0 ]; then
|
||||
msg_red "${pkgver}: failed to create dbg file: ${dbgfile}\n"
|
||||
return 1
|
||||
fi
|
||||
chmod 644 "${PKGDESTDIR}/usr/lib/debug/${dbgfile}"
|
||||
}
|
||||
|
||||
attach_debug() {
|
||||
local dname= fname= dbgfile=
|
||||
|
||||
[ -n "$nodebug" ] && return 0
|
||||
|
||||
dname=${1%/*}/ ; dname=${dname#$PKGDESTDIR}
|
||||
fname="${1##*/}"
|
||||
dbgfile="${dname}/${fname}"
|
||||
|
||||
$OBJCOPY --add-gnu-debuglink="${PKGDESTDIR}/usr/lib/debug/${dbgfile}" "$1"
|
||||
if [ $? -ne 0 ]; then
|
||||
msg_red "${pkgver}: failed to attach dbg to ${dbgfile}\n"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
create_debug_pkg() {
|
||||
local _pkgname= _destdir=
|
||||
|
||||
[ -n "$nodebug" ] && return 0
|
||||
[ ! -d "${PKGDESTDIR}/usr/lib/debug" ] && return 0
|
||||
|
||||
_pkgname="${pkgname}-dbg-${version}"
|
||||
_destdir="${XBPS_DESTDIR}/${XBPS_CROSS_TRIPLET}/${_pkgname}"
|
||||
mkdir -p "${_destdir}/usr/lib"
|
||||
mv ${PKGDESTDIR}/usr/lib/debug ${_destdir}/usr/lib
|
||||
if [ $? -ne 0 ]; then
|
||||
msg_red "$pkgver: failed to create debug pkg\n"
|
||||
return 1
|
||||
fi
|
||||
printf "${pkgver} " >> ${XBPS_STATEDIR}/${pkgname}-dbg-rdeps
|
||||
rmdir --ignore-fail-on-non-empty "${PKGDESTDIR}/usr/lib" 2>/dev/null
|
||||
return 0
|
||||
}
|
||||
|
||||
hook() {
|
||||
local fname= x= f= _soname= STRIPCMD=
|
||||
|
||||
if [ -n "$nostrip" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
STRIPCMD=/usr/bin/$STRIP
|
||||
|
||||
find ${PKGDESTDIR} -type f | while read -r f; do
|
||||
if [[ $f =~ ^${PKGDESTDIR}/usr/lib/debug/ ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
fname=${f##*/}
|
||||
for x in ${nostrip_files}; do
|
||||
if [ "$x" = "$fname" -o "$x" = "${f#$PKGDESTDIR}" ]; then
|
||||
found=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [ -n "$found" ]; then
|
||||
unset found
|
||||
continue
|
||||
fi
|
||||
case "$(file -bi "$f")" in
|
||||
application/x-executable*)
|
||||
chmod +w "$f"
|
||||
if [[ $(file $f) =~ "statically linked" ]]; then
|
||||
# static binary
|
||||
if ! $STRIPCMD "$f"; then
|
||||
msg_red "$pkgver: failed to strip ${f#$PKGDESTDIR}\n"
|
||||
return 1
|
||||
fi
|
||||
echo " Stripped static executable: ${f#$PKGDESTDIR}"
|
||||
else
|
||||
make_debug "$f"
|
||||
if ! $STRIPCMD "$f"; then
|
||||
msg_red "$pkgver: failed to strip ${f#$PKGDESTDIR}\n"
|
||||
return 1
|
||||
fi
|
||||
echo " Stripped executable: ${f#$PKGDESTDIR}"
|
||||
unset nopie_found
|
||||
for x in ${nopie_files}; do
|
||||
if [ "$x" = "${f#$PKGDESTDIR}" ]; then
|
||||
nopie_found=1
|
||||
break
|
||||
fi
|
||||
done
|
||||
if [ -z "$nopie" ] && [ -z "$nopie_found" ]; then
|
||||
msg_red "$pkgver: non-PIE executable found in PIE build: ${f#$PKGDESTDIR}\n"
|
||||
return 1
|
||||
fi
|
||||
attach_debug "$f"
|
||||
fi
|
||||
;;
|
||||
application/x-sharedlib*|application/x-pie-executable*)
|
||||
local type="$(file -b "$f")"
|
||||
if [[ $type =~ "no machine" ]]; then
|
||||
# using ELF as a container format (e.g. guile)
|
||||
echo " Ignoring ELF file without machine set: ${f#$PKGDESTDIR}"
|
||||
continue
|
||||
fi
|
||||
|
||||
chmod +w "$f"
|
||||
# shared library
|
||||
make_debug "$f"
|
||||
if ! $STRIPCMD --strip-unneeded "$f"; then
|
||||
msg_red "$pkgver: failed to strip ${f#$PKGDESTDIR}\n"
|
||||
return 1
|
||||
fi
|
||||
if [[ $type =~ "interpreter " ]]; then
|
||||
echo " Stripped position-independent executable: ${f#$PKGDESTDIR}"
|
||||
else
|
||||
echo " Stripped library: ${f#$PKGDESTDIR}"
|
||||
fi
|
||||
attach_debug "$f"
|
||||
;;
|
||||
application/x-archive*)
|
||||
chmod +w "$f"
|
||||
if ! $STRIPCMD --strip-debug "$f"; then
|
||||
msg_red "$pkgver: failed to strip ${f#$PKGDESTDIR}\n"
|
||||
return 1
|
||||
fi
|
||||
echo " Stripped static library: ${f#$PKGDESTDIR}";;
|
||||
esac
|
||||
done
|
||||
create_debug_pkg
|
||||
return $?
|
||||
}
|
||||
Reference in New Issue
Block a user