X-Git-Url: http://git.ipfire.org/?p=people%2Fteissler%2Fipfire-2.x.git;a=blobdiff_plain;f=src%2Fstripper;h=2b4feafe9063c50bf0c01795bd8ea887fcf21e19;hp=199d17f6a0ced2d67695c87a478a596ab2d1d6cc;hb=dfb08084ba25b03f27ca41c04f0a0f1e2dace6d5;hpb=9572596c47e961c6f4d970b4c4c72bd5f90920e0 diff --git a/src/stripper b/src/stripper index 199d17f6a..2b4feafe9 100755 --- a/src/stripper +++ b/src/stripper @@ -1,12 +1,34 @@ -#!/bin/bash +#!/tools/bin/bash + +dirs="" +excludes="/dev /proc /sys /run" + +while [ $# -gt 0 ]; do + case "${1}" in + --exclude=*) + excludes="${excludes} ${1#*=}" + ;; + *) + dirs="${dirs} ${1}" + ;; + esac + shift +done function _strip() { local file=${1} - local cmd="${STRIP-strip}" + local exclude l + for exclude in ${excludes}; do + l=${#exclude} + if [ "${file:0:${l}}" = "${exclude}" ]; then + return 0 + fi + done + case "$(file -bi ${file})" in - application/x-sharedlib*) + application/x-sharedlib*|application/x-archive*) cmd="${cmd} --strip-debug --remove-section=.comment --remove-section=.note" ;; *) @@ -18,10 +40,18 @@ function _strip() { ${cmd} ${file} } -for dir in $@; do +for dir in ${dirs}; do + # Strip shared objects. find ${dir} -type f \( -perm -0100 -or -perm -0010 -or -perm -0001 \) \ | file -N -f - | sed -n -e 's/^\(.*\):[ ]*.*ELF.*, not stripped/\1/p' | while read file; do _strip ${file} done + + # Strip static archives. + find ${dir} -name \*.a -a -exec file {} \; \ + | grep 'current ar archive' | sed -n -e 's/^\(.*\):[ ]*current ar archive/\1/p' | + while read file; do + _strip ${file} + done done