#!/bin/bash
# Copyright 1999-2005 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
# $Id: /var/cvsroot/gentoo-src/portage/bin/prepstrip,v 1.23.2.3 2005/08/15 02:58:20 vapier Exp $

if [ "${FEATURES//*nostrip*/true}" == "true" ] || [ "${RESTRICT//*nostrip*/true}" == "true" ] ; then
	echo "nostrip"
	exit 0
fi

STRIP="${STRIP:-${CHOST}-strip}"
type -p -- ${STRIP} > /dev/null || STRIP=strip

PORTAGE_STRIP_FLAGS=${PORTAGE_STRIP_FLAGS:---strip-unneeded}

banner=1

save_elf_debug() {
	local x=$1
	local y="${D}/usr/lib/debug/${x:${#D}:${#x}}"

	[ "${FEATURES//*splitdebug*/true}" != "true" ] && return 0

	mkdir -p $(dirname ${y})
	${CHOST}-objcopy --only-keep-debug ${x} ${y}.debug
	${CHOST}-objcopy --add-gnu-debuglink=${y}.debug ${x}
}

for x in $(scanelf -yRBF%F "$@") $(for y in "$@"; do find $y -type f -name '*.a' -print0 ; done); do
	if [ ${banner} -eq 1 ] ; then
		echo "strip: ${STRIP} ${PORTAGE_STRIP_FLAGS}"
		banner=0
	fi

	f=$(file "${x}") || continue
	[ -z "${f}" ] && continue

	if [[ ${f} == *"current ar archive"* ]] ; then
		echo "   ${x:${#D}:${#x}}"
		${STRIP} -g "${x}"
	fi
	if [[ ${f} == *"SB executable"* || ${f} == *"SB shared object"* ]] ; then
		echo "   ${x:${#D}:${#x}}"
		save_elf_debug "${x}"
		${STRIP} ${PORTAGE_STRIP_FLAGS} "${x}"
	fi
done
