#!/bin/bash
# Copyright 1999-2006 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 "* ]] || \
   [[ " ${RESTRICT} " == *" nostrip "* ]] || \
   [[ " ${RESTRICT} " == *" strip "* ]]
then
	exit 0
fi

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

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}}.debug"

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

	# dont save debug info twice.
	[[ ${x:7} == ".debug" ]] && return 0

	mkdir -p $(dirname "${y}")
	${OBJCOPY} --only-keep-debug "${x}" "${y}"
	${OBJCOPY} --add-gnu-debuglink="${y}" "${x}"
	chmod a-x "${y}"

	[[ " ${FEATURES} " != *" installsources "* ]] && return 0

	if [[ -x "/usr/bin/debugedit" ]] ; then
		debugedit -b "${WORKDIR}" -d /usr/src/debug/${PF} -l "${T}"/debug.sources "${x}"
		if [[ -s ${T}/debug.sources ]] ; then 
			[[ -d ${D}/usr/src/debug/${PF} ]] || mkdir -p "${D}/usr/src/debug/${PF}"
			cat "${T}"/debug.sources | (cd "${WORKDIR}"; LANG=C sort -z -u | xargs -0 -- cp --parents -p --target-directory="${D}/usr/src/debug/${PF}" )
		fi
	fi
}

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

	# The noglob funk is to support STRIP_MASK="/*/booga" and to keep
	#  the for loop from expanding the globs.
	# The eval echo is to support STRIP_MASK="/*/{booga,bar}" sex.
	set -o noglob
	stripitbaby=1
	for m in $(eval echo ${STRIP_MASK}) ; do
		[[ ${x} == ${m} ]] && stripitbaby=1 && break
	done
	set +o noglob

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